Mesures analogiques faussées

Merci pour toutes ces précisions !
Je ne pensais pas soulever autant de réactions ! En tous cas , j'apprends plein de choses ! Merci à tous.

Si j'ai bien compris, en choisissant la valeur de référence interne qui tourne autour de 1,1V, cette tension est appliquée sur la pin ARef. Je peux la mesurer avec un voltmètre pour l'utiliser dans mon programme.
Si je connecte le LM35 directement à la masse de l'Arduino sans passer par la breadboard et si je fais une double mesure, ça devrait aller mieux ?
Encore merci pour vos réponses et vos échanges très enrichissants !

J'ai testé avec une double-mesure et en branchant la masse du LM35 directement sur l'Arduino et ça marche !

Le code :

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2

#if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif


void setup() {
  Serial.begin(9600);

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x32)

  display.clearDisplay();

  // Améliore la précision de la mesure en réduisant la plage de mesure
  analogReference(INTERNAL); // Pour Arduino UNO
}

void loop() {

  // Mesure la tension sur la broche A0 du capteur de température
  analogRead(A0); //double lecture
  int valeur_brute = analogRead(A0);

  //mesure de la tension sur A3 du potentiomètre pour température de consigne
  analogRead(A3);//double lecture
  int valeur_consigne = analogRead(A3);

  float temperature_consigne = 0;
  temperature_consigne = map(valeur_consigne, 0, 1023, 0, 20);


  // Transforme la mesure (nombre entier) en température via un produit en croix
  float temperature_celcius = valeur_brute * (1.1 / 1023.0 * 100.0);

  Serial.print(valeur_consigne);
  Serial.print("           -----              ");
  Serial.print(temperature_consigne);
  Serial.print("           -----              ");
  Serial.println(temperature_celcius);


  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.println("Temp. mes.  Temp. csg");
  display.setTextSize(2);
  display.setTextColor(BLACK, WHITE); // 'inverted' text
  display.print(temperature_celcius);
  display.setTextColor(WHITE, BLACK);
  display.print(" ");
  display.setTextColor(BLACK, WHITE); // 'inverted' text
  display.println(temperature_consigne);
  display.display();
  delay(1000);
}

Et le schéma :

Merci à tous !

Bravo

Je vois le potentiomètre branché entre GND Aref et A3. Dis moi que c'est pas vrai et que c'est une erreur de dessin !
Aref c'est une référence de tension ce n'est pas une alimentation, il est interdit de tirer du courant d'Aref !

J'ai écrit :

Tu ne peux pas mesurer la tension en sortie du potentiomètre avec la référence interne car tu n'as rien pour alimenter le potentiomètre sous 1,2V

Et j'ai ajouté :

Par contre si tu respectes le rejet de la première mesure tu peux commuter entre référence au Vcc et référence interne à 1,1 V

Le potentiomètre se connecte à Vcc (5V), Ax et la masse (GND)
La sortie du LM35 est connectée sur Ay

Avant de faire une mesure du potentiomètre tu fait un analogReference(DEFAULT) puis deux mesures analogRead(Ax)
Quant tu veux mesurer la sortie du LM35 tu fait un analogReference(INTERNALL) puis deux mesures avec analogRead(Ay)

OK. Je pensais qu'on pouvait utiliser la tension de sortie sur Aref comme alimentation dans un cas comme ça.
Je corrige !
Merci encore !

kamill:
Bon je viens de faire un essai avec un lm35 sur A0 et un potentiomètre sur A1. Le potentiomètre est tourné à fond à droite.

Ce qui m'étonne, c'est que le LM35 a une impédance de sortie faible.

J'ai fait des essais avec des ponts diviseurs 10K / 4.7K sur deux entrées A0 A1, en lisant une seule fois chaque entrée. Le résultat est très bon.

Voir ICI.

@+

Oui, ça m'a étonné moi même, surtout la très grande instabilité.
Mais la différence est très visible: je lance le programme que j'ai mis et la valeur lue semble correcte et est très stable, sans rien toucher je mets en commentaire les analogRead() à vide et relance le programme, et la mesure se décale vers le haut et surtout devient très fluctuante (ce que je ne m'explique pas vraiment).

Cela me laisse perplexe ...

merci

@+