4.0 KiB
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
realisation de la structure globale du bras :
dimension
D= 10cm
H= 1cm
- premier support de servo moteur
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
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.
- (https://cults3d.com/fr/mot-clefs/pince+robotique?srsltid=AfmBOooZES-gdmSo7IuyJx9b4YLv5vBiozO5lpjA8HrPHTfmVw3mWtIw)
- (https://www.autodesk.com/community/gallery?featured=true&page=1)
modification du 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)


