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.8 Potentiometer
Einführung
Die ADC-Funktion (Analog-Digital-Wandler) ist entscheidend, um analoge Signale in digitale Signale umzuwandeln. In diesem Experiment verwenden wir den Fusion HAT+, um diese Umwandlung mithilfe eines Potentiometers durchzuführen. Das Potentiometer verändert die Spannung – eine physikalische Größe – die anschließend vom ADC digitalisiert wird. Dieses Experiment zeigt außerdem, wie das Potentiometer zur Steuerung der Helligkeit einer LED verwendet werden kann.
Benötigte Komponenten
Für dieses Projekt werden die folgenden Komponenten benötigt:
COMPONENT INTRODUCTION |
PURCHASE LINK |
|---|---|
- |
|
Raspberry Pi |
- |
Schaltplan
Unten sind die Schaltpläne für dieses Projekt dargestellt:
Verdrahtungsdiagramm
Bauen Sie die Schaltung wie in der folgenden Abbildung gezeigt auf:
Beispiel ausführen
Der gesamte Beispielcode dieses Tutorials 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.8_Potentiometer.py
Dieses Python-Skript verwendet den Fusion HAT+, um ein analoges Eingangssignal zu lesen und damit die Helligkeit einer PWM-LED zu steuern. Beim Ausführen passiert Folgendes:
Der Fusion HAT+ liest kontinuierlich ein analoges Signal und wandelt es in einen digitalen Wert zwischen 0 und 4095 um.
Dieser Wert wird auf einen Bereich zwischen 0 und 100 abgebildet, der den Helligkeitsprozentsatz der LED darstellt.
Die Helligkeit der PWM-LED wird dynamisch anhand dieses Wertes angepasst.
Der rohe ADC-Wert sowie die Spannung werden in Echtzeit im Terminal ausgegeben.
Das Programm läuft unbegrenzt weiter, bis es mit
Ctrl+Cbeendet wird. Anschließend wird die LED ausgeschaltet.
Code
Unten befindet sich der Code für dieses Experiment:
#!/usr/bin/env python3
from fusion_hat.adc import ADC
from fusion_hat.pwm import PWM
import time
# Set up the potentiometer
pot = ADC(0)
# Initialize a PWM LED
led = PWM(0)
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 = pot.read()
voltage = pot.read_voltage()
print('result = %d voltage = %.2f' %(result,voltage))
# 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 verwendet
fusion_hatzur Steuerung der PWM-LED und zur Analog-Digital-Umwandlung, währendtimefür Zeitverzögerungen genutzt wird.Initialisierung:
# Potentiometer einrichten pot = ADC(0) # PWM-LED initialisieren led = PWM(0)
Das Skript initialisiert eine PWM-LED an Pin
P0und einen ADC an PinA0.MAP-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 Werte von einem Bereich in einen anderen um. Dies ist notwendig, um ADC-Messwerte auf die LED-Helligkeit abzubilden.Hauptschleife:
try: while True: # Aktuellen Wert vom ADC-Port lesen result = pot.read() voltage = pot.read_voltage() print('result = %d voltage = %.2f' %(result,voltage)) # 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) # Sauberes Beenden bei 'Ctrl+C' except KeyboardInterrupt: led.pulse_width_percent(0) # LED ausschalten
Liest kontinuierlich ADC-Werte.
Wandelt ADC-Messwerte (0–4095) in Helligkeitswerte (0–100) um.
Passt die LED-Helligkeit entsprechend an und wartet 0.2 Sekunden vor der nächsten Messung.
Fehlerbehebung
LED reagiert nicht
Ursache: Falsche Verkabelung oder GPIO-Pin-Konfiguration.
Lösung: Stellen Sie sicher, dass die LED mit PWM 0 und einem geeigneten Vorwiderstand verbunden ist.
ADC-Werte sind immer Null
Ursache: Falsche Verdrahtung des Sensors.
Lösung: Überprüfen Sie die Sensorverbindungen und stellen Sie sicher, dass der Eingangssensor korrekt funktioniert.
Fehler bei der Werteabbildung
Ursache: Falsche Parameter in der
MAP()-Funktion.Lösung: Stellen Sie sicher, dass der Eingangsbereich (
in_min,in_max) korrekt auf 0–4095 gesetzt ist und der Ausgangsbereich (out_min,out_max) für die LED-Helligkeitssteuerung (0–100) geeignet ist.
Erweiterungsideen
Schwellwertbasierte Steuerung
Fügen Sie eine Logik hinzu, die die LED basierend auf bestimmten ADC-Schwellenwerten ein- oder ausschaltet:
if result > 2048: led.on() else: led.off()
Fazit
Dieses Experiment zeigt, wie der Fusion HAT+ zusammen mit einem Potentiometer verwendet werden kann, um die Helligkeit einer LED zu steuern. Durch das Verständnis der Analog-Digital-Umwandlung und der PWM-Steuerung können Sie dieses Wissen erweitern und komplexere interaktive Systeme entwickeln.