Economie / programme température

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 :wink:

Bonjour

-pour les modes d'économie d'énergie LA page de référence est celle de Nick Gammon

-Si tu tiens absolument à la pile de 9V il faut envisager une alimentation à découpage abaisseuse, ou convertisseur "DC/DC buck" qui permettra l'abaissement de tension avec régulation sans gaspiller autant d'énergie qu'un régulateur linéaire.

-S'il ne s'agit que d'une mesure de température avec affichage sur LCD 2 lignes une carte Miini 3,3V / 8MHz permettra avec un mode sleep d'atteindre un bien meilleure autonomie.

Attention tous les LCD 2 lignes ne fonctionnent pas correctement sous 3,3V (affichage illisible par absence totale de contraste quelque soit le réglage du potentiometre))

Merci pour la réponse , je vais jeter un oeil du coté du lien sus-cité.
Et oui, mon LCD avec du 3.3 est vraiment très peu lisible...

Et l'image c'est juste pour le fun, je viens de découvrir fritzing :wink:

Je reviens vers vous, si problème pour la compréhension du mode d'énergie