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.9 Fotowiderstand
Einführung
Ein Fotowiderstand, auch als lichtabhängiger Widerstand (LDR) bekannt, ist ein Bauteil zur Erkennung von Lichtintensität. Sein Widerstand nimmt ab, wenn die Lichtintensität zunimmt, wodurch er sich für Geräte wie automatische Nachtlichter und Umgebungslichtsteuerungen eignet.
Dieses Projekt zeigt, wie man einen Fotowiderstand mit dem Fusion HAT+ verwendet, um die Helligkeit einer LED basierend auf dem Umgebungslicht anzupassen. Das Funktionsprinzip ähnelt dem eines Potentiometers, nur dass der Eingang hier Licht statt einer manuellen Einstellung ist.
Was Sie benötigen
Für dieses Projekt werden folgende Komponenten benötigt:
KOMPONENTENBESCHREIBUNG |
KAUFLINK |
|---|---|
- |
|
Raspberry Pi |
- |
Schaltplan
Die folgenden Schaltpläne zeigen, wie die Komponenten verbunden werden:
Verdrahtungsdiagramm
Bauen Sie die Schaltung wie in der folgenden Abbildung gezeigt auf:
Achten Sie darauf, dass:
der Fotowiderstand mit dem Fusion HAT+ verbunden ist, damit analoge Signale in digitale Werte umgewandelt werden können.
die LED mit einem GPIO-Pin für die PWM-Steuerung verbunden ist.
alle Verbindungen sicher sind und Strom- sowie Masseverbindungen korrekt hergestellt sind.
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.9_Photoresistor.py
Dieses Python-Skript liest kontinuierlich den Wert des Fotowiderstands, bildet ihn auf einen geeigneten Bereich zur Einstellung der LED-Helligkeit ab und passt die Helligkeit der LED entsprechend an. Das Skript enthält außerdem eine saubere Beendigungsroutine, die die LED ausschaltet, wenn das Programm vom Benutzer unterbrochen wird. Beim Ausführen passiert Folgendes:
Der Fusion HAT+ liest kontinuierlich die Werte des Fotowiderstands über seinen Eingangskanal ein (im Bereich von 0 bis 4095).
Der analoge Wert, der die Lichtintensität oder eine andere variable Eingangsgröße darstellt, wird in der Konsole als
result = <value>ausgegeben.Das Skript wandelt den Analogwert in ein PWM-Signal um, um die Helligkeit der LED anzupassen.
Die Helligkeit der LED ändert sich dynamisch auf Grundlage des ADC-Eingangs, mit Aktualisierungen alle 0,2 Sekunden.
Das Programm läuft unbegrenzt weiter, bis es mit
Ctrl+Cunterbrochen wird. Danach wird die LED ausgeschaltet.
Code
Unten finden Sie den in diesem Projekt verwendeten Python-Code:
#!/usr/bin/env python3
from fusion_hat.adc import ADC
from fusion_hat.pwm import PWM
import time
# Initialize a PWM LED
led = PWM('P0')
# Set up the potentiometer
photoresistor = ADC('A0')
def MAP(x, in_min, in_max, out_min, out_max):
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
try:
while True:
# Get the current reading from the ADC port
result = photoresistor.read()
print('result = %d ' %result)
# Map the ADC value to a range suitable for setting LED brightness
value = MAP(result, 0, 4095, 0, 100)
# Set the LED brightness
led.pulse_width_percent(value)
# Wait for 1 seconds before reading again
time.sleep(0.2)
# Graceful exit when 'Ctrl+C' is pressed
except KeyboardInterrupt:
led.pulse_width_percent(0) # Turn off the LED
Code verstehen
Importe:
from fusion_hat.adc import ADC from fusion_hat.pwm import PWM import time
Das Skript importiert die benötigten Module zum Lesen analoger Werte sowie zur Steuerung der LED-Helligkeit.
Initialisierung:
# PWM-LED initialisieren led = PWM('P0') # Fotowiderstand einrichten photoresistor = ADC('A0')
Die LED, die mit GPIO-Pin P0 verbunden ist, wird initialisiert. Außerdem wird A0 eingerichtet, um analoge Werte vom Fotowiderstand zu lesen.
Mapping-Funktion:
def MAP(x, in_min, in_max, out_min, out_max): return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
Die Funktion
MAPwandelt ADC-Werte (0–4095) in einen Bereich um, der für die PWM-Steuerung geeignet ist (0 bis 100).Hauptschleife:
while True: # Aktuellen Wert vom ADC-Port lesen result = photoresistor.read() print('result = %d ' %result) # ADC-Wert auf einen Bereich für die LED-Helligkeit abbilden value = MAP(result, 0, 4095, 0, 100) # LED-Helligkeit einstellen led.pulse_width_percent(value) # 0.2 Sekunden warten, bevor erneut gelesen wird time.sleep(0.2)
Liest kontinuierlich die Lichtintensität vom Fotowiderstand.
Passt die LED-Helligkeit proportional zur erkannten Lichtintensität an.
Enthält eine kurze Verzögerung, um die CPU-Auslastung zu reduzieren und sichtbare Änderungen der LED-Helligkeit zu ermöglichen.
Sauberes Beenden:
try: ... except KeyboardInterrupt: led.pulse_width_percent(0) # LED ausschalten
Das Programm stellt sicher, dass die LED ausgeschaltet wird, wenn das Skript unterbrochen wird (z. B. mit
Ctrl+C).
Fehlerbehebung
LED leuchtet nicht
Ursache: Falsche GPIO-Verbindung oder LED-Verkabelung.
Lösung: Überprüfen Sie, ob die LED mit P0 verbunden ist und ein Vorwiderstand verwendet wird, um Schäden zu vermeiden.
ADC-Werte immer Null oder Maximum
Ursache: Fehlerhafte Verdrahtung.
Lösung: Prüfen Sie den ADC-Pin und stellen Sie sicher, dass er mit dem Fotowiderstand verbunden ist.
LED-Helligkeit ändert sich nicht
Ursache: ADC-Werte werden nicht korrekt in den PWM-Bereich umgerechnet.
Lösung: Stellen Sie sicher, dass die Mapping-Funktion den ADC-Wert korrekt in den PWM-Bereich (0 bis 100) skaliert.
Erweiterungsideen
Schwellwertbasierte Steuerung
Schalten Sie die LED ein oder aus, wenn der Analogwert einen bestimmten Schwellenwert überschreitet:
if result > 128: led.on() else: led.off()
Datenprotokollierung
Protokollieren Sie ADC-Werte und LED-Helligkeit zur späteren Analyse in einer Datei:
with open("adc_log.txt", "a") as log_file: log_file.write(f"Light Intensity: {result}\n")
Fazit
Dieses Experiment zeigt, wie ein Fotowiderstand zusammen mit dem Fusion HAT+ verwendet werden kann, um die Helligkeit einer LED basierend auf der Umgebungslichtintensität zu steuern. Durch das Verständnis der Analog-Digital-Umwandlung und der PWM-Steuerung können Sie dieses Projekt erweitern und komplexere lichtabhängige Systeme entwickeln, beispielsweise automatische Beleuchtung oder intelligente Geräte.