Dieses Programm funktioniert. Bitte LCD und LM35 wie in den
Kommentaren anschliessen.
/*Sketch getestet 18.07.2013*/
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#define LCD_CLEAR 0b00000001
float temp;
float tempF;
int tempPin = 1;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
}
void loop() {
temp = analogRead(tempPin);
temp = temp * 5/1024*100;
tempF = ((temp*9)/5) + 32;
lcd.setCursor(0, 0);
lcd.print(temp);
lcd.print("C");
lcd.setCursor(0,2);
lcd.print(tempF);
lcd.print("F");
delay(5000);
lcd.clear();
Serial.println(temp);
}
Einige werden sich wundern das die Temperatur nicht stimmt. Das liegt daran das der A/D Wandler die Betriebsspannung als Referenzspannung für die Umrechnung benutzt. Wenn man den Arduino nur über die Spannung der USB Schnittstelle Betreibt ist die Spannung meistens zu niedrig.
Abhilfe schafft da ein externes Netzteil um zu gewährleisten das in der Standardprogrammierung Uref = Ubb = 5V ist.
Weiterhin ändert sich das Ergebnis jedesmal. Das Problem beseitigt ein 100nf über der Betriebspannung direkt am LM35.
Man kann auch, wie im unterem Beispiel die interne Referenz des Atmegacontollers wählen und die liegt hier bei 1,1 V. Das hier wäre ideal. Der LM35 mißt 1 -100 Grad und gibt 0 - 1V aus.
Die dritte Möglich wäre eine externe Referenzspannung ( Achtung max 5V) zu wählen. analogReference(external); Hier verschenkt man den Bereich 1,1 - 5V
Dieses Programm funktioniert. Ausgabe auf den Monitor in den Arduino Tools.
//Aktuell Version Mai 2014
int Sensorport = 0;
float temperatur;
void setup() {
Serial.begin(9600);
analogReference(INTERNAL); // !! Einschalten der internen //Referenzspannung. Beim Uno (Atemge 328p) 1,1Volt
}
void loop()
{ temperatur= analogRead(Sensorport);
delay(20); //warten 20ms
temperatur = temperatur * 1.1 / 10.24 ;
Serial.println(temperatur);
delay(1000);
}