Lekce 12 - Raspberry Pi - Senzor vlhkosti půdy
V předchozí lekci, Raspberry Pi - Membránová klávesnice 4x4 , jsme si k Raspberry Pi připojili membránovou klávesnici 4x4.
Dnes se podíváme na připojení senzoru vlhkosti půdy k našemu Raspberry Pi, koukneme se na různé způsoby zapojení a jak naprogramovat aplikaci, která nás bude upozorňovat na potřebu zvlhčení půdy.
Schéma zapojení bylo vytvořené pomocí Fritzing.
Potřebné součástky
K úspěšnému zapojení budeme potřebovat:
- Raspberry Pi
- senzor vlhkosti půdy (např. tento senzor)
- při nejlepším nepájivé pole a několik drátků, případně pouze drátky
bonus :
- ADC (např. tento)
Jak funguje senzor vlhkosti půdy?
Senzor měří vlhkost půdy na základě elektrické vodivosti země. Odpor půdy se zvyšuje spolu se vzduchem. Když je v půdě velké množství vody, půda má větší elektrickou vodivost a odpor je menší. Na senzoru se nacházejí dvě elektrody. Elektrický odpor se měří právě mezi těmito elektrodami. Komparátor aktivuje digitální výstup, když je překročena nastavitelná prahová hodnota. Komparátor je většinou k senzoru připojen pomocí dvou kabelů. Z něj pak vycházejí 3 nebo 4. Komparátor je malá destička (většinou dodávaná spolu se senzorem), která umožňuje dostávat ze senzoru data buď analogově nebo digitálně.
Zapojení senzoru vlhkosti půdy
Při zapojení je důležitý typ komparátoru. Náš komparátor má 4 piny, a to AO, DO, VCC a GND. Tento typ lze zapojit jak analogově tak digitálně.
AO – analogový (Analog Output) DO – digitální (Digital Output)
Analogový pin můžeme připojit pouze na analogový pin, avšak pin digitální můžeme připojit na jakýkoliv pin. Raspberry Pi nemá analogové piny, proto pro použití senzoru s AO bude potřeba ADC. Použití analogového portu u analogového senzoru má tu výhodu, že z něj lze dostávat více přesná data. Z digitálního portu budeme dostávat čistě 1 nebo 0.
Tentokrát budeme mít dva nákresy. Jeden s použitím analogového portu s převodníkem, druhý s použitím digitálního portu bez převodníku.
ADC
Na chvíli se ještě pozastavíme u ADC (Analog-to-Digital Converter), v češtině AD převodník. Jak z názvu vyplývá, převádí signál analogový na signál digitální. U Arduino UNO desky máme zabudovaných 5 analogových portů, na desce Raspberry Pi však není ani jeden. Proto jedinou možností kterou máme, kdybychom chtěli překládat AD signál, je tento převodník.
AD převodník však sám o sobě nefunguje. Je k němu potřeba speciální knihovna a překladač analogového signálu na volty. AD převodník nám totiž nevyhodí hodnotu ve voltech ale pouze čísla v rozmezí zhruba 0-25000. My si dnes ukážeme jak vypisovat pouze výstup AD, protože je z mého pohledu mnohem lépe využitelný než výstup přeložený.
Zapojení DO
Digitální zapojení je jednoduché stačí pouze zapojit GND do GND na Raspberry Pi,VCC do 3,3V a DO do jednoho z portů GPIO.
Zapojení AO
Analogové zapojení bude trochu složitější. Musíme si připravit náš AD převodník. Vezmeme si např. převodník ADS1115. Převodník má klasicky VDD, GND které zapojíte do 3,3V a GND na Raspberry Pi. Dále SDA připojíme k GPIO portu 2(SDA port) a SCL připojíme k GPIO portu 3 (SCL port). Nakonec u senzoru vlhkosti zapojíme VCC do 3,3V a GND do GND na Raspberry Pi. Změna pak nastane po zapojení AO. To zapojíme do jednoho z analogových portů převodníku (např. A0):
Jak vidíte na schématu, senzor vlhkosti půdy má možnost zapojení jak AO tak DO.
Programová část
Zapojení i programy budou dnes dva. Zapojení i program pro každé zapojení výše.
DO program
DO program je velmi jednoduchý jediné co bude sbírat tak
true
nebo false
, a podle toho vyhodnocovat, zda je v
půdě dost vody nebo ne:
import RPi.GPIO as GPIO import time port = 4 GPIO.setmode(GPIO.BCM) GPIO.setup(port, GPIO.IN) def vyhodnoceni(port): if GPIO.input(port): print "potřebuji vodu" else: print "mám dost vody"
První dva řádky už známe z předchozích lekcí, je to import
důležitých knihoven. Jako vždy to budou GPIO
a
time
. Dále si pak vytvoříme proměnnou port
a
nastavíme jí hodnotu 4
(číslo GPIO portu BCM). GPIO mode si
nastavíme na BCM
. Do GPIO setup si dáme na první místo port a
na druhé GPIO.IN
, aby port přijímal vstup (input) zvenčí
(abychom od senzoru dostávali vstup právě 1 nebo 0).
Nakonec si vytvoříme funkci vyhodnoceni()
s proměnnou
port
uvnitř. Ve funkci vyhodnoceni()
máme podmínku
if
která čeká na vstup z portu GPIO. Když senzor bude mít
málo vody, vypíše 1 (true). Podmínka se vyhodnotí jako vstup a vypíše
potřebuji vodu
. V opačném případě se provede
else
kde je výpis mám dost vody
.
AO program
AO
program vyžaduje pár speciálních kroků. V základu se
ale jedná o podobný kód. Nyní však vyhodnocujeme, zda senzor překročil
nebo nepřekročil určitou hodnotu.
Prvně si musíme nainstalovat knihovnu požadovanou naším převodníkem. To uděláme pomocí příkazu:
sudo pip3 install adafruit_ads1x15
Když máme knihovnu nainstalovanou, můžeme začít psát kód. Kód bude vypadat následovně :
import Adafruit_ADS1x15 adc = Adafruit_ADS1x15.ADS1115() nastaveni= 1 hodnota = adc.read_adc(0, gain=nastaveni) if hodnota<15000: print("mám dost vody") else: print("potřebuji vodu")
V první části si importujeme nainstalovanou knihovnu
adafruit
. Dále si jí uložíme do proměnné adc
.
Vytvoříme si proměnnou nastaveni
která nám bude nastavovat
citlivost převodníku. Do proměnné hodnota
pak zapíšeme
hodnotu pomocí funkce adc.read_adc()
. Příkaz řekne knihovně
adc
aby četla na portu 0
s gain
nastaveném pomocí proměnné nastaveni
.
Právě gain
určuje rozsah citlivosti senzoru ve Voltech
(Např.: 1 = rozsah od 4V do -4V):
Amplifier Gain | Sensing Voltage Frame |
---|---|
2/3 | +/-6.144 V |
1 | +/-4.096 V |
2 | +/-2.048 V |
4 | +/-1.024 V |
8 | +/-0.512 V |
16 | +/-0.256 V |
Nakonec si pomocí podmínek určíme výpis programu. Když proměnná
hodnota
je menší než 15000, program vypíše text pod
if
(mám dost vody
), jinak else
vypíše
text potřebuji vodu
.
Věřím, že se vám připojení a nakódování senzoru vlhkosti půdy podařilo. Své dojmy a případné dotazy můžete zanechat v diskusi pod článkem 🙂
V další lekci, Pestrý šatník Raspberry Pi - Přehled HAT modulů, si trochu neobvykle budeme povídat o všech zajímavých kloboucích (HAT) pro naše Raspberry Pi.