Crazy-Electronic.de Crazy-Electronic.de
  • +49 5032 893130
  • info@crazy-electronic.de
Sign In
Crazy-Electronic.de Crazy-Electronic.de
  • Home
  • Bauteile und Bausätze
  • Arduino
  • ESP8266 / ESP32
  • RP2040
Arduino 19. Oktober 2023 Zugriffe: 722

Temperatur richtig messen

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

 

Arduino 19. Oktober 2023 Zugriffe: 676

Temperatur mit LM35 messen.

Der Arduino hat  einem 10Bit A/D Wandler mit 6 analogen Eingängen .  Mit 10Bit kann er also eine Spannungen zwischen 0 und 5 Volt in einen digitaler Wert zwischen 0 und 1023 wandeln . Aus 5Volt werden also 1024 Einzelschritte. Wenn man jetzt 5V durch 1024 dividiert erhält man 0,004883 gerundet. Das ist der Abstand der Einzelschritte.

Thermometer mit LM35 gebaut von Johannes KrummDer LM35 hat einen Messbereich von 0 - 100°C der am mittlerem Pin als Spannung in 0,01V Schritten /°C ausgegeben wird. 5°C sind also 0,05V oder 28°C sind dann 0,280 V.

Zur Programmierung:

Ergebnis = analogRead(0)
Bei 28 °C wäre Ergebnis =     57

Temperatur = Ergebis *5 /1024
 Tempreatur wäre 0,2783 

Temperatur = Temperatur * 100
Ich muss das mit dem Komma ja noch hinbiegen.

Alles zusammengefastt in einer Zeile wäre dann
Ergebnis = analogRead(0) *5 / 1024*100

Mit Hilfe der Gleitkommafunktion des Ardunios kommt man auf ein sehr genaues Ergebnis. Der LM35 kann aber nur auf  0,5 °C genau messen.

Häufig gibt es Schwankungen von mehreren Grad von Messung zu Messung. Einige haben Klimmzüge gemacht und messen 20 mal und errechen dann den Durchschnitt. Ich habe heute mal einen Kerko 100nf direkt am LM35 angelötet. Jetzt misst das Ding genau. Die Messung funktioniert auch nur genau wenn die Betriebspannung geanu 5V ist. Bei Abweichungen sollte man auf die interne Referenzspannung zugreifen. Beim Atmege 328 sind das 1,1V . Die Formal zur Berechnung ist demenstprechend zu ändern.

Achtung externe Referenzspannung und Spannung von über 5V an den Eingängen lassen den Arduino in Rauch aufgehen

( Garantieverlust)

lm35dz


Vertauschen sie plus und minus nicht, dann werden die Dinger heiss.

Testprogramme unter dem Menupunkt Temperatur richtig messen.

 

Negative Temperaturen messen ist mit mehreren Klimmzügen möglich. Einfacher ist es aber mit einem LM335Z oder 1Wire Termometer wie zb. das  18B20.

 
 
Arduino 19. Oktober 2023 Zugriffe: 670

Der Uno

Der Arduino ist eigentlich nichts anderes als ein Atmega µContoller (beim Uno ein Atmega328) dem man in ein kompatibles Stecksystem gebaut und mit einer komfortablen Programmierumgebung versehen hat.
Da Atmega nicht direkt an einer USB Schnittstelle funktioniert wurde dem Bord noch ein Atmega16u verpasst der die USB Schnittstelle händelt. Im Atemga328  ist eine Bootsoftware installiert die die Software über die serielle Schnittstelle lädt.  Wer die Programmierumgebung nicht benötigt kann auch über die ISP Schnittstelle programmieren. Der Bootloader lässt sich auch entfernen dann hat man noch mehr Speicher zur Verfügung es ist dann aber kein Arduino mehr.

Die Entwicklungsumgebung bekommt man hier.

Seite 2 von 2

  • 1
  • 2
  • Impressum
  • Anfahrt
  • Home
  • Bauteile und Bausätze
  • Arduino
  • ESP8266 / ESP32
  • RP2040