Der analoge Temperatursensor LM393, dient nicht nur zum Temperaturmessen, sondern kann auch durch den verbauten Drehpotentiometer auf einen Wert zwischen 20 °C und 80 °C eingestellt werden. Beim Erreichen der Temperatur wird ein HIGH Signal auf den digitalen Ausgang gelegt.
Technische Daten des LM393
- Betriebsspannung – 3.3V bis 5V
- Ausgangsstrom – 15mA
- Abmaße – 35 mm x 15 mm
- Temperaturmessbereich – +20 °C bis +80 °C
Anschluss
Der Sensor verfügt über 4 Pins welche wie folgt mit dem Arduino UNO verbunden werden.
LM393 | Arduino UNO |
---|---|
A0 | analoger Pin A0 |
+ | 5V |
G | GND |
D0 | digitaler Pin 7 |
Schaltung
Einstellen des Schwellwertes
Der Schwellwert des Temperatursensors wird über einen Drehpotentiometer eingestellt.
Dreht man diesen im Uhrzeigersinn so wird der Schwellwert erhöht und dreht man diesen gegen den Uhrzeigersinn so wird dieser Wert verkleinert.
Da dieser Sensor „nur“ einen Momentanen Temperaturwert ausgeben kann, muss hier etwas experimentiert werden wenn man einen ganz bestimmten Schwellwert haben möchte. Hier schwächelt der Sensor leider etwas.
Wenn der Schwellwert erreicht ist, dann wird der digitale Ausgang des Sensors auf HIGH gesetzt sowie wird eine onboard LED eingeschaltet und es kann ein weiterer Aktor geschaltet werden.
Quellcode
const int digitalPin = 7; //D0 vom LM393 const int analogPin = A0; //A0 vom LM393 const int ledPin = 13; // internet LED an Pin 13 //Der MakerUNO verfügt über einen verbauten Piezobuzzer //dieser wird über den Pin 8 angesprochen. const int buzzerPin = 8; void setup(){ Serial.begin(9600); //Beginn der seriellen Kommunikation mit 9600 baud pinMode(ledPin, OUTPUT); pinMode(buzzerPin, OUTPUT); pinMode(digitalPin, INPUT); } void loop(){ //lesen des analogen Wertes int analogValue = analogRead(analogPin); //lesen des zustandes, Schwellwert erreicht / nicht erreicht boolean state = digitalRead(digitalPin); //Ausgabe ob der Schwellwert erreicht wurde. Serial.print("digitaler Ausgang ist "); Serial.println(state==HIGH?"AN": "AUS"); //Ausgabe der Temperatur. Serial.print("Temperatur:"); Serial.println(getTempC(analogValue)); //Wenn der Schwellwert des Temperatursensors erreicht //wurde, dann soll die interne LED am PIN 13 aufleuchten. digitalWrite(ledPin,state); //Wenn der Schwellwert erreicht wurde so soll ein Ton erzeugt werden. //Hier könnte man auch ein Relais anschließen oder sonstige andere Aktoren //welche auf den Umstand hinweisen sollen. if(state==HIGH){ tone(buzzerPin, 1000, 500); } delay(1000); //kleine Pause von 1 Sekunde. } double getTempC(int analogValue){ int mappedAnalogValue = map(analogValue, 0, 1023, 1023, 0); double tempC = log(((10240000 / mappedAnalogValue) - 10000)); tempC = 1 / (0.001129148 + (0.000234125 * tempC) + (0.0000000876741 * tempC * tempC * tempC)); tempC = tempC - 273.15; return tempC; }