Sujet : Problème d'affichage avec un TMP 36

Bonjour,

J’expose ma perplexité et mon problème.

J'ai voulu tester le bon fonctionnement d'un capteur de température TMP 36 associé à un lcd MR007-005.1 de 2 x 16 caractères. (Ces deux composants venant d’arriver de la boutique).

Sur une plaque d'essais, j'ai positionné le capteur.

Sur l'Arduino UNO, j'ai placé le lcd.

Puis j'ai :
-  relié la broche « entrée » du TMP au + 5v de l’Arduino.
- relié la broche négative à la masse.
- la sortie du milieu, « out », à la broche A0 de l’Arduino.

En chargeant le programme minute frigo proposé par Olivier et après avoir modifié les numéros de RS et E, le résultat sur l’afficheur est :

    Temperature :
    382.06 / 382,26

(Cette température oscille entre ces deux valeurs !).

(La température à proximité du TMP est de 21°, 1 C)

Avec un voltmètre relié entre la sortie « out » du TPM et le + 5 v, j’ai 698 mv sur la sortie. (Elle monte ou descend si je souffle du chaud ou du froid).
Avec les deux autres programmes ci-joints dont un qui fonctionne avec le moniteur série ces deux séries de chiffres s'affichent continûment : 381, 64 et 382,13

En conclusion ce 38 provient d’où ? Cela en admettant de le supprimer et de décaler le point, la température serait approximativement exacte !

Cordialement,

Guy.

/*
  Affichage de température sur ecran LCD avec capteur TMP36
  Semageek.com
 */

// Inclure la librairie LiquidCrystal
#include <LiquidCrystal.h>

// Initialisation de la librairie Liquid Crystal
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

int sensorPin = A0;    // Selection de l'entrée analogique pour la sonde température TMP36

float temperature[10]; // tableau de valeur pour stocker 10 echantillons de température
int index=0 ;          // index du tableau pour s'y retrouver

void setup() {
  // Configuration de l'afficheur 16 caractères en 2 lignes 
  lcd.begin(16, 2);
  // Ecriture de la ligne 1
  lcd.print("Temperature :");
}

void loop() {
  // positionnement du curseur en ligne 2 1ere position ( on partd e zéro)
  lcd.setCursor(0, 1);
  
  //acquisition de la valeur analogique dans sensorValue
  // de 0 à 1023 -> 0 à 5V
  int sensorValue = analogRead(sensorPin); 
  
  //transformation en milliVolts dans outputValue
  float outputValue = (((float)(sensorValue))*5000.0)/1023.0;
  
  //Calcul de la température en fonction des milliVolts
  float outputTemp = ( (float) outputValue - 500.0) /10.0;
  
  //insertion de la température dans le tableau
  temperature[index] = outputTemp;
  
  //incrémentation de l'index modulo 10
  index = (index + 1) % 10;
  
  // calcul de la moyenne ( Méthode barbare, une boucle for l'aurait mieux fait)  
  float tempMoy = (temperature[0]+temperature[1]+temperature[2]+temperature[3]+temperature[4]+temperature[5]+temperature[6]+temperature[7]+temperature[8]+temperature[9])/10;
  
  // Afficgahe d ela température
  lcd.print(tempMoy);
  
  // delai de 500ms entre deux calculs
  delay(500);   
}

Deuxième programme.

/*     ---------------------------------------------------------
  *     |  Arduino Experimentation Kit Example Code             |
  *     |  CIRC-10 .: Temperature :. (TMP36 Temperature Sensor) |
  *     ---------------------------------------------------------
  *   
  *  A simple program to output the current temperature to the IDE's debug window 
  * 
  *  For more details on this circuit: http://tinyurl.com/c89tvd 
  */
 
//TMP36 Pin Variables
 int temperaturePin = 0; //the analog pin the TMP36's Vout (sense) pin is connected to
                         //the resolution is 10 mV / degree centigrade 
                         //(500 mV offset) to make negative temperatures an option
 
/*
  * setup() - this function runs once when you turn your Arduino on
  * We initialize the serial connection with the computer
  */
 void setup()
 {
   Serial.begin(9600);  //Start the serial connection with the copmuter
                        //to view the result open the serial monitor 
                        //last button beneath the file bar (looks like a box with an antenae)
 }
  
 void loop()                     // run over and over again
 {
  float temperature = getVoltage(temperaturePin);  //getting the voltage reading from the tem
                    //perature sensor
  temperature = (temperature - .5) * 100;          //converting from 10 mv per degree wit 500
                    // mV offset
                                                   //to degrees ((volatge - 500mV) times 100)
  Serial.println(temperature);                     //printing the result
  delay(1000);                                     //waiting a second
 }
 
/*
  * getVoltage() - returns the voltage on the analog input defined by
  * pin
  */
 float getVoltage(int pin){
  return (analogRead(pin) * .004882814); //converting from a 0 to 1023 digital range
                                         // to 0 to 5 volts (each 1 reading equals ~ 5 milliv
                    //olts
 }
 

Re : Problème d'affichage avec un TMP 36

/*
  Affichage de température sur ecran LCD avec capteur TMP36
  Semageek.com
 */

// Inclure la librairie LiquidCrystal
#include <LiquidCrystal.h>

// Initialisation de la librairie Liquid Crystal
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

int sensorPin = A0;    // Selection de l'entrée analogique pour la sonde température TMP36


void setup() {
  // Configuration de l'afficheur 16 caractères en 2 lignes 
  lcd.begin(16, 2);
  // Ecriture de la ligne 1
  lcd.print("Temperature :");
}

void loop() {
  // positionnement du curseur en ligne 2 1ere position ( on partd e zéro)
  lcd.setCursor(0, 1);
  
  // Afficgahe d ela température
  lcd.print(( (float) ((((float)(analogRead(sensorPin)))*5000.0)/1023.0) - 500.0) /10.0);
  
  // delai de 1s entre deux calculs
  delay(1000);   
}

test ça ?

C'est bizarre !

Dernière modification par Rovhell (13-09-2013 08:24:36)

Re : Problème d'affichage avec un TMP 36

Bonjour,

Voici le résultat du test demandé:

Pour une température ambiante d'environ 21° C, l'afficheur donne sur la deuxième ligne 381.57 et 382.06 !!

Bizarre.... bizarre.

Guy.

Re : Problème d'affichage avec un TMP 36

Guy-Roland-Pierre a écrit:

Avec un voltmètre relié entre la sortie « out » du TPM et le + 5 v, j’ai 698 mv sur la sortie. (Elle monte ou descend si je souffle du chaud ou du froid).

Hum... On prend la mesure entre le 0 et OUT, pas entre 5v et OUT.
As-tu essayé de retourner ton TMP36? mettre le + au - et inversement?

Re : Problème d'affichage avec un TMP 36

Re,

1° - la mesure entre le 0 et OUT = 4,41.

2° - Non je n'ai pas essayé de retourner le TMP 36.

       Vous me proposez d'intervertir l'alimentation ?

       N'est-ce pas dangereux ? (Pour le TMP)

Dernière modification par Guy-Roland-Pierre (13-09-2013 19:16:09)

Re : Problème d'affichage avec un TMP 36

À priori ça vient pas du code. Donc ça vient soit du tmp36, soit du branchement. Donc pas grand chose à perdre !

Re : Problème d'affichage avec un TMP 36

Bonjour et j’espère un bon dimanche pour tous et vos famille.

(J’avais lu, dans un forum, qu’il est possible de contrôler l’état d’un TMP 36 avec un voltmètre. À la réception de ma commande, j'ai donc placé le TMP sur une plaque à trous et, en utilisant une alimentation stabilisée donnant 5,03 v, j’ai effectué les manœuvres de contrôles préconisées. Néanmoins, même si je débute en programmation informatique, mes laconiques connaissances en « logique formelle », que j’applique au monde de l’informatique et de l’électronique, me laissaient déjà supposer que les trois programmes différents utilisés ne pouvaient pas tous êtres fautifs).

Comme très pertinemment dit, effectivement, je n’ai rien à perdre. Alors, allons-y !

Je vais suivre vos recommandations en procédant comme je le fais généralement : Sur mon carnet d'apprentissage et d'expériences, je relève tout ce que je fais.

Après la lecture de votre message, j’ai donc refait les mesures en tenant compte de la remarque. « Hum... On prend la mesure entre le 0 et OUT, pas entre 5v et OUT ». C’est ainsi que :

    - entre le + en entrée et le « OUT » j’ai 4 v 26. (Si je serre le capteur entre mes doigts, rien ne bouge).
    - entre le - et le « OUT » j’ai 693 mv. (Si je serre le capteur entre mes doigts, l’indication change et indique une augmentation de tension. C'est d’ailleurs ce qui m'a fait déduire que le TMP était bon pour le service !).

Puis

J'inverse les tensions, et là … ça CHAUFFE. (Mardi, j’irai à Bordeaux acheter un autre TMP !).

Je coupe immédiatement l'alimentation et après refroidissement, en refaisant les mêmes mesures, je retrouve les mêmes valeurs !

Cependant, contrairement à nombre de mes contemporains, j’ai toujours comme principal allié le doute et cherche à savoir le pourquoi.

    - Comment admettre aisément qu’un produit neuf, sous emballage fermé, soit HS ! (N'aurai-je pas effectué une manœuvre qui, non intentionnellement, aurait pu participer à la destruction du composant?).

Merci pour toutes les réponses. (Elles n'intéresseront pas nécessairement tous les lecteurs et peut-être que ma question sera qualifiée de futile !).

Cordialement,

Guy.

Re : Problème d'affichage avec un TMP 36

Bon, si la tension varie toujours, il fonctionne toujours. Donc il était bien branché. Alors je commence à sécher! As-tu essayé avec une autre broche que A0?

Guy-Roland-Pierre a écrit:

    - Comment admettre aisément qu’un produit neuf, sous emballage fermé, soit HS !

C'est rare mais ça arrive !

Dernière modification par Rovhell (15-09-2013 16:50:41)

Re : Problème d'affichage avec un TMP 36

Bonsoir,

Je viens de changer de broche et effectivement en passant sur A1, cela fonctionne correctement.

Deux constats peuvent être effectués :

       - Le TMP 36 supporte « gaillardement » l'inversion de tension.

       - Pourquoi A0 a cessé de fonctionner ? Quelles peuvent être les erreurs de manipulations commissent et surtout ce que j'aurais pu faire et qu'il ne faut pas faire ?

Merci,

Guy.

10

Re : Problème d'affichage avec un TMP 36

Ok, je commençait vraiment à être à cours de solution.
Pour A0, j'ai déjà vu des trucs bizarre, elle est peut être pas morte.
Dans tout les cas, elle peut l'être si tu lui met une trop grande tension, ou si tu consomme une trop grande intensité trop longtemps.

Re : Problème d'affichage avec un TMP 36

Bonjour à tous.

Merci Rovhell de votre aide.

Par nature, je vérifie, revérifie et aime bien savoir le POURQUOI.

En science comme en technologie - théorie de technologie spécifique - c'est le 100 % qui doit être vérifié et qui me passionne.

Donc, dès que possible, j'effectue un "test" de vérification de A0 et évidemment, je vous informerai des résultats.

Cordialement,

Guy.

12

Re : Problème d'affichage avec un TMP 36

Tu peux déjà vérifier les rayures sur la plaque (si une piste est rayée, ça peut couper la lecture). Tu peux aussi charger ton programme avec A0 mais ne pas mettre la sonde, et voire ce qui s'affiche. Si c'est encore entre 381 et 382, y'a un problème réel. Faisons des tests dans l'ordre pour éliminer les suppositions.
Tu peux aussi tester A0 en sortie digitale. Par exemple, televerser le code "blink" qui fait clignoter une Led en faisant le câblage qui va bien, et en changeant le pin du code par A0 (câbler aussi sur A0 du coup).
Je précise que ces tests là sont sans risques et utilisent des fonctions normales de l'arduino.

Re : Problème d'affichage avec un TMP 36

Voici les résultats :

- avec une led sur A0 : celle-ci clignote.
- charge le programme frigo sur A1. La sonde indique une température correcte de 18°36 c.
- charge le programme sur A0, l’indication donnée par la sonde est stable et voisine du nombre 381.64.
- sans la sonde le nombre fluctue entre 78. 21 et 125.36.

14

Re : Problème d'affichage avec un TMP 36

Ok donc si on a pas le même chiffre avec et sans la sonde, la piste n'est pas coupée. Surtout qu'elle fonctionne en sortie avec une Led, donc le problème est plus sournois que ça. Je vais fureter un peu de mon coter pour trouver des hypothèses.

Re : Problème d'affichage avec un TMP 36

Bonjour,

Une nouvelle fois merci de l’aide que vous apportez pour m’aider à comprendre ce qui se passe ou ce qui s’est passé.Ces quelques données peuvent-elles vous aider ?

1-    Le 16 juillet 2013 j’ai acheté chez un fournisseur parisien - je ne connaissais pas encore Semageek - le module Arduino « UNO » REV 3.
2-    Je n’ai utilisé les broches « Analog » qu’avec le LCD provenant de la boutique. (Date de la commande 4 septembre 2013).

C’est donc dès cette première utilisation que j’ai constaté le problème.

Parmi quelques questions possibles :

- un problème analogue est-il connu ou répertorié ?
- peut-il s’agir d’un problème de fabrication ?
- qu’elles sont les causes possibles de « mauvaises manipulations » ou, pourquoi pas, de programmation de ma part, qui auraient pu entraîner un tel dysfonctionnement ?

Cordialement,

Guy.

16

Re : Problème d'affichage avec un TMP 36

Quelle est ta version du logiciel arduino ?
S'il ne correspond pas à la dernière version du site, mets le à jour et ré-essaies!
Il y a des soucis avec certaines version sur la fonction analogread().
Si il est à jour, un reflashage de l'atmega pourrait peut être résoudre le soucis. (peut-être)

Re : Problème d'affichage avec un TMP 36

Re,

Version installée au 17 juillet 2013 : 1.0.5

Par sécurité, j'ai tout désinstallé, puis nettoyer avec Ccleaner y compris les registres. J'ai réinstallé la même version 1.0.5, redémarré le PC et changé de port com.

Avec blink, de A0 à A5 la led clignote.

Avec le programme frigo, seul A0 ne fonctionne pas.

A+

Dernière modification par Guy-Roland-Pierre (17-09-2013 14:56:53)

Re : Problème d'affichage avec un TMP 36

Si il est à jour, un reflashage de l'atmega pourrait peut être résoudre le soucis. (peut-être)

Alors je n'ai pas les connaissances pour comprendre ! Que dois-je faire ?

19

Re : Problème d'affichage avec un TMP 36

Tu ouvres le menu tool, puis brun bootloader (ce doit être la dernière ligne je crois )

Re : Problème d'affichage avec un TMP 36

J’ai lancé Arduino, puis, ouvert le menu tool / outil.

Là,  je trouve :     - formatage automatique
        - Archiver le croquis
        - Réparer encodage & recharger
        - etc. …  mais pas de brun bootloader !

Je reconnais mon incompétence et vois l’immense fossé de mon inconnaissance.

Où, est-ce que je commets encore une erreur ? j’ai cherché ailleurs mais sans succès.

21

Re : Problème d'affichage avec un TMP 36

Excuse-moi, j'étais encore dans ma tête sur la version anglaise. C'est dans "Outils" -> "Graver la séquence d'initialisation".

Re : Problème d'affichage avec un TMP 36

Bonsoir,

Au hasard, j’avais déjà fait ces manips qui avec un programme ou sans, m’ont donné le même résultat :

Erreur lors de la gravure de la séquence d’initialisation.

avrdude: usbdev_open(): did not find any USB device "usb"

A+

23

Re : Problème d'affichage avec un TMP 36

Ça dit que ça ne trouve pas l'arduino. Mais bon je ne suis vraiment pas certain que le problème vienne de là. À tout hasard, aurais-tu une autre puce atmega 328 sous la main?

Re : Problème d'affichage avec un TMP 36

Bonjour,

Oui,  et après votre réponse dont je vous remercie, effectivement, il me semble inutile de vous creuser la tête plus longtemps sur cette gêne. Je peux très bien continuer mon apprentissage avec ce « UNO » en évitant, évidemment, l’utilisation de A0.

Toutefois, vous m’avez donné une idée à laquelle je n’avais pas pensé tellement elle est évidente : remplacer le CI « ATMega328 » sur l’Arduino !

Je viens d’effectuer le test suivant et vous en communique le résultat. (Cela peut-il justifier la décision de changer le circuit susdit ?).

Un potentiomètre de 22 K avec le point milieu relié à A0 et les deux extrémités reliées au + et - 5 v de l’Arduino indique, en allant d’une butée à l’autre, de - 48,04 à 449,95 ! Mais si je relie la broche A0 au programme  « frigo », j’obtiens  toujours 381,92 sur le CLD !

Cordialement,

Guy.

25

Re : Problème d'affichage avec un TMP 36

Si le problème ne vient pas de l'ATMEGA328, c’est qu'il vient forcement de la liaison entre la borne 23 de l'ATMEGA et la PIN A0.
il faut vérifier la piste, voir refaire la soudure de la broche 28 et de A0.