Livre de projet LOVE-O-METER TMP36 avec valeur etrange

Bonjour, je viens de recevoir le kit de démarrage pour ARDUINO UNO et je me lance dans les exercices.

Arrivé au 03-LOVE-O-METER je fais le montage, le code et il m’arrive des valeurs étranges que je ne comprends pas…

mon code (que j’ai un peu remanier pour voir si cela changeais quelque chose) :

const int sensorPin = A0;
const float baselineTemp = 40.0;

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
  for(int pinNumber = 3; pinNumber<6; pinNumber++){
    pinMode(pinNumber, OUTPUT);
    digitalWrite(pinNumber, LOW);
  }
}

void loop() {
  // put your main code here, to run repeatedly:
  int sensorVal = analogRead(sensorPin);

  Serial.print("Valeur capteur :");
  Serial.print(sensorVal);
  // convertir la lecture du CAN en tension
  float voltage = ( sensorVal / 1024.0) * 5.0;

  Serial.print(", Volts (voltage) : ");
  Serial.print(voltage);

  Serial.print(", degrés C (temp) : ");
  // convertir tension en temperature °C
  float temp = (1000*voltage - 500) / 10;
  Serial.println(temp);


  if(temp<baselineTemp){
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
  }else if(temp>= baselineTemp+2 &&
    temp<baselineTemp+4){
    digitalWrite(3, HIGH);
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);      
    }else if(temp>= baselineTemp+4 &&
    temp<baselineTemp+6){
    digitalWrite(3, HIGH);
    digitalWrite(4, HIGH);
    digitalWrite(5, LOW);      
    }else if(temp>= baselineTemp+6){
    digitalWrite(3, HIGH);
    digitalWrite(4, HIGH);
    digitalWrite(5, HIGH);      
}
delay(1);
}

avec des valeurs qui “saute” dans tous les sens… :

Valeur capteur :78, Volts (voltage) : 0.38, degrés C (temp) : -11.91
Valeur capteur :62, Volts (voltage) : 0.30, degrés C (temp) : -19.73
Valeur capteur :75, Volts (voltage) : 0.37, degrés C (temp) : -13.38
Valeur capteur :80, Volts (voltage) : 0.39, degrés C (temp) : -10.94
Valeur capteur :64, Volts (voltage) : 0.31, degrés C (temp) : -18.75
Valeur capteur :70, Volts (voltage) : 0.34, degrés C (temp) : -15.82
Valeur capteur :80, Volts (voltage) : 0.39, degrés C (temp) : -10.94

Le soucis c’est que le livre parle d’une valeur initiale de 200 → la formule marcherais mieux, mais dans mon cas…

Merci d’avance pour l’aide que vous pourrez m’apporter.

Au plaisir de vous lire

EDIT mon Arduino est alimenté par USB depuis mon PC

Vérifiez la connexion du tmp36

Cf ce tuto

Bonsoir, merci pour votre réponse.

il ne me semble pas avoir comis d'erreur…

Je verrais demain matin car je me torture le cerveau sans trouver...

On ne voit pas de fils reliant le + de la breadboard au 5V ni le - au GND... ?

Tu as déjà un défaut dans ton câblage.

Regardes ton câblage :
Tu utilises le même fil pour relier la masse du TMP36 et celles des Dels (Led c'est de l'anglais).
Le TMP36 donne des variations de 10 mV/degré, tu crois vraiment que le fil de cuivre de diamètre ridiculement petit comme les jumpers dupont qu'on trouve dans les kits ne sera pas résistif ?
Et s'il est résistif il s'y dévelopera une chute de tension due au courant des dels quand elles s'allument et cette chute de tension s'ajoutera à la tension de sortie du TMP36 faussant complètement la mesure.

La solution est simple : le fil de masse du TMP36 ne doit pas servir à un autre composant, uniquement le TMP36.
Ajoutes en un autre pour relier les masses des dels et tout ce qui consomme.
Les deux fils de masse ne devront être reliés qu'au niveau de la carte arduino.
On appelle cela câbler les masses en étoile : le centre de l'étoile c'est la carte Arduino, les extrémités des rayons ce sont les composants.

@lesept voila avec ces photos cela se verra mieux

@68tjs j'avoue ne pas avoir tous compris …

Pour ma part je débute et tente de comprendre en me basant sur le "livre" de projet Arduino (j'ai fais des adaptation d'ordre pratique pour moi mais suite à tes remarques j'ai raccourcis les câbles du TMP36 sans changement.

Je vous joint de mon nouveau branchement + le schéma du livre à coté

Merci d'avance pour vos retours.

EDIT
Par acquis de conscience pour "simplifier" au tester ton resonnement 68tjs j'ai débrancher toutes les fiche des Dels -> il n'y a que le capteur qui est connecté mais cela ne donne rien de different au niveau des valeurs… . je vais raccourcir les cables de l'Arduino au breadboard voir si c'est ca la perte

EDIT2
après essais en réduisant les câbles de moitie cela ne change rien aux mesures. selon moi :

  1. alimentation depuis le pc pas suffisante?!
    2) tmp36 deffectueux --> j'ai utiliser un deuxième du pack que j'ai reçu et idem
  2. arduino defectueux (je l'ais recu il y a 3j...)

Ou capteur défectueux.
Pour tester l'hypothèse 3, tu peux essayer divers codes et montage disponibles dans les exemples des bibliothèques que tu as installées dans l'IDE : du simple blink à d'autre choses plus complexes.

Essaye de mesurer la tension 3,3V du régulateur interne de la carte sur une entrée analogique avant de conclure a un défaut sur la carte arduino.

Autre manip possible :
Tu mets en service la mesure analogique sur la référence interne et avec un voltmètre tu mesures la tension entre la borne AREF et la masse.
Tu devrai trouver 1,1V ± 0,1V

Valeur capteur :136, Volts (voltage) : 0.66, degres C (temp) : 16.41
Valeur capteur :135, Volts (voltage) : 0.66, degres C (temp) : 15.92
Valeur capteur :135, Volts (voltage) : 0.66, degres C (temp) : 15.92
Valeur capteur :135, Volts (voltage) : 0.66, degres C (temp) : 15.92
Valeur capteur :135, Volts (voltage) : 0.66, degres C (temp) : 15.92
Valeur capteur :135, Volts (voltage) : 0.66, degres C (temp) : 15.92
Valeur capteur :136, Volts (voltage) : 0.66, degres C (temp) : 16.41
Valeur capteur :135, Volts (voltage) : 0.66, degres C (temp) : 15.92
Valeur capteur :135, Volts (voltage) : 0.66, degres C (temp) : 15.92
Valeur capteur :135, Volts (voltage) : 0.66, degres C (temp) : 15.92

j'ai testé ton croquis sans les leds, tmp36 seul, tu dois avoir mauvais contacts breadboard fil vert A0, enfichage tmp36, tes cables ne sont pas tous avec fiches dupont

HS : le moniteur de mon ide1.8.4 ne reconnait pas les caracteres accentués, normal ???

Merci pour les retours.

@elektrax
J’ai refait l’assemblage tmp36 seul avec de nouveaux cables + j’ai changer de port analog IN sans aucune différence… .

@68tjs
je vais tester de faire ces mesures mais je comprends pas tout ce que tu dis… dsl mais mon niveau électronique est proche de 0

@lespet
J’ai fais comme tu dis et je continue les exemples pour voir si il y a d’autre bug

En tous cas milles merci pour vos retours ca fais plaisir!

@68tjs
je vais tester de faire ces mesures mais je comprends pas tout ce que tu dis… dsl mais mon niveau électronique est proche de 0

Dans les deux manips que je t’ai proposé il n’y aucune notion d’électronique. Je fais simplement appel au mode de fonctionnement du micro qu’il est quand même préférable de connaître quand on veut le programmer.

Dans la documentation de la carte arduino tu vois qu’il y a une broche qui délivre du 3,3V.
Elle est entre 5V et Reset.

Tu prends la carte UNO absolument sans rien connecter dessus.
Tu relie la broche 3,3V à une entrée analogique.
Et tu écris un bout de programme qui ne fait que la mesure sur cette broche.
Si par le programme tu trouve bien 3,3V c’est que la carte est bonne et que le problème vient d’ailleurs.

Deuxième manip :
Confirmation de la manip précédente et petit tuto sur le fonctionnement du convertisseur analogique digital.

Le convertisseur analogique digital prend une tension de référence et la découpe en 1024 morceaux.
Quand il fait une mesure le résultat qu’il te donne c’est le nombre max de morceaux immédiatement inférieur à la tension en mesure.

Le convertisseur analogique digital du micro de la carte UNO peut utiliser TROIS tensions de référence différentes :

  1. La tension d’alim du micro soit Vcc qui vaut autour de 5V (c’est la configuration à l’alumage du micro)
  2. La référence interne 1,1 V ± 0,1 V du micro
  3. Une tension que tu choisi toi même mais qui doit obligatoirement être comprise entre 1,1V et 5V
    Info : la tension 5V de l’USB est donnée pour 5V ± 5% soit 4,75V à 5,25V : ce n’est pas une tension précise et surtout elle bouge d’un PC à un autre. Le 5V obtenu à partir du régulateur 5V de la carte arduino est beaucoup plus précis.

Pour changer de mode de mesure il faut lire l’onglet “RESSOURCE” puis “REFERENCE” de ce site tout simplement.
La fonction est :

analogReference(mode);

où mode vaut
DEFAULT pour avoir la référence à Vcc
INTERNAL pour avoir la référence interne qui vaut 1,1V ±0,1V selon le lot de fabrication.
EXTERNAL pour avoir la référence que tu branche sur la broche AREF de la carte UNO.

A quoi servent ces différentes références : à ajuster la précision.
DEFAULT : le pas de mesure est égal à 5V/1024 = 4,88mV
INTERNAL : le pas de mesure est égal à 1,1V/1024 = 1,07 mV

Tuyau : Si la tension à mesurer est inférieure à 3,3V il est possible d’utiliser le 3,3V assez précis de la carte arduino en le raccordant sur AREF et en utilisant le mode EXTERNAL

Tuyau : Pour ton application TMP36 qui pour 60°C donnera 0,6V en mode DEFAULT le CNA renverra 123 pas alors qu’en mode INTERNAL il en aurait renvoyé 560 donc une meilleure précision.

Pour la deuxième manip il faut avoir lu la datasheet du micro: pas la doc arduino, non celle du fabricant du micro Microchip/Atmel. Comme je l’ai fait je te donne l’explication :

Quand on est en référence interne (1,1V) cette tension se retrouve sur la borne AREF il est donc possible de la mesurer.
Quel est l’intérêt de la mesurer ?
Cette tension sert au convertisseur analogique digital mais aussi à beaucoup d’autres choses à l’intérieur de la puce microcontrôleur. Si cette tension est en dehors de la zone 1,1V ± 0,1V le microcontrôleur ne pourra pas fonctionner correctement.

Cette tension se mesure avec un appareil indispensable quand on utilise des cartes arduino : un multimètre numérique, environ 10 € en grande surface de bricolage.
Un multimètre peut mesurer des volts, des ampères et des ohms, certains font plus mais ces trois mesures sont indispensables et largement suffisantes sauf besoins très particuliers.

Remarque importante :
Si dans le mode “référence interne” on retrouve la tension de référence sur la broche AREF cela à pour conséquence qu’il ne faut surtout pas appliquer une tension sur cette broche quand on est en mode “référence interne” sinon le micro sera détruit.

Mise en garde : Dans un programme il peut arriver que l’on adapte la référence de tension aux différentes tension à mesurer.
Première précaution : pour éviter d’utiliser le CNA sans être assuré qu’il est stabilisé il faut rejeter systématiquement la première lecture si on change de référence ou si on change d’entrée.
Deuxième précaution : ce n’est pas une précaution mais une imposition : il ne faut jamais activer la référence interne si une tension est présente sur la broche AREF.
Autrement dit si une tension est appliquée sur AREF pendant le déroulement d’un programme on peut activer les mode DEFAULT ou EXTERNAL mais il ne faut jamais activer le mode INTERNAL.

En résumé :
Dans ma deuxième intervention je n’ai pas fait d’électronique, juste un peu de calcul, et je fais appel au fonctionnement du microcontrôleur.

Dans un montage complet il y a toujours plusieurs sources d’erreurs possibles, c’est pour cela qu’il faut faire des tests les plus simples possible en utilisant les composants strictement nécessaires au test. Il faut aussi que le programme soit le plus simple possible.
Quand j’ai lu que la carte arduino était suspectée j’ai proposé deux manips destinées à lever le doute pour éviter de partir sur des suppositions.

Salut,
@68tjs
Merci pour cette réponse très complete.
C’est plus les termes utilisés, mais avec ce complément ca va aller!

  1. j’ai fais le pont 3.3V - A0 et utilisé le code suivant :
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // print out the value you read:
  Serial.println(sensorValue);
  delay(1);        // delay in between reads for stability
}

La lecture donne une valeur de 699 à 700 : 700*3.3/1023 = 2.25V << la valeur de la conversion est juste?

Pas trop bon ca non?

  1. je dois relire attentivement pour bien comprendre et je te ferais un retours

Le calcul est faux.
Dans cette manip la référence est à 5V
Donc c'est:
700 * 5 / 1024 = 3,41V

Potentiellement, le 5V ne vaut sans doute pas 5,000V donc sans avoir mesuré la tension sur l'arduino on est réduit à faire des approximations. On peut néanmoins considérer que la mesure est bonne.

Encore une couche :

Après la mise sous tension du microcontrôleur par construction la référence de tension pour le convertisseur analogique digital est la tension Vcc.
Par construction signifie que le concepteur du micro, la société Atmel, a fait en sorte que dans la procédure de démarrage du micro, qui se produit avant que le programme soit lancé, ce soit la référence au Vcc qui soit activée.

Donc tant que par programmation tu ne change pas la source de la référence de tension, avec la fonction analogReference() , le mode est le mode par defaut c'est à dire référence au Vcc.

Le Vcc peut provenir de plusieurs endroits :

  • Si c'est par la prise USB ce sera celui que fourni le PC. La norme dit 5V ±5%. La valeur exacte de cette tension variera d'un PC à un autre.
  • Si c'est par le jack le Vcc sera obtenu par un régulateur de tension interne à la carte arduino. Les régulateurs de tensions qui équipent les cartes arduino sont assez précis, bien plus que la norme USB, et surtout pour une carte donnée le Vcc_régulateur sera invariable.

Pour avoir des résultats de mesure précis il faut tout connaître précisément. Il faut mesurer le Vcc avec un voltmètre.

Quand je t'ai dis que l'on pouvait utiliser la sortie 3,3V du deuxième régulateur de tension interne à la carte, solution qui permet de s'affranchir de la provenance de la source qui fournie le 5V, j'ai bien précisé que les tensions à mesurer devaient impérativement être inférieure à la référence de tension, et je précise que c'est valable quelque soit la référence en service.

Salut et encore une fois merci pour les réponses.

Je me suis équipé avec un multimètre. J'ai vérifier les informations que tu m'a donné.
Effectivement c'est intéressant de voir évoluer les V.

Bonjour, j'ai tester la sonde sur un autre Arduino avec le même montage et tous fonctionne à merveille!

L'Arduino avait un défaut. Par curiosité j'ai laissé mon arduino a cette personne qui a bien plus de compétence que moi pour diagnostiquer le problème.

Merci à tous pour vos aide précieuses qui m'ont permis de mieux appréender certains imperatifs à savoir lors de l'utilisation d'un arduino.