Bonjour à tous,
Étant débutant, voilà quelques heures à présent que je bloque sur ceci :
J'ai pour le moment :
- 1 arduino pro mini 5V/16Mhz
- 1 écran adafruit relié en I2C,
- une sonde LM35DZ sur un pin analogique
- et 1 pont résistif (me permettant de mesurer une tension proche de 12V) sur un autre pin analogique.
J'ai été heurté au fameux problème de l'analogique ou les différentes entrées interfèrent, que j'ai résolues avec ceci :
analogRead(......);
delay(20);
second appel analogRead..........
Mon problème est la mesure de température qui n'est pas très précise sans ceci "analogReference(INTERNAL);", mais pour une mesure de tension, l'analogReference(INTERNAL); n'est pas envisageable (comme le confirment certains autres posts), celui-ci fausse toutes les mesures lors d'une mesure de tension.
Avez-vous une solution sur ce point ? N'est-il pas possible d'activer l'analogReference pour un seul pin ou l'activer juste le temps de la lecture de la sonde ?
voici mon code :
.......
float THERMO_PIN = A0; // Emplacement LM35DZ
int TENS_12V_PIN = A2; // Emplacement Pont résistif 12V
static const byte BUZZER_PIN = A1; // Emplacement Buzzer
float thermo_temp; // température en degrés celcius
int tens_12V = 0; // lecture brute de l'entrée analogique (0 à 1024)
float tension; // variable intermédiaire pour le calcul des tensions
// -- Pont résistif 12V
float TENSR1_12V = 270000.0;
float TENSR2_12V = 100000.0;
// -- End
void setup() {
Serial.begin(9600);
//analogReference(INTERNAL);
pinMode(BUZZER_PIN, OUTPUT);
// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3D); // initialize with the I2C addr 0x3D (for the 128x64)
// init done
display.clearDisplay();
display.drawBitmap(0, 10, logo, 40, 40, 1);
// text display tests
display.setTextColor(WHITE);
display.setCursor(40,20);
display.setTextSize(2);
display.print("Splash");
//display.drawLine(0, 8, display.width(), 8, WHITE);
display.setCursor(42,35);
display.setTextSize(1);
display.print("Screen");
display.display();
delay(5000);
display.clearDisplay();
//tone(BUZZER_PIN, 500, 500);
}
void loop() {
// -- mesure température
analogRead(THERMO_PIN);
delay(20);
thermo_temp = analogRead(THERMO_PIN) * (5.0 * 1000 / 1024) / 10 ; // conversion en celcius
display.setCursor(0, 0); // affichage -- START
display.setTextSize(1);
display.print(thermo_temp,1);
display.println("'C");
display.setCursor(20, 15);
display.setTextSize(2);
display.print("Celsius"); // affichage -- END
// -- End
// mesure tension 12V
analogRead(TENS_12V_PIN);
delay(20);
tens_12V = analogRead(TENS_12V_PIN);
tension = map(tens_12V, 0, 1023, 0, 5000); // conversion en mV
tension = tension / 1000; // conversion des mV en V
tension = (tension / (TENSR2_12V /(TENSR1_12V + TENSR2_12V))) / 1.0152; // facteur de correction 1.0152
display.setCursor(0, 35); // affichage -- START
display.setTextSize(1);
display.print(tension);
display.println("V (+12V)"); // affichage -- END
// -- End
display.display();
delay(600);
display.clearDisplay();
// if (THERMO_TEMP > 25){
// tone(BUZZER_PIN, 440, 500);
// }
}
Merci bien !