Raspberry Pi – LDR uitlezen (GPIO/MCP3008)
Deze pagina beschrijft hoe je een LDR (lichtgevoelige weerstand) kan uitlezen op de Raspberry Pi met behulp van de MCP3008 chip.
Hardware:
De LDR
De weerstand van de LDR is afhankelijk van de hoeveelheid licht. De afkorting LDR betekend lightdepent resistance. In het donker is de weerstand erg groot. Dan kan het wel tot 10 000 000 ohm. Als er fel licht op de LDR valt, is de weerstand kleiner. (100 ohm, afhankelijk van het type LDR)
Een LDR kan je gebruiken als sensor in een lichtsterktemeter. Hoe meer licht er op de LDR valt:
– des te kleiner de weerstand van de LDR
– en des te groter is de stroomsterkte van de LDR.
Om de LDR uit te lezen heb je een vaste weerstand nodig (bijvoorbeeld 220 ohm of 1K ohm), de weerstand functioneert dan als een spanningsdeler, zo kun je de spanning aflezen via de analoge uitgang (waarde 5v = 1024, waarde 0v = 0)
Aansluiten op de Raspberry Pi
Wat heb je nodig
1) MCP3008 + python module
2) Een weerstand 220 of 1000 Ohm (afhankelijk van je LDR waarde)
Sluit de LDR + MCP3008 aan zoals aangegeven op onderstaand schema:
Script: LDR uitlezen
Met onderstaand python script kun je de LDR uitlezen via de MCP3008:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#!/usr/bin/python import spidev import time spi = spidev.SpiDev() spi.open(0,0) def read_spi(channel): spidata = spi.xfer2([1,(8+channel)<<4,0]) return ((spidata[1] & 3) << 8) + spidata[2] try: while True: channeldata = read_spi(0) print("Waarde = {}".format(channeldata)) time.sleep(.1) except KeyboardInterrupt: spi.close() |
Start het script met: sudo python ldr.py , druk op CTRL+C om het script te stoppen!
Dit is de output in de console:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Waarde = 335 Waarde = 362 Waarde = 315 Waarde = 308 Waarde = 308 Waarde = 337 Waarde = 348 Waarde = 350 Waarde = 349 Waarde = 681 Waarde = 748 Waarde = 741 Waarde = 737 Waarde = 734 Waarde = 740 Waarde = 744 Waarde = 736 Waarde = 739 Waarde = 736 Waarde = 737 Waarde = 739 Waarde = 711 |
Script: LED schakelen op lichtniveau
In het volgende script kun je een LED schakelen aan de hand van de lichtinval op de LDR, sluit de LED en weerstand aan volgens onderstaand schema:
Gebruik het volgende script om de LED aan en uit te zetten aan de hand van de lichtinval:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#!/usr/bin/python import RPi.GPIO as GPIO import spidev import time ledPin = 23 GPIO.setmode(GPIO.BCM) # Zet de pinmode op Broadcom SOC. GPIO.setwarnings(False) # Zet waarschuwingen uit. GPIO.setup(ledPin, GPIO.OUT) # Zet de GPIO pin als uitgang. spi = spidev.SpiDev() spi.open(0,0) def read_spi(channel): spidata = spi.xfer2([1,(8+channel)<<4,0]) return ((spidata[1] & 3) << 8) + spidata[2] try: while True: channeldata = read_spi(0) if channeldata > 500: GPIO.output(ledPin, 1) # Zet de LED aan. print("LED = AAN - Waarde = {}".format(channeldata)) else: GPIO.output(ledPin, 0) # Zet de LED uit. print("LED = UIT - Waarde = {}".format(channeldata)) time.sleep(.1) except KeyboardInterrupt: spi.close() GPIO.cleanup() # GPIO netjes afsluiten. |