Construire Sauron : Robot semi-humanoïde – Guide complet Arduino Mega 2560
Composants et fournitures
- Arduino Mega 2560 (×1)
- 1Sheeld (×1)
- Appareil Android (×1)
Outils nécessaires
- Découpeuse laser
Applications et services en ligne
- Arduino IDE
À propos du projet
Fan du Seigneur des Anneaux ? Vous connaissez Sauron ! Ce projet réalise un robot semi-humanoïde de taille humaine à son effigie.
Le robot possède deux bras à 3 degrés de liberté (DDL) et une tête à 3 DDL sur une base fixe. Il fonctionne en trois modes, sélectionnables via deux boutons poussoirs sur entrées numériques :
- Mode Veille : Démonstration automatique de mouvements pour attirer l'attention lors d'événements.
- Mode Manette : Contrôle manuel via le shield Gamepad de l'application 1Sheeld.
- Mode Imitation : Le robot reproduit les mouvements de l'utilisateur (comme le gamin dans Real Steel). On porte un gant avec smartphone fixé ; l'Arduino lit les capteurs (orientation, gyroscope) et pilote les bras.
Projet réalisé pour la New York Maker Faire afin d'inspirer les enfants à utiliser Arduino et 1Sheeld pour construire leurs personnages de films (ATOM dans Real Steel, Sauron dans LOTR). Tous les fichiers nécessaires (CAO, schémas, codes, DXF pour laser) sont fournis.
Étape 1 : Construction de la tête
Pour gagner du temps, j'ai utilisé la tête robotique open-source « Fritz » de xyzbot. Fichiers laser fournis, découpés en contreplaqué 3 mm dans un makerspace local. J'ai omis l'impression 3D des yeux, les lèvres et sourcils pour réduire coût et temps. Suivez la vidéo d'assemblage de Fritz en sautant : base, pièces 3D des yeux, sourcils, lèvres.
Étape 2 : Construction du corps
Corps portable, assemblage rapide pour voyages. Structure en tiges Artelon et contreplaqué 3 mm, joints à tenon-mortaise pour fixer torse, épaules, cou, dos. Vis 4×20 mm pour cadre bois/Artelon, vis 12×30 mm pour squelette/base, vis 4×10 mm pour servos/cadre. Squelette Artelon en 5 parties : tige de base (50 mm), squelette (25 mm), trois traverses (15 mm). Plans joints.
Étape 3 : Création de la base
Base en tôle 6 mm conçue sous Solidworks, fixée au bureau par 3 vis ou 2 serre-joints 4″. Allégée par découpes. Vis 12×30 mm pour fixer squelette Artelon. Fichier DXF fourni.
Étape 4 : Construction des bras
Défi principal : bras modulaires, démontables facilement pour transport. Conception polyvalente : avant-bras interchangeable (épée, crochet, poing, pince). Cadre en contreplaqué 3 mm, articulations d'épaule en pantilt aluminium, armes en balsa. Calcul de couple sous Solidworks (3 kg/cm requis, moteurs plus puissants utilisés). Articulations d'avant-bras découpées laser via Autodesk 123D Make (tranches). Fichier Solidworks joint pour modifications.
Étape 5 : Casque et armure Sauron (cosplay)
Réalisation du cosplay avec l'ami Kareem, basé sur tutoriels Instructables (Sauron Cosplay, Casque), adaptés aux dimensions du robot.
Étape 6 : Électronique du robot
- Arduino Mega + 1Sheeld pour piloter les servos des bras et tête.
- Alimentation 5 V / 5 A pour moteurs et Arduino.
- Petite plaque d'essai pour regrouper VCC/GND moteurs et alimentation.
- 1Sheeld : plateforme de prototypage rapide qui connecte les capteurs du smartphone (Bluetooth) à l'Arduino. Shields utilisés : Gamepad, Orientation, Music Player, Toggle Button, Terminal.
- Gamepad Shield : Interface manette sur smartphone, contrôle servos manuellement.
- Orientation Shield : Smartphone sur gant, mappe les valeurs capteurs vers angles servos.
- Music Player Shield : Joue une piste voix de Sauron synchronisée avec mouvement bouche.
- Toggle Button Shield : Sélection du mode sans boutons physiques.
- Terminal Shield : Remplace le moniteur série IDE (1Sheeld ne peut communiquer simultanément avec PC et Bluetooth).
Étape 7 : Code Arduino
- Placez 1Sheeld sur l'Arduino, branchez sur PC.
- Installez l'application 1Sheeld sur Android (Play Store : 1sheeld.com/app).
- Téléchargez la bibliothèque 1Sheeld, placez-la dans
librariesArduino. - Ouvrez le sketch Arduino (fichier joint).
- Basculez 1Sheeld en mode « Uploading » (interrupteur UART éloigné du logo) avant téléversement pour éviter conflits série.
- Téléversez, puis remettez l'interrupteur en mode « Operating » (vers le logo).
- Lancez l'application 1Sheeld, connectez via Bluetooth (code par défaut 1234).
- Sélectionnez les shields : Gamepad, Orientation, Music Player, Toggle Button, Terminal ; appuyez sur l'icône multi-shields.
- Au démarrage, mode Veille par défaut. Pour mode Gamepad : Toggle Button → broche 2 → ON. Pour retour Veille : OFF.
- Pour mode Imitation : Toggle Button → broche 3 → ON (broche 2 à LOW).
Étape 8 : Sauron à la Maker Faire New York
Photos de l'événement (non incluses).
Étape 9 : Travaux futurs
- Vidéo d'assemblage et test des trois modes.
- Tête : ajouter les moteurs restants et imprimer pièces 3D des yeux (paupière, support, anneau, axe, coque boule).
- Base : remplacer base fixe par base à 4 roues mécanum pour mobilité (conception Solidworks terminée, pas encore intégrée).
Code Arduino (Sauron)
#define CUSTOM_SETTINGS
#define INCLUDE_GAMEPAD_SHIELD
#define INCLUDE_MUSIC_PLAYER_SHIELD
#define INCLUDE_TERMINAL_SHIELD
#define INCLUDE_ORIENTATION_SENSOR_SHIELD
#include <OneSheeld.h>
#include <Servo.h>
Servo rightArm_Motor1, rightArm_Motor2, rightArm_Motor3;
Servo leftArm_Motor1, leftArm_Motor2, leftArm_Motor3;
Servo neckHorizontal, neckVertical, mouth;
const int modePin1 = 2;
const int modePin2 = 3;
volatile int modeState1 = LOW;
volatile int modeState2 = LOW;
volatile boolean gamepadMode_Enabled = false;
volatile boolean imitationMode_Enabled = false;
const int ledPin1 = A0;
const int ledPin2 = A1;
void setup() {
OneSheeld.begin();
pinMode(modePin1, INPUT);
pinMode(modePin2, INPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
attachInterrupt(digitalPinToInterrupt(modePin1), gampadMode_ChangeISR, CHANGE);
attachInterrupt(digitalPinToInterrupt(modePin2), imitationMode_ChangeISR, CHANGE);
rightArm_Motor1.attach(4); rightArm_Motor2.attach(5); rightArm_Motor3.attach(6);
leftArm_Motor1.attach(7); leftArm_Motor2.attach(8); leftArm_Motor3.attach(9);
neckHorizontal.attach(10); neckVertical.attach(11); mouth.attach(12);
// Position initiale
rightArm_Motor1.write(95); rightArm_Motor2.write(150); rightArm_Motor3.write(20);
leftArm_Motor1.write(90); leftArm_Motor2.write(45); leftArm_Motor3.write(180);
neckHorizontal.write(105); neckVertical.write(30); mouth.write(100);
}
void loop() {
modeState1 = digitalRead(modePin1);
modeState2 = digitalRead(modePin2);
if (modeState1 == HIGH) { Terminal.println("GamePad Mode was selected"); gamePadMode(); }
else if (modeState2 == HIGH) { Terminal.println("Imitation Mode was selected"); imitationMode(); }
else { Terminal.println("Standby Mode was selected"); standbyMode(); }
}
void standbyMode() {
Terminal.println("Standby mode activated");
// Séquence de 9 positions avec mouvements synchronisés bouche/musique
// Chaque position : positionne servos, joue son, bouge bouche 20 fois (150 ms), pause 3 s
// Vérifie interruption mode Gamepad/Imitation entre chaque position
// Position 1 : position initiale
// Position 2 : tête 90→0→180→90
// Position 3 : bras et tête à 45°
// Position 4 : bras droit et tête à 135°
// Position 5 : tête au centre
// Position 6 : bras levés
// Position 7 : bras écartés
// Position 8 : frappe bras droit
// Position 9 : frappe bras gauche
// Retour position initiale avec 50 cycles bouche
// (Code complet dans le sketch original)
}
void gamePadMode() {
Terminal.println("Gamepad mode activated");
if (GamePad.isUpPressed()) { /* bras haut */ }
if (GamePad.isDownPressed()) { /* bras bas */ }
if (GamePad.isRightPressed()) { /* bras droit */ }
if (GamePad.isLeftPressed()) { /* bras gauche */ }
if (GamePad.isRedPressed()) { /* combo 1 */ }
if (GamePad.isOrangePressed()) { /* combo 2 */ }
if (GamePad.isGreenPressed()) { /* combo 3 */ }
if (GamePad.isBluePressed()) { /* combo 4 */ }
}
void imitationMode() {
Terminal.println("Imitation mode activated");
if (OrientationSensor.getY() > -90 && OrientationSensor.getY() <= 90) {
leftArm_Motor1.write(map(OrientationSensor.getY(), -90, 90, 0, 180));
}
if (OrientationSensor.getZ() > -70 && abs(OrientationSensor.getZ()) <= 70) {
leftArm_Motor2.write(map(OrientationSensor.getZ(), 0, 60, 100, 160));
leftArm_Motor3.write(map(OrientationSensor.getZ(), 0, 60, 160, 100));
}
}
void gampadMode_ChangeISR() {
if (gamepadMode_Enabled && !imitationMode_Enabled) {
gamepadMode_Enabled = false; imitationMode_Enabled = false;
} else {
gamepadMode_Enabled = true; imitationMode_Enabled = false;
}
}
void imitationMode_ChangeISR() {
if (imitationMode_Enabled && !gamepadMode_Enabled) {
gamepadMode_Enabled = false; imitationMode_Enabled = false;
} else {
gamepadMode_Enabled = false; imitationMode_Enabled = true;
}
}
Schéma de câblage
Schéma de connexion (image non incluse).
Processus de fabrication
- Améliorer la Constance avec les Robots de Pulvérisation Autonomes
- Comment les Robots de Peinture Réduisent les Retouches, Améliorent la Constance et Économisent les Coûts
- Réduire les Coûts de Retouche dans la Fabrication : Stratégies pour Efficacité et Qualité
- Vision robotique dans l'industrie : de la vision à l'auto-programmation
- Qu'est-ce qu'un robot auto-programmable et pourquoi cela compte
- Robots industriels : conception, fabrication et tendances futures
- Maximiser l'efficacité : une cellule de moulage multi-robot produit un gobelet shaker complet en un cycle
- Construire l'équipe idéale d'implémentation ERP : stratégies éprouvées pour le succès
- L'avenir de l'automatisation : les robots auto-reproducteurs redéfinissent l'Industrie 4.0