Contrôle à Distance d'un Bras Robot 6-DOF Arduino via Interface Web
Composants et Fournitures
| Composant | Description | Qté |
|---|---|---|
| Arduino UNO | 1 | |
| Shield PHPoC WiFi pour Arduino | Serveur web + WebSocket embarqué | 1 |
| Bras Robot 6 DOF | 6 servomoteurs | 1 |
À Propos du Projet
Prérequis recommandés : tutoriels Arduino Moteur, Servomoteur, WiFi.
1. Démonstration
Interface web (HTML5/JS/CSS) contrôle les 6 moteurs du bras :
- Zone A : Moteurs 2,3,4 (3 articulations main) – calcul géométrique inverse.
- Zone B : Moteur 1 (base rotation).
- Zone C : Moteur 5 (rotation pince).
- Zone D : Moteur 6 (ouverture/fermeture pince).
2. Architecture Système
Client (navigateur) ↔ WebSocket ↔ Arduino (PHPoC Shield) → 6 servos. Alimentation externe pour les 6 moteurs.
3. Flux de Travail
Côté Client (JavaScript)
Événements tactile/souris → coordonnées (x,y) → selon zone :
- Zone A : calcul géométrique inverse (voir section 5) → angles moteurs 2,3,4.
- Zones B,C : angle = atan2 décalé + offset.
- Zone D : position verticale → angle pince.
Envoi angles via WebSocket (format "a1,a2,a3,a4,a5,a6\r\n").
Côté Serveur (Arduino)
Réception angles cibles → mouvement fluide : tous moteurs démarrent/arrêtent ensemble.
Algorithme par moteur :
step_num = max(|angle_cible - angle_actuel| / step_i) sur 6 moteurs Répéter step_num fois : angle_actuel[i] += (angle_cible[i] - angle_actuel[i]) / step_num limiter à [min_i, max_i] servo[i].write(angle_actuel[i]) delay(20 ms)
Chaque moteur a son step_i (degrés par pas) pour vitesse adaptée.
4. Calcul Géométrique Inverse (Zone A)
Problème : point C fixe, point D (cible utilisateur) connu, longueurs segments b=CB, a=BA, d=AD. Hypothèse : angles B et A égaux (α).
Résolution :
- c = distance CD, δ = atan2(Dy-Cy, Dx-Cx).
- Triangle ABE : AE=BE, ∠E = π-2α.
- Loi des cosinus dans CDE → équation quadratique en cos(α).
- Résoudre → α → β = π-α (angles moteurs 3,4).
- Loi des cosinus dans BDC et BDA → γ.
- Angles finaux : Moteur2 = δ+γ, Moteur3 = β, Moteur4 = β.
5. Code Source
Deux fichiers :
- RobotArmWeb.ino : code Arduino (réception WebSocket, contrôle servos lissé).
- remote_arm.php : application web (HTML/JS/Canvas) uploadée sur shield PHPoC. Inclut image
flywheel.png.
RobotArmWeb.ino (extrait principal)
#include
#include
int angle_init[] = {90, 101, 165, 153, 90, 120};
int angle_offset[] = {0, 11, -15, -27, 0, 137};
int cur_angles[6], dest_angles[6];
int angle_max[] = {180, 180, 160, 120, 180, 137};
int angle_min[] = {0, 0, 0, 20, 0, 75};
int direction[] = {1, 1, 1, 1, 1, -1};
int angleSteps[] = {3, 2, 2, 2, 4, 4};
Servo servo[6];
PhpocServer server(80);
int stepNum = 0;
void setup() {
Serial.begin(9600);
Phpoc.begin(PF_LOG_SPI | PF_LOG_NET);
server.beginWebSocket("remote_arm");
for (int i=0; i<6; i++) {
servo[i].attach(2+i);
servo[i].write(angle_init[i]);
cur_angles[i] = angle_init[i];
}
}
void loop() {
PhpocClient client = server.available();
if (client) {
String angleStr = client.readLine();
if (angleStr) {
// parse 6 angles séparés par virgules
// appliquer direction[] et angle_offset[]
// calculer stepNum = max diff / angleSteps
}
}
if (stepNum > 0) {
for (int i=0; i<6; i++) {
int move = (dest_angles[i] - cur_angles[i]) / stepNum;
cur_angles[i] += move;
cur_angles[i] = constrain(cur_angles[i], angle_min[i], angle_max[i]);
servo[i].write(cur_angles[i]);
}
stepNum--;
delay(20);
}
}
remote_arm.php (points clés)
- Canvas HTML5 : dessin bras, zones interactives, flywheel.png.
- Gestion événements souris/tactile → détection zone → calcul angles.
- Zone A : fonction
geometric_calculation()implémentant maths ci-dessus. - WebSocket : envoi angles à chaque changement (
ws.send(angles.join(",")+"\r\n")).
Schéma
Alimentation externe requise pour les 6 servomoteurs. Voir image de câblage.
Processus de fabrication
- Simple Pi Robot – Construire un rover autonome 2 roues motrices avec Raspberry Pi
- Centre de contrôle d'alimentation Arduino : N-FET, P-FET, Relais et RTC
- Contrôle IoT à Distance d'un Bras Robotique Personnalisé avec Arduino MKR1000
- Robot Évitement d'Obstacles Piloté par Servomoteur : Construction avec Arduino et HC-SR04
- Créez un robot suiveur de ligne autonome avec Arduino UNO
- Contrôleur d'humidificateur DIY avec Arduino et relais – Installation haute tension sécurisée
- Arduino UNO & Shield WiFi : Affichage température temps réel sur le Web via série
- LittleArm 2C : Bras Robot 3D Imprimé Arduino pour Éducation STEM
- Kit de robot de navigation intérieure intelligente pour projets Arduino