Bemerkung

Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauchen Sie mit anderen Enthusiasten tiefer in Raspberry Pi, Arduino und ESP32 ein.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Probleme nach dem Kauf und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Tutorials aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und Sneak Peeks.

  • Sonderrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Bereit, mit uns zu entdecken und zu gestalten? Klicken Sie auf [here] und treten Sie noch heute bei!

2.10 Thermistor

Einführung

Ein Thermistor ist ein temperaturabhängiger Widerstand, der häufig in Anwendungen zur Temperaturmessung und -regelung eingesetzt wird. Im Gegensatz zu Fotowiderständen, die Licht erkennen, reagieren Thermistoren auf Temperaturänderungen, indem sich ihr Widerstand verändert. Dadurch eignen sie sich ideal für Projekte wie Hitzealarme, Thermostate und Temperaturüberwachungssysteme. In diesem Projekt verwenden wir einen Thermistor, um die Umgebungstemperatur zu messen und sowohl in Celsius als auch in Fahrenheit anzuzeigen.


Benötigte Komponenten

Für dieses Projekt werden die folgenden Komponenten benötigt:

KOMPONENTENBESCHREIBUNG

KAUFLINK

Steckbrett

BUY

Jumper-Kabel

BUY

Widerstand

BUY

Thermistor

BUY

Fusion HAT+

-

Raspberry Pi

-


Schaltplan

Die folgenden Schaltpläne zeigen, wie der Thermistor mit dem Fusion HAT+ verbunden wird:

../_images/2.2.2_sch.png

Verdrahtungsdiagramm

Bauen Sie die Schaltung wie im folgenden Verdrahtungsdiagramm gezeigt auf:

../_images/2.2.2_bb.png

Stellen Sie sicher, dass:

  • der Thermistor korrekt mit dem Fusion HAT+ verbunden ist.

  • Strom- und Masseverbindungen sicher angeschlossen sind.

  • alle Verdrahtungen mit dem Diagramm übereinstimmen, um eine korrekte Funktion zu gewährleisten.


Beispiel ausführen

Der gesamte Beispielcode, der in diesem Tutorial verwendet wird, befindet sich im Verzeichnis ai-lab-kit. Führen Sie das Beispiel mit den folgenden Schritten aus:

cd ~/ai-lab-kit/python/
sudo python3 2.10_Thermistor.py

Dieses Python-Skript liest ein analoges Signal von einem Thermistor über den Fusion HAT+ und berechnet die entsprechende Temperatur. Beim Ausführen passiert Folgendes:

  1. Das Skript liest kontinuierlich die Spannung.

  2. Es berechnet den Thermistor-Widerstand (Rt) und bestimmt daraus die Temperatur in Kelvin, Celsius und Fahrenheit.

  3. Die berechneten Temperaturen werden in der Konsole sowohl in Celsius als auch in Fahrenheit ausgegeben, auf zwei Dezimalstellen formatiert, als Celsius: <value> C  Fahrenheit: <value> F.

  4. Der Vorgang wiederholt sich alle 0,2 Sekunden, bis das Skript mit Ctrl+C unterbrochen wird.


Code

Unten befindet sich der Python-Code, der in diesem Projekt verwendet wird:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from fusion_hat.adc import ADC
import time
import math

thermistor = ADC('A3')

# Run the process in a try-except block
try:
   while True:
      # Read the voltage from the sensor
      Vr = thermistor.read_voltage()
      # Calculate the resistance of the thermistor
      if 3.3 - Vr < 0.1:
            print("Please check the sensor")
            continue
      else:
            Rt = 10000 * Vr / (3.3 - Vr)
            # Calculate the temperature in Kelvin
            temp = 1 / (((math.log(Rt / 10000)) / 3950) + (1 / (273.15 + 25)))
            # Convert Kelvin to Celsius
            Cel = temp - 273.15
            # Convert Celsius to Fahrenheit
            Fah = Cel * 1.8 + 32
            # Print the temperature in both Celsius and Fahrenheit
            print('Celsius: %.2f C  Fahrenheit: %.2f F' % (Cel, Fah))
            # Wait for 0.2 seconds before the next read
            time.sleep(0.2)

# Handle KeyboardInterrupt for graceful termination
except KeyboardInterrupt:
   pass

Den Code verstehen

  1. Importe:

    from fusion_hat.adc import ADC
    import time
    import math
    

    Dieses Skript importiert die notwendigen Module: ADC aus der fusion_hat-Bibliothek zum Lesen der Spannung, time für die Sleep-Funktion und math für mathematische Berechnungen.

  2. Initialisierung:

    thermistor = ADC('A3')
    

    Initialisiert das ADC-Objekt am Pin A3.

  3. Datenverarbeitung:

    while True:
       # Spannung vom Sensor lesen
       Vr = thermistor.read_voltage()
       # Widerstand des Thermistors berechnen
       if 3.3 - Vr < 0.1:
          print("Please check the sensor")
          continue
       else:
          Rt = 10000 * Vr / (3.3 - Vr)
          temp = 1 / (((math.log(Rt / 10000)) / 3950) + (1 / (273.15 + 25))) # Temperatur in Kelvin berechnen
          Cel = temp - 273.15 # Kelvin in Celsius umrechnen
          Fah = Cel * 1.8 + 32 # Celsius in Fahrenheit umrechnen
    
    • Liest die Spannung vom Thermistor.

    • Berechnet den Widerstand des Thermistors.

    • Verwendet die Steinhart-Hart-Gleichung zur Berechnung der Temperatur in Kelvin.

    • Wandelt Kelvin in Celsius und Fahrenheit um.

  4. Ausgabe:

    print('Celsius: %.2f C  Fahrenheit: %.2f F' % (Cel, Fah))
    time.sleep(0.2)
    

    Die berechnete Temperatur wird sowohl in Celsius als auch in Fahrenheit auf dem Bildschirm angezeigt. Eine kurze Verzögerung sorgt dafür, dass sich die Messwerte stabilisieren und verhindert eine übermäßige CPU-Auslastung.


Fehlerbehebung

  1. Temperaturwerte sind falsch oder instabil:

    • Ursache: Falsche Thermistorparameter oder ein verrauschtes Eingangssignal.

    • Lösung:

      • Stellen Sie sicher, dass der Widerstand des Thermistors bei 25 °C (10000 in diesem Skript) und der 3950-B-Wert zu Ihrem Thermistormodell passen.

      • Fügen Sie einen Kondensator oder eine Software-Filterung hinzu, um Signalrauschen zu reduzieren.

  2. Divide-by-Zero-Fehler:

    • Ursache: Die Spannung Vr liegt zu nahe bei 0 oder 3,3 V, wodurch bei der Widerstandsberechnung eine Division durch Null entsteht.

    • Lösung: Stellen Sie sicher, dass die ADC-Eingangsspannung im Bereich von 0–3,3 V liegt, und prüfen Sie die Verbindungen auf Kurzschlüsse oder Unterbrechungen.


Erweiterungsideen

  1. Temperatur auf einem LCD- oder OLED-Display anzeigen: Verwenden Sie ein LCD- oder OLED-Display, um die Temperaturwerte dynamisch anzuzeigen.

  2. Datenprotokollierung: Speichern Sie die Temperaturmesswerte zur Analyse in einer Datei:

    with open("temperature_log.txt", "a") as log_file:
       log_file.write(f"Celsius: {Cel:.2f}, Fahrenheit: {Fah:.2f}\n")
    
  3. Schwellwertbasierte Warnungen: Lösen Sie eine Warnung aus, wenn die Temperatur einen festgelegten Schwellenwert überschreitet:

    if Cel > 30:
       print("Warning: High temperature!")
    
  4. LED- oder Buzzer-Feedback: Geben Sie visuelles oder akustisches Feedback abhängig von der Temperatur:

    from fusion_hat import Pin
    led = Pin(27.Pin.OUT)
    if Cel > 30:
          led.on()
    else:
          led.off()
    

Fazit

Dieses Experiment zeigt, wie ein Thermistor zusammen mit dem Fusion HAT+ verwendet werden kann, um die Umgebungstemperatur präzise zu messen. Durch das Verständnis der Analog-Digital-Umwandlung und der Steinhart-Hart-Gleichung können Sie fortgeschrittene Systeme zur Temperaturüberwachung und -steuerung für verschiedene Anwendungen entwickeln.