Go Down

Topic: thermomètre avec écran lcd (Read 4869 times) previous topic - next topic

nono21

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:
Code: [Select]
#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 :)

icare

Bonsoir,
As-tu monté le potentiomètre de réglage de ton contraste LCD ?
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

nono21

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

icare

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.
@+
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

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.
Christian

icare

Bonsoir,

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.
@+
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

nono21

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

icare

#7
Jan 07, 2014, 09:16 pm Last Edit: Jan 07, 2014, 09:18 pm by icare Reason: 1
Bonsoir,

Merci pour vos conseils ! maintenant je n'ai plus de problèmes avec mon écran lcd :) .
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  :smiley-mr-green:
GETA : http://playground.arduino.cc/Main/LM35HigherResolution
Il y en a d'autres, fait au moins l'effort de chercher, par exemple, dans playground (http://playground.arduino.cc/)
@+
[edit] ou bien : https://www.google.com/search?btnG=1&pws=0&q=lm35+arduino
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

john_lenfr

#8
Jan 08, 2014, 04:05 pm Last Edit: Jan 08, 2014, 04:06 pm by john_lenfr Reason: 1
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:

Code: [Select]
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.

;)

nono21

Justement, j'ai fais ça comme code:
Code: [Select]
#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 :)

icare

Bonsoir,
Essaye le code ci-dessous :
Code: [Select]
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.
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

john_lenfr

Quote

Code: [Select]

  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);
}

 

B@tto

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

Code: [Select]

  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
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

nono21

Merci a tous !  :)
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  :)

Christian_R

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.
Christian

Go Up