149 lines
4.0 KiB
Markdown
149 lines
4.0 KiB
Markdown
# 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 :
|
|
- base du bras robot
|
|

|
|
```
|
|
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
|
|
```
|
|
|
|
- bras 1
|
|

|
|
```
|
|
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)
|
|
```
|
|
|
|
|