Construisez un bras robotique en carton programmable – DIY facile avec Arduino et servomoteurs
Composants et fournitures
| Composant | Quantité |
|---|---|
| Arduino UNO | 1 |
| Servomoteur standard | 3 |
| Micro-servomoteur SG90 | 1 |
| Plaque d'essai (breadboard) | 1 |
| Alimentation 5V | 1 |
Outils et machines nécessaires
- Pistolet à colle chaude
Applications et services en ligne
- Arduino IDE
- Python
À propos du projet
Ce bras robotique simple peut enregistrer et rejouer des positions. Il est construit avec des matériaux faciles à trouver, comme du carton et de la colle chaude, ce qui le rend très accessible à réaliser.
Vous contrôlez le bras via une interface graphique sur l'ordinateur qui envoie les données à l'Arduino pilotant le bras. Des curseurs permettent de contrôler chaque servomoteur, et des boutons servent à enregistrer des positions et à rejouer la séquence. Vous pouvez également sauvegarder et charger d'anciens enregistrements.
Instructions de montage
- Téléchargez et imprimez le gabarit de découpe en carton disponible dans la section « Pièces personnalisées et boîtiers » en bas de page. Utilisez ce gabarit pour découper les pièces en carton.
- Assemblez le bras en suivant la vidéo (le montage commence à 0:22).
- Réalisez le câblage selon le schéma électronique fourni en bas de page.
- Téléchargez le code Arduino (« Robot Arm Arduino Code ») dans la section Code (deuxième onglet) et téléversez-le sur la carte.
- Téléchargez l'interface Python (« Python User Interface ») dans la section Code (premier onglet). Vous devez avoir Python installé (téléchargeable sur python.org).
- Installez la bibliothèque PySerial :
pip install pyserial. - Branchez le bras, lancez le script Python et saisissez le port COM de l'Arduino (visible dans le Gestionnaire de périphériques sous Windows). C'est prêt !
Note : si ça ne fonctionne pas, essayez d'augmenter la valeur time.sleep(0.15) à la ligne 20 du code Python à 0.2 ou 0.3.
Code
Interface utilisateur Python
from tkinter import *
from tkinter import filedialog
import serial
import time
port_opened = False
def set_port():
global port_opened, arduino
com_port = port_input.get()
arduino = serial.Serial(com_port, 9600)
port_opened = True
print("Port COM défini sur : " + com_port)
def send_positions(position):
message = "{0:0=3d}".format(position[0]) + "{0:0=3d}".format(position[1]) + \
"{0:0=3d}".format(position[2]) + "{0:0=3d}".format(position[3]) + \
"{0:0=3d}".format(position[4]) + "\n"
arduino.write(str.encode(message))
print(message, end='')
time.sleep(0.2)
saved_positions = []
def save_positions():
saved_positions.append([servo1_slider.get(), servo2_slider.get(),
servo3_slider.get(), servo4_slider.get(), servo5_slider.get()])
print("Positions enregistrées : " + str(saved_positions))
def play_positions():
for position in saved_positions:
print("Lecture : " + str(position))
send_positions(position)
time.sleep(1)
def clear_all_positions():
global saved_positions
saved_positions = []
print("Toutes les positions effacées")
def clear_last_positions():
global saved_positions
removed = saved_positions.pop()
print("Supprimé : " + str(removed))
print("Positions enregistrées : " + str(saved_positions))
def open_file():
global saved_positions
filename = filedialog.askopenfilename(initialdir="/", title="Sélectionner un fichier",
filetypes=(("Fichiers texte", "*.txt"), ("Tous les fichiers", "*.*")))
file = open(filename, "r")
data = file.read()
saved_positions = eval(data)
file.close()
print("Ouvert : " + filename)
def save_file():
save_file = filedialog.asksaveasfile(mode='w', defaultextension=".txt")
save_file.write(str(saved_positions))
save_file.close()
print("Fichier sauvegardé")
def instructions():
print("1. Définissez le port COM de l'Arduino et cliquez sur Entrée. Trouvable dans le Gestionnaire de périphériques sous Windows")
print("2. Déplacez les servos du bras à l'aide des curseurs")
print("3. Pour enregistrer une position, cliquez sur 'Enregistrer position'")
print("4. Pour rejouer les positions enregistrées, cliquez sur 'Rejouer positions'")
print("\nPour sauvegarder : Fichier > Sauvegarder fichier")
print("Pour ouvrir un fichier : Fichier > Ouvrir fichier")
window = Tk()
window.title("Contrôleur Bras Robot 2")
window.minsize(355, 300)
port_label = Label(window, text="Définir le port :")
port_label.place(x=10, y=10)
port_input = Entry(window)
port_input.place(x=10, y=35)
port_button = Button(window, text="Entrée", command=set_port)
port_button.place(x=135, y=32)
# Curseurs pour 5 servos
servo1_slider = Scale(window, from_=180, to=0)
servo1_slider.place(x=0, y=100)
Label(window, text="Servo 1").place(x=10, y=80)
servo2_slider = Scale(window, from_=180, to=0)
servo2_slider.place(x=70, y=100)
Label(window, text="Servo 2").place(x=80, y=80)
servo3_slider = Scale(window, from_=180, to=0)
servo3_slider.place(x=140, y=100)
Label(window, text="Servo 3").place(x=150, y=80)
servo4_slider = Scale(window, from_=180, to=0)
servo4_slider.place(x=210, y=100)
Label(window, text="Servo 4").place(x=220, y=80)
servo5_slider = Scale(window, from_=180, to=0)
servo5_slider.place(x=280, y=100)
Label(window, text="Servo 5").place(x=290, y=80)
Button(window, text="Enregistrer position", command=save_positions).place(x=10, y=220)
Button(window, text="Effacer dernière position", command=clear_last_positions).place(x=120, y=220)
Button(window, text="Effacer toutes positions", command=clear_all_positions).place(x=120, y=255)
Button(window, text="Rejouer positions", command=play_positions, height=3).place(x=250, y=220)
# Menus
menubar = Menu(window)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="Ouvrir fichier", command=open_file)
filemenu.add_command(label="Sauvegarder fichier", command=save_file)
menubar.add_cascade(label="Fichier", menu=filemenu)
editmenu = Menu(menubar, tearoff=0)
editmenu.add_command(label="Effacer dernière position", command=clear_last_positions)
editmenu.add_command(label="Effacer toutes positions", command=clear_all_positions)
menubar.add_cascade(label="Édition", menu=editmenu)
helpmenu = Menu(menubar, tearoff=0)
helpmenu.add_command(label="Mode d'emploi (affiché dans la console)", command=instructions)
menubar.add_cascade(label="Aide", menu=helpmenu)
window.config(menu=menubar)
while True:
window.update()
if port_opened:
send_positions([servo1_slider.get(), servo2_slider.get(),
servo3_slider.get(), servo4_slider.get(), servo5_slider.get()])
Code Arduino pour le bras robotique
#include
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
int servoPositions[5];
void setup() {
Serial.begin(9600);
servo1.attach(3);
servo2.attach(5);
servo3.attach(6);
servo4.attach(9);
servo5.attach(10);
}
void loop() {
while (Serial.available()) {
String input = Serial.readStringUntil('\n');
servoPositions[0] = input.substring(0, 3).toInt();
servoPositions[1] = input.substring(3, 6).toInt();
servoPositions[2] = input.substring(6, 9).toInt();
servoPositions[3] = input.substring(9, 12).toInt();
servoPositions[4] = input.substring(12, 15).toInt();
}
servo1.write(servoPositions[0]);
servo2.write(servoPositions[1]);
servo3.write(servoPositions[2]);
servo4.write(servoPositions[3]);
servo5.write(servoPositions[4]);
delay(500);
}
Schéma de câblage
Le schéma de câblage est disponible dans la section « Schémas » en bas de page.
Processus de fabrication
- Dé numérique Arduino sur écran LCD 16x2 – Générateur aléatoire à bouton poussoir
- Bras Robotique MeArm V1.0 – Construisez Votre Bras Robotisé Arduino et Raspberry Pi
- Construire un Iron Man animé avec Arduino : capteurs, sons et relais
- Find Me : Localisateur d'objets intelligent avec Arduino et Bluetooth
- Construire un bras robotique 3D fonctionnel piloté par Arduino – Guide pas à pas
- Contrôleur d'humidificateur DIY avec Arduino et relais – Installation haute tension sécurisée
- MobBob : Construisez votre propre robot Arduino, contrôlé via smartphone Android
- PiBot : Robot pianiste Arduino pour performance musicale de précision
- LittleArm 2C : Bras Robot 3D Imprimé Arduino pour Éducation STEM