.. note:: Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten. **Warum beitreten?** - **Expertenunterstützung**: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams. - **Lernen & Teilen**: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern. - **Exklusive Vorschauen**: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken. - **Spezialrabatte**: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte. - **Festliche Aktionen und Gewinnspiele**: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil. 👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [|link_sf_facebook|] und treten Sie heute bei! .. _4.1.13_py: 4.1.13 Überhitzungsüberwachung ================================ .. note:: .. image:: ../img/mcp3008_and_adc0834.jpg :width: 25% :align: left Abhängig von Ihrer Kit-Version identifizieren Sie bitte, ob Sie **ADC0834** oder **MCP3008** haben, und fahren Sie mit dem entsprechenden Abschnitt fort. Einführung ------------------- Möglicherweise möchten Sie ein Überhitzungsüberwachungsgerät erstellen, das für verschiedene Situationen geeignet ist, z. B. in einer Fabrik, wenn wir einen Alarm wünschen und die Maschine bei einer Schaltkreisüberhitzung rechtzeitig automatisch ausschalten möchten. In diesem Projekt werden wir einen Thermistor, einen Joystick, einen Summer, eine LED und ein LCD verwenden, um ein intelligentes Temperaturüberwachungsgerät zu erstellen, dessen Schwellenwert einstellbar ist. Benötigte Komponenten ------------------------------ Für dieses Projekt benötigen wir die folgenden Komponenten. .. image:: ../img/list_Overheat_Monitor.png :align: center Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Name - ARTIKEL IN DIESEM KIT - LINK * - Raphael Kit - 337 - |link_Raphael_kit| Sie können sie auch separat über die untenstehenden Links kaufen. .. list-table:: :widths: 30 20 :header-rows: 1 * - KOMPONENTENBESCHREIBUNG - KAUF-LINK * - :ref:`cpn_gpio_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_resistor` - |link_resistor_buy| * - :ref:`cpn_led` - |link_led_buy| * - :ref:`cpn_joystick` - \- * - :ref:`cpn_adc0834` - \- * - :ref:`cpn_transistor` - |link_transistor_buy| * - :ref:`cpn_i2c_lcd` - |link_i2clcd1602_buy| * - :ref:`cpn_thermistor` - |link_thermistor_buy| * - :ref:`cpn_buzzer` - \- Schaltplan -------------------------- ============ ======== ======== === T-Board Name physical wiringPi BCM GPIO17 Pin 11 0 17 GPIO18 Pin 12 1 18 GPIO27 Pin 13 2 27 GPIO22 Pin15 3 22 GPIO23 Pin16 4 23 GPIO24 Pin18 5 24 SDA1 Pin 3 SCL1 Pin 5 ============ ======== ======== === .. image:: ../img/Schematic_three_one8.png :align: center Experimentelle Verfahren ----------------------------- **Schritt 1:** Bauen Sie den Schaltkreis auf. .. image:: ../img/image258.png **Schritt 2**: Navigieren Sie zum Ordner des Codes. .. raw:: html .. code-block:: cd ~/raphael-kit/python/ **Schritt 3**: Führen Sie die ausführbare Datei aus. .. raw:: html .. code-block:: sudo python3 4.1.13_ÜberhitzungsMonitor.py Wenn der Code ausgeführt wird, werden die aktuelle Temperatur und der Hochtemperaturschwellenwert **40** auf dem **I2C LCD1602** angezeigt. Wenn die aktuelle Temperatur größer als der Schwellenwert ist, werden der Summer und die LED gestartet, um Sie zu alarmieren. Der **Joystick** dient hier zum Einstellen des Hochtemperaturschwellenwerts. Das Kippen des **Joysticks** in Richtung der X- und Y-Achse kann den aktuellen Hochtemperaturschwellenwert anpassen (erhöhen oder verringern). Drücken Sie den **Joystick** erneut, um den Schwellenwert auf den Anfangswert zurückzusetzen. .. note:: * Bei dem Fehler ``FileNotFoundError: [Errno 2] No such file or directory: '/dev/i2c-1'`` müssen Sie :ref:`i2c_config` konsultieren, um den I2C zu aktivieren. * Wenn der Fehler ``ModuleNotFoundError: No module named 'smbus2'`` auftritt, führen Sie bitte ``sudo apt install python3-smbus2`` aus. * Wenn der Fehler ``OSError: [Errno 121] Remote I/O error`` erscheint, bedeutet dies, dass das Modul falsch verdrahtet ist oder das Modul defekt ist. * Wenn der Code und die Verkabelung in Ordnung sind, das LCD jedoch weiterhin keinen Inhalt anzeigt, können Sie das Potentiometer auf der Rückseite drehen, um den Kontrast zu erhöhen. **Code** .. note:: Sie können den untenstehenden Code **Ändern/Zurücksetzen/Kopieren/Ausführen/Stoppen**. Aber zuerst müssen Sie zum Quellcode-Pfad wie ``raphael-kit/python`` navigieren. Nach dem Ändern des Codes können Sie ihn direkt ausführen, um den Effekt zu sehen. .. raw:: html .. code-block:: python #!/usr/bin/env python3 import LCD1602 import RPi.GPIO as GPIO import ADC0834 import time import math Joy_BtnPin = 22 buzzPin = 23 ledPin = 24 upperTem = 40 def setup(): ADC0834.setup() GPIO.setmode(GPIO.BCM) GPIO.setup(ledPin, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(buzzPin, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(Joy_BtnPin, GPIO.IN, pull_up_down=GPIO.PUD_UP) LCD1602.init(0x27, 1) def get_joystick_value(): x_val = ADC0834.getResult(1) y_val = ADC0834.getResult(2) if(x_val > 200): return 1 elif(x_val < 50): return -1 elif(y_val > 200): return -10 elif(y_val < 50): return 10 else: return 0 def upper_tem_setting(): global upperTem LCD1602.write(0, 0, 'Upper Adjust: ') change = int(get_joystick_value()) upperTem = upperTem + change strUpperTem = str(upperTem) LCD1602.write(0, 1, strUpperTem) LCD1602.write(len(strUpperTem),1, ' ') time.sleep(0.1) def temperature(): analogVal = ADC0834.getResult() Vr = 5 * float(analogVal) / 255 Rt = 10000 * Vr / (5 - Vr) temp = 1/(((math.log(Rt / 10000)) / 3950) + (1 / (273.15+25))) Cel = temp - 273.15 Fah = Cel * 1.8 + 32 return round(Cel,2) def monitoring_temp(): global upperTem Cel=temperature() LCD1602.write(0, 0, 'Temp: ') LCD1602.write(0, 1, 'Upper: ') LCD1602.write(6, 0, str(Cel)) LCD1602.write(7, 1, str(upperTem)) time.sleep(0.1) if Cel >= upperTem: GPIO.output(buzzPin, GPIO.HIGH) GPIO.output(ledPin, GPIO.HIGH) else: GPIO.output(buzzPin, GPIO.LOW) GPIO.output(ledPin, GPIO.LOW) def loop(): lastState=1 stage=0 while True: currentState=GPIO.input(Joy_BtnPin) if currentState==1 and lastState ==0: stage=(stage+1)%2 time.sleep(0.1) LCD1602.clear() lastState=currentState if stage == 1: upper_tem_setting() else: monitoring_temp() def destroy(): LCD1602.clear() ADC0834.destroy() GPIO.cleanup() if __name__ == '__main__': # Program start from here try: setup() while True: loop() except KeyboardInterrupt: # When 'Ctrl+C' is pressed, the program destroy() will be executed. destroy() **Code-Erklärung** .. code-block:: python def get_joystick_value():     x_val = ADC0834.getResult(1)     y_val = ADC0834.getResult(2)     if(x_val > 200):         return 1     elif(x_val < 50):         return -1     elif(y_val > 200):         return -10     elif(y_val < 50):         return 10     else:         return 0 Diese Funktion liest die Werte von X und Y. Wenn **X>200**, wird „\ **1**\ ” zurückgegeben; **X<50**, Rückgabe von „\ **-1**\ ”; **y>200**, Rückgabe von „\ **-10**\ ” und **y<50**, Rückgabe von „\ **10**\ ”. .. code-block:: python def upper_tem_setting():     global upperTem     LCD1602.write(0, 0, 'Upper Adjust: ')     change = int(get_joystick_value())     upperTem = upperTem + change LCD1602.write(0, 1, str(upperTem)) LCD1602.write(len(strUpperTem),1, ' ')     time.sleep(0.1) Diese Funktion dient zur Anpassung des Schwellenwerts und zur Anzeige auf dem I2C LCD1602. .. code-block:: python def temperature():     analogVal = ADC0834.getResult()     Vr = 5 * float(analogVal) / 255     Rt = 10000 * Vr / (5 - Vr)     temp = 1/(((math.log(Rt / 10000)) / 3950) + (1 / (273.15+25)))     Cel = temp - 273.15     Fah = Cel * 1.8 + 32     return round(Cel,2) Liest den Analogwert des **CH0** (Thermistor) von **ADC0834** und konvertiert ihn dann in einen Temperaturwert. .. code-block:: python def monitoring_temp():     global upperTem     Cel=temperature()     LCD1602.write(0, 0, 'Temp: ')     LCD1602.write(0, 1, 'Upper: ')     LCD1602.write(6, 0, str(Cel))     LCD1602.write(7, 1, str(upperTem))     time.sleep(0.1)     if Cel >= upperTem:         GPIO.output(buzzPin, GPIO.HIGH)         GPIO.output(ledPin, GPIO.HIGH)     else:         GPIO.output(buzzPin, GPIO.LOW)         GPIO.output(ledPin, GPIO.LOW) Während der Code ausgeführt wird, werden die aktuelle Temperatur und der Hochtemperaturschwellenwert **40** auf dem **I2C LCD1602** angezeigt. Wenn die aktuelle Temperatur über dem Schwellenwert liegt, werden der Summer und die LED aktiviert, um Sie zu alarmieren. .. code-block:: python def loop():     lastState=1     stage=0     while True:         currentState=GPIO.input(Joy_BtnPin)         if currentState==1 and lastState ==0:             stage=(stage+1)%2             time.sleep(0.1)                 LCD1602.clear()         lastState=currentState         if stage == 1:             upper_tem_setting()         else:             monitoring_temp() Die Funktion ``main()`` enthält den gesamten Ablauf des Programms wie dargestellt: 1) Wenn das Programm startet, ist der Anfangswert von **stage** **0** und die aktuelle Temperatur sowie der Hochtemperaturschwellenwert **40** werden auf dem **I2C LCD1602** angezeigt. Wenn die aktuelle Temperatur über dem Schwellenwert liegt, werden der Summer und die LED aktiviert, um Sie zu alarmieren. 2) Drücken Sie den Joystick, dann wird **stage** auf **1** gesetzt und Sie können den Hochtemperaturschwellenwert anpassen. Das Kippen des Joysticks in Richtung der X- und Y-Achse kann den aktuellen Hochtemperaturschwellenwert anpassen (erhöhen oder verringern). Drücken Sie den Joystick erneut, um den Schwellenwert auf den Anfangswert zurückzusetzen. Phänomen-Bild ------------------------- .. image:: ../img/image259.jpeg :align: center