Raspberry Pi nie posiada wejść analogowych. Aby więc odczytać wartość analogową z zakresu 0-1023 trzeba zastosować alternatywne rozwiązania np. w postaci układów MCP3008 lub MPC3004 i odczytać analogową informację poprzez interfejs szeregowy SPI. Malina obsługuje tylko 2 kanały dla urządzeń SPI jednocześnie. Można więc teoretycznie dzięki 2 układom MCP3008 mieć 16 wejść analogowych.
Podłączenie części
Potrzebna nam będzie podstawowa znajomość schematu układu MCP3008. Nóżka 1 (CH0) zaznaczona jest na układzie małym kółkiem.
- CH0 MCP3008 łączymy z AO (Analog Output) modułu głównego czujnika wilgotności gleby
- DGND oraz AGDN MCP3008 łączymy z uziemieniem z RPi (przewód czarny/ zworki niebieskie)
- VDD i VREF MCP3008 łączymy z zasilaniem 3,3V RPi (przewód czerwony/ zworki czerwone)
- CSS MCP3008 łączymy z PIN 24 (GPIO8) RPi(zworka fioletowa -> przewód fioletowy)
- DIN MCP3008 łączymy z PIN 19 RPi (zworka żółta -> przewód żółty)
- DOUT MCP3008 łączymy z PIN 21 RPi (zworka zielona -> przewód zielony)
- CLK MCP3008 łączymy z PIN 23 RPi (zworka szara -> przewód szary)
VCC i GND czujnika łączymy z zasilaniem 3,3V RPi oraz GND RPi
W ten sam sposób można podłączyć czujnik opadów deszczu YL-83 i zczytywać analogowo wartość opadów : https://malinowo.secu.com.pl/raspberry-pi-czujnik-opadow-deszczu-yl-83-skrypt-w-python-demon-mysql/
Przygotowanie systemu
1 2 |
sudo apt-get install python-imaging python-imaging-tk python-pip python-dev git sudo pip install spidev |
Zaremować spi-bcm2708
1 |
sudo vi /etc/modprobe.d/raspi-blacklist.conf |
1 |
#blacklist spi-bcm2708 |
Załadować i sprawdzić działanie modułu spi-bcm2708
1 2 3 |
sudo modprobe spi-bcm2708 lsmod |
dodać na końcu pliku config.txt: dtparam=spi=on
1 |
sudo nano -c /boot/config.txt |
Sprawdzenie działania
Zanim podłączymy czujnik możemy sprawdzić działanie układu podłączając VCC lub GND do np. CH0 układu MCP3008. Wtedy poniższy skrypt zwróci 1023 (VCC) albo 0 (GND).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#!/usr/bin/python import spidev import time spi = spidev.SpiDev() spi.open(0, 0) def readadc(adcnum): if adcnum > 7 or adcnum < 0: return -1 r = spi.xfer2([1, 8 + adcnum << 4, 0]) adcout = ((r[1] & 3) << 8) + r[2] return adcout while True: print readadc(0) time.sleep(1) |
YL-69-ShowkHumidityValue.py
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 34 35 36 37 38 39 40 41 42 43 44 |
#!/usr/bin/python import spidev import time import math """YL-69-ShowkHumidityValue.py : Show current humidity sensor value """ __author__ = "zbiros" __copyright__ = "Copyright 2015, Malinowo.net.pl" __credits__ = ["maros"] __license__ = "GPL" __version__ = "1.0.1" __maintainer__ = "zbiros" __email__ = "zbiros@malinowo.secu.com.pl" __status__ = "Development" spi = spidev.SpiDev() spi.open(0, 0) def readadc(adcnum): if adcnum > 7 or adcnum < 0: return -1 r = spi.xfer2([1, 8 + adcnum << 4, 0]) adcout = ((r[1] & 3) << 8) + r[2] return adcout def percentage(part, whole): return 100 * int(part)/int(whole) while True: value = readadc(0) volts = float("{0:.2f}".format((value * 3.3) / 1024)) if value < 255: print "poziom wilgotnosci powyzej 75 %" if value > 255 and value < 512: print "poziom wilgotnosci w normie" if value > 512: print "zbyt sucha gleba,podlej kwiatek" percent = 100 - int(math.floor(percentage(value,1023))) print `value` + "|" + `volts` + "V|" + `percent` + "%" time.sleep(5) |
Wynik na ekranie:
Uwagi :
- ze skryptu można utworzyć demona i zapisywać do bazy danych cykliczną wartość wilgotności , np. https://malinowo.secu.com.pl/raspberry-pi-czujnik-opadow-deszczu-yl-83-skrypt-w-python-demon-mysql/
- skrypt może wysyłać cykliczne przypomnienia emailowe o zbyt niskimi poziomie wilgotności , np. https://malinowo.secu.com.pl/raspberry-pi-hc-sr501-skrypt-w-pythonie-do-wysylania-powiadomien-emailem/
Warto zobaczyć:
http://computers.tutsplus.com/tutorials/build-a-raspberry-pi-moisture-sensor-to-monitor-your-plants–mac-52875
http://scruss.com/blog/2013/01/19/the-quite-rubbish-clock/#spi
https://learn.adafruit.com/reading-a-analog-in-and-controlling-audio-volume-with-the-raspberry-pi/connecting-the-cobbler-to-a-mcp3008