Différences entre versions de « Projets:Roboto »

De wikilab
 
(200 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 +
{{Infobox projet
 +
|Image principale=Roboto final.jpg
 +
|Description=Robot conteur sur roulettes télécommandé en bluetooth avec une manette Nunchuck pour les déplacements
 +
|Porteur de projet=Sebprusa
 +
|Contributeurs=Delphine, Sebprusa, Ylc
 +
|Fabmanager=Delphine
 +
|Référent documentation=Delphine
 +
|Catégorie de handicap=Hors handicap
 +
|Etat d'avancement=Réalisés
 +
|Statut de la documentation=Complète
 +
|Relecture de la documentation=Non vérifiée
 +
|Techniques=arduino, moteur, bluetooth
 +
|Durée de fabrication=de 16 à 32 h
 +
|Coût matériel=Plus de 200 euros
 +
|Niveau=Moyen
 +
|Licence=by-sa
 +
|Projet date=2019-06-27
 +
|Nom humanlab=Humanlab_MHK
 +
}}
 
== 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.
 +
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.
 +
 +
[[File:roboto_final.jpg|left|800px]]
 +
 +
<br clear=all>
  
 
== Liens utiles ==
 
== Liens utiles ==
Ligne 8 : Ligne 35 :
 
* [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 ==
  
 
== Equipe (Porteur de projet et contributeurs) ==
 
== Equipe (Porteur de projet et contributeurs) ==
* Porteur de projet
+
* Porteur de projet :Sébastien Lutz
* Contributeurs
+
* Contributeurs :Yves Le chevalier, Delphine Bézier
* Animateur (coordinateur du projet)
+
* Fabmanager référent : Delphine Bézier
* Fabmanager référent
 
** Delphine Bézier ([mailto:delphine@myhumankit.org?Subject=%5Broboto%5D%20demande%20d%27information delphine@myhumankit.org])
 
* Responsable de documentation
 
  
 
== Matériel nécessaire ==
 
== Matériel nécessaire ==
====== matériel Robot conteur======
+
* [[Media:robotmaurebzh2vers.jpg|Bois de palette de récupération]]
 
+
* [[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]
[[File:roboto_final.jpg|left|800px]]
+
* [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]
----<br clear=all>
+
* vis et boulons à ajuster selon épaisseur du bois
 
+
* [[Media:batterie_12v_12ah.jpg|batterie 12volt 12AH]]
----
+
* [[Media:batterie_12v_12ah.jpg|Chargeur de batterie 12V]]
 
+
* [https://www.gotronic.fr/art-anneau-neopixel-12-leds-rgb-ada1643-22875.htm 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é.
===== bois de palette récupération =====
+
* [https://www.banggood.com/fr/10pcs-Rocker-Switchs-Copper-Boat-Rocker-Switch-2-Pin-Plastic-Button-ONOff-SPST-p-1276758.html?rmmds=search&ur_warehouse=CN Interrupteur pour le boitier 3d]
[[File:robotmaurebzh2vers.jpg|left|700px]]
+
* [https://www.banggood.com/fr/5Pcs-Mini-Round-Black-2-Pin-SPST-ON-OFF-Rocker-Switch-Button-p-946012.html?rmmds=search&cur_warehouse=CN Interrupteur pour le boitier électrique pour éviter une consommation de courant inutile]
 
+
* [https://www.banggood.com/fr/TAKANAWA-555-Metal-Gear-Motor-12V-24V-DC-Gear-Motor-p-995307.html?rmmds=myorder&cur_warehouse=CN moteur à démultiplication Takanawa motoréducteur 555 métallique 12v - 24v motoréducteur à courant continu]
----<br clear=all>
+
*[[Media:Arduino uno.jpg|carte arduino uno]]
 
+
*[[Media:Arduino-nano-microprocessor.jpg|carte arduino nano]]
----
+
*[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]]
dimension du châssis
+
*[NunChucky Wii Nunchuck I2C Breakout Adapter Adaptateur nunchuck]
[[File:robot plan de réalisation.pdf|left|700px]]
+
*[[Media:Hc05-1.jpg|hc05 x 2 : 2 modules bluethooth à configurer en maître et esclave
----<br clear=all>
+
*pile 9 volts x 1]]
[[File:robot plan de réalisation.pdf]]
+
*[[Media:Boitier-commande.png|boîtier commande avec LED à imprimer en 3D]], [[Media:Boitier-commande.png|Lien vers le fichier source]]. Le boitier est conçu pour ne pas arracher le fil de la nunchuk
 
+
*[[media:coffret_electrique.png|coffret électrique]]
----<br clear=all>
 
{{ :arduino:capture_robot.png?200 |}}
 
 
 
----<br clear=all>
 
 
 
----
 
 
 
===== plaque aluminium support moteur =====
 
[[File:Cotes_plaque_moteur_roboto.jpg|left|400px]]
 
 
 
fichier svg:
 
 
 
[[File:plaque-robot.zip]]
 
----<br clear=all>
 
 
 
----
 
 
 
===== roues robot =====
 
[[https://www.leroymerlin.fr/v3/p/produits/roue-fixe-sur-axe-diam-175-mm-e21495]]
 
 
 
[[File:roue_robot.png|400]]
 
 
 
----<br clear=all>
 
 
 
----
 
 
 
===== entretoise roues robot =====
 
[[https://www.amazon.fr/gp/product/B07D3H3YHK/ref=ppx_yo_dt_b_asin_title_o05_s00?ie=UTF8&psc=1]]
 
 
 
[[File:entretoise_roues_robot.png|left|]]
 
 
 
----<br clear=all>
 
 
 
----
 
 
 
===== vises et boulonnerie =====
 
a déterminer suivant la construction et l'épaisseur du bois
 
 
 
 
----
 
 
 
----
 
 
 
===== batterie 12volt 12AH =====
 
 
 
[[File:batterie_12v_12ah.jpg|left|]]
 
 
 
<note important>important</note> a la dimension pour l'emplacement
 
 
 
----
 
 
 
----
 
 
 
===== chargeur batterie 12volt =====
 
  a prévoir
 
 
 
  
----
+
<gallery mode="slideshow">
 +
File:robotmaurebzh2vers.jpg|Bois de palette
 +
File:Cotes_plaque_moteur_roboto.jpg| Plaque aluminium support moteur. Fichier source [[Media:plaque-robot.zip|SVG à télécharger]]
 +
File:roue_robot.png|Roues robot, [https://www.leroymerlin.fr/v3/p/produits/roue-fixe-sur-axe-diam-175-mm-e21495 Lien vers le fournisseur]
 +
File:entretoise_roues_robot.png|Entretoise roues robot, [https://www.amazon.fr/gp/product/B07D3H3YHK/ref=ppx_yo_dt_b_asin_title_o05_s00?ie=UTF8&psc=1 Lien vers le fournisseur]
 +
File:batterie_12v_12ah.jpg|Batterie 12V_12Ah
 +
File:Neopixel rond.jpg|Anneau de leds neopixels, [https://www.gotronic.fr/art-anneau-neopixel-12-leds-rgb-ada1643-22875.htm Lien vers le fournisseur]
 +
File:Interupteur_robot_boitier.jpg, [https://www.banggood.com/fr/10pcs-Rocker-Switchs-Copper-Boat-Rocker-Switch-2-Pin-Plastic-Button-ONOff-SPST-p-1276758.html?rmmds=search&cur_warehouse=CN Lien vers le fournisseur]
 +
File:none.jpg, [https://www.banggood.com/fr/5Pcs-Mini-Round-Black-2-Pin-SPST-ON-OFF-Rocker-Switch-Button-p-946012.html?rmmds=search&cur_warehouse=CN Lien vers le fournisseur]
 +
File:moteur-takanawa2.jpg|moteur à démultiplication Takanawa motoréducteur 555 métallique 12v - 24v motoréducteur à courant continu, [https://www.banggood.com/fr/TAKANAWA-555-Metal-Gear-Motor-12V-24V-DC-Gear-Motor-p-995307.html?rmmds=myorder&cur_warehouse=CN Lien vers le fournisseur]
 +
File:Controleur moteur robot.png|Contrôleur moteur, [https://www.robotshop.com/eu/fr/controleur-moteur-dc-2x15a.html Lien vers fournisseur]
 +
File:Arduino uno.jpg|Carte Arduino Uno
 +
File:Arduino-nano-microprocessor.jpg|Carte Arduino Nano
 +
File:Nunchuck2.jpg|Manette de wii filaire
 +
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:Pile_9v.jpg|Pile 9V
 +
File:Boitier-commande.png|Boitier de commande imprimé en 3D, [[Media:Boitier-commande.png|Lien vers le fichier source]]
 +
File:coffret_electrique.png|Coffret électrique. Bien vérifier les dimensions pour la batterie suivant l'emplacement. Découpe à l'intérieur pour faire de la place mais attention si vous voulez garder l’étanchéité, acheter un coffret électrique
  
----
+
</gallery>
  
===== 2 led ring12 =====
 
 
<note fichier 3d disponible plus bas>fichier 3d disponible plus bas</note>
 
fichier 3d disponible plus bas
 
{{ :robotchorus:neopixel_rond.jpg?200 |}}
 
sert pour les yeux
 
[[https://www.gotronic.fr/art-anneau-neopixel-12-leds-rgb-ada1643-22875.htm]]
 
 
 
===== interrupteur =====
 
pour le boitier 3d et pour le boitier électrique (pas de consommation inutile)
 
[[https://www.banggood.com/fr/10pcs-Rocker-Switchs-Copper-Boat-Rocker-Switch-2-Pin-Plastic-Button-ONOff-SPST-p-1276758.html?rmmds=search&cur_warehouse=CN]]
 
{{ :robotchorus:interupteur_robot_boitier.jpg?200 |}}
 
 
 
[[https://www.banggood.com/fr/5Pcs-Mini-Round-Black-2-Pin-SPST-ON-OFF-Rocker-Switch-Button-p-946012.html?rmmds=search&cur_warehouse=CN]]
 
{{ :robotchorus:interupteur_robot_boitier_electrique.jpg?200 |}}
 
 
===== moteur a démultiplication =====
 
description :
 
  
 +
===== Informations sur le moteur à démultiplication =====
 +
======Description======
 
Takanawa motoréducteur 555 métallique 12v - 24v motoréducteur à courant continu
 
Takanawa motoréducteur 555 métallique 12v - 24v motoréducteur à courant continu
  
spécification :
+
[https://www.banggood.com/fr/TAKANAWA-555-Metal-Gear-Motor-12V-24V-DC-Gear-Motor-p-995307.html?rmmds=myorder&cur_warehouse=CN Lien vers le fournisseur]
  
modèle dcmotor RS- 555  
+
======spécification======
tension appropriée 12v-24v
+
* modèle dcmotor RS- 555  
vitesse 10-20-40-80 tr / min
+
* tension appropriée 12v-24v
courant de charge 2.5a
+
* vitesse 10-20-40-80 tr / min
Vitesse à vide DC12V 3000-3500r / min
+
* courant de charge 2.5a
dc la 7000-8000r / min
+
* Vitesse à vide DC12V 3000-3500r / min
grandeur diamètre : 37 mm
+
* dc la 7000-8000r / min
longueur: 65 mm
+
* grandeur diamètre : 37 mm
poids 502g
+
* longueur: 65 mm
longueur de l'arbre 16mm
+
* poids 502g
 +
* longueur de l'arbre 16mm
  
 +
[[File:dimension_moteur.png|200px]]
 +
[[File: moteur-takanawa2.jpg|400 px]]
  
traits :
+
==Préparation du châssis==
- Haute vitesse , couple élevé , faible consommation d'énergie , à faible bruit
+
Se référer au schéma ci-dessous pour réaliser le chassis.
la structure -simple machine , facile d'entretien , longue durée de vie .
 
- Large utilisé pour la puissance de rideau de propulsion électrique , fours électriques , popper , réservoir de modèle
 
-REDUCER a la structure simple , une installation pratique , l'alimentation à haute efficacité et un fonctionnement fiable .
 
  
 +
[[File:robot plan de réalisation.pdf|left|900px]]
 +
<br clear=all>
  
[[https:/www.banggood.com/fr/TAKANAWA-555-Metal-Gear-Motor-12V-24V-DC-Gear-Motor-p-995307.html?rmmds=myorder&cur_warehouse=CN]]
+
Votre chassis devrait ressembler à cette image :)
{{ :robotchorus:dimension_moteur.png?200 |}}
 
{{ :robotchorus:moteur-takanawa2.jpg?400 |}}
 
  
===== carte arduino uno =====
+
[[File:Capture robot.PNG|600px]]
{{ :robotchorus:arduino_uno.jpg?200 |}}
+
<br clear=all>
  
+
==Les étapes pas à pas pour la partie électronique ==
===== carte arduino nano =====
+
Dans les étapes suivantes nous allons valider le fonctionnement de chaque brique utilisée pour ce projet  étape par étape :
{{ :robotchorus:arduino-nano-microprocessor.jpg?200 |}}
+
#  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===
 +
[http://wikilab.myhumankit.org/index.php?title=Projets:Communication_Bluetooth_HC_05 Suivre ce tutoriel]
  
===== Contoleur moteur =====
+
=== 2 : Implémentation de la manette Nunchuck dans le sketch maître===
[[https://www.robotshop.com/eu/fr/controleur-moteur-dc-2x15a.html]]
+
====Schema du montage maître====
{{ :robotchorus:controleur_moteur_robot.png?200 |}}
+
Circuit maitre : Arduino Nano+ Bluetooth HC 05 + Nunchuck +adaptateur Nunchuck
  
 +
====Code 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 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>
 +
//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
  
**note important>important</note> nunchuck**
+
//Télécharger la librarie wiichuck:https://www.arduinolibraries.info/libraries/wii-chuck
manette de wii filaire
 
{{ :robotchorus:nunchuck.jpg?200 |}}
 
achat dans boutique achat vente ou récupération
 
  
 +
//Sketch maitre à utiliser avec le sketch esclave
  
===== Adaptateur nunchuck =====
+
#include <WiiChuck.h>
[[https://www.robotshop.com/eu/fr/platine-deploiement-i2c-wii-nunchuck-solarbotics.html]]
+
#include <Wire.h>
 +
#include <SoftwareSerial.h>
  
{{ :robotchorus:adaptateur_nunchuk.png?200 |}}
+
SoftwareSerial ArduinoSlave(10, 11); // RX | TX //hc 05
  
 +
#define BROCHE_SCL  A4 //DATA  //nunchuck
 +
#define BROCHE_SDA  A5 //CLOCK //nunchuck
  
===== hc05 ===== 
+
int joyX;
(module bluethooth maitre exclave)
+
int joyY;
{{:robotchorus:hc05-1.jpg?200|}}{{ :robotchorus:hc05_2.jpg?200 |}}
+
boolean boutonC;
 +
boolean boutonZ;
  
=====pile 9volt=====
 
{{:robotchorus:pile_9v.jpg?200|}}
 
  
=====impression 3d:=====
 
(led et boitier commande)
 
  
<color #fff200>__conçue pour ne pas arracher le fil de la nunchuk__</color>
+
Nunchuck nunchuck(BROCHE_SDA, BROCHE_SCL);
{{ :arduino:stl_robot.zip |}}
 
{{ :robotchorus:boitier-commande.png?200 |}}
 
  
 +
//String answer;
 +
String msg;
  
===== coffret électrique =====
 
  
<note important>important</note>
 
bien vérifier les dimensions pour la batterie suivant l'emplacement
 
  
Découpe a l'intérieur pour faire de la place mais attention si vous voulez garder l’étanchéité
+
void setup(void)
{{ :robotchorus:coffret_electrique.png?200 |}}
+
{
disponible en magasin de bricolage
 
 
 
<color #ff7f27>schéma branchement Arduino batterie motor shield</color>
 
{{ :robotchorus:sscanner_18062613060_1_.pdf |<del>Barré</del>}}
 
 
 
====== Intro ======
 
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).
 
 
 
<note warning>Le key est connecté au 3.3V en mode AT</note>
 
 
 
{{:arduino:hc-05_slave_modeat_ok2.jpg?direct&600 |}}
 
 
 
 
 
===== Schéma Maître Mode AT =====
 
{{:arduino:hc-05_master_modeat.jpg?direct&600 |}}
 
 
 
 
 
====== Code ======
 
<note warning>Avant de téléverser le programme sur la carte arduino, débrancher le module HC-05 de l'alimentation</note>
 
  
<code c++>
 
#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.begin(38400);
 
   Serial.println("Enter AT commands:");
 
   Serial.println("Enter AT commands:");
   BTSerial.begin(38400);  // HC-05 default speed in AT command more
+
   ArduinoSlave.begin(38400);  // HC-05 default speed in AT command more
}
 
  
void loop()
+
   Serial.println("Starting Wiichuck Generic Controller Demo");
{
+
  nunchuck.begin();
   // Keep reading from HC-05 and send to Arduino Serial Monitor
+
   int i;
  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());
 
}
 
</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 maitre comme esclave=====
 
 
 
Reset to defaults:
 
<code>AT+ORGL</code>
 
 
 
Clear any paired devices:
 
<code>AT+RMAAD</code>
 
 
 
Set PIN:
 
<code>AT+PSWD=1234</code>
 
 
 
Slave mode:
 
<code>AT+ROLE=0</code>
 
 
 
Get the address of the device:
 
<code>AT+ADDR?</code>
 
 
 
Now that you have the address you can skip the AT+INQ and AT+RNAME? parts for configuring the master.
 
 
 
Turn off the module, disconnect key from 3.3V and turn back on.
 
<note warning>Eteindre la board, déconnecter le Key du 3.3V et rallumer la board</note>
 
 
 
==== Schema Esclave Mode COM====
 
{{:arduino:hc-05_slave_modecom_ok2.jpg?direct&600 |}}
 
 
 
=====Configuration du maitre =====
 
 
 
Now, to get the master to connect to the slave module you will need to find the address of the slave. **Make sure the slave module is powered up** and enter these commands into the master module:
 
 
 
Reset to defaults:
 
<code>AT+ORGL</code>
 
 
 
Clear any paired devices:
 
<code>AT+RMAAD</code>
 
 
 
Master mode:
 
<code>AT+ROLE=1</code>
 
 
 
Need to restart after changing role:
 
<code>AT+RESET</code>
 
 
 
Allow connecting to any address:
 
<code>AT+CMODE=1</code>
 
 
 
Inquire mode – Standard, stop after 5 devices found, (or) stop searching after 5 seconds:
 
<code>AT+INQM=0,5,5</code>
 
 
 
Set PIN, should be the same as the slave:
 
<code>AT+PSWD=1234</code>
 
 
 
Start SPP profile lib (needed to do any Bluetooth transmitting/receiving):
 
<code>AT+INIT</code>
 
Note: If it says Error:(17) then that means it’s already loaded, you can carry on.
 
  
Start searching:
 
<code>AT+INQ</code>
 
 
A short list of devices found should appear, one of them will be the slave module.
 
 
The format of the output is as follows:
 
<code>+INQ:address,type,signal</code>
 
 
Type can be ignored. The signal will be 7FFF since inquire is in standard mode, in RSSI mode you’ll get a load of the same device but with different signal levels which you don’t want at the moment.
 
 
Copy the address part of the devices found, for example 12:3:289431 and change the colons to commas – 12,3,289431. To find out which device is the slave module you will need to query each address for its name:
 
<code>AT+RNAME? <address></code>
 
 
Replace <address> with address of device like 12,3,289431
 
 
Response should be +RNAME:linvor if you’re using a normal slave module or +RNAME:HC05 if you’re using a master module as a slave.
 
 
Now you’ve got the address of the slave module you need to pair with it:
 
<code>AT+PAIR=<address>,<timeout></code>
 
Note: If you are going to make the master connect to your phone then you need to set the timeout long enough for you to type in the PIN.
 
 
Bind address:
 
<code>AT+BIND=<address></code>
 
 
Only allow connecting to the bound address:
 
<code>AT+CMODE=0</code>
 
 
And now to actually connect:
 
<code>AT+LINK=<address></code>
 
 
If successful the slave LED should be on solid and the master LED should have a heartbeat flash pattern.
 
 
The modules have now been configured! They should automatically connect to each other whenever possible.
 
 
A full list of commands for master modules can be found in the download below.
 
 
===== Sending data =====
 
 
Now, if you entered AT mode on the master module by connecting key to 3.3V before turning on the module, you will need to turn off the module, disconnect key (if not enough plug it to Ground) and turn it back on.
 
If you connected key while the module was on then all you need to do is disconnect key.
 
 
===== Maître Mode COM=====
 
{{:arduino:hc-05_master_modecom_ok.jpg?direct&600 |}}
 
 
 
===== Envoyer et recevoir des données en Mode COM=====
 
If you open up 2 serial consoles (2 different Arduino IDE) and have one open the COM port to the slave and the other open the COM port to the master you should be able to type in one and it will appear in the other console, if that worked you just need to plug them in to your projects!
 
 
 
====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 c++>
 
#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();
 
}
 
</code>
 
  
=== Sketch esclave ===
+
void readSerialPort() {
<code c++>
+
  while (Serial.available()) {
#include <SoftwareSerial.h>
+
    delay(100);
//SoftwareSerial ArduinoMaster(2,3);
+
    if (Serial.available() > 0) {
SoftwareSerial ArduinoMaster(10, 11); // RX | TX
+
      char c = Serial.read();  //gets one byte from serial buffer
String msg;
+
      msg += c; //makes the string readString //recoit les datas du nunchuck
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
 
 
   }
 
   }
 +
  Serial.flush();
 
}
 
}
ArduinoMaster.flush();
 
}
 
</code>
 
  
  
====== Photos montage ======
+
void loop()
{{:arduino:img_4656.jpg?direct&600 |}}
+
{
 +
//Lire les données reçues de la manette Nunchuck
 +
  nunchuck.readData();
  
{{:arduino:img_4654.jpg?direct&600 |}}
+
  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);
  
{{:arduino:img_4655.jpg?direct&600 |}}
+
//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(";");
  
======Schemas trouvés en ligne======
+
 
 +
  delay(200);
  
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=======
 
Most useful AT commands are
 
 
 
AT : Ceck the connection.
 
 
 
AT+NAME : See default name
 
 
 
AT+ADDR : see default address
 
 
 
AT+VERSION : See version
 
  
AT+UART : See baudrate
+
</pre>
  
AT+ROLE: See role of bt module(1=master/0=slave)
+
===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
  
AT+RESET : Reset and exit AT mode
+
[[File:Shema robot batterieetc .pdf |900px]]
  
AT+ORGL : Restore factory settings
+
====Explications des commandes de moteur pour les roues du robot====
 +
[[File:cmd_moteurs_robot_roues_V2_1.pdf|700px]]
  
AT+PSWD: see default password
+
====Code pour Arduino Uno dont le HC-05 est configuré en esclave====
 
+
Téléverser le sketch Roboto esclave sur la carte Arduino Uno.
====== 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
 
 
 
====== The TUTORIAL with all steps ======
 
 
 
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, check last link
 
 
 
http://blog.zakkemble.net/getting-bluetooth-modules-talking-to-each-other/
 
 
 
 
 
set pin enable to low (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 c++>
 
// 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;
 
    }
 
}
 
</code>
 
 
 
====== Librairie pour retrouver les données reçues ======
 
https://github.com/jlebunetel/WiiExpansion
 
 
 
====== code final ======
 
  
 +
<pre>
 
/*
 
/*
 
# Product: DC Motor Driver 2x15A_lite
 
# Product: DC Motor Driver 2x15A_lite
Ligne 605 : Ligne 264 :
 
   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
 
#include <SoftwareSerial.h>
 
#include <SoftwareSerial.h>
 
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 638 : Ligne 295 :
 
int var [4] = {0, 0, 0, 0};
 
int var [4] = {0, 0, 0, 0};
 
int k = 0;
 
int k = 0;
 
 
  
 
void setup() {
 
void setup() {
Ligne 655 : Ligne 310 :
 
   ArduinoMaster.begin(38400);
 
   ArduinoMaster.begin(38400);
 
}
 
}
 
 
 
 
 
  
 
void loop() {
 
void loop() {
Ligne 810 : Ligne 460 :
 
     }
 
     }
 
    
 
    
  /*  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 854 : Ligne 485 :
  
  
== Outils nécessaires ==
 
  
== Coût ==
+
</pre>
 +
 
 +
==Démonstration du prototype en action==
 +
Vidéo du chassis:
 +
 
 +
{{#ev:youtube|https://youtu.be/QYqTCIU2rLE}}
 +
 
  
== Délai estimé ==
+
Vidéo du projet final:
  
== Fichiers source ==
 
  
== Étapes de fabrication pas à pas ==
+
{{#ev:youtube|https://youtu.be/sAMOijOugbY}}
===Configuration du bluetooth===
 
  
== Durée de fabrication du prototype final ==
 
  
  
 
[[Category:Projets]]
 
[[Category:Projets]]
 +
[[Category:Réalisés]]
 +
[[Category:Mobilité]]

Version actuelle datée du 7 avril 2023 à 15:52

Roboto

Roboto final.jpg

Informations
Description Robot conteur sur roulettes télécommandé en bluetooth avec une manette Nunchuck pour les déplacements
Catégorie Hors handicap
Etat d'avancement Réalisés
Techniques arduino, moteur, bluetooth
Durée de fabrication de 16 à 32 h
Coût matériel Plus de 200 euros
Niveau Moyen
Licence by-sa
Date de création 2019-06-27
Équipe
Porteur de projet Sebprusa
Contributeurs Delphine, Sebprusa, Ylc
Fabmanager Delphine
Référent documentation Delphine
Nom humanlab Humanlab_MHK
Documentation
Statut de la documentation Complète
Relecture de la documentation Non vérifiée

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

Explications des commandes de moteur pour les roues du robot

Cmd moteurs robot roues V2 1.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: