Input Registers
Objectif : grâce au tableau de bord sous Node-RED :
obtenir la température et la luminosité
Principe
Il est nécessaire de compléter le programme Arduino pour lire la température et la luminosité sur les broches analogiques. Il faudra également programmer deux Input Registers pour que l'esclave (carte Uno) envoie les valeurs de la température et de la luminosité lorsque Node-RED fera une requête de type Read Input Registers.
Température
Méthode :
Le tableau suivant résume les différentes fonctions Modbus (Library methods) :
Tableau des fonctions Modbus utilisables dans Arduino

On a déjà utilisé dans notre programme les fonctions suviantes :
addCoil(); // ajout d'un Coil
coil(); // lecture d'un Coil
addIsts(); // ajout d'un Discrete Input
setIsts(); // écriture d'une valeur dans un Discrete Input
Pour la température et la luminosité il faut utiliser de manière similaire les fonctions :
addIreg(); // ajout d'un Input Register
setIreg(); // écriture d'une valeur dans un Input Register
Le code Arduino suivant permet de créer et de mettre à jour un registre de type Input Register :
const byte SensorPin = A0;
const int SensorIreg = 0;
long ts;
void setup(){
...
pinMode(SensorPin, INPUT);
mb.addIreg (SensorIreg);
...
}
void loop(){
...
// mise à jour du registre Input Register toutes les secondesif(millis() > ts + 1000){
mb.setIreg(SensorIreg, analogRead(SensorPin));
ts = millis();
}
...
}
En vous inspirant du code précédent modifier votre programme Arduino pour que le maître puisse lire la température de la carte TickTock.
Vérifier que votre programme fonctionne en utilisant le logiciel
.
Luminosité
Modifier votre programme Arduino pour que le maître puisse lire la luminosité de la carte TickTock.
Vérifier que votre programme fonctionne en utilisant le logiciel
.
Lecture de la température et de la luminosité sous Node-RED
Affichage des données brutes
Méthode :
Dans Node-RED :
ajouter et configurer les nœuds Modbus - Read
nécessaires pour recevoir la température et la luminosité (on réglera le paramètre Poll Rate à1 s) ;
ajouter les nœuds gauge
pour visualisation de la température et de la luminosité (il faudra configurer la plage d'affichage).
Conseil :
Soyez méthodique : valider chacune des étapes précédentes une à une. Pour déboguer penser à utiliser le nœud debug
.
Affichage de la température en °C
On remarque que la température correspond seulement au code fournit par le CAN 10 bits de l'Arduino.
Il faut donc faire un calcul pour déterminer la température correspondante.
Méthode :
La formule donnant la température à partir du code N est :
\(\Large{resistance=(1024-N)\times\frac{10000}{N}}\)
\(\Large{temperature=\frac{1}{\frac{ln(\frac{resistance}{10000})}{3975}+\frac{1}{298,15}}-273,15}\)
En langage javascript à titre d'exemple :
var x = 3.14; // x est initialisé avec la valeur 3,14
Math.log(x); // logarithme népérien de x
Insérer un nœud function
entre le nœud gauge
et le nœud Modbus - Read
.
Entrer le code suivant dans le nœud function
(attention une partie est à compléter) :
var N = msg.payload;
var resistance =; // à compléter avec la formule de la résistance
var temperature = ; // à compléter avec la formule de la température
msg.payload = temperature;
return msg;
Pour le nœud gauge : ajuster la plage d'affichage à [0 ; 50] et entrer {{value|number:1}}°C dans son champ Value format.
Fondamental :
Rendu final de la température après calcul et formatage

Accéder à votre tableau de bord depuis votre smart phone. Si une erreur se produit lors de l'accès distant refaire la procédure sous No-IP
.
Félicitations : vous pouvez visualiser la température ambiante de votre salle de spécialité et ce depuis n'importe où.
