Files
bras-robot/compte-rendu-3.md
2026-01-28 20:34:16 +01:00

4.0 KiB

compte rendu bras robot 3

modelisation 3D et plans

On a réalisé toutes les pièces du bras (y compris la base qui supporte le bras sur la base roulante) via la modélisation 3D sur fusion et onshape 

plan-dessin

realisation de la structure globale du bras :

  • base du bras robot base
dimension 
D= 10cm
H= 1cm 
  • premier support de servo moteur support servo Nous allons utiliser des inserts M3 avec des vis M3. Initialement, nous avions pensé à des inserts M2, mais le laboratoire n'en dispose pas. Nous utilisons également des vis M2 pour le pignon des servomoteurs.
dimension 
L= 5cm 
l= 2,5cm 
H= 0,9cm
  • bras 1 bras1
dimension 
L= 16cm 
l= 4cm 
H= 1cm

On a fait des recherches sur les sites suivants pour la conception du bras et de la pince.

modification du cablage

plan cablage ajout d'un servo moteur de 360 degres pour la base du bras robot

modification des dimentions des pieces

on c'est rendu compte que les pieces ne s'emboite pas entre elle et n'avaient pas les bonnes dimentions

  • base du bras robot
nouvelle dimention
D= 5cm
H= 1cm 
  • support de servo moteur base
nouvelle dimention
L= 5cm 
l= 2cm 
H= 1cm
et fixation a la base avec des vis M3 et des ecrouts 
  • bras 1
nouvelle dimention
L= 16cm 
l= 4cm 
H= 1cm

on n'a fais un code pour test le bras robot qui a pour but de tester le deploiment du bras a rapport a une distance max fixe (ps: idee de Erika)

from machine import Pin, PWM, UART
import time

# UART liaison série
uart = UART(1, baudrate=9600, tx=7, rx=6)

# Servos GPIO 4,5,6,7
servo_base   = PWM(Pin(4), freq=50)
servo_epaule = PWM(Pin(5), freq=50)
servo_coude  = PWM(Pin(6), freq=50)
servo_pince  = PWM(Pin(7), freq=50)

MIN_US = 500
MAX_US = 2500
DISTANCE_MAX_CM = 15

def set_servo_angle(pwm, angle):
    if angle < 0: angle = 0
    if angle > 180: angle = 180
    us = MIN_US + (MAX_US - MIN_US) * angle / 180
    duty = int(us / 20000 * 1023)
    pwm.duty(duty)

def position_prete_ramassage():
    """Position fixe : déployé à exactement 15cm max"""
    set_servo_angle(servo_base,   90)  # droit devant
    set_servo_angle(servo_epaule, 75)  # longueur bras = 15cm
    set_servo_angle(servo_coude, 115)  # pointe sol
    set_servo_angle(servo_pince, 130)  # grande ouverte
    time.sleep(0.5)
    uart.write("READY\n")  # signal : "je suis en position"

def ramasser_maintenant():
    """Pince seulement une fois en position"""
    set_servo_angle(servo_pince, 40)   # fermer
    time.sleep(1)
    set_servo_angle(servo_pince, 130)  # rouvrir (lâcher)
    time.sleep(0.5)

def position_repos():
    set_servo_angle(servo_base,   90)
    set_servo_angle(servo_epaule, 40)
    set_servo_angle(servo_coude,  90)
    set_servo_angle(servo_pince, 100)
    time.sleep(0.5)

# Démarrage
print("Bras : mode distance fixe 15cm")
buffer = b""
position_repos()

while True:
    if uart.any():
        data = uart.read()
        if data:
            buffer += data
            while b"\n" in buffer:
                line, _, buffer = buffer.partition(b"\n")
                cmd = line.decode().strip()
                print("Reçu:", cmd)

                if cmd.startswith("DIST:"):
                    # Se déploie toujours à 15cm max, peu importe la distance
                    print("Déploiement position 15cm")
                    position_prete_ramassage()
                    
                elif cmd == "PICK_NOW":
                    print("RAMASSAGE !")
                    ramasser_maintenant()
                    uart.write("DONE\n")
                    position_repos()

    time.sleep(0.05)