Een MCP3008 ADC gebruiken om analoge sensoren met Raspberry Pi uit te lezen
Analoge sensoren aan een Raspberry Pi koppelen kan lastig zijn omdat de GPIO-pinnen van de Pi alleen digitaal zijn. Een goedkope oplossing is de MCP3008, een 8-kanaals 10-bit analog-naar-digitaal converter die direct in de SPI-bus van de Pi past en geen extra componenten vereist.
In deze gids lopen we door het bedraden van een MCP3008 aan een Raspberry Pi, het aansluiten van een lichtgevoelige weerstand (LDR) en een TMP36-temperatuursensor, en het uitlezen van de data met een simpel Python-script.
Wat je nodig hebt
- Raspberry Pi (elk model met GPIO-header)
- MCP3008 8-kanaals ADC
- Lichtgevoelige weerstand (LDR) – bijv. NORPS-12
- TMP36-temperatuursensor
- 10 kΩ-weerstand (voor het LDR-circuit)
SPI inschakelen op de Pi
De SPI-interface staat standaard uit. Volg de stappen in SPI-interface inschakelen op de Raspberry Pi om SPI te activeren en de spidev Python-bibliotheek te installeren.
Circuitverbindingen
De MCP3008 vereist vier GPIO-pinnen op de 40-pins header van de Pi. Verbind de volgende pinnen (pinnummers verwijzen naar de P1-nummering van de header):
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
Elk van de CH0–CH7 pinnen op de MCP3008 wordt een analoge invoer. In het onderstaande voorbeeld gebruiken we CH0 voor de LDR en CH1 voor de TMP36; de overige zes kanalen blijven vrij voor toekomstige sensoren.
Lichtgevoelige weerstand (LDR)
De weerstand van de LDR daalt tot ongeveer 10 kΩ onder helder licht en stijgt tot diverse mega-ohm in duisternis. Door een spanningsdeler te vormen met een 10 kΩ-weerstand, leest de MCP3008 een spanning die daalt naar 0 V bij verlichting en stijgt naar 3,3 V in het donker.
TMP36-temperatuursensor
De TMP36 is een 3-pins analoge temperatuursensor. Voed hem met 3,3 V en lees de VOUT-pin. De sensor geeft 0,750 V uit bij 25 °C, met een lineaire helling van 10 mV per °C. Dus 0 °C levert 0,500 V op en 100 °C levert 1,500 V op.
Data uitlezen met Python
De MCP3008 geeft 10-bit waarden van 0 tot 1023, lineair afbeeldend op 0 V–3,3 V. Voor de TMP36 correspondeert dit met een temperatuurbereik van ruwweg –50 °C tot +280 °C.
Hieronder een minimaal voorbeeld met de spidev-bibliotheek om kanalen 0 en 1 uit te lezen:
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-protocol: startbit, single/diff, kanaal (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 # Converteer naar °C
print(f'LDR: {ldr_val}, Temp: {temp_c:.2f}°C')
time.sleep(1)
Vervang de kanaalnummers zoals nodig voor je sensorlayout. Het script print continu de ruwe ADC-waarde voor de LDR en de berekende temperatuur in graden Celsius.
Met deze opstelling kun je extra analoge sensoren toevoegen – zoals fotodioden, druktransducers of vochtigheidsproeven – door ze aan de overige CH2–CH7 pinnen te bedraden en de Python-code dienovereenkomstig uit te breiden.
Veel hack-plezier!
Productieproces
- Bouw Een Raspberry Pi Temperatuur Logger Met Een $5 I2C Sensor
- Nauwkeurige Raspberry Pi Temperatuurprofielering Met Python, SQLite En LabVIEW
- Meerdere DS18B20 1-Wire Sensoren Aan Een Raspberry Pi Koppelen Voor Nauwkeurige Temperatuurmonitoring
- Hoe Temperatuur Te Lezen Met Een DS18B20 Op Raspberry Pi 2
- Professionele temperatuurbewaking met Raspberry Pi en DS18B20
- Temperatuurmeting op Raspberry Pi met Maxim 1-Wire sensoren en DS2482 I2C-brug
- TMP006 Infrarood temperatuursensor met Raspberry Pi: Python bibliotheek & installatiegids
- Een externe temperatuursensor bouwen met Raspberry Pi en Python – Stap-voor-stap handleiding
- Accurate temperatuurbewaking in een serverkast met Raspberry Pi
- Externe weerbewaking met Raspberry Pi 3 en PubNub
- TI SensorTag integreren met Blynk via Node-RED op Raspberry Pi Zero