• Post category:Node-Red
  • Post comments:0 commentaire
  • Post last modified:mars 15, 2022
  • Temps de lecture :13 min de lecture

Mesure ORP + PH avec un Arduino et Adapter 1130. Communication Serial au Raspberry affichage sur un Dashboard Node-RED *

1. Introduction :

Dans ce tutorial, vous allez découvrir comment mesurer une valeur ORP + PH avec un Arduino Uno et deux Adapter 1130.

Récupérer les valeurs dans Node-RED grâce à une communication Serial entre Arduino et Raspberry.

Et afficher ces valeurs dans un Dashboard.

 

2. Composants nécessaires :

  • Arduino Uno
  • Un Raspberry
  • Une Breadboard
  • 2 Adapter 1130
  • 1 Sonde PH
  • 1 Sonde ORP
  • Des fils de connexion

 

3. Prérequis d’installation du Raspberry :

  • Raspberry Pi OS
  • Node-RED
  • Node-RED-dashboard

 

4. Programmation de la partie Arduino :

Avant de commencer le câblage, on va commencer par injecter le programme dans votre Arduino qui va servir à récupérer les valeurs des cartes Adapter 1130 qui seront branchées sur l’entrée analogique A1 pour le PH et A2 pour ORP de votre Arduino.

La communication entre Arduino et le Raspberry se fera grâce à une vitesse de communication de 9600 Bauds.

On enverra ensuite ces valeurs grâce à des “Serial.print” encodés sous forme JSON pour pouvoir les récupérer dans Node-RED.

Voici le code à rentrer dans votre Arduino :

uint8_t pin_ph = A1;                  //Pin PH
float ph_sensor_value = 0.0;          // Valeur lu en volt(0 et 5)
float ph_value_float = 0.0;           // Valeur du Ph

uint8_t pin_redox = A2;               // Pin Redox 
float redox_sensor_value = 0.0;       // Valeur lu en volt(0 et 5)
float redox_value_float = 0.0;        // Valeur du Redox
float redox_offset = 0.0;             // Offset Redox

void setup()
{
    Serial.begin(9600);
}

void loop()
{
    ph_sensor_value = analogRead(pin_ph)* 5000.0 / 1023.0 / 1000.0; // form 0.0 to 5.0 V
    ph_value_float = (0.0178 * ph_sensor_value * 200.0) -1.889;       // Calcule du pH 
    if (ph_value_float < 0){                // On fixe le Ph entre 0 et 14
      ph_value_float = 0;
    }
    if (ph_value_float > 14){
      ph_value_float = 14;
    }
  
    redox_sensor_value = analogRead(pin_redox) * 5000.0 / 1023.0 / 1000.0;   // form 0.0 to 5.0 V
    redox_value_float = 0.9 * redox_value_float + 0.1 * ( ((2.5 - redox_sensor_value) / 1.037) * 1000.0 + redox_offset );     // from -2000 to 2000 mV

    Serial.print("{");
    Serial.print("\"PH\":");
    Serial.print(ph_value_float);
    Serial.print(",");
    Serial.print("\"ORP\":");
    Serial.print(redox_value_float);
    Serial.println("}");
    delay(1000);
}

 

5. Schéma et câblages :

Voici les câblages à effectuer sur votre Arduino. Il vous faudra aussi brancher un câble USB de liaison entre votre Arduino et Raspy pour la communication.

Il servira aussi d’alimentation de l’Arduino pour les tests (il sera préférable de passer sur une vraie alimentation par la suite pour obtenir une stabilité du 5V important dans la mesure).

 

6. Programmation de la partie Node-Red sur le Raspberry :

Pour commencer dans Node-Red, nous allons ajouter un bloc “serial in” disponible dans network.

 

Double cliquez dessus et allez sur le petit stylo pour le paramétrer.

 

Une fois dans les paramètres, dans Serial Port,  appuyez sur la loupe et sélectionnez le port USB ou est branché votre Arduino.

 

Dans settings, sélectionnez la vitesse de communication à 9600 bauds.

Une fois fini, cliquez sur “ADD” puis sur “Done

 

Nous allons ensuite ajouter un bloc “json” disponible dans parser.

 

Puis un bloc “fonction” disponible dans function.

 

Double cliquez dessus, nous allons le renommer “PH & ORP” et lui ajouter le code suivant dans Function :

var msg1 ={};
var msg2 ={};
msg1.payload = msg.payload.PH
msg2.payload = msg.payload.ORP

return [msg1,msg2];

 

Une fois tous les paramètres rentrés, il faudra choisir 2 Outputs tout en bas et cliquez sur “Done”.

Explication rapide du code :

A la sortie de notre bloc Json, les informations envoyées par l’Arduino ressemblent à ceci {“PH”:7.84,”ORP”:147.87}.

Il va donc falloir séparer les informations pour pouvoir les exploiter.

Je vais donc utiliser 2 variables “msg1” et “msg2” pour stocker les informations du PH et ORP que je récupère grâce à “msg.payload.PH” et “msg.payload.ORP”

Et grâce à “return [msg1,msg2];” je vais pourvoir retrouver ORP sur la sortie 1 et le PH sur la sortie 2 de mon bloc function.

 

 

Maintenant que nos informations PH et ORP sont triées grâce au bloc function, je vais mettre 2 “gauges” disponibles dans dashboard pour pouvoir afficher les valeurs.

 

Double cliquez sur la premiere du haut, nous allons la renommer dans Label “PH” et lui modifier son Range qui sera de “0” pour le min et “14” pour le max.

Une fois tous les paramètres rentrés, cliquez sur “Done”

 

Double cliquez sur la deuxième, nous allons le renommer dans Label “ORP” et lui modifier son Range qui sera de “0” pour le min et “1000” pour le max.

Et dans Units nous allons mettre “mV”

Une fois tous les paramètres rentrés, cliquez sur “Done”

 

Maintenant il va falloir créer une liaison entre les blocs en cliquant sur les carrés gris et en faisant glisser votre souris.

Cela permet de les faire communiquer ensemble.

Puis cliquez sur “Deploy” en haut à droite.

 

Maintenant nous allons configurer la partie Dashboard pour pouvoir afficher nos gauges sur l’interface Web.

Pour cela, cliquez sur l’icone Dashboard pour accéder au menu et cliquez sur  “+tab”

 

Cliquez ensuite sur “+group”

 

Maintenant nous allons retourner sur les bloc “gauge” : double-cliquez dessus et dans “Group”, sélectionnez [Tab1] Group 1

Pour le PH :

 

Pour ORP :

 

Vous devriez voir les 2 gauges s’afficher dans le Group 1 à droite.

Il ne vous reste plus qu’à “Deploy” votre projet et à aller voir le résultat en cliquant sur l’icône 2.

 

Vous devriez voir apparaître ceci :

 

7. Conclusion :

Si tout s’est bien passé, vos gauges vous permettent maintenant de voir la valeur de votre sonde ORP et PH.

Si cela ne fonctionne pas, vérifiez bien que vous avez bien sélectionné le bon port USB dans le bloc serial, car il peut afficher connected mais il n’est peut être pas forcement sur le port ou se situe l’Arduino.

 

Voici le code complet Node-Red que vous pouvez importer :

[{"id":"2b93a1b2.7d280e","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"697137f7.311228","type":"serial in","z":"2b93a1b2.7d280e","name":"","serial":"f7df7293.d49b1","x":110,"y":80,"wires":[["596396d6.fa5058"]]},{"id":"596396d6.fa5058","type":"json","z":"2b93a1b2.7d280e","name":"","property":"payload","action":"","pretty":false,"x":270,"y":80,"wires":[["9d9cfff4.3c024"]]},{"id":"9d9cfff4.3c024","type":"function","z":"2b93a1b2.7d280e","name":"PH & ORP","func":"var msg1 ={};\nvar msg2 ={};\nmsg1.payload = msg.payload.PH\nmsg2.payload = msg.payload.ORP\n\nreturn [msg1,msg2];\n","outputs":2,"noerr":0,"x":430,"y":80,"wires":[["6ee42e70.12553"],["ff32af59.17aeb"]]},{"id":"6ee42e70.12553","type":"ui_gauge","z":"2b93a1b2.7d280e","name":"","group":"8cf99ca3.dbab","order":1,"width":0,"height":0,"gtype":"gage","title":"PH","label":"","format":"{{value}}","min":0,"max":10,"colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":600,"y":60,"wires":[]},{"id":"ff32af59.17aeb","type":"ui_gauge","z":"2b93a1b2.7d280e","name":"","group":"8cf99ca3.dbab","order":0,"width":0,"height":0,"gtype":"gage","title":"ORP","label":"mV","format":"{{value}}","min":0,"max":"1000","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":600,"y":100,"wires":[]},{"id":"f7df7293.d49b1","type":"serial-port","z":"","serialport":"/dev/ttyUSB0","serialbaud":"9600","databits":"8","parity":"none","stopbits":"1","waitfor":"","dtr":"none","rts":"none","cts":"none","dsr":"none","newline":"\\n","bin":"false","out":"char","addchar":"","responsetimeout":"10000"},{"id":"8cf99ca3.dbab","type":"ui_group","name":"Group 1","tab":"fdefb6eb.b97538","order":1,"disp":true,"width":6},{"id":"fdefb6eb.b97538","type":"ui_tab","z":"","name":"Tab 1","icon":"dashboard","order":1,"disabled":false,"hidden":false}]

 

 


 

Laisser un commentaire