Différences entre versions de « Projets:Roboto »

De wikilab
(35 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 +
[[File:roboto_final.jpg|right|400px]]
 +
 
== Description du projet ==
 
== Description du projet ==
 
Projet de robot sur roulette télécommandé en bluetooth.
 
Projet de robot sur roulette télécommandé en bluetooth.
Ligne 16 : Ligne 18 :
 
* [https://github.com/myhumankit/roboto Dépôt GitHub du projet]
 
* [https://github.com/myhumankit/roboto Dépôt GitHub du projet]
  
== Cahier des charges ==
+
== Fichiers sources ==
 +
[[File:Roboto_sketchs_maitre_esclave.zip|Télécharger les sketchs Arduino]]
  
 
== Analyse de l'existant ==
 
== Analyse de l'existant ==
Ligne 29 : Ligne 32 :
 
* [[Media:Cotes_plaque_moteur_roboto.jpg|Plaque aluminium support moteur]],[[Media:plan-plaque-robot_cotes.pdf|Lien vers le pdf]]
 
* [[Media:Cotes_plaque_moteur_roboto.jpg|Plaque aluminium support moteur]],[[Media:plan-plaque-robot_cotes.pdf|Lien vers le pdf]]
 
* [[Media:roue_robot.png|roues]], [https://www.leroymerlin.fr/v3/p/produits/roue-fixe-sur-axe-diam-175-mm-e21495 Lien vers le fournisseur]
 
* [[Media:roue_robot.png|roues]], [https://www.leroymerlin.fr/v3/p/produits/roue-fixe-sur-axe-diam-175-mm-e21495 Lien vers le fournisseur]
 +
* [https://www.leroymerlin.fr/v3/p/produits/roulette-pivotante-a-platine-diam-42-mm-e21445 2 roulettes]
 
* [[Media:entretoise_roues_robot.png|entretoises pour roues]], [https://www.amazon.fr/gp/product/B07D3H3YHK/ref=ppx_yo_dt_b_asin_title_o05_s00?ie=UTF8&psc=1 Lien vers le fournisseur]
 
* [[Media:entretoise_roues_robot.png|entretoises pour roues]], [https://www.amazon.fr/gp/product/B07D3H3YHK/ref=ppx_yo_dt_b_asin_title_o05_s00?ie=UTF8&psc=1 Lien vers le fournisseur]
 
* vis et boulons à ajuster selon épaisseur du bois
 
* vis et boulons à ajuster selon épaisseur du bois
Ligne 41 : Ligne 45 :
 
*[https://www.robotshop.com/eu/fr/controleur-moteur-dc-2x15a.html Contrôleur de Moteur DC 2x15A, 4.8-35V]
 
*[https://www.robotshop.com/eu/fr/controleur-moteur-dc-2x15a.html Contrôleur de Moteur DC 2x15A, 4.8-35V]
 
*[[Media:Nunchuck2.jpg|manette de wii filaire]]
 
*[[Media:Nunchuck2.jpg|manette de wii filaire]]
*[https://www.robotshop.com/eu/fr/platine-deploiement-i2c-wii-nunchuck-solarbotics.html Adaptateur nunchuck]
+
*[NunChucky Wii Nunchuck I2C Breakout Adapter Adaptateur nunchuck]
 
*[[Media:Hc05-1.jpg|hc05 x 2 : 2 modules bluethooth à configurer en maître et esclave
 
*[[Media:Hc05-1.jpg|hc05 x 2 : 2 modules bluethooth à configurer en maître et esclave
 
*pile 9 volts x 1]]
 
*pile 9 volts x 1]]
Ligne 61 : Ligne 65 :
 
File:Arduino-nano-microprocessor.jpg|Carte Arduino Nano
 
File:Arduino-nano-microprocessor.jpg|Carte Arduino Nano
 
File:Nunchuck2.jpg|Manette de wii filaire
 
File:Nunchuck2.jpg|Manette de wii filaire
File:Adaptateur_nunchuk.png|Adaptateur Nunchuck, [https://www.robotshop.com/eu/fr/platine-deploiement-i2c-wii-nunchuck-solarbotics.html Lien vers fournisseur]
+
File:adaptateur_wii.png|Adaptateur Nunchuck, [https://www.robotshop.com/eu/fr/platine-deploiement-i2c-wii-nunchuck-solarbotics.html Lien vers fournisseur], [[File:nunchuck_adapter.pdf|lien vers datasheet]]
 
File:Hc05-1.jpg|module bluetooth HC-O5
 
File:Hc05-1.jpg|module bluetooth HC-O5
 
File:Pile_9v.jpg|Pile 9V
 
File:Pile_9v.jpg|Pile 9V
Ligne 92 : Ligne 96 :
  
 
==Préparation du châssis==
 
==Préparation du châssis==
 +
Se référer au schéma ci-dessous pour réaliser le chassis.
 +
 
[[File:robot plan de réalisation.pdf|left|900px]]
 
[[File:robot plan de réalisation.pdf|left|900px]]
 
<br clear=all>
 
<br clear=all>
  
[[File:Capture robot.PNG|200px]]
+
Votre chassis devrait ressembler à cette image :)
 +
 
 +
[[File:Capture robot.PNG|600px]]
 
<br clear=all>
 
<br clear=all>
  
==Méthodologie pour la fabrication de la partie électronique ==
+
==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 :
 
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
+
# paramétrage des modules HC-05 pour en configurer un entant que maitre et l'autre en tant qu'esclave
# - test de la manette nunchuck pour lire ses données dans le moniteur série d'arduino
+
# implémentation de la manette Nunchuck dans le sketch maître pour lire les données envoyées en bluetooth dans le sketch esclave
# - test des moteurs avec la carte contrôleur de moteur
+
# 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
+
# montage final du prototype et téléversement du code final
 +
 
 +
=== 1 : Configuration des modules HC 05 : maître et esclave===
 +
[http://wikilab.myhumankit.org/index.php?title=Projets:Communication_Bluetooth_HC_05 Suivre ce tutoriel]
  
===Implémentation de la Nunchuck dans le sketch maître===
+
=== 2 : Implémentation de la manette Nunchuck dans le sketch maître===
 
====Schema du montage maître====
 
====Schema du montage maître====
 +
Circuit maitre : Arduino Nano+ Bluetooth HC 05 + Nunchuck +adaptateur Nunchuck
 +
 
====Code arduino====
 
====Code arduino====
# Installer la librairie wiichuck dans l'IDE Arduino
+
# Installer la librairie wiichuck directement depuis l'IDE Arduino ou [https://www.arduinolibraries.info/libraries/wii-chuck la télécharger ici]
# Téléverser le code suivant sur la carte arduino nano sur laquelle votre HC 05 a été configuré en maître (voir étape précédente)
+
# 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
  
 
<pre>
 
<pre>
Ligne 207 : Ligne 221 :
 
</pre>
 
</pre>
  
==Schéma branchement Arduino batterie motor shield==
+
===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
 +
 
 
[[File:Shema robot batterieetc .pdf |900px]]
 
[[File:Shema robot batterieetc .pdf |900px]]
  
==Configuration des modules Bluetooth en maitre et esclave==
+
====Code pour Arduino Uno dont le HC-05 est configuré en esclave====
====== Intro ======
+
Téléverser le sketch Roboto esclave sur la carte Arduino Uno.
Nous avons deux HC-05 qui sont maîtres par défaut.
 
Il faut d'abord configurer les deux HC-05 (l'un en maitre et l'autre en esclave avant de pouvoir les faire communiquer.
 
 
 
Cette procédure se passe en mode commande (AT mode).
 
 
 
Nous allons d'abord configurer l'esclave puis le maître.
 
 
 
Pour cela, réaliser les deux montages (maître et esclave en mode AT).
 
 
 
===== Schéma Esclave Mode AT =====
 
 
 
On peut brancher le module HC-05 sur 5V (et pas 3V3).
 
 
 
Le key est connecté au 3.3V en mode AT
 
 
 
[[File:hc-05_master_modeat.jpg|500px]]
 
 
 
===== Schéma Maître Mode AT =====
 
[[File:Hc-05 master modeat.jpg|500px]]
 
 
 
====== Code ======
 
Ce code est à téléverser sur chacune des cartes arduino.
 
 
 
<span style="color: red; ">Avant de téléverser le programme sur la carte arduino, débrancher le module HC-05 de l'alimentation</span>
 
 
 
<code>
 
<pre>
 
#include <SoftwareSerial.h>
 
SoftwareSerial BTSerial(10, 11); // RX | TX
 
 
 
void setup()
 
{
 
  pinMode (10, INPUT);
 
  pinMode (11, OUTPUT);
 
  pinMode(9, OUTPUT);  // this pin will pull the HC-05 pin 34 (key pin) HIGH to switch module to AT mode
 
  digitalWrite(9, HIGH);
 
  Serial.begin(38400);
 
  Serial.println("Enter AT commands:");
 
  BTSerial.begin(38400);  // HC-05 default speed in AT command more
 
}
 
 
 
void loop()
 
{
 
  // Keep reading from HC-05 and send to Arduino Serial Monitor
 
  if (BTSerial.available())
 
    Serial.write(BTSerial.read());
 
 
 
  // Keep reading from Arduino Serial Monitor and send to HC-05
 
  if (Serial.available())
 
    BTSerial.write(Serial.read());
 
}
 
</pre>
 
</code>
 
 
 
====== Configurer deux HC-05 master : un maitre et l'autre esclave ======
 
Source:http://blog.zakkemble.net/getting-bluetooth-modules-talking-to-each-other/
 
 
 
=====Configuration du HC-05 (maître par défaut) comme esclave=====
 
 
 
Réinitialiser les paramètres par défaut/Reset to defaults:
 
<code>AT+ORGL</code>
 
 
 
Effacer les appareils apairés/Clear any paired devices:
 
<code>AT+RMAAD</code>
 
 
 
Configurer le mot de passe/Set PIN:
 
<code>AT+PSWD=1234</code>
 
 
 
Assigner le mode esclave/Slave mode:
 
<code>AT+ROLE=0</code>
 
 
 
récupérer l'adresse du module/Get the address of the device:
 
<code>AT+ADDR?</code>
 
 
 
Une fois l'adresse récupérée, on peut configurer le maître.
 
 
 
<span style="color: red; ">Débrancher le module HC 05 de l'alimentation (broche VCC), déconnecter la broche KEY du 3.3 Volts et reconnecter le HC 05 à l'alimentation. </span>
 
 
 
==== Schema Esclave Mode COM====
 
 
 
[[File:hc-05_slave_modecom_ok2.jpg|500px]]
 
 
 
 
 
 
 
=====Configuration du HC-05 en maitre =====
 
Pour que le module maître se connecte au module esclave, il faut connaitre l'adresse du module esclave. '''Vérifier que le module esclave (en mode com) est alimenté ''' et entrer les commandes suivantes pour la configuration du module maître.
 
 
 
 
 
* Réinitialiser les paramètres par défaut
 
<code>AT+ORGL</code>
 
 
 
 
 
* Effacer les appareils appairés
 
<code>AT+RMAAD</code>
 
 
 
 
 
* Assigner le rôle de maître
 
<code>AT+ROLE=1</code>
 
 
 
 
 
* Besoin de redémarrer après le changement de rôle
 
<code>AT+RESET</code>
 
 
 
 
 
* Autoriser la connection à n'importe quelle adresse
 
<code>AT+CMODE=1</code>
 
 
 
 
 
* Mode recherche - Standard, arrêter après 5 appareils trouvés, (ou) arrêter de chercher après 5 secondes :
 
<code>AT+INQM=0,5,5</code>
 
 
 
 
 
* Assigner un mot de passe, doit être identique au module esclave:
 
<code>AT+PSWD=1234</code>
 
 
 
 
 
* Lancer le profile SPP (nécessaire pour n'importe quel émission/réception bluetooth:
 
<code>AT+INIT</code>
 
Note: Si cela dit Erreur:(17), cela signifie que c'est déjà chargé, dans ce cas poursuivre.
 
 
 
 
 
* Commencer à chercher :
 
<code>AT+INQ</code>
 
 
 
Une petite liste de périphériques devrait apparaître, l'un d'eux devrait être le module esclave.
 
 
 
Le format de sortie est configuré ainsi:
 
<code>+INQ:address,type,signal</code>
 
 
 
Le type peut être ignoré. Le signal sera 7FFF si le mode de recherche est en mode standard, en mode RSSI, vous aurez le chargement du même appareil mais avec des niveaux de signal différents, ce que vous ne souhaitez pas pour le moment.
 
 
 
 
 
* Copier l'adresse des périphériques trouvés, par exemple 12: 3: 289431 et '''remplacez les deux points par des virgules''' - 12,3,289431. Pour savoir quel périphérique est le module esclave, vous devez interroger chaque adresse pour connaître son nom:
 
 
 
<code>AT+RNAME? <address></code>
 
 
 
Remplacer <adress> par l'adresse du périphérique comme 12,3,289431
 
 
 
La réponse devrait être +RNAME:linvor si vous utilisez un module escalve standard ou +RNAME:HC05 si vous utilisez un module maître comme esclave (ce qui est notre cas pour ce projet). .
 
 
 
 
 
* Maintenant que vous avez l'adresse du module esclave il faut  l'appairer au maître :
 
 
 
<code>AT+PAIR=<address>,<timeout></code>
 
Note: Si vous souhaitez appairer le maître à votre téléphone, il faut paramétrer le <timeout> sur une durée suffisament longue pour avoir le temps d'entrer le mot de passe.
 
 
 
 
 
* Relier l'adresse :
 
<code>AT+BIND=<address></code>
 
 
 
 
 
* Autoriser seulement à se connecter à l'adresse liée :
 
<code>AT+CMODE=0</code>
 
 
 
 
 
* Et se connecter maintenant:
 
<code>AT+LINK=<address></code>
 
 
 
Si cela fonctionne, la LED du module esclave doit rester allumée et la LED du module maître devrait clignoter comme une pulsation.
 
 
 
Les modules sont maintenant configurés ! Ils devraient se connecter automatiquement.
 
 
 
===== Sending data =====
 
Maintenant, si vous êtes entré en mode AT sur le module maître en connectant le 3.3V sur la broche KEY AVANT d'alimenter le module, vous devrez déconnecter le module de l'alimentation, déconnecter le KEY (voir le connecter au Ground si pas suffisant), et le reconnecter à l'alimentation.
 
 
 
Si vous avez connecté le KEY PENDANT que le module était alimenté, il faudra juste déconnecter le KEY.
 
 
 
===== Maître Mode COM=====
 
[[File:Hc-05 slave modecom ok2.jpg|600px]]
 
 
 
===== Envoyer et recevoir des données en Mode COM=====
 
Si vous voulez avoir sur le même ordinateurs les deux consoles série d'ouverte, il faut lancer deux instances de l'IDE d'Arduino, afin de tester la communication entre les deux sketchs (maitre et esclave). Ouvrez 2 consoles série et envoyer un message. Vérifier qu'il est bien reçu dans l'autre console. Cela doit fonctionner dans les deux sens.
 
 
 
====Sketchs pour envoyer des données depuis une variable (msg)====
 
Source: https://www.instructables.com/id/How-to-Configure-HC-05-Bluetooth-Module-As-Master-/
 
 
 
===Sketch maître===
 
<code>
 
<pre>
 
#include <SoftwareSerial.h>
 
//SoftwareSerial ArduinoSlave(2,3);
 
SoftwareSerial ArduinoSlave(10, 11); // RX | TX
 
//SoftwareSerial ArduinoSlave(10, 11); // RX | TX
 
 
 
String answer;
 
String msg;
 
void setup(){
 
Serial.begin(38400);
 
Serial.println("ENTER Commands:");
 
ArduinoSlave.begin(38400);
 
             
 
}
 
void loop(){
 
//Read command from monitor
 
readSerialPort();
 
 
//Read answer from slave
 
  while (ArduinoSlave.available()) {
 
  delay(100); 
 
  if (ArduinoSlave.available() >0) {
 
    char c = ArduinoSlave.read();  //gets one byte from serial buffer
 
    answer += c; //makes the string readString
 
  }
 
}
 
//Send data to slave
 
if(msg!=""){
 
  Serial.print("Master sent : ");
 
  Serial.println(msg);
 
  ArduinoSlave.print(msg);
 
  msg="";
 
}
 
//Send answer to monitor
 
if(answer!=""){
 
  Serial.print("Slave received : ");
 
  Serial.println(answer);
 
  answer="";
 
}
 
}
 
void readSerialPort(){
 
while (Serial.available()) {
 
  delay(10); 
 
  if (Serial.available() >0) {
 
    char c = Serial.read();  //gets one byte from serial buffer
 
    msg += c; //makes the string readString
 
  }
 
}
 
Serial.flush();
 
}
 
</pre>
 
</code>
 
 
 
=== Sketch esclave ===
 
 
 
<code>
 
<pre>
 
#include <SoftwareSerial.h>
 
//SoftwareSerial ArduinoMaster(2,3);
 
SoftwareSerial ArduinoMaster(10, 11); // RX | TX
 
String msg;
 
void setup(){
 
Serial.begin(38400);
 
ArduinoMaster.begin(38400);   
 
}
 
void loop(){
 
readSerialPort();
 
 
// Send answer to master
 
if(msg!=""){
 
  Serial.print("Master sent : " );
 
  Serial.println(msg);
 
  ArduinoMaster.print(msg);
 
  msg="";
 
}
 
}
 
void readSerialPort(){
 
while (ArduinoMaster.available()) {
 
  delay(100);
 
  if (ArduinoMaster.available() >0) {
 
    char c = ArduinoMaster.read();  //gets one byte from serial buffer
 
    msg += c; //makes the string readString
 
  }
 
}
 
ArduinoMaster.flush();
 
}
 
</pre>
 
</code>
 
 
 
 
 
====== Photos montage ======
 
[[File:img_4656.jpg|600px]]
 
 
 
[[File:img_4654.jpg|600px]]
 
 
 
[[File:img_4655.jpg|600px]]
 
 
 
======Schemas trouvés en ligne======
 
 
 
https://www.gme.cz/data/attachments/dsh.772-148.2.pdf
 
 
 
{{:arduino:img_4657.jpg?direct&600 |}}
 
 
 
{{:arduino:hc-05_connections.jpg?direct&600 |}}
 
 
 
 
 
======AT commands======
 
Les commandes les plus utiles
 
 
 
AT : Vérifier la connection
 
 
 
AT+NAME :Voir le nom par défaut
 
 
 
AT+ADDR : Voir l'adresse par défaut
 
 
 
AT+VERSION : Voir la version
 
 
 
AT+UART : Voir le baudrate
 
 
 
AT+ROLE: Voir le rôle du module bluetooth (1=master/0=slave)
 
 
 
AT+RESET : Réinitialiser et quitter le mode AT
 
 
 
AT+ORGL : restaurer la configuration usine
 
 
 
AT+PSWD: Voir le mot de passe par défaut
 
 
 
====== Circuit maitre : Nano+Nunchuck+BT ======
 
Test avec TEST_BLUETOOTH.ino
 
 
 
Role 1 attribué en bluetooth ok.
 
 
 
 
 
AT+BIND=>pour trouver l'adresse à laquelle il est lié
 
 
 
Role maître : +BIND:98d3:31:f41bcf (adresse esclave)
 
 
 
====== Circuit esclave Uno+Moteurs+BT ======
 
Role 0 attribué en bluetooth ok.
 
 
 
 
 
https://www.aranacorp.com/fr/votre-arduino-communique-avec-le-module-hc-05/
 
 
 
 
 
 
 
https://letmeknow.fr/blog/2013/10/09/tuto-commander-un-relais-en-bluetooth/
 
 
 
https://www.instructables.com/id/How-to-Configure-HC-05-Bluetooth-Module-As-Master-/
 
 
 
AT+STATE?
 
 
 
AT+IRQ
 
 
 
https://arduino.stackexchange.com/questions/52846/scan-bluetooth-devices-using-hc-05
 
 
 
https://cdn.instructables.com/ORIG/FI9/7NJR/IRXT0JIG/FI97NJRIRXT0JIG.pdf
 
 
 
 
 
https://www.youtube.com/watch?v=hyME1osgr7s
 
 
 
 
 
AT+RMAAD pour annuler pairing
 
  
https://cdn.instructables.com/ORIG/FI9/7NJR/IRXT0JIG/FI97NJRIRXT0JIG.pdf
 
 
https://www.instructables.com/id/HOW-TO-HC-05-Bluetooth-MODULE-AT-Commands-With-But/
 
 
 
AT+UART (config du baudrate)
 
 
http://sti2d-sin-isn.blogspot.com/2018/02/auto-connexion-de-deux-modules.html
 
 
https://electronics.stackexchange.com/questions/101572/hc-05-bluetooth-module-not-responding-to-certain-commands
 
 
====== Le TUTORIEL avec toutes les étapes ======
 
 
'''Attention à l'ordre dans lequel on branche/débranche le key.'''
 
 
Faire une AT+reset après avoir débranché le key ou l'inverse, [http://blog.zakkemble.net/getting-bluetooth-modules-talking-to-each-other/ regarder ce lien pour la procédure]
 
 
Brancher le pin enable sur le GROUND pour switcher en mode communication
 
 
essayer en laissant le pin key sur 3.3V (apres avoir éteint la board) pour switcher du mode AT
 
 
https://www.teachmemicro.com/hc-05-bluetooth-command-list/
 
 
https://arduino.stackexchange.com/questions/16954/problems-connecting-reliably-using-hc-05-as-bluetooth-master
 
 
https://forum.core-electronics.com.au/t/solved-how-could-i-take-my-hc05-module-out-of-at-command-mode-without-disconnecting-the-arduino/1792/5
 
 
 
http://forum.hobbycomponents.com/viewtopic.php?f=39&t=1567
 
 
====== Bluetooth+motor+joystick example ======
 
https://forum.arduino.cc/index.php?topic=413699.15
 
 
https://www.instructables.com/id/Wireless-Wii-Nunchuck-control-of-Arduino-projects/
 
 
====== Reconstruire un nombre en recevant ses éléments un par un ======
 
https://openclassrooms.com/forum/sujet/hc-06-et-arduino
 
 
<code>
 
<pre>
 
// Variable globale (à placer en dehors du loop)
 
int pwmval = 0;
 
 
 
// Partie traitement (à placer dans le loop)
 
if ( Serial.available() ) {
 
    char c = Serial.read();
 
    if ( ( c >= '0' ) && ( c <= '9' ) ) {
 
        pwmval = ( ( pwmval * 10 ) + ( c - '0' ) );
 
    } else if ( c == 'x' ) {
 
        analogWrite(pinX, pwmval);
 
        pwmval = 0;
 
    } else if ( c == 'y' ) {
 
        analogWrite(pinY, pwmval);
 
        pwmval = 0;
 
    }
 
}
 
</pre>
 
</code>
 
 
====== Librairie pour retrouver les données reçues ======
 
https://github.com/jlebunetel/WiiExpansion
 
 
====== code final ======
 
<code>
 
 
<pre>
 
<pre>
 
/*
 
/*
Ligne 632 : Ligne 244 :
 
   2.Connect the DMotD_EN & DMotG_EN to UNO digital 4 & 7
 
   2.Connect the DMotD_EN & DMotG_EN to UNO digital 4 & 7
 
   3.Connect +5V & GND to UNO 5V & GND
 
   3.Connect +5V & GND to UNO 5V & GND
 +
 +
  Code : Delphine Bézier et Yves Le chevalier
 
*/
 
*/
 
//Bluetooth
 
//Bluetooth
Ligne 637 : Ligne 251 :
 
SoftwareSerial ArduinoMaster(10, 11); // RX | TX
 
SoftwareSerial ArduinoMaster(10, 11); // RX | TX
  
//nunchuck+bluetooth
+
//nunchuck
 
int joyX;
 
int joyX;
 
int joyY;
 
int joyY;
 
int joyC;
 
int joyC;
 
int joyZ;
 
int joyZ;
 
int valeurs_joystick[4] = {0, 0, 0, 0};
 
int valeurs_joystick_precedent[4] = {0, 0, 0, 0};
 
  
 
//DC Motor Driver pins
 
//DC Motor Driver pins
int VMotD = 5;    //VMotD Speed Control mot droit
+
int VMotD = 5;    //VMotD Speed Control right motor
int VMotG = 6;    //VMotG Speed Control mot gauche
+
int VMotG = 6;    //VMotG Speed Control left motor
 
int DMotG = 7;    //DMotD Direction Control
 
int DMotG = 7;    //DMotD Direction Control
 
int DMotD = 4;    //DMotD Direction Control
 
int DMotD = 4;    //DMotD Direction Control
Ligne 679 : Ligne 290 :
 
   ArduinoMaster.begin(38400);
 
   ArduinoMaster.begin(38400);
 
}
 
}
 
 
 
 
 
  
 
void loop() {
 
void loop() {
Ligne 834 : Ligne 440 :
 
     }
 
     }
 
    
 
    
  /*  if (joyX < 0) {
 
      vmg = v2;
 
      vmd = v1;
 
    }
 
    else if (joyX > 0) {
 
      vmg = v1;
 
      vmd = v2;
 
 
 
 
     
 
    }
 
  else if ((joyX == 0)&& (joyY == 0)) {
 
      vmg = 0;
 
      vmd = 0;
 
      smg=0;
 
      smd=0;
 
    }
 
    */
 
 
     }
 
     }
  
Ligne 876 : Ligne 463 :
 
   digitalWrite(DMotD, smd);
 
   digitalWrite(DMotD, smd);
 
}
 
}
</pre>
 
</code>
 
  
== Outils nécessaires ==
 
  
== Coût ==
 
  
== Délai estimé ==
+
</pre>
  
== Fichiers source ==
+
==Démonstration du prototype en action==
 +
Vidéo du chassis:
  
== Étapes de fabrication pas à pas ==
+
{{#ev:youtube|https://youtu.be/QYqTCIU2rLE}}
===Préparation du chassis===
 
===Configuration des modules bluetooth HC05 en maitre et esclave===
 
[http://wikilab.myhumankit.org/index.php?title=Projets:Communication_Bluetooth_HC_05 Suivre ce tutoriel]
 
  
===Code pour tester la Nunchuck===
 
  
<pre>
+
Vidéo du projet final:
//Roboto
 
//Sketch test de la Nunchuck
 
//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;
 
int joyX_precedent;
 
int joyY_precedent;
 
boolean boutonC;
 
boolean boutonC_precedent;
 
boolean boutonZ;
 
boolean boutonZ_precedent;
 
 
int valeurs_nunchuck [] = {0, 0, 0, 0};
 
 
 
int valeurs_nunchuck_precedent [] = {0, 0, 0, 0};
 
 
Nunchuck nunchuck(BROCHE_SDA, BROCHE_SCL);
 
 
int E1 = 5;    //E1 Speed Control
 
int E2 = 6;    //E2 Speed Control
 
int M1 = 4;    //M1 Direction Control
 
int M2 = 7;    //M1 Direction Control
 
 
 
 
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 envoyées par 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);
 
 
  ArduinoSlave.print(joyX);
 
  ArduinoSlave.print(";");
 
  ArduinoSlave.print(joyY);
 
  ArduinoSlave.print(";");
 
  ArduinoSlave.print(boutonC);
 
  ArduinoSlave.print(";");
 
  ArduinoSlave.print(boutonZ);
 
  ArduinoSlave.println(";");
 
 
 
 
  delay(200);
 
 
}
 
 
</pre>
 
  
===Téléverser le code final pour le module maitre===
+
{{#ev:youtube|https://youtu.be/sAMOijOugbY}}
Circuit maitre : Arduino Nano+ Bluetooth HC 05 + Nunchuck
 
  
===Téléverser le code final pour le module esclave===
 
Circuit esclave : Arduino Uno + Carte contrôleur moteurs + Moteurs + Bluetooth HC 05
 
  
== Durée de fabrication du prototype final ==
 
  
 +
[[Category:Tutoriels]]
 
[[Category:Projets]]
 
[[Category:Projets]]
 
[[Category:Réalisés]]
 
[[Category:Réalisés]]
 
[[Category:Mobilité]]
 
[[Category:Mobilité]]

Version du 22 juin 2021 à 16:40

Roboto final.jpg

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.

Roboto final.jpg


Liens utiles

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


Informations sur le moteur à démultiplication
Description

Takanawa motoréducteur 555 métallique 12v - 24v motoréducteur à courant continu

Lien vers le fournisseur

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

Dimension moteur.png Moteur-takanawa2.jpg

Préparation du châssis

Se référer au schéma ci-dessous pour réaliser le chassis.

Robot plan de réalisation.pdf


Votre chassis devrait ressembler à cette image :)

Capture robot.PNG

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 :

  1. paramétrage des modules HC-05 pour en configurer un entant que maitre et l'autre en tant qu'esclave
  2. implémentation de la manette Nunchuck dans le sketch maître pour lire les données envoyées en bluetooth dans le sketch esclave
  3. implémentation du contrôle des moteurs par la Nunchuck dans le sketch esclave
  4. montage final du prototype et téléversement du code final

1 : Configuration des modules HC 05 : maître et esclave

Suivre ce tutoriel

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

  1. Installer la librairie wiichuck directement depuis l'IDE Arduino ou la télécharger ici
  2. Téléverser le sketch Roboto maître sur la carte arduino nano sur laquelle votre HC 05 a été configuré en maître
  3. 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

Shema robot batterieetc .pdf

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

Vidéo du chassis:


Vidéo du projet final: