Bonjour
En apprentissage....
Pour mes premiers pas, j'ai testé un sketch avec 1 LCD, 1 TMP 36
Tout simplement afficher la température sur le LCD.
Mon premier sketch était celui-là :
#include <LiquidCrystal.h>
// Pin du capteur
const int sensorPin = A0;
// Constantes du LCD
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup()
{
Serial.begin(9600);
lcd.begin(16,2);
lcd.print("Affichage");
lcd.setCursor(0,1);
lcd.print("Temperature");
delay(1000);
}
void loop()
{
// Lecture de la valeur du capteur
int tmpSensorVal = analogRead(sensorPin);
// Calcul du volatge et conversion en degré Celsius
float voltage = tmpSensorVal * 5.0;
voltage /= 1024.0;
float temperatureC = (voltage - 0.5) * 100 ;
// DEBUG
lcd.clear();
lcd.print(tmpSensorVal);
lcd.setCursor(8,0);
lcd.print("V:");
lcd.print(voltage);
lcd.setCursor(0,1);
lcd.print("Temp.:");
lcd.print(temperatureC);
lcd.print("C");
delay(1000);
}
Donc rien de bien compliqué, fonctionnel.
Par contre j'ai voulu le tester avec une pile 9 VOLT, branchée le + sur le Vin et le - sur le -.
Surprise, le lendemain matin, la pile était HS
Je me suis dis qu'il fallait donc économiser au mieux les ressources. De ce fait , j'ai modifié le programme
- Affichage LCD : séparation des données qui variées et des données fixes
- Affichage LCD : plus en continu mais sur demande. Ajout d'un switch
- le calcul de la tempéturature (conversion de la valeur du capteur en degré celsius) : ne se fait que s'il y a eu un changement de température (donc une variation de la valeur du capteur).
Le second programme est donc celui là
#include <LiquidCrystal.h>
// Décl des pins
const int sensorPin = A0;
const int switchPin = 13 ;
int previousTmpSensorVal = 0 ;
float voltage = 0.0;
float temperatureC = 0.0;
int switchState = 0 ;
// Constantes du LCD
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
pinMode(13, INPUT);
lcd.begin(16,2);
lcd.print("Affichage");
lcd.setCursor(0,1);
lcd.print("Temperature");
delay(1000);
// Reinitialisation LCD
lcd.clear();
}
void loop()
{
// Lecture de la valeur du capteur
int tmpSensorVal = analogRead(sensorPin);
// Lecture de l'interrupteur
switchState = digitalRead(switchPin);
lcd.setCursor(15,1);
lcd.print(switchState);
// Valeurx Fixes du LCD
lcd.setCursor(8,0);
lcd.print("V:");
lcd.setCursor(0,1);
lcd.print("Temp.:");
lcd.setCursor(12,1);
lcd.print("C");
// Si changement capteur, on (re)calcule la temperature
if (tmpSensorVal != previousTmpSensorVal ) {
// Calcul du volatge et conversion en degré Celsius
voltage = tmpSensorVal * 5.0;
voltage /= 1024.0;
temperatureC = (voltage - 0.5) * 100 ;
previousTmpSensorVal = tmpSensorVal ;
}
// Affichage sur demande (appui switch)
if (switchState == 1) {
// Affichage LCD
lcd.display();
lcd.setCursor(0,0);
lcd.print(tmpSensorVal);
lcd.setCursor(10,0);
lcd.print(voltage);
lcd.setCursor(7,1);
lcd.print(temperatureC);
delay(10000);
} else { // On éteint le LCD
lcd.noDisplay();
}
delay(500);
}
Je pense donc qu'il y a eu une amélioration, mais bon c'est sûrement perfectible.
Mes questions
- gestion d'énergie de la carte. Recherche d'une lecture accessible. Il doit bien y avoir des modes d'économie d'énergie. Si vous connaissiez une doc pour débutant, je suis preneur
- Je veux rester sur une alimentation pile 9volts, pas sur de l'USB. D'après ce que j'ai lu c'est une manière de contourner le problème
- Enfin, une dernière question. Si j'utilise du 3.3 Volts, j'utiliserai moins d'énergie et les mesures seront plus précises (d'après la oc du tmp 36). J'ai 2 résistances de 10 kilosOhms (une pour le LCD, 1 pour le switch). Je pense qu'il faut que je les adapte à cette tension, non. Comment je calcule la valeur des nouvelles résistances ?
D'avance, un grand merci