Accueil > NodeMCU > NodeMCU : entrée analogique A0

NodeMCU : entrée analogique A0

Un petit article pour expliquer l’utilisation de l’entrée analogique du NodeMCU Lolin car j’ai constaté un petit problème d’utilisation.

Lorsque j’ai voulu utilisé le capteur de température lm35dz à partir de la platine de test NodeMCU, j’ai constaté un problème de capture de température; la valeur détectée était bien supérieure à la valeur réelle. Sur le moment  je me suis dit que cela venait de la tension d’alimentation du capteur en 3.3v alors que dans la documentation du capteur il est indiqué une tension minimale de 4v.
Pour lever le doute j’ai branché ca capteur avec un Arduino Nano; j’ai branché tout d’abord le capteur en 5v puis en 3.3v. Je n’ai constaté aucune différence. Donc le problème ne vient pas de la tension d’alimentation du capteur.
Je me suis penché sur les caractéristiques du NodeMCU; Le Nodemcu possède une seule entrée analogique A0 avec une conversion sur 10 bits (1024) pour une valeur d’entrée de 0v à 3.3v.

L’entrée A0 est connectée à la broche TOUT (entrée analogique) de l’ESP8266 de la façon suivante :

J’ai utilisé le programme suivant pour mesurer la température :

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

void loop()
{
int tension= analogRead(A0);
float millivolts= (tension/1024.0) * 3300; // 3300 correspond à 3.3v
float celsius= millivolts/10;
Serial.println(celsius);
delay(1000);
}

Le résultat obtenu est le suivant :

Autant dire que c’est faux.

Pour expliquer l’erreur, il faut se pencher sur une fonction du NodeMCU.

ESP.getVcc() est utilisé pour lire la tension d’alimentation du Nodemcu. Rien ne doit être branché sur la pin A0. Pour effectuer cette mesure il est nécessaire de changer le mode de fonctionnement du convertisseur ADC en ajoutant la ligne ADC_MODE(mode) où mode peut-être ADC_TOUT (pour une lecture externe) ou ADC_VCC (pour la lecture de la tension d’alimentation du Nodemcu).

Utilisons le programme suivant :

 ADC_MODE(ADC_VCC);

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

void loop()
{
Serial.print(« Alimention(mV): « );
Serial.println(ESP.getVcc());
delay(300);
}

Dans le moniteur série le résultat est le suivant :

On peut constater qu’avec le modèle de Nodemcu utilisé on obtient 2810 mV et non 3300 mV.
Donc il sera nécessaire dans les programmes d’utilisation de l’entrée A0 de prendre en compte cette différence pour obtenir une mesure exacte.

Maintenant modifions la ligne float millivolts en remplaçant 3300 par 2810 et le résultat est le suivant :

Là on obtient la bonne température. Donc il sera nécessaire lors de l’utilisation de l’entrée A0 de toujours effectuer une mesure de la tension d’alimentation afin d’apporter le bon calibrage.

Catégories :NodeMCU Étiquettes : , ,
  1. 04/08/2019 à 15:40

    Hello, merci pour cet article mais il y a quelque chose de faux dans le raisonnement. Cela fonctionne chez vous mais ce n’est pas généralisable. Pour déterminer le bon coefficient correcteur à appliquer afin d’obtenir des mesures correctes depuis la broche analogique, on pourra se référer à l’article https://framboiseaupotager.blogspot.com/2019/07/tout-connaitre-du-suivi-des-charges-et.html

  1. 05/02/2018 à 15:24
  2. 13/02/2019 à 14:46

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

%d blogueurs aiment cette page :