Analoge Sensoren am Raspberry Pi ohne nativen ADC auslesen – Step-Response Methode
Hintergrund
Dem Raspberry Pi fehlen eingebaute Analogeingänge, doch das hindert nicht am Auslesen analoger Sensoren. Mit wenigen Widerständen und einem Kondensator lässt sich eine einfache Step-Response-Technik nutzen, um Widerstandswerte zu ermitteln – ideal für Potentiometer, Fotowiderstände, Thermistoren und mehr.
Dieser Ansatz, populär gemacht durch Adafruit-Tutorials und adaptiert im Raspberry Pi Cookbook, misst die Zeit, die ein Kondensator braucht, um über einen Schwellwert zu laden. Die GPIO-Pins des Raspberry Pi erkennen den Moment, in dem die Spannung ~1,65 V übersteigt, sodass man den Widerstand des angeschlossenen variablen Widerstands ableiten kann.
Benötigte Bauteile
- Standard-Breadboard und Jumper-Kabel
- 10 kΩ Trimmpot (Potentiometer)
- 2 × 1 kΩ Widerstände
- 220 nF Kondensator
Python-Code
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
# Pin-Belegung
A_PIN = 18 # Kondensator Entladen/Laden Steuerung
B_PIN = 23 # Spannungsschwellwert-Erkennung
def discharge():
GPIO.setup(A_PIN, GPIO.IN)
GPIO.setup(B_PIN, GPIO.OUT)
GPIO.output(B_PIN, False)
time.sleep(0.005)
def charge_time():
GPIO.setup(B_PIN, GPIO.IN)
GPIO.setup(A_PIN, GPIO.OUT)
count = 0
GPIO.output(A_PIN, True)
while not GPIO.input(B_PIN):
count += 1
return count
def analog_read():
discharge()
return charge_time()
try:
while True:
print(analog_read())
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
Die Ausgabe ähnelt:
$ sudo python pot_step.py
101
210
101
623
435
367
728
610
512
314
317
0
Die Werte schwanken zwischen ca. 10 und 170, während man am Potentiometer dreht – sie spiegeln den variablen Widerstand wider.
Funktionsweise
Die Methode nutzt die RC-Ladekurve. Wird der Kondensator an den variablen Widerstand angeschlossen, steigt seine Spannung exponentiell. Der GPIO-Pin registriert ein logisches High, sobald die Kondensatorspannung den Eingangsschwellwert (~1,65 V) übersteigt. Die verstrichene Zeit – gezählt in Schleifendurchläufen – korreliert direkt mit dem Widerstand: geringerer Widerstand bedeutet schnelleres Laden, also kleinerer Zählerwert.
Da der Pi keinen Analog-Digital-Wandler besitzt, umgeht diese Timing-Methode diese Einschränkung und bietet eine kostengünstige, zuverlässige Möglichkeit, eine breite Palette analoger Sensoren auszulesen.
Herstellungsprozess
- Professionelle Temperaturüberwachung mit Raspberry Pi und DS18B20
- Kompakter DHT Temperatur- & Feuchtigkeits-Breakout für Raspberry Pi – ATtiny85 & DHT22/DHT11
- DS1820 One-Wire Temperatursensor an Raspberry Pi GPIO anschließen
- Sensordaten in Raspberry Pi integrieren: GPS & MPU-9150 Hands-On Guide
- HC-SR04 Ultraschallsensor an Raspberry Pi 3 anschließen – Komplettanleitung
- Analoge Sensoren am Raspberry Pi mit nur einem GPIO-Pin auslesen
- Raspberry Pi Lichtsensor mit Logging & Alert – Kostengünstiger Fotowiderstand mit Python
- IoT mit Java ME 8 auf Raspberry Pi: Teil 1 – GPIO Sensor-Integration
- Linearen Hall-Sensor mit Raspberry Pi auslesen: Java-Anleitung & ADC0832 Einblicke
- Tastendruck per GPIO am Raspberry Pi auslesen – Schritt-für-Schritt-Anleitung