thermomètre avec écran lcd

Bonjour à tous,
Comme je le dis dans le titre, j'aimerai réaliser un thermomètre qui affiche la température sur un écran lcd, mais je rencontre quelques problèmes: - je n'ai pas trouver comment convertir ce qui arrive de mon lm35 en celcius.

  • Mon écran lcd affiche des "y", des" /", etc
  • Je n'arrive pas bien à distinguer les caractères de mon écran lcd car il est trop clair. faut-il mettre des résistances dans le branchement ? (quand je diminue de 5 la valeur de la luminosité de l'écran, je ne vois plus rien)
    Mon code:
#include <LiquidCrystal.h>
LiquidCrystal lcd(2,3,4,5,10,12);
int outputpin= 0;
void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  analogWrite(13, 130);
  lcd.begin(16,2);
  lcd.clear();
  lcd.setCursor(1,2);
  lcd.print("température: ");
}

void loop() {
int rawvoltage= analogRead(outputpin);
float millivolts= (rawvoltage/1024.0) * 5000;
float celsius= millivolts/10;  
lcd.autoscroll();
lcd.setCursor(16,1);
lcd.print(celsius);
Serial.println(celsius);
delay(1000);
}

Mon câblage: vss-->ground // vdd-->5V // V0-->ground // rs-->pin12 // rw-->ground // E-->10 // D4-->pin 5 // D5-->pin4 // D6--> pin3 // D7--> pin2 // A--> pin13 // k-->ground
(dimensions de mon écran 16X2)

Merci d'avance :slight_smile:

Bonsoir,
As-tu monté le potentiomètre de réglage de ton contraste LCD ?

Non, car on disait qu'il fallait mettre un 10K et le seul que je possède est un 50K. Dois-je le mettre ?
Et pour les autres questions avez vous des réponses ?
Merci :slight_smile:

Bonsoir,
Utilise le potar de 50k, il fera l'affaire. Regarde dans le datasheet du LCD comment le brancher.
Si non donne nous les références du LCD.
@+

Oui le potentiomètre permet d'ajuster le contraste de l'écran.
Tu peux éventuellement combiner ton potentiomètre 50k avec des résistances fixes en série et parallèle pour être dans la bonne plage de valeurs.

Bonsoir,

Christian_R:
Oui le potentiomètre permet d'ajuster le contraste de l'écran.
Tu peux éventuellement combiner ton potentiomètre 50k avec des résistances fixes en série et parallèle pour être dans la bonne plage de valeurs.

Si tu veux transformer ton potar 50k en 10k, il faut mettre une résistance de 12k en parallèle avec les bornes extrême du potar.
Si tu veux transformer ton potar 50k en 20k, il faut mettre une résistance de 33k en parallèle avec les bornes extrême du potar.
Juste pour l'info : si ton potar à une variation linéaire (type A), le résultat avec la mise en // d'une résistance transforme la forme de la variation (patatoïde). Mais cela n'empêche pas le fonctionnement.
@+

Merci pour vos conseils ! maintenant je n'ai plus de problèmes avec mon écran lcd :slight_smile: .
Mais avez-vous une idée pour la conversion en celsius avec mon lm 35 ?

Bonsoir,

nono21:
Merci pour vos conseils ! maintenant je n'ai plus de problèmes avec mon écran lcd :slight_smile: .
Mais avez-vous une idée pour la conversion en celsius avec mon lm 35 ?

Tu veux quoi ? Que l'on te fournisse le code :grin:
GETA : Arduino Playground - HomePage
Il y en a d'autres, fait au moins l'effort de chercher, par exemple, dans playground (http://playground.arduino.cc/)
@+
[edit] ou bien : lm35 arduino - Google Search

Tu peux t'inspirer de ce que j'ai fait ici:
MiniClockT

Pour le détail du code sur la conversion celsius voici ma méthode:

float lm35dz(){
  analogRead(3);// pour éviter le rebond et éviter d'avoir une valeur fausse à la lecture
  delay(10);
  reading = analogRead(3); //LM35DZ connect to Analog pin 3
  //convert the voltage into temperature because the LM35DZ is at 10mV per °C
  voltage = reading * 5.0 / 1024.0;
  temperature = voltage * 100 ;
  return temperature;
}

Ne pas supprimer le premier AnalogRead qui permet de ne pas lire une valeur fausse

Le code avec les librairies est téléchargeable ici.

:wink:

Justement, j'ai fais ça comme code:

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int backLight = 13;

void setup() {
  Serial.begin(9600);
  pinMode(backLight, OUTPUT);        	
  analogWrite(backLight, 200);       
  lcd.begin(16,2);                		
  lcd.clear();                    		
  lcd.setCursor(0,0);             		
  lcd.print("Temperature:");
}

void loop() {
  int temperature;
  int reading = analogRead(A0);
  int voltage = reading * 5.0 / 1024.0;
  temperature = voltage * 100 ;
  lcd.setCursor(0, 1);
  lcd.print(temperature);
  delay(2000);
  
}

Mais come température, j'obtiens 0. Où est le problème ? je ne trouve pas
merci encore :slight_smile:

Bonsoir,
Essaye le code ci-dessous :

void loop() {
//  int temperature;
  float temperature;
  int reading = analogRead(A0);
 // int voltage = reading * 5.0 / 1024.0;
  float voltage = reading * 5.0 / 1024.0;
  temperature = voltage * 100 ;
  lcd.setCursor(0, 1);
//  lcd.print(temperature);
  lcd.print(temperature, 1);
  delay(2000);
}

On peut le faire avec des int mais dans ce cas il faut réfléchir sur l'ordre des opérations pour ne pas tronquer des données significatives.

  void loop() {

analogRead(A0);
  delay(10);
  float temperature;
  int reading = analogRead(A0);
  float voltage = reading * 5.0 / 1024.0;
  temperature = voltage * 100 ;
  lcd.setCursor(0, 1);
  lcd.print(temperature, 1);
  delay(2000);
}

Le problème est ici (comme signalé dans les post avant avant) :

  int voltage = reading * 5.0 / 1024.0;

A la compilation 5.0/1024.0 va être calculé (et oui c'est toujours une opération en moins !) et (sauf erreur de ma part) comme il s'agit d'un integer auquel tu attribues le résultat, et bien ce petit rapport va être "stocké" en integer, donc valoir 0 puisque le résultat est 0.0048

Merci a tous ! :slight_smile:
j'ai donc réussi à faire ce que je voulais. Dans mon code j'ai juste remplace int par float et ça a fonctionner !
Mais j'ai encore une toute petite question: Est-ce que je peux remplacer le potentiomètre par une résistance ?
MERCI :slight_smile:

Oui, mais ça ne sera plus réglable.
Mesure la résistance aux bornes du potentiomètre une fois réglé pour trouver la bonne valeur.