Difference between revisions of "Projets:Roboto"

From wikilab
Jump to: navigation, search
(Matériel nécessaire)
(Configuration des modules bluetooth HC05 en maitre et esclave)
 
(137 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
== 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 ==
Line 13: Line 21:
  
 
== 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
* 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======
 
  
 +
===== Bois de palette récupération =====
 +
[[File:robotmaurebzh2vers.jpg|left|700px]]
  
[[File:roboto_final.jpg|left|700px]]
+
<br clear=all>
  
===== bois de palette récupération =====
 
[[File:robotmaurebzh2vers.jpg|left|700px]]
 
  
dimension du châssis
+
 
{{ :arduino:robot_plan_de_realisation.pdf |}}
+
 
{{ :arduino:capture_robot.png?200 |}}
+
===== Plaque aluminium support moteur =====
===== plaque aluminium support moteur =====
+
[[File:Cotes_plaque_moteur_roboto.jpg|left|400px]]
{{:robotchorus:cotes_plaque_moteur.jpg?200|}}
+
<br clear=all>
fichier svg:
+
 
{{ :robotchorus:plaque-robot.zip |}}
+
Fichier svg:[[Media:plaque-robot.zip|Fichier à télécharger]]
  
 
===== roues robot =====
 
===== roues robot =====
[[https://www.leroymerlin.fr/v3/p/produits/roue-fixe-sur-axe-diam-175-mm-e21495]]
+
[https://www.leroymerlin.fr/v3/p/produits/roue-fixe-sur-axe-diam-175-mm-e21495 Lien vers le fournisseur]
  
{{ :robotchorus:roue_robot.png?200 |}}
+
[[File:roue_robot.png|400px]]
 +
 
 +
<br clear=all>
  
 
===== entretoise roues robot =====
 
===== entretoise roues robot =====
[[https://www.amazon.fr/gp/product/B07D3H3YHK/ref=ppx_yo_dt_b_asin_title_o05_s00?ie=UTF8&psc=1]]
+
[https://www.amazon.fr/gp/product/B07D3H3YHK/ref=ppx_yo_dt_b_asin_title_o05_s00?ie=UTF8&psc=1 Lien vers le fournisseur]
{{ :robotchorus:entretoise_roues_robot.png?200 |}}
 
  
===== vises et boulonnerie =====
+
[[File:entretoise_roues_robot.png|200px]]
a déterminer suivant la construction et l'épaisseur du bois
 
  
+
<br clear=all>
===== batterie 12volt 12AH =====
+
 
{{:robotchorus:batterie_12v_12ah.jpg?200|}}
+
===== Visses et boulonnerie =====
<note important>important</note> a la dimension pour l'emplacement
+
A ajuster suivant la construction et l'épaisseur du bois
  
===== chargeur batterie 12volt =====
+
===== batterie 12volt 12AH + Chargeur de batterie 12V =====
  a prévoir
 
  
 +
[[File:batterie_12v_12ah.jpg|200px]]
  
 
===== 2 led ring12 =====
 
===== 2 led ring12 =====
 +
Les anneaux de LED étaient prévus initialement pour faire des yeux multicolores mais n'ont finalement pas été implanté.
 +
Pour information voici la référence.
  
<note fichier 3d disponible plus bas>fichier 3d disponible plus bas</note>
+
[[File:Neopixel rond.jpg|300px]]
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]]
 
  
 +
[https://www.gotronic.fr/art-anneau-neopixel-12-leds-rgb-ada1643-22875.htm Lien vers le fournisseur]
  
===== interrupteur =====
+
Un support pour les anneauux a été modélisé en 3D, à retrouver dans les fichiers sources.
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 |}}
 
  
 +
===== Interrupteurs =====
 +
======Interrupteur pour le boitier 3d======
  
[[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]]
+
[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]
{{ :robotchorus:interupteur_robot_boitier_electrique.jpg?200 |}}
 
  
===== moteur a démultiplication =====
+
[[File:Interupteur_robot_boitier.jpg|Interrupteur_robot_boitier.jpg]]
description :
 
  
Takanawa motoréducteur 555 métallique 12v - 24v motoréducteur à courant continu
+
======Interrupteur pour le boitier électrique pour éviter une consommation de courant inutile======
 +
[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]
  
spécification :
+
===== moteur à démultiplication =====
 +
======Description======
  
modèle dcmotor RS- 555  
+
Takanawa motoréducteur 555 métallique 12v - 24v motoréducteur à courant continu
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
 
  
 +
======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
  
traits :
 
- Haute vitesse , couple élevé , faible consommation d'énergie , à faible bruit
 
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 .
 
  
 +
https:/www.banggood.com/fr/TAKANAWA-555-Metal-Gear-Motor-12V-24V-DC-Gear-Motor-p-995307.html?rmmds=myorder&cur_warehouse=CN
  
[[https:/www.banggood.com/fr/TAKANAWA-555-Metal-Gear-Motor-12V-24V-DC-Gear-Motor-p-995307.html?rmmds=myorder&cur_warehouse=CN]]
+
[[File:dimension_moteur.png|200px]]
{{ :robotchorus:dimension_moteur.png?200 |}}
+
[[File: moteur-takanawa2.jpg|400 px]]
{{ :robotchorus:moteur-takanawa2.jpg?400 |}}
 
  
 
===== carte arduino uno =====
 
===== carte arduino uno =====
{{ :robotchorus:arduino_uno.jpg?200 |}}
 
  
+
[[File:Arduino uno.jpg|200px]]
 +
 
 
===== carte arduino nano =====
 
===== carte arduino nano =====
{{ :robotchorus:arduino-nano-microprocessor.jpg?200 |}}
+
[[File:Arduino-nano-microprocessor.jpg|200px]]
 
 
  
 
===== Contoleur moteur =====
 
===== Contoleur moteur =====
[[https://www.robotshop.com/eu/fr/controleur-moteur-dc-2x15a.html]]
+
[https://www.robotshop.com/eu/fr/controleur-moteur-dc-2x15a.html Lien vers fournisseur]
{{ :robotchorus:controleur_moteur_robot.png?200 |}}
 
  
  
 +
[[File:Controleur moteur robot.png|200px]]
  
**note important>important</note> nunchuck**
+
=====manette de wii filaire =====
manette de wii filaire  
+
[[File:Nunchuck2.jpg|300px ]]
{{ :robotchorus:nunchuck.jpg?200 |}}
+
<br clear=all>
achat dans boutique achat vente ou récupération
 
 
 
  
 
===== Adaptateur nunchuck =====
 
===== Adaptateur nunchuck =====
[[https://www.robotshop.com/eu/fr/platine-deploiement-i2c-wii-nunchuck-solarbotics.html]]
+
[https://www.robotshop.com/eu/fr/platine-deploiement-i2c-wii-nunchuck-solarbotics.html Lien vers fournisseur]
  
{{ :robotchorus:adaptateur_nunchuk.png?200 |}}
+
[[File:Adaptateur_nunchuk.png|200px]]
 +
<br clear=all>
  
 +
===== hc05 :module bluethooth à configurer en maitre et exclave ===== 
  
===== hc05 ===== 
+
[[File:Hc05-1.jpg|200px]]
(module bluethooth maitre exclave)
+
[[File:Hc05_2.jpg|200px]]
{{:robotchorus:hc05-1.jpg?200|}}{{ :robotchorus:hc05_2.jpg?200 |}}
 
  
 
=====pile 9volt=====
 
=====pile 9volt=====
{{:robotchorus:pile_9v.jpg?200|}}
+
[[File:Pile_9v.jpg|200pix]]
 +
 
 +
=====impression 3d du boitier commande avec LED=====
  
=====impression 3d:=====
+
'''Le boitier est conçu pour ne pas arracher le fil de la nunchuk'''
(led et boitier commande)
 
  
<color #fff200>__conçue pour ne pas arracher le fil de la nunchuk__</color>
+
[[Media:stl_robot.zip]]
{{ :arduino:stl_robot.zip |}}
 
{{ :robotchorus:boitier-commande.png?200 |}}
 
  
 +
[[File:Boitier-commande.png|200px]]
  
 
===== coffret électrique =====  
 
===== coffret électrique =====  
  
<note important>important</note>
+
'''bien vérifier les dimensions pour la batterie suivant l'emplacement'''
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
 +
[[File:coffret_electrique.png|200px]]
 +
 
 +
 
 +
==Préparation du châssis==
 +
[[File:robot plan de réalisation.pdf|left|700px]]
 +
<br clear=all>
 +
 
 +
[[File:Capture robot.PNG|200px]]
 +
<br clear=all>
 +
 
 +
==Schéma branchement Arduino batterie motor shield==
 +
[[File:Shema robot batterieetc .pdf |200px]]
 +
 
 +
====== 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).
 +
 
 +
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 ======
 +
<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]]
  
Découpe a l'intérieur pour faire de la place mais attention si vous voulez garder l’étanchéité
+
======Schemas trouvés en ligne======
{{ :robotchorus:coffret_electrique.png?200 |}}
 
disponible en magasin de bricolage
 
  
<color #ff7f27>schéma branchement Arduino batterie motor shield</color>
+
https://www.gme.cz/data/attachments/dsh.772-148.2.pdf
{{ :robotchorus:sscanner_18062613060_1_.pdf |<del>Barré</del>}}
+
 
 +
{{: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>
 +
/*
 +
# 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
 +
*/
 +
//Bluetooth
 +
#include <SoftwareSerial.h>
 +
SoftwareSerial ArduinoMaster(10, 11); // RX | TX
 +
 
 +
//nunchuck+bluetooth
 +
int joyX;
 +
int joyY;
 +
int joyC;
 +
int joyZ;
 +
 
 +
int valeurs_joystick[4] = {0, 0, 0, 0};
 +
int valeurs_joystick_precedent[4] = {0, 0, 0, 0};
 +
 
 +
//DC Motor Driver pins
 +
int VMotD = 5;    //VMotD Speed Control  mot droit
 +
int VMotG = 6;    //VMotG Speed Control mot gauche
 +
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;   
 +
    }
 +
 
 +
  /*  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;
 +
    }
 +
    */
 +
    }
 +
 
 +
  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);
 +
}
 +
</pre>
 +
</code>
  
 
== Outils nécessaires ==
 
== Outils nécessaires ==
Line 168: Line 837:
  
 
== Étapes de fabrication pas à pas ==
 
== Étapes de fabrication pas à pas ==
===Configuration du bluetooth===
+
===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]]
 +
 
 +
===Téléverser le code final pour le module maitre===
 +
 
 +
 
 +
===Téléverser le code final pour le module esclave===
  
 
== Durée de fabrication du prototype final ==
 
== Durée de fabrication du prototype final ==
 
  
 
[[Category:Projets]]
 
[[Category:Projets]]
 +
[[Category:Réalisés]]
 +
[[Category:Mobilité]]

Latest revision as of 03:28, 29 November 2019

Contents

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

Cahier des charges

Analyse de l'existant

Equipe (Porteur de projet et contributeurs)

  • Porteur de projet :Sébastien Lutz
  • Contributeurs :Yves Le chevalier
  • Fabmanager référent : Delphine Bézier

Matériel nécessaire

Bois de palette récupération
Robotmaurebzh2vers.jpg




Plaque aluminium support moteur
Cotes plaque moteur roboto.jpg


Fichier svg:Fichier à télécharger

roues robot

Lien vers le fournisseur

Roue robot.png


entretoise roues robot

Lien vers le fournisseur

Entretoise roues robot.png


Visses et boulonnerie

A ajuster suivant la construction et l'épaisseur du bois

batterie 12volt 12AH + Chargeur de batterie 12V

Batterie 12v 12ah.jpg

2 led ring12

Les anneaux de LED étaient prévus initialement pour faire des yeux multicolores mais n'ont finalement pas été implanté. Pour information voici la référence.

Neopixel rond.jpg

Lien vers le fournisseur

Un support pour les anneauux a été modélisé en 3D, à retrouver dans les fichiers sources.

Interrupteurs
Interrupteur pour le boitier 3d

Lien vers le fournisseur

Interrupteur_robot_boitier.jpg

Interrupteur pour le boitier électrique pour éviter une consommation de courant inutile

Lien vers le fournisseur

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


https:/www.banggood.com/fr/TAKANAWA-555-Metal-Gear-Motor-12V-24V-DC-Gear-Motor-p-995307.html?rmmds=myorder&cur_warehouse=CN

Dimension moteur.png Moteur-takanawa2.jpg

carte arduino uno

Arduino uno.jpg

carte arduino nano

Arduino-nano-microprocessor.jpg

Contoleur moteur

Lien vers fournisseur


Controleur moteur robot.png

manette de wii filaire

Nunchuck2.jpg

Adaptateur nunchuck

Lien vers fournisseur

Adaptateur nunchuk.png

hc05 :module bluethooth à configurer en maitre et exclave

Hc05-1.jpg Hc05 2.jpg

pile 9volt

200pix

impression 3d du boitier commande avec LED

Le boitier est conçu pour ne pas arracher le fil de la nunchuk

Media:stl_robot.zip

Boitier-commande.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 Coffret electrique.png


Préparation du châssis

Robot plan de réalisation.pdf


Capture robot.PNG

Schéma branchement Arduino batterie motor shield

Shema robot batterieetc .pdf

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).

Le key est connecté au 3.3V en mode AT

Hc-05 master modeat.jpg

Schéma Maître Mode AT

Hc-05 master modeat.jpg

Code

Avant de téléverser le programme sur la carte arduino, débrancher le module HC-05 de l'alimentation

#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());
}

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: AT+ORGL

Effacer les appareils apairés/Clear any paired devices: AT+RMAAD

Configurer le mot de passe/Set PIN: AT+PSWD=1234

Assigner le mode esclave/Slave mode: AT+ROLE=0

récupérer l'adresse du module/Get the address of the device: AT+ADDR?

Une fois l'adresse récupérée, on peut configurer le maître.

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.

Schema Esclave Mode COM

Hc-05 slave modecom ok2.jpg


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

AT+ORGL


  • Effacer les appareils appairés

AT+RMAAD


  • Assigner le rôle de maître

AT+ROLE=1


  • Besoin de redémarrer après le changement de rôle

AT+RESET


  • Autoriser la connection à n'importe quelle adresse

AT+CMODE=1


  • Mode recherche - Standard, arrêter après 5 appareils trouvés, (ou) arrêter de chercher après 5 secondes :

AT+INQM=0,5,5


  • Assigner un mot de passe, doit être identique au module esclave:

AT+PSWD=1234


  • Lancer le profile SPP (nécessaire pour n'importe quel émission/réception bluetooth:

AT+INIT Note: Si cela dit Erreur:(17), cela signifie que c'est déjà chargé, dans ce cas poursuivre.


  • Commencer à chercher :

AT+INQ

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: +INQ:address,type,signal

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:

AT+RNAME? <address>

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 :

AT+PAIR=<address>,<timeout> 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 :

AT+BIND=<address>


  • Autoriser seulement à se connecter à l'adresse liée :

AT+CMODE=0


  • Et se connecter maintenant:

AT+LINK=<address>

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

Hc-05 slave modecom ok2.jpg

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

#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();
}

Sketch esclave

#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();
}


Photos montage

600px

600px

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, 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

// 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;
    }
}

Librairie pour retrouver les données reçues

https://github.com/jlebunetel/WiiExpansion

code final

/*
# 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
*/
//Bluetooth
#include <SoftwareSerial.h>
SoftwareSerial ArduinoMaster(10, 11); // RX | TX

//nunchuck+bluetooth
int joyX;
int joyY;
int joyC;
int joyZ;

int valeurs_joystick[4] = {0, 0, 0, 0};
int valeurs_joystick_precedent[4] = {0, 0, 0, 0};

//DC Motor Driver pins
int VMotD = 5;     //VMotD Speed Control  mot droit
int VMotG = 6;     //VMotG Speed Control mot gauche
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;     
    }
  
  /*  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;
    }
    */
    }

  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);
}

Outils nécessaires

Coût

Délai estimé

Fichiers source

Étapes de fabrication pas à pas

Préparation du chassis

Configuration des modules bluetooth HC05 en maitre et esclave

[Suivre ce tutoriel]

Téléverser le code final pour le module maitre

Téléverser le code final pour le module esclave

Durée de fabrication du prototype final