There is few subjects with this NANO+HC-06.
A lot of questions, but few complete solution.
So after getting a lot of help here for years (thanks all!), I give back the job
One thing to know before all, the NANO is very limited so NANO+HC-06 will only work for very simple project. So, as always, start basic, validate, and perhaps add gradually some stuffs.
I explain all the steps here below (full information for anyone that should have never used BLYNK). Yes, itâs all french, google translator is your friend
Balance pour rapace.
Table des matiĂšres
- OBJECTIF
- MATERIEL
- PREPARATION DU PC
- PREPARATION DU GSM
- Programmation de lâarduino NANO
- Cablage Hardware
- Utilisation de la balance
1. OBJECTIF
- PesĂ©e dâun rapace <3kg / prĂ©cision 1g.
- Robuste, rĂ©sistant Ă la pluie et lâhumiditĂ©.
- Pas cher (<10⏠sur alibrol / <20⏠sur amazonbrol).
2. MATOS
-
Arduino NANO v3 (2âŹ)
-
Jauge de contrainte 3kg + module HX711 (2âŹ)
-
Module bluetooth /slave HC-06 (2âŹ)
-
De la gaine thermorétracatable / du tape isolant / un fer à souder / du fil électrique fin
-
Une boite plastique étanche (idéalement transparente pour voir facilement la LED de statut bluetooth)
-
Un cable USB pour lâalimentation (jâutilise une power-bank comme pour charger les GSM)
-
Qlq morceaux de bois / qlq visses
3. PREPARATION DU PC
- TĂ©lĂ©charger et installer le programme ARDUINO IDE pour programmer lâarduino NANO.
(prendre version Windows >7) -> https://www.arduino.cc/en/main/software - Ensuite, installer le driver Windows de lâarduino NANO (driver CH340 v3.4.2014.8).
Si il est bien installé, dans les propriétés Windows on peut voir :
Une fois installĂ©, on branche le NANO en USB pour vĂ©rifier quâil est bien reconnu. (pop-up en bas Ă droite de la barre des tĂąches « nouveau pĂ©riphĂ©rique reconnu »).
Un reboot windows est peut-ĂȘtre nĂ©cessaire.
- Installer les librairies (liens .zip ci-dessous) nécessaires :
ï§ Librairie BLYNK 0.6.1
https://www.transfernow.net/JJyBKT102020
ï§ Librairie HX711 (jauge de contrainte)
https://www.transfernow.net/v3zQ4e102020
Comment installer une librairie Ă partir dâun .zip ->
Do not unzip the downloaded library, leave it as is.
In the Arduino IDE, navigate to Sketch > Include Library > Add .ZIP Library. At the top of the drop down list, select the option to "Add .ZIP Libraryââ.
Return to the Sketch > Include Library menu. menu. You should now see the library at the bottom of the drop-down menu. It is ready to be used in your sketch. The zip file will have been expanded in the libraries folder in your Arduino sketches directory.
4. PREPARATION DU GSM
- Installer lâappli BLYNK sur le GSM (chercher dans GooglePlay android) https://play.google.com/store/apps/details?id=cc.blynk&hl=en_US
- ExĂ©cuter lâappli BLYNK et crĂ©er un compte BLYNK (avec mail valide/password)
https://blynk.io/en/getting-started
Ce compte gratuit confĂšre un peu dâĂ©nergie gratuite.
Cette Ă©nergie permet de crĂ©er lâinterface du projet (sous forme de « widget » Ă disposer sur le projet).
Un widget sert Ă afficher une valeur, un graphe, un bouton, une LED etc⊠pour crĂ©er lâinterface sur le GSM.
On commence par crĂ©er un nouveau projet dans BLYNK. On reçoit par mail un code unique qui devra ĂȘtre copiĂ©/collĂ© plus tard dans le code arduino (Il sert simplement Ă lier lâarduino au projet sur le GSM).
Ensuite on crĂ©e lâinterface sur le projet.
Dans ce projet, 3 widget suffisent (dont 2 indispensable, le dernier câest pour faire joli)
- 1 « bluetooth » (config BT)
- 1 « Labeled Value » (affichage du poids)
- 1 « Superchart » (joli graphe)
On configure les paramĂštres des widgets.
Le plus important est de sélectionner « INPUT » en V1, et le mode « PUSH ».
Le reste est purement « cosmétique ».
5. Programmation de lâarduino NANO
-Copier/coller le programme dans un nouveau projet du programme IDE.
-Changer le code dâauthentification du projet (recu par mail).
-Envoyer le programme dans lâarduino.
PS : pour envoyer le code, il faut que le module HC-06 bluetooth ne soit pas encore connectĂ© Ă lâarduino et alimentĂ© (si câest le cas, dĂ©connectez juste le VCC).
-Dans lâonglet OUTILS, sĂ©lectionner le bon modĂšle de carte « Arduino NANO », le bon processeur « AT328p (old bootloader) » et sĂ©lectionner le bon port « COM x » :
https://zupimages.net/viewer.php?id=20/40/ncwy.png
-Envoyer le code :
VĂ©rifier statut dâenvoi « succesfull » dans les messages en bas de lâĂ©cran.
Si câest OK, on peut passer au cĂąblage du hardware.
Ce programme est testĂ© et fonctionne Ă 100%. Si vous nâavez pas oubliĂ© de changer le code dâauthentification, aucun problĂšme ne peut venir de cette partie.
6. Cablage Hardware
Attention lors du cablage de bien penser Ă placer des gaines thermo sur les parties nues (connecteurs, rĂ©sistances), de dĂ©jĂ prĂ©parer la boite Ă©tanche pour y passer les cables AVANT soudure. Ces petits circuits nâaiment pas ĂȘtre soudĂ©/desoudĂ©/resoudĂ©âŠ
Attention également à bien protéger les 4 cables du capteur de poids(fragiles ! Ne pas tirer desus !).
Je les ai passé dans une gaine thermo et mis un gros coups de silicone sur la sortie des fils cÎté capteur une fois monté sur son chassis (pour les protéger des coups de griffes éventuels).
-Sur lâarduino NANO, on nâa quâune sortie 5V et une sortie GND. Il faut donc regrouper ces connections sur un mĂȘme cĂąble.
-Comme dĂ©jĂ dit, une fois le bluetooth HC-06 cĂąblĂ© et alimentĂ©, il nâest plus possible dâenvoyer le programme sur la NANO.
-Le pont diviseur 1Kohm/2Kohm sert Ă ramener les 5V de la NANO aux 3.3V requis sur le HC-06.
-Le RX du HC-06 est cĂąblĂ© au TX de la NANO, et inversement dans lâautre direction.
-Jâalimente la balance avec une power bank (chargeur GSM classique). Je soude donc sur la NANO un cable USB coupĂ© du cĂŽtĂ© micro-USB. Dâautres mĂ©thodes sont possibles.
En cas dâutilisation dâune pile 9V, il faut prĂ©voir un interrupteur en plus pour mettre sous tension.
7. Utilisation de la balance
A la premiÚre utilisation, il faut pairer le module bluetooth avec le téléphonne (code 1234).
Cela se fait soit par le menu de configuration du GSM, ou/et par le widget bluetooth du projet BLYNK.
Ensuite cette Ă©tape ne sera plus nĂ©cessaire. Il suffira alors pour utiliser la balance de la mettre sous tension, et ENSUITE lancer lâapplication BLYNK.
Une fois la balance mise sous tension, elle effectue son tarage automatique et la led rouge de la carte bluetooth clignote (=attente de connexion).
Une fois connectée, elle reste allumée en permanence.
VoilĂ il ne reste plus quâĂ lâutiliser.
Pour la mettre hors ou en tension, je branche simplement la power-bank USB. Pas dâinterrupteur, pas dâafficheur LCD, pas de problĂšme de cĂąblage superflus, moins de risque dâoxydation car tout est enfermĂ© dans une boite Ă©tanche. Seul un cĂąble en sort (et jâai bien siliconĂ© le passage).
CODE:
/*RELEASE V3.0 ->
*/
//V1.0 : Tare HX711, puis mesure HX711 pour jauge de 3kh max (moyenne sur 8, en enlevant les 6 extrĂȘmes) + dĂ©tection/protection d'erreurs HX711
//V2.0 : Ajout du bluetoot HC-06 pour envoi vers BLYNK (code appairage = 1234)
//V3.0 : Add simpleTimer Blynk / !! TX fiable max sur le cloud = 1 paramĂštre/1sec (40% / 41%)
//V3.1 : AllÚgement drastique du sketch pour éviter les instabilités "TOO BIG PACKET" (31% / 28%)
//Connecter HX711 Data en 5, CLK en 9 et VCC en 5V & E+/E-/A-/A+ vers jauge
//Connecter 'TX HC-06' en D3/RX (3), et 'RX HC-06' en en D2/TX (2) via un pont diviseur 1k/2k pour ramener les 5V en ~3.3V sur le 'RX HC-06' (le HC-06 fonctionne en 3.3V, pas 5V)
//<<LIBRARIES>>
//#define BLYNK_PRINT Serial //pour debug port console (désactivé aprÚs développement pour alléger le travail de l'arduino -> plus stable (toutes les commandes 'Serial.print' sont aussi commentées avec // dans le code plus bas
#include <BlynkSimpleSerialBLE.h> //librairie bluetooth BLYNK
#include <SoftwareSerial.h> //librairie série Tx-Rx
SoftwareSerial BTSerial(3, 2); //RX=3, TX=2 sur arduino
#define BLYNK_PRINT BTSerial
#define BLYNK_USE_DIRECT_CONNECT
#include <SimpleTimer.h> //librairie TIMER
SimpleTimer timer; //déclaration de l'objet TIMER
#include <HX711.h> //librairie master-bodge HX711 dans folder "sketchs in progress" (cfr preferences.txt)
/////////////////////////////////////////////////////////////////////////////////
//Auth Token for device 'Balance IMOTEP' : fake______208468bb5cejs25ea4d280a (recu par mail lors de la création du projet sur l'appli GSM BLYNK)
/////////////////////////////////////////////////////////////////////////////////
// DĂ©claration de l'objet HX711-> HX711 scale(DataPin, CLKPin, ADCRes)
// DataPin=D5 CLKPin=D9
HX711 scale(5, 9);
//Variables boucles
byte Count_TareErrorHX711 = 0; //compteur pour détection erreurs de TARE
byte WorkDone =0; //Check mesure et TX terminé avant de recommencer un cycle
//Variables poids
int Poids_long_HX711[8]; //variable de poids en grammes
void setup() { // la fonction 'setup' s'exécute une seule fois au démarrage de la balance
//__________FONCTION INITIALISATION des communications SERIAL______
BTSerial.begin(9600); // pour tx/rx via bluetooth (9600 is for HC-06. For HC-05 default speed is 38400)
//Serial.begin(9600); // pour debug port console (désactivé aprÚs développement pour alléger le travail de l'arduino -> plus stable
//Serial.println("HELLO");
//__________FONCTION TIMER BLYNK______
timer.setInterval(1010L, TimerBLYNK); // Config timer = 1TX Blynk toutes les 1sec max pour ne pas saturer le serveur cloud (freeze mesures)
//__________FONCTION DEMARRAGE BALANCE____
scale.power_up(); //boot du HX-711 balance
delay(100); // pause 0.1sec
while (scale.is_ready()==false) {/*Serial.println("HX?");*/delay(100);} //attente que la balance soit UP
scale.set_scale(717.0);// cette valeur (le gain de la balance) est trouvée par essai/erreur avec un poids connu (test avec un objet de 693g dans mon cas) => 600=815g 700=710g 710=700g 717=693g + test de poids sur toute la plage 0->1000g OK :)
//Serial.println("SCALE READY");
//__________FONCTION TARAGE______(8 mesures Ă 0.1 sec d'intervalle = 0.8sec)
for (int i=0 ; i < 8 ; i++){
Poids_long_HX711[i] = scale.get_units(3); //request poids HX711 brut full pesée
//Serial.print("HX");Serial.print(i+1);Serial.print("=");Serial.println(Poids_long_HX711[i]); //affichage 10 mesures intermédiaires en g. full pesée
if (Poids_long_HX711[i] <= 0) {Count_TareErrorHX711++;/*Serial.println("HX<0g?");*/} //si mesure=0g: HX711 vers NANO KO / si mesure <0g: HX711 vers ZEMIC KO
delay(100);
}
TRI_LONG(Poids_long_HX711,8); //appel de la fonction "tri" (voir tout en bas du code) pour exclure les 3+ grands et 3+ petits => moyenne calculée sur 2 mesures restantes
Poids_long_HX711[7] = (Poids_long_HX711[3]+Poids_long_HX711[4])/2; //moyenne brute en gr. des 2 mesures // Poids_long_HX711[7] sert de TARE
//__________FONCTION CONNECT BLYNK______
// Serial.println("Connect..");
// Blynk will work through Serial
// 9600 is for HC-06. For HC-05 default speed is 38400
// Do not read or write this serial manually in your sketch
Blynk.begin(BTSerial,"fake______208468bb5cejs25ea4d280a"); //Connection de la balance au serveur BLYNK
//Serial.println("Blynk.begin done");
}
void loop() { // la fonction 'loop' s'exécute non-stop en boucle aprÚs la fonction SETUP //Avec BLYNK toujours garder cette boucle la plus vide possible (c'est pourquoi on utilise la fonction TIMER pour placer le reste du code)
//__________JUST RUN BLYNK CONNECT / EMPTY LOOP______
while (Blynk.connected()==false) {Blynk.disconnect(); Blynk.connect();/*Serial.println("connect..");*/} //wait connection serveur//semble mieux reprendre la connexion que Blynk.run(); //reste true ~10sec qd la connexion est perdue -> cfr heartbeat? & la boucle tourne au ralentis (~15sec) qd =false -> cfr fonctions discoonnect/connect?
Blynk.run();
timer.run(); // timer des mesures/TX Blynk
//Serial.println(".");
}
void TimerBLYNK() { //fonction 'timer' = code exécuté 1x/sec
if (WorkDone == 0) { //Protection appel timer si fonction mesure/TX pas fini
WorkDone=1;
//____________________MESURE IMOTEP___________
Poids_long_HX711[0] = scale.get_units(1)- Poids_long_HX711[7]; //request poids HX711 brut - TARE // Poids_long_HX711[0] sert de mesure finale
//Serial.print("Poids=");Serial.print(Poids_long_MOY_HX711);Serial.println("g");
//____________________TX BLYNK___________ //Envoi vers serveur BLYNK->GSM (dans Virtual Pin 1)
if (Count_TareErrorHX711 < 3) {Blynk.virtualWrite(V1, Poids_long_HX711[0]);}
else {Blynk.virtualWrite(V1, "KO ");} //sauf si problÚme de tarage détecté au démarrage de la balance. Dans ce cas envoi de "KO"
WorkDone=0; //Fin de protection appel timer si fonction TimerBLYNK() n'est pas finie
}
}
void TRI_LONG(int a[], byte size) { //fonctions de tri "LONG", du plus petit au plus grand pour Ă©liminer les valeurs extrĂȘmes
for(int i=0; i<(size-1); i++) {
for(int o=0; o<(size-(i+1)); o++) {
if(a[o] > a[o+1]) {
long t = a[o];
a[o] = a[o+1];
a[o+1] = t;
}}}
}