Problème tension analogue

Bonjour,
j'ai réalisé moi même un "arduino léonardo" avec un atmega32u4, et je rencontre un problème car je ne parviens pas a réaliser un simple montage d'une lecture de température avec un TMP36 avec les valeurs affichées sur un lcd

Pour vous expliquer, j'ai d'abord testé le code et le montage avec un arduino uno, qui a été niquel, et j'ai ensuite essayé avec la carte que j'ai réalisée, et là malheureusement rien ne va.

NB: J'ai bien bootloader mon léonardo, l'ordinateur reconnait bien ma carte, j'ai testé mon circuit voir si je n'avais pas de court-circuit, et vérifier que mes masses étaient bien toutes reliées, LE SEUL problème que j'ai rencontré c'est que j'ai une tension de 1,3v au niveau des A0,A1,A2,... alors que quand je les mesure sur le uno j'ai +/- 0,1v

A noter que j'ai également essayer de mettre A0 a l'état haut voir si j'avais bien une tension de 5v et c'est le cas.

Je voulais donc savoir si le problème venait bien de la? Et si c'est le cas comment se fait-il que j'ai des tensions pareil? :slightly_frowning_face:
Merci d'avance. :slight_smile:

Bonjour,

Quand tu relies A0 a GND tu as bien 0 avec analogRead()?
Quand tu relies A0 au 5V tu as bien 1023 ?

Si les entrées sont en l'air elles sont dans un état indéfini et la tension que tu lis sur ces entrées n'est pas significative.

Re,
alors j'ai fais ce que vous m'avez dit,
donc quand je met A0 a GND j'ai bel et bien 0 qui s'affiche dans le moniteur série
Par contre pour ce qui est de A0 au 5v il affiche 5.00 et non 1023

analogRead(A0) doit donner 1023. Il y a un calcul supplémentaire qui est fait (conversion en volt)

A priori ça a l'air de fonctionner correctement.

Dans ton programme de lecture de température, tu utilises bien A0 comme numéro d'entrée (et non 0)?

En faite je suis pas un pro en arduino, et c'est un travail pour l'école (le prof est surtout intéressé par la partie hardware et veut un petit programme avec du software pour voir que le projet fonctionne)

J'ai donc pris un programme tout fait sur internet, qui marchait très bien avec mon vrai arduino uno (auquel je branchais bien sur a0) donc oui c'est bien A0 que j'utilise

Voici le code au cas ou, histoire d’être sur ^^ :

(Use </>, Merci. Moderator)

#include <LiquidCrystal.h>


int tempSensorPin = 0; // Pin analogique pour lecture de la tension de sortie du TMP36 (Vout).
                       // Resolution: 10 mV / degree celsius avec une offset de 500 mv.

// Definition du caractere °
byte degrees[8] = {
  B00000,
  B01000,
  B10100,
  B01000,
  B00000,
  B00000,
  B00000,
  B00000,
};

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup(){
  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  lcd.clear();
  
  // initialiser le caractère ° dans le LCD
  lcd.createChar( 0, degrees );
}

// mémorise la dernière température affichée
int lastTemp = -100;

void loop(){
  float temp = lectureTemp();
  
  // rafraichit le LCD que si la 
  // température a varié sensiblement
  if( abs(temp-lastTemp)<0.20 )
    return;
  lastTemp = temp;
  
  // Afficher la valeur en evitant le
  //   lcd.clear(), pour éviter l'effet de
  //   scintillement.
  lcd.setCursor(0,0);
  lcd.print( temp );
  lcd.print((char)0); //test
  //lcd.write( 0 );  // affiche le signe degré 
  lcd.print( "c" );

  // Efface les derniers caractères si
  //   la température chute subitement
  lcd.print( "      " );
  
  // ne pas rafraichir trop souvent
  delay(800);
  
}

//Description:
//  Lecture de la température sur la pin A0
//
//Returns:
//  La température en degré Celcius.
//
float lectureTemp()
{
 // Lecture de la valeur sur l'entrée analogique
 // Retourne une valeur entre 0->1024 pour 0->5v
 int valeur = analogRead(tempSensorPin);  

 // Converti la lecture en tension
 float tension = valeur * 5.0;
 tension /= 1024.0; 
 
 // Convertir la tension (mv) en temperature
 float temperature = ((tension * 1000) - 500) / 10;
 
 return temperature;
}

Le programme est correct, ça devrait fonctionner.

C'est un TMP36 en boitier TO92 (sans pin shutdown) ?

L'utilisation du TMP36 est très simple, ça doit donc être facile de voir ce qui ne va pas (faux contact, composant défectueux, ...)

  • Vérifie la tension d'alimentation du TMP36. Tu dois avoir 5V
  • Déconnectes la sortie du TMP36 (juste l'alimentation connectée). Mesures la tension sur Vout. A 25 ° tu dois avoir 0.75V Sinon ton capteur est mort (ou branché à l'envers)
  • Reconnectes la sortie sur A0 et remesures la tension. Tu dois toujours avoir 075V sur Vout

Si après ton programme n'affiche pas la bonne température c'est soit que ton processeur est mort soit un problème de câblage, mais c'est peu probable si le test que je t'ai demandé de faire en #1 fonctionne.

Un peu de bon sens de temps en temps.

Tu as un capteur et un programme et cela ne fonctionne pas. C'est lequel qui foire ?
Procède par ordre pour éliminer les causes de non fonctionnement.

Le TMP36 est un capteur numérique ou analogique ?
C'est un analogique qui n'a absolument pas besoin de programmation pour fonctionner.

Alors teste le tout seul avec une alim et un voltmètre et tu verra bien ce qu'il te donne.
Tu vérifie dans SA datasheet si les résultats sont réalistes.

Quand tu sera certain que le TMP36 fonctionne normalement tu passe au programme.

POUR METTRE AU POINT NE FAIRE QU'UNE SEULE CHOSE A LA FOIS

kamill je vaquais a d'autre occupation aujourd'hui, je test ça demain matin et je te tiens au courant, merci pour le coup de main!

Quand a toi 68tjs,
Il n'est pas question de bon sens ici excuses moi,

j'ai signalé plus haut dans la discussion que le montage et le programme fonctionnait étant donné que je l'ai déjà testé avec un arduino uno et que je n'ai pas eu de problème, le lcd affichait la température et que la température variait bel et bien quand j'approchais une source de chaleur du tmp.

C'est en essayant le programme et le montage avec la carte "leonardo" que j'ai fais moi même que ça n'a pas été, d'où j'ai déjà fait le test de mettre A0 a l'état haut pour voir si j'avais bien 5V et c'est le cas.

J'ai donc expliqué mon problème ici pour qu'on m'aide car j'étais a court d'idée pour voir d'où venait le problème.

Donc le bon sens aurait voulu que tu valide "ta carte léonardo" avant d'y brancher le TMP36.
As tu chercher à faire une mesure avec le convertisseur analogique avant de tester le programme ?

Si par valider tu veux dire le bootloader oui c'est fait.

Et pour la mesure du convertisseur analogique qu'entends-tu par là?

Voilà kamill j'ai fais les trucs que tu m'as dis,

-Oui mon tmp36 c'est bien un TO92, j'ai pas de pin shutdown
-Pour ma tension d'alimentation j'ai bien 5v
-Pour la tension a Vout quand A0 est retiré j'ai 0,7v (il fait +/- 23° chez moi)
-idem toujours 0,7v avec A0 de branché

Par contre le lcd n'affiche pas la température hein, j'ai les carrés noirs comme quand il n'y a pas de programme..

Je viens de retest le montage-programme avec mon uno, histoire de voir que j'étais pas fou, ça marche bien, donc je suppose que le problème doit venir de ma carte que j'ai fais moi même..
Mais va savoir où..

Par là je veux dire que si tu te fais une carte perso qui entre autres choses fera des mesures analogiques avant de brancher le capteur de température il faut vérifier que la carte fonctionne et est capable de mesurer correctement une tension connue.

C'est un projet qui nous a été donné par un prof dans le cadre de mon cours de tp, je suppose qu'il est, en toute logique, censé être capable de mesurer des tensions connues.

Mais je vais suivre tes conseils et vérifier si il en est bien capable quand même, comment pourrais-je faire çela?

Le fait d'avoir branché a0 a gnd puis au 5V et vérifier avec le moniteur série que la valeur variait bien n'est pas suffisant?
Merci à toi :slight_smile:

RE,

Alors j'ai fais un simple programme pour pouvoir afficher "bonjour" sur le lcd,

j'ai d'abord testé avec mon uno histoire de voir que tout était ok, et c'est le cas

Je suis donc ensuite passé a ma carte "léonardo" et la ça n'allait pas, donc le problème ne vient pas des pins analogiques mais d'ailleurs on dirait bien, vous avez idée svp?

Quand tu télécharges un programme simple comme blink, est ce que ça fonctionne?

Oui avec blink ça marche, j'ai bien la led qui s'allume-s'éteint et ainsi de suite..

Je ne vois qu'une sortie qui ne fonctionne pas, soit une mauvaise connexion (le p)lus probable), soit un port du micro qui ne fonctionne pas.
Le lcd utilise quelques pins en sortie (12, 11, 5, 4, 3, 2). Il faudrait que tu les testes une à une.
Par exemple avec le programme blink. Tu modifies le numéro de sortie dans le programme et tu mets une led (bien sur avec une résistance) sur la sortie. Tu fais ça pour chaque sortie utilisée par le lcd et tu vois si ça fonctionne.

Voilà je passais juste pour vous dire que ce matin après votre réponse j'ai enfin trouvé le problème.

Et elle est toute bête, en faite avec l'atmega32u4 on a tout simplement miso mosi ET pin11,12 et dans mon code j'utilisais pin11,12 alors que dans mon montage je prenais miso mosi pensant qu'elles étaient les mêmes..

C'était donc une erreur d'inattention de ma part, désolé de vous avoir embêté avec ça, et un grand merci pour votre aide!