Un branche intéressante de la robotique est d’ajouter de l’intelligence à des objets de tous les jours. Ce domaine est appelé domotique pour les maisons et IoT (internet des choses) pour les objets connectés. L’un des objectifs principaux de la domotique est de surveiller ce qu’il se passe dans une maison ou un appartement afin de pouvoir y répondre de manière adéquate. Dans ce premier projet de Domotique nous allons surveiller al température d’une pièce et envoyer les mesures à une application Smartphone. C’est un projet simple dans lequel nous utilisons la communication série avec le module Bluetooth, un capteur de température et une application Smartphone créée avec App Inventor 2.
Matériel
- Smartphone
- Arduino UNO
- 5V Batterie
- Capteur de temperature LM35
- Bluetooth module HC-06
Schéma de câblage
N.B.: Le module présenté sur le schéma est le module HC-05 mais les broches ont les mêmes fonctions que sur le HC-06.
Code
Dans la spécification technique du capteur LM35, nous trouvons la plage de mesure de température et la règle de conversion entre température et tension. Une fois la tension en sortie du capteur mesurée et converti en température, ces données sont envoyées au Smartphone par Bluetooth. Pour envoyer plusieurs données par le port série, une technique consiste concaténer ces données dans une chaine de caractères (String) avec un séparateur prédéfini (« x ») pour récupérer les données plus simplement.
#include <SoftwareSerial.h> SoftwareSerial HC06(2,3); // Constants #define DELAY 1000 // Delay between two measurements in ms // Parameters const int sensorPin = A0; // Pin connected to sensor // Variables float voltage, temperature; void setup(void) { Serial.begin(9600); HC06.begin(9600); } void loop(void) { voltage= analogRead(sensorPin) * (5.0 / 1023.0); // Convert digital value to voltage temperature=100*voltage; // conversion from V to °C Serial.print("Sensor reading = "); Serial.println(temperature); // the temperature reading // Send voltage and temperature value to app HC06.print(voltage); HC06.print("x"); HC06.print(temperature); delay(DELAY); }
App de mesure de température
Nous créons une simple application sur le site App Inventor 2. Les données du capteurs (tension et température) sont envoyées sous forme d’un String à une application Android. Pour récupérer, les informations contenues dans le String nous devons séparer le texte en fonction du séparateur prédéfini « x ». Nous obtenons alors une liste de deux éléments contenant les deux données que nous pouvons afficher dans les zones de texte de l’application.
Le module Bluetooth doit être enregistré dans la liste des appareils Bluetooth de votre téléphone. Le module Bluetooth HC-05 ou HC-06 doit être appairé au téléphone au moins une fois avant d’utiliser l’application.
Vous pouvez télécharger le projet aia ici.
Si vous souhaitez de plus amples informations sur ce projet ou si vous pensez qu’il manque quelque chose, n’hésitez pas à laisser un commentaire ou à nous contacter.
Bonsoir,
Merci pour ce tuto
J’ai réalisé ton projet d’affichage de la température et du voltage.
ça fonctionne , mais j’ai un message en plein milieu de mon écran qui m’indique que le bluetooth n’est pas connecté erreur 5xx
pouvez vous m’aider à supprimer ce message
Merci
Tarek
Bonjour,
Merci pour votre message. Vous pouvez essayer d’ignorer l’erreur en utilisant le block.
Screen.ErrorOccurred
a quoi correspond » HC06.print(« x »); » je n’ai pas saisi ce que sait ! et je n’ai pas compris aussi cette ligne voltage= analogRead(sensorPin) * (5.0 / 1023.0);
temperature=100*voltage; desolé je suis débutant et j’aimerais comprendre Cordialement
Bonjour,
Merci pour votre message.
Dans ce tuto, on cherche à envoyer deux valeurs distinctes (tension et température). Pour pouvoir différencier plus facilement ces deux valeurs dans l’application Android on utilise la lettre « x » mais il est possible d’utiliser d’autres caractères.
Par exemple, si on envoie « 1×100 », on récupère voltage=1 et température=100.
Pour ce qui est de la ligne de calcul, on reçoit de l’Arduino une valeur analogique entre 0 et 1023 qui ne correspond à la lecture d’une tension de 0 à 5V par l’Arduino. Pour obtenir une valeur physique, nous utilisons les caractéristiques du capteur pour convertir cette valeur analogique en tension (voltage), qui est la sortie physique du capteur, puis en température, qui est la valeur mesurée par le capteur.
En espérant que ce soit plus clair.
Bonjour,
J’aimerais savoir comment vous avez fait pour écrire « Température LM35(°C) » et « 0.0 » .
Merci d’avance.
Bonjour, ce sont simplement des « labels » dans App inventor 2 et « 0.0 » est l’affichage des valeurs. N’hésitez pas si vous avez besoin d’aide.
Bonjour, j’ai tout fait comme indiqué dans le tuto mais le « 0.0 » ne bouge pas lorsque je mets le capteur sur la carte et que je mets tout en route. Pourtant tout semble bien fonctionner et bien branché.
Merci
Bonjour, il peut y avoir plusieurs raison à cela. Est-ce que le téléphone se connecte correctement au module Bluetooth HC-06? Quelle est la valeur du baudrate du module? Pouvez-vous envoyer les valeurs du capteur sur le moniteur série?
Bonjour,
Est-ce que la communication bluetooth fonctionnent pareillement avec le module HC05?
Sinon très bon tuto!
Bonjour,
Merci pour votre commentaire. Oui ce tuto peut s’appliquer au module HC-05. Bonne remarque.
Il faut simplement s’assurer que la configuration du HC-05 soit en mode esclave.
Bonjour ,
j’ai une qu’il faut que j’envoi des informations type pourcentage de batterie ou température du téléphone (que j’ai déjà ) sur un arduino via un module bluetooth mais je ne comprend pas comment faire le programme
Merci de votre réponse
Bonjour,
pour cela il vous suffit d’utiliser le block « call bluetoothClient1 Send text » pour envoyer des données du téléphone à la carte Arduino.
Côté Arduino, vous devez lire les valeurs envoyées via le port série.
N’hésitez pas à me dire si cela vous aide ou si vous avez besoin d’autres informations.
peut t’on le faire pour recevoir des information de deux capteurs à ultrason?
Bien sûr. Il suffit de remplacer la valeur de tension du capteur par la valeur du premier capteur à ultrasons et la valeur de température par la valeur du second capteur à ultrasons
Bonjour, j’aurai aimer savoir si votre manipulation étais possible avec un capteur d’humidité.
De plus est-il possible de faire communiquer les informations entre 2 HC au lieu du téléphone ?
Bonjour, oui c’est possible. Pour communiquer entre deux module Bluetooth, il vous faut un module « Maître », type HC-05, et un module Esclave, type HC-06.
Bonjour,
J’aimerai savoir comment vous avez réalisé l’application ? Comment avez vous organisé vos blocs… Auriez vous une capture de la face « desginer » de l’appli?
Merci !
Bonjour, j’ai rajouté une impression écran du design dans l’article.
Merci pur l’ajout de l’impression écran ! j’arrive désormais à faire l’application, tout fonctionne, le capteur affiche les bonnes valeurs dans le moniteur série, cependant sur le téléphone les « 0.0 » ne bougent pas alors que le bluetooth est bien connecté… que faire ?
Merci d’avance
Quel est la vitesse de communication du module HC-06? Est-ce que les commandes AT fonctionnent?
Bonjour, Merci pour le tuto
J’ai un seul probleme l’application
Il affiche plus de 5 digits au lieu de 2
Par exemple le tempartature est 21.56 mais a l’app il affiche 21.540.156
Mais dans le moniteur serie il affiche la temperature correcte
Voila la config au app inventor : https://ibb.co/svSZzqB
Merci
Bonjour, quel code utilisez-vous au niveau de l’Arduino?
Bonjour, super tuto ! J’aimerais envoyer de l’arduino à l’appli des valeurs de capteurs mais aussi du « texte » par exemple afficher « hors tension » quand j’ai ma tension à 0 …
J’ai bien l’affichage du texte coté arduino, mais pas sur l’appli 🙁
Y a t-il un bloc à ajouter sur appInventor ou une instruction coté arduino?
Bonjour,
Merci pour le commentaire. La valeur qui est envoyée de l’Arduino et affichée par le téléphone est un texte. Donc il est possible de remplacer une des valeurs par le texte désiré ex: »125xhors tension ».
Le plus simple est peut-être d’envoyer une valeur (ex: 125×12) et en fonction d’afficher un texte particulier (ex: Si a<12 : hors tension, Si a>=12 : en tension, si a>100 : sur tension). Dans ce cas, il faut rajouter les blocs dans App inventor 2 qui gèreront le texte.
Bonjour,
Peut-on réaliser la même chose mais avec un esp8266 a la place du hc- 05
Bonjour, Oui bien sûr. Il faut utiliser une librairie et les broches compatibles avec esp8266 pour SoftwareSerial.
Bonjour,
Super tuto.
Ça marche…. Presque… Je ne reçois qu’une seule valeur… Une seule fois… À la connexion BT… Ensuite elle est figée… Pour avoir une 2eme valeur il faut que je déconnecte puis reconnecte…??
Pb de réglage d’horloge ? Ou est que c’est parce que j’ai utilisé un HC 05 ?
Merci
Bonjour, merci pour le commentaire. Quel réglage d’horloge utilisez-vous? Si le HC05 est configuré en module esclave, il ne devrait pas y avoir de différence avec le HC06.
comment faire quand il y a plusieur dispositifs bluetooth dans l’environnement ?
merci
Bonjour,
Si je comprends bien, vous souhaitez récupérer sur l’application des informations provenant de différents modules Bluetooth.
Il semble que l’application créée sous App inventor 2 puisse se connecter à deux ou trois appareils Bluetooth en créant des objets BluetoothClient pour chaque appareil. Cette solution n’a pas été testée et peut être limitée par la version du téléphone.
Combien de dispositif avez-vous?
bonjour,
merci beaucoup pour ta création une petite question si je veux lire en meme temps 4 sorties et doit repeter ton paragraphe de code 4 fois et ca va marcher ?
Bonjour,
merci pour le commentaire.
Pour lire quatre valeurs, il faut modifier les lignes de code comme suit:
HC06.print(val0);
HC06.print(« x »);
HC06.print(val1);
HC06.print(« x »);
HC06.print(val2);
HC06.print(« x »);
HC06.print(val3);
et rajouter les blocks correspondant dans App Inventor
merci pour votre réponse. et bien pouvez vous me dire quelle chiffre je dois rentrer au bout du bloc (lenght of list get global data > (X)) vue que j’en ai du coup 4 je suis un peu perdu.
merci d’avance
On veut récupérer 4 valeurs, il faut donc que la liste contienne au moins 4 valeurs (Longueur de list >=4)
je teste comme ca car j’aime bien avoir le voltage aussi affiché
http://ai2.appinventor.mit.edu/#5884278415687680
salut désolé encore de te demander mais je comprend pas pk mon programme ne marche pas;
#include
#include
#include
SoftwareSerial Hc06( uint8_t A0, uint8_t A1, uint8_t A2, uint8_t A3);
Adafruit_MAX31865 thermo0= Adafruit_MAX31865(10,13,12,1);
Adafruit_MAX31865 thermo1= Adafruit_MAX31865(9,13,12,11);
Adafruit_MAX31865 thermo2= Adafruit_MAX31865(8,13,12,11);
Adafruit_MAX31865 thermo3= Adafruit_MAX31865(7,13,12,11);
// Constants
#define DELAY 1000
#define RREF 430.0
#define RNOMINAL 100.0
void setup(void) {
Serial.begin(9600);
Hc06.begin(9600);
thermo0.begin(MAX31865_4WIRE);
thermo1.begin(MAX31865_4WIRE);
thermo2.begin(MAX31865_4WIRE);
thermo3.begin(MAX31865_4WIRE);
}
void loop(void) {
Serial.print(« Temperature0 = « );
Serial.println(thermo0.temperature(RNOMINAL,430.0));
Serial.print(« Temperature1 = « );
Serial.println(thermo1.temperature(RNOMINAL,430.0));
Serial.print(« Temperature2 = « );
Serial.println(thermo2.temperature(RNOMINAL,430.0));
Serial.print(« Temperature3 = « );
Serial.println(thermo3.temperature(RNOMINAL,430.0));
Hc06.print(« Temperature0 = « );
Hc06.print(« Temperature1 = « );
Hc06.print(« Temperature2 = « );
Hc06.print(« Temperature3 = « );
delay(DELAY);
}
Bonjour, ce n’est pas comme ça qu’on initialise le module HC06
SoftwareSerial Hc06( Rx, Tx);
Saludos,se puede usar otro arduino, como arduino pro micro.
Si, claro. si puede usar comunicación en serie, puede usar cualquier microcontrolador
Svp comment peut faire une application sur appinventor qui a la temperature et le temp comme parammetre pour commander un four electrique a distance ?
Le mieux serait de combiner ce tutoriel avec ce projet afin de créer un programme et une application pour lire et envoyer des paramètres à l’Arduino
bonjour, j’ai un petit problème tous est bien branché mais je ne trouve pas le Bluetooth avec mon téléphone.
voici les liens de code de l’arduino, l’application, l’arduino monté :
https://www.noelshack.com/2020-34-6-1598114700-truc.png
https://www.noelshack.com/2020-34-6-1598114701-code.png
https://www.noelshack.com/2020-34-6-1598114848-arduino.jpg
Merci de votre aide.
Iruushi
Bonjour, avant que le module Bluetooth n’apparaisse dans la liste de l’application, il faut l’appairer dans le menu des appareils Bluetooth du téléphone en débranchant les câbles Tx et Rx.
Est-ce que cela résout votre problème?
Bonjour, le problème n’a pas était résolut. faut-il téleverser le programme puis enlever le Tx et Rx ?
Bonjour, il faut juste que le module soit alimenté mais il ne faut pas que des informations soit envoyées sur les broches Rx/Tx
Est-ce que le module HC-05 ou HC-06 est reconnu par votre ordinateur?
Bonjour, ça marche maintenant les température sont bizarre il nous affiche 0.49°C ou 6 °C
Qu’affiche t-il dans le moniteur série?
Hello,
J’essaie aussi de récupérer les valeurs de mes 3 capteurs (MyoWare), sur une application Android bateau, mais ça ne fonctionne pas 🙁
Voici mon code :
https://pastebin.com/hEbAm9DP
Et mon application MIT (screen & blocks) :
https://www.casimages.com/i/20101508032968160.png.html
https://www.casimages.com/i/201015080329168705.png.html
https://www.casimages.com/i/201015080329439530.png.html
Pb : connexion bluetooth : OK
mais aucune remontée des capteurs (dont les valeurs évoluent bien car je trace ça dans le serial) sur l’application android….
Une idée ?
Je pense qu’il manque l’objet Clock dans app inventor. Est-ce que cela résout le problème?
Bonjour,
J’ai fait un détecteur d’eau pour mon ballon d’eau chaude et je souhaite envoyer une alarme sur ma tablette,lorsque cette dernière passe à l’état haut .
comment puis je faire ?
Bonjour,
Il est possible de créer une application pour tablette avec App Inventor qui affiche une notification. Vous pouvez soit la connecter en Wifi soit la connecter en Bluetooth (portée moins importante)
Vous pouvez aussi utiliser un module GSM/SIM pour envoyer un message.
Si le détecteur d’eau est connecté au wifi, vous pouvez aussi envoyer un email d’alarme.
Bonjour, j’ai un projet de BTS et votre programme est très complet.
J’ai toute fois quelque question a vous poser.
Serait t’il possible de me contacter par mail?
j.projet2.btssn@gmail.com
Je vous remercie.
Bonjour, le mieux est de poser votre question en commentaire pour que ça profite a tout le monde
Bonjour,
Pour un projet semblable, j’utilise le même code que vous, mais aucune valeur ne défile. Pourriez-vous me dire à quoi cela pourrait être dû?
Merci beaucoup!
Bonjour,
il me faudrait plus de détail. code, schéma de cablage, debug du moniteur série?
Bonjour, merci pour votre réponse! Je constate en fait qu’AppInventor prend l’information Serial.print, et non hc05.print, donc cela fonctionne à condition que j’écrive Serial.print.
Voici le bout de code Arduino que j’utilise pour le bluetooth:
while (hc05.available()){
message=hc05.readString();
Serial.print(message);
}
while(Serial.available()){
message=Serial.readString();
hc05.write(Serial.read());
}
…
Serial.print(p);
Serial.print(« x »);
Serial.print (e);
//ne fonctionne pas si je mets
//hc05.print(p);
//hc05.print(« x »);
//hc05.write(e);
Si hc05.print ne fonctionne pas c’est que tu utilises la sortie Serial (pins 0,1) et non pas softwareserial (pins 2,3).
D’accord! Donc je peux soit brancher le module sur les pins 0,1 et utiliser Serial.print(), ou bien le brancher sur 2,3 et utiliser hc05.print()?
Ou bien y a-t-il une une différence?
Oui, les deux sont possibles. Pour utiliser les broches 2 et 3, il faut utiliser la librairie SoftwareSerial