MCP3008 ADC zum Auslesen analoger Sensoren mit Raspberry Pi nutzen
Das Anschließen analoger Sensoren an einen Raspberry Pi kann herausfordernd sein, da die GPIO-Pins des Pi nur digital sind. Eine kostengünstige Lösung ist der MCP3008, ein 8-Kanal 10-Bit Analog-Digital-Wandler, der direkt in den SPI-Bus des Pi gesteckt wird und keine zusätzlichen Komponenten erfordert.
In diesem Leitfaden gehen wir durch das Verdrahten eines MCP3008 an einen Raspberry Pi, das Anschließen eines lichtabhängigen Widerstands (LDR) und eines TMP36 Temperatursensors sowie das Auslesen der Daten mit einem einfachen Python-Skript.
Was Sie benötigen
- Raspberry Pi (jedes Modell mit GPIO-Header)
- MCP3008 8-Kanal ADC
- Lichtabhängiger Widerstand (LDR) – z. B. NORPS-12
- TMP36 Temperatursensor
- 10 kΩ Widerstand (für LDR-Schaltung)
SPI auf dem Pi aktivieren
Die SPI-Schnittstelle ist standardmäßig deaktiviert. Folgen Sie den Schritten in Aktivieren der SPI-Schnittstelle auf dem Raspberry Pi, um SPI zu aktivieren und die spidev Python-Bibliothek zu installieren.
Schaltungsverbindungen
Der MCP3008 benötigt vier GPIO-Pins am 40-Pin-Header des Pi. Verbinden Sie die folgenden Pins (Pinnummern beziehen sich auf die Header-P1-Nummerierung):
VDD 3.3V VREF 3.3V AGND GROUND CLK GPIO11 (P1-23) DOUT GPIO9 (P1-21) DIN GPIO10 (P1-19) CS GPIO8 (P1-24) DGND GROUND
Jeder der CH0–CH7 Pins am MCP3008 wird zu einem analogen Eingang. Im Beispiel unten nutzen wir CH0 für den LDR und CH1 für den TMP36; die verbleibenden sechs Kanäle bleiben für zukünftige Sensoren frei.
Lichtabhängiger Widerstand (LDR)
Der Widerstand des LDR fällt bei hellem Licht auf etwa 10 kΩ und steigt in Dunkelheit auf mehrere Megaohm. Durch Bildung eines Spannungsteilers mit einem 10 kΩ Widerstand liest der MCP3008 eine Spannung, die bei Beleuchtung gegen 0 V und in Dunkelheit gegen 3,3 V geht.
TMP36 Temperatursensor
Der TMP36 ist ein 3-Pin analoger Temperatursensor. Versorgen Sie ihn mit 3,3 V und lesen Sie seinen VOUT Pin. Der Sensor gibt 0,750 V bei 25 °C aus, mit einer linearen Steigung von 10 mV pro °C. Somit ergibt 0 °C 0,500 V und 100 °C 1,500 V.
Daten mit Python auslesen
Der MCP3008 gibt 10-Bit-Werte von 0 bis 1023 aus, die linear auf 0 V–3,3 V abgebildet sind. Für den TMP36 entspricht dies einem Temperaturbereich von ca. –50 °C bis +280 °C.
Unten ist ein minimales Beispiel mit der spidev Bibliothek zum Auslesen der Kanäle 0 und 1:
import spidev
import time
spi = spidev.SpiDev()
spi.open(0, 0) # Bus 0, Device 0
spi.max_speed_hz = 1350000
def read_channel(channel):
# MCP3008 Protokoll: Startbit, Single/Diff, Channel (3 Bits), 5 Dummy Bits
adc = spi.xfer2([1, (8 + channel) & 0x0F << 4, 0])
data = ((adc[1] & 3) << 8) + adc[2]
return data
while True:
ldr_val = read_channel(0)
temp_val = read_channel(1)
temp_c = (temp_val * 3.3 / 1023) * 100 - 50 # In °C umrechnen
print(f'LDR: {ldr_val}, Temp: {temp_c:.2f}°C')
time.sleep(1)
Ersetzen Sie die Kanalnummern nach Bedarf für Ihr Sensor-Layout. Das Skript gibt kontinuierlich den rohen ADC-Wert für den LDR und die berechnete Temperatur in Grad Celsius aus.
Mit diesem Setup können Sie zusätzliche analoge Sensoren – wie Photodioden, Druckwandler oder Feuchtesonden – hinzufügen, indem Sie sie an die verbleibenden CH2–CH7 Pins anschließen und den Python-Code entsprechend erweitern.
Happy Hacking!
Herstellungsprozess
- Raspberry Pi Temperaturlogger mit 5 $ I2C Sensor bauen
- Präzises Raspberry Pi Temperaturprofiling mit Python, SQLite und LabVIEW
- Mehrere DS18B20 1-Wire Sensoren an Raspberry Pi anschließen für präzises Temperaturmonitoring
- Temperatur mit DS18B20 am Raspberry Pi 2 auslesen
- Professionelle Temperaturüberwachung mit Raspberry Pi und DS18B20
- Temperaturmessung mit Maxim 1-Wire Sensoren und DS2482 I2C-Bridge am Raspberry Pi
- TMP006 Infrarot-Temperatursensor mit Raspberry Pi: Python Library & Setup Guide
- Fern-Temperatursensor mit Raspberry Pi & Python bauen – Schritt-für-Schritt-Anleitung
- Präzise Temperaturüberwachung im Server-Schrank mit Raspberry Pi
- Remote-Wetterüberwachung mit Raspberry Pi 3 & PubNub