6.3 Hochtemperaturalarm

Als Nächstes werden wir mithilfe von Thermistor, Druckknopf, Potentiometer und LCD ein Hochtemperaturalarmgerät bauen. Das LCD1602 zeigt die vom Thermistor erfasste Temperatur sowie den Hochtemperaturschwellenwert an, der mit einem Potentiometer eingestellt werden kann. Der Schwellenwert wird gleichzeitig auf dem EEPROM gespeichert. Überschreitet die aktuelle Temperatur den Schwellenwert, ertönt der Summer.

Benötigte Komponenten

Für dieses Projekt benötigen wir folgende Komponenten.

Es ist definitiv praktisch, ein komplettes Set zu kaufen, hier ist der Link:

Name

ARTIKEL IN DIESEM SET

LINK

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

Sie können sie auch einzeln über die untenstehenden Links kaufen.

KOMPONENTENBESCHREIBUNG

KAUF-LINK

SunFounder R3 Platine

BUY

Breadboard

BUY

Jumper-Kabel

BUY

Widerstand

BUY

Summer

-

Knopf

BUY

I2C LCD1602

BUY

Thermistor

BUY

Potentiometer

BUY

Schaltplan

../_images/wiring_high_tem.png

Verdrahtung

../_images/tem_alarm.png

Code

Bemerkung

  • Sie können die Datei 6.3.high_tem_alarm.ino direkt im Pfad 3in1-kit\basic_project\6.3.high_tem_alarm öffnen.

  • Oder kopieren Sie diesen Code in die Arduino IDE 1/2.

  • Hier wird die Bibliothek LiquidCrystal I2C verwendet. Sie können sie aus dem Library Manager installieren.

    ../_images/lib_liquidcrystal_i2c.png

Nachdem der Code erfolgreich hochgeladen wurde, zeigt das LCD1602 die vom Thermistor erfasste Temperatur sowie den Hochtemperaturschwellenwert an, der mit einem Potentiometer eingestellt werden kann. Der Schwellenwert wird gleichzeitig auf dem EEPROM gespeichert. Überschreitet die aktuelle Temperatur den Schwellenwert, ertönt der Summer.

Bemerkung

Wenn der Code und die Verkabelung korrekt sind, das LCD jedoch immer noch keinen Inhalt anzeigt, können Sie das Potentiometer auf der Rückseite drehen.

Wie funktioniert das?

  1. Initialisieren Sie den Knopf, den Summer und das I2C LCD1602 und lesen Sie die EEPROM-Werte aus. Hier wird auch ein Interrupt verwendet, um den Status des Knopfes zu lesen.

    void setup()
    {
        pinMode(buzzerPin, OUTPUT);
        pinMode(buttonPin, INPUT);
        lcd.init();
        lcd.backlight();
        upperTem = EEPROM.read(0);
        delay(1000);
        attachInterrupt(digitalPinToInterrupt(buttonPin), buttonState, FALLING);
    }
    
    • Der Interrupt wird hier verwendet, um den Zustand des Knopfes zu lesen. Wenn der Knopf gedrückt wird, wechselt buttonPin von niedrig auf hoch.

    • Die Funktion buttonState wird aufgerufen, wenn der Interrupt ausgelöst wird, und sie wechselt den Wert der Variable state.

    • FALLING bedeutet, dass der Interrupt auftritt, wenn buttonPin von niedrig auf hoch geht.

  2. Um den Hochtemperaturschwellenwert festzulegen, wird die Funktion upperTemSetting() aufgerufen, wenn state 1 ist (state wechselt zwischen 0 und 1 bei Knopfdruck) im Hauptprogramm, ansonsten wird monitoringTemp() aufgerufen, um die aktuelle Temperatur und den eingestellten Schwellenwert anzuzeigen.

    void loop()
    {
        if (state == 1)
        {
            upperTemSetting();
        }
        else {
            monitoringTemp();
        }
    }
    
  3. Über die Funktion upperTemSetting().

    void upperTemSetting()
    {
        int setTem = 0;
    
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Adjusting...");
        lcd.setCursor(0, 1);
        lcd.print("Upper Tem: ");
    
        while (1) {
            lcd.setCursor(11, 1);
            setTem = map(analogRead(potPin), 0, 1023, 0, 100);
            lcd.print(setTem);
            if (state == 0)
            {
                EEPROM.write(0, setTem);
                upperTem = setTem;
                lcd.clear();
                return;
            }
        }
    }
    
    • Mit dieser Funktion kann ein Schwellenwert festgelegt werden. Betreten Sie diese Funktion, zeigt das LCD1602 den aktuellen Schwellenwert an, der mit dem Potentiometer geändert werden kann. Dieser Schwellenwert wird im EEPROM gespeichert und beim erneuten Drücken des Knopfes verlassen.

  4. Über die Funktion monitoringTemp().

    void monitoringTemp()
    {
    long a = analogRead(temPin);
    float tempC = beta / (log((1025.0 * 10 / a - 10) / 10) + beta / 298.0) - 273.0;
    float tempF = 1.8 * tempC + 32.0;
    lcd.setCursor(0, 0);
    lcd.print("Temp: ");
    lcd.print(tempC);
    lcd.print(char(223));
    lcd.print("C   ");
    lcd.setCursor(0, 1);
    lcd.print("Upper: ");
    lcd.print(upperTem);
    lcd.print(char(223));
    lcd.print("C   ");
    delay(300);
    if (tempC >= upperTem)
    {
        digitalWrite(buzzerPin, HIGH);
        delay(50);
        digitalWrite(buzzerPin, LOW);
        delay(10);
    }
    else
    {
        digitalWrite(buzzerPin, LOW);
    }
    }
    
    • Mit dieser Funktion können Sie die Temperatur anzeigen und einen Alarm einstellen.

    • Der Wert des Thermistors wird gelesen und dann mittels der Formel in die Celsius-Temperatur umgerechnet und auf dem LCD1602 angezeigt.

    • Der eingestellte Schwellenwert wird ebenfalls auf dem LCD angezeigt.

    • Wenn die aktuelle Temperatur höher als der Schwellenwert ist, gibt der Summer einen Alarm aus.