Projets:Roboto
Description du projet
Projet de robot sur roulette télécommandé en bluetooth. Ce prototype est un robot conteur sur roulettes télécommandé en bluetooth avec une manette nunchuck pour les déplacaments. Sur le chassis est fixé une tablette sur laquelle il y a des contes que l'on peut lire en manipulant la tablette. Il a été réalisé en collaboration avec l' artiste Mari Gwalarm pour l'habillage du robot et a été réalisé de manière collaborative auprès d'un public diversifié de 6 à 99 ans avec le soutien de My Human Kit.
Ce prototype est un objet pédagogique avec la finalité de servir dans des médiathèques.
Liens utiles
- Page du projet sur le GesLab
- Canal de discussion du projet sur Framateam
- Documentation finale du projet
- Dépôt GitHub du projet
Fichiers sources
Fichier:Roboto sketchs maitre esclave.zip
Analyse de l'existant
Equipe (Porteur de projet et contributeurs)
- Porteur de projet :Sébastien Lutz
- Contributeurs :Yves Le chevalier, Delphine Bézier
- Fabmanager référent : Delphine Bézier
Matériel nécessaire
- Bois de palette de récupération
- Plaque aluminium support moteur,Lien vers le pdf
- roues, Lien vers le fournisseur
- entretoises pour roues, Lien vers le fournisseur
- vis et boulons à ajuster selon épaisseur du bois
- batterie 12volt 12AH
- Chargeur de batterie 12V
- 2 anneaux de 12 leds RGB. Un support pour les anneaux a été modélisé en 3D, à retrouver dans les fichiers sources. Les anneaux de LED étaient prévus initialement pour faire des yeux multicolores mais n'ont finalement pas été implanté.
- Interrupteur pour le boitier 3d
- Interrupteur pour le boitier électrique pour éviter une consommation de courant inutile
- moteur à démultiplication Takanawa motoréducteur 555 métallique 12v - 24v motoréducteur à courant continu
- carte arduino uno
- carte arduino nano
- Contrôleur de Moteur DC 2x15A, 4.8-35V
- manette de wii filaire
- Adaptateur nunchuck
- hc05 x 2 : 2 modules bluethooth à configurer en maître et esclave
- pile 9 volts x 1
- boîtier commande avec LED à imprimer en 3D, Lien vers le fichier source. Le boitier est conçu pour ne pas arracher le fil de la nunchuk
- coffret électrique
Informations sur le moteur à démultiplication
Description
Takanawa motoréducteur 555 métallique 12v - 24v motoréducteur à courant continu
spécification
- modèle dcmotor RS- 555
- tension appropriée 12v-24v
- vitesse 10-20-40-80 tr / min
- courant de charge 2.5a
- Vitesse à vide DC12V 3000-3500r / min
- dc la 7000-8000r / min
- grandeur diamètre : 37 mm
- longueur: 65 mm
- poids 502g
- longueur de l'arbre 16mm
Préparation du châssis
Se référer au schéma ci-dessous pour réaliser le chassis.
Votre chassis devrait ressembler à cette image :)
Les étapes pas à pas pour la partie électronique
Dans les étapes suivantes nous allons valider le fonctionnement de chaque brique utilisée pour ce projet étape par étape :
- paramétrage des modules HC-05 pour en configurer un entant que maitre et l'autre en tant qu'esclave
- implémentation de la manette Nunchuck dans le sketch maître pour lire les données envoyées en bluetooth dans le sketch esclave
- implémentation du contrôle des moteurs par la Nunchuck dans le sketch esclave
- montage final du prototype et téléversement du code final
1 : Configuration des modules HC 05 : maître et esclave
2 : Implémentation de la manette Nunchuck dans le sketch maître
Schema du montage maître
Circuit maitre : Arduino Nano+ Bluetooth HC 05 + Nunchuck +adaptateur Nunchuck
Code arduino
- Installer la librairie wiichuck directement depuis l'IDE Arduino ou la télécharger ici
- Téléverser le sketch Roboto maître sur la carte arduino nano sur laquelle votre HC 05 a été configuré en maître
- Connecter ensuite la carte Arduino Uno avec le module esclave et vérifier dans le port série qu'il reçoit bien les données
//Roboto //Sketch maître : test de la Nunchuck avec envoie des données en bluetooth avec HC 05 sur le sketch esclave //My Human Kit //Télécharger la librarie wiichuck:https://www.arduinolibraries.info/libraries/wii-chuck //Sketch maitre à utiliser avec le sketch esclave #include <WiiChuck.h> #include <Wire.h> #include <SoftwareSerial.h> SoftwareSerial ArduinoSlave(10, 11); // RX | TX //hc 05 #define BROCHE_SCL A4 //DATA //nunchuck #define BROCHE_SDA A5 //CLOCK //nunchuck int joyX; int joyY; boolean boutonC; boolean boutonZ; Nunchuck nunchuck(BROCHE_SDA, BROCHE_SCL); //String answer; String msg; void setup(void) { Serial.begin(38400); Serial.println("Enter AT commands:"); ArduinoSlave.begin(38400); // HC-05 default speed in AT command more Serial.println("Starting Wiichuck Generic Controller Demo"); nunchuck.begin(); int i; } void readSerialPort() { while (Serial.available()) { delay(100); if (Serial.available() > 0) { char c = Serial.read(); //gets one byte from serial buffer msg += c; //makes the string readString //recoit les datas du nunchuck } } Serial.flush(); } void loop() { //Lire les données reçues de la manette Nunchuck nunchuck.readData(); joyX = nunchuck.getJoyX(); Serial.print("JoyX :"); Serial.println(joyX); joyY = nunchuck.getJoyY(); Serial.print("JoyY :"); Serial.println(joyY); boutonC = nunchuck.checkButtonC(); Serial.print("boutonC :"); Serial.println(boutonC); boutonZ = nunchuck.checkButtonZ(); Serial.print("boutonZ :"); Serial.println(boutonZ); //Envoi des données de la Nunchuck au module esclave ArduinoSlave.print(joyX); ArduinoSlave.print(";"); ArduinoSlave.print(joyY); ArduinoSlave.print(";"); ArduinoSlave.print(boutonC); ArduinoSlave.print(";"); ArduinoSlave.print(boutonZ); ArduinoSlave.println(";"); delay(200); }
3 : implémentation du contrôle des moteurs par la Nunchuck dans le sketch esclave
Schema du montage
Circuit esclave : Arduino Uno + Carte contrôleur moteurs + Moteurs + Bluetooth HC 05
Code pour Arduino Uno dont le HC-05 est configuré en esclave
Téléverser le sketch Roboto esclave sur la carte Arduino Uno.
/* # Product: DC Motor Driver 2x15A_lite # SKU : DRI0018 # Description: # Drive 2 motors with this DC Motor Driver module # Hardwares: 1. Arduino UNO 2. DC Motor Driver 2x15A_lite 3. DC motors x2 #Steps: 1.Connect the DMotD_PWM & DMotG_PWM to UNO digital 5 & 6 2.Connect the DMotD_EN & DMotG_EN to UNO digital 4 & 7 3.Connect +5V & GND to UNO 5V & GND Code : Delphine Bézier et Yves Le chevalier */ //Bluetooth #include <SoftwareSerial.h> SoftwareSerial ArduinoMaster(10, 11); // RX | TX //nunchuck int joyX; int joyY; int joyC; int joyZ; //DC Motor Driver pins int VMotD = 5; //VMotD Speed Control right motor int VMotG = 6; //VMotG Speed Control left motor int DMotG = 7; //DMotD Direction Control int DMotD = 4; //DMotD Direction Control //infos moteurs boolean p;//détection d'un pivotement int smg;//sens moteur gauche int smd;//sens moteur droite int vmg;//vitesse moteur gauche int vmd;//vitesse moteur droite float b;//valeur(amplitude) du braquage int v1;//valeur vitesse moteur 1 int v2;//valeur vitesse moteur 2 int var [4] = {0, 0, 0, 0}; int k = 0; void setup() { //motor driver int i; for (i = 4; i <= 7; i++) pinMode(i, OUTPUT); Serial.println("Run keyboard control"); digitalWrite(VMotD, LOW); digitalWrite(VMotG, LOW); //bluetooth serial Serial.begin(38400); Serial.println("Bluetooth nunchuck esclave start"); ArduinoMaster.begin(38400); } void loop() { while (ArduinoMaster.available() > 0 ) { char car = ArduinoMaster.read(); // while (Serial.available() > 0 ) { // char car = Serial.read(); // Serial.print(car); switch (car) { case '\n': // fin de données renvoi(); execution(); k = 0; break; case ';': // séparateur k++; break; default: var[k] = (var[k] * 10) + (car - 48); break; } // delay(50); } delay(10); } void renvoi() { joyX = var[0]; joyY = var[1]; joyC = var[2]; joyZ = var[3]; Serial.print("Brut "); Serial.print("joyX :"); Serial.print(joyX); Serial.print(" joyY :"); Serial.println(joyY); Serial.print(" joyC :"); Serial.print(joyC); Serial.print(" joyZ :"); Serial.println(joyZ); for (k = 0; k < 4; k++) { Serial.println(var[k]); // renvoi des valeurs reçues var[k] = 0; } // delay(50); } void execution() { // execution ordre recu // v1 = 0; //v2 = 0; int joyX1 = map(joyX, 26, 231, -255, +255); int joyY1 = map(joyY, 35, 226, -255, +255); joyX = constrain (joyX1, -255, +255); joyY = constrain (joyY1, -255, +255); Serial.print("Remappé "); Serial.print(" joyX :"); Serial.print(joyX); Serial.print(" joyY :"); Serial.println(joyY); //Pour éviter de consommer du courant on attribue une plage neutre plus large que zéro if ((joyX < 32) && (joyX > -32)) { joyX = 0; Serial.print(" joyXX :"); Serial.print(joyX); } if ((joyY < 25) && (joyY > -25)) { joyY = 0; Serial.print(" joyYY :"); Serial.println(joyY); } //détection du pivotement x if ((joyX != 0)&& (joyY == 0)) { p = 1; } else p = 0; //calcul du sens de rotation des moteurs (attention les moteurs sont montés en miroir) if (p == 1) { if (joyX < 0) { //tourne à gauche smg = 0; smd = 0; } else { //tourne à droite smg = 1; smd = 1; } } else if (joyY < 0) { //recule smg = 0; smd = 1; } else { //avance smg = 1; smd = 0; } //calcul valeur du braquage (amplitude du braquage) if (joyX < 0) { b = joyX * -1; } else { b = joyX; } //si pivotement (cad que le centre de rotation est entre les deux moteurs), les deux moteurs vont à la même vitesse if (p == 1) { vmg = b; vmd = b; } else { if (joyY < 0) { //calcul de 2 vitesses v1 et v2 qui seront affectées au moteur v1 = joyY * -1; //on calcule la valeur absolue de la vitesse moteur 1 } else { v1 = joyY; } Serial.print("v1 :"); Serial.println(v1); Serial.print("v2 :"); Serial.println(v2); v2 = v1 - (v1 * (b / 255)); Serial.print("v1 :"); Serial.println(v1); Serial.print("v2 :"); Serial.println(v2); // ajout ylc du 30/03/19 /* compte tenu des moteurs (24v utilisés en 12v) il est nécéssaire de "doper" les vitesses qui leurs sont affectées lors des virages en affectant à la roue la plus rapide la vitesse maximale et en augmentant la vitesse de la roue la moins rapide dans la même proportion. */ float c = 255 / v1; v1 = 255; v2 = v2 * c; // fin ajout ylc du 30/03/19 // Affectation des vitesses de rotation des moteurs des moteurs selon la direction où aller (droite ou gauche) if ((joyX == 0) && (joyY == 0)) { v1 = 0; v2 = 0; } if (joyX < 0) { vmg = v2; vmd = v1; } else { vmg = v1; vmd = v2; } } Serial.print("vmg :"); Serial.println(vmg); Serial.print("vmd :"); Serial.println(vmd); Serial.print("p :"); Serial.println(p); Serial.print("smg :"); Serial.println(smg); Serial.print("smd :"); Serial.println(smd); control_moteur(); } ////motor driver void control_moteur() { //Move forward analogWrite (VMotG, vmg); //PWM Speed Control digitalWrite(DMotG, smg); //DMotD, direction control=p analogWrite (VMotD, vmd); digitalWrite(DMotD, smd); }
Démonstration du prototype en action
Lien vidéo à ajouter