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 :

1
addCoil(); // ajout d'un Coil
2
coil(); // lecture d'un Coil
3
addIsts(); // ajout d'un Discrete Input
4
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 :

1
addIreg(); // ajout d'un Input Register
2
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 :

1
const byte SensorPin = A0;
2
const int SensorIreg = 0;
3
long ts;
4
5
void setup(){
6
	...
7
  pinMode(SensorPin, INPUT);
8
  mb.addIreg (SensorIreg);
9
	...  
10
}
11
12
void loop(){
13
  ...
14
  // mise à jour du registre Input Register toutes les secondes
15
  if(millis() > ts + 1000){
16
    mb.setIreg(SensorIreg, analogRead(SensorPin));
17
    ts = millis();
18
  }  
19
  ...
20
}

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 :

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

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

Fondamental

Rendu final des Input Registers dans le tableau de bord Node-RED

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 :

1
var x = 3.14; // x est initialisé avec la valeur 3,14
2
Math.log(x); // logarithme népérien de x
3

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

1
var N = msg.payload;
2
var resistance =; // à compléter avec la formule de la résistance
3
var temperature = ; // à compléter avec la formule de la température
4
msg.payload = temperature;
5
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ù.