12. diel - Raspberry pi - Senzor vlhkosti pôdy
V predchádzajúcej lekcii, Raspberry Pi - Membránová klávesnica 4x4 , sme si k Raspberry Pi pripojili membránovú klávesnicu 4x4.
Dnes sa pozrieme na pripojenie senzora vlhkosti pôdy k nášmu Raspberry Pi, pozrieme sa na rôzne spôsoby zapojenia a ako naprogramovať aplikáciu, ktorá nás bude upozorňovať na potrebu zvlhčenia pôdy.
Schéma zapojenia bola vytvorená pomocou Fritzing.
Potrebné súčiastky
Na úspešné zapojenie budeme potrebovať:
- Raspberry Pi
- senzor vlhkosti pôdy ( napr. tento senzor
- pri najlepšom nepájivé pole a niekoľko drôtikov, prípadne iba drôtiky
- ADC ( napr. tento)
Ako funguje senzor vlhkosti pôdy?
Senzor meria vlhkosť pôdy na základe elektrickej vodivosti zeme. Odpor pôdy sa zvyšuje spolu so vzduchom. Keď je v pôde veľké množstvo vody, pôda má väčšiu elektrickú vodivosť a odpor je menší. Na senzore sa nachádzajú dve elektródy. Elektrický odpor sa meria práve medzi týmito elektródami. Komparátor aktivuje digitálny výstup, keď je prekročená nastaviteľná prahová hodnota. Komparátor je väčšinou k senzoru pripojený pomocou dvoch káblov. Z neho potom vychádzajú 3 alebo 4. Komparátor je malá doštička (väčšinou dodávaná spolu so senzorom), ktorá umožňuje dostávať zo senzora dáta buď analógovo alebo digitálne.
Zapojenie senzora vlhkosti pôdy
Pri zapojení je dôležitý typ komparátora. Náš komparátor má 4 piny, a to AO, DO, VCC a GND. Tento typ je možné zapojiť ako analógovo tak digitálne.
AO – analógový (A nalog O utput) DO – digitálny (D igital O utput)
Analógový pin môžeme pripojiť iba na analógový pin, avšak digitálny pin môžeme pripojiť na akýkoľvek pin. Raspberry Pi nemá analógové piny, preto na použitie senzora s AO bude potrebné ADC. Použitie analógového portu pri analógovom senzore má tú výhodu, že z neho je možné dostávať viac presné dáta. Z digitálneho portu budeme dostávať čisto 1 alebo 0.
Tentoraz budeme mať dva nákresy. Jeden s použitím analógového portu s prevodníkom, druhý s použitím digitálneho portu bez prevodníka.
ADC
Na chvíľu sa ešte pozastavíme pri ADC (A nalog-to-Digital C onverter), v slovenčine AD prevodník. Ako z názvu vyplýva, prevádza signál analógový na digitálny signál. U Arduino UNO dosky máme zabudovaných 5 analógových portov, na doske Raspberry Pi však nie je ani jeden. Preto jedinou možnosťou, ktorú máme, keby sme chceli prekladať AD signál, je tento prevodník.
AD prevodník však sám o sebe nefunguje. Je k nemu potrebná špeciálna knižnica a prekladač analógového signálu na volty. AD prevodník nám totiž nevyhodí hodnotu vo voltoch ale iba čísla v rozmedzí zhruba 0-25000. My si dnes ukážeme ako vypisovať iba výstup AD, pretože je z môjho pohľadu oveľa lepšie využiteľný ako výstup preložený.
Zapojenie DO
Digitálne zapojenie je jednoduché stačí iba zapojiť GND do GND na Raspberry Pi, VCC do 3,3 V a DO do jedného z portov GPIO.
Zapojenie AO
Analógové zapojenie bude trochu zložitejšie. Musíme si pripraviť náš AD prevodník. Vezmeme si napr. prevodník ADS1115. Prevodník má klasicky VDD, GND ktoré zapojíte do 3,3 V a GND na Raspberry Pi. Ďalej SDA pripojíme k GPIO portu 2 (SDA port) a SCL pripojíme k GPIO portu 3 (SCL port). Nakoniec pri senzore vlhkosti zapojíme VCC do 3,3 V a GND do GND na Raspberry Pi. Zmena potom nastane po zapojení AO. To zapojíme do jedného z analógových portov prevodníka (napr. A0):
Ako vidíte na schéme, senzor vlhkosti pôdy má možnosť zapojenia ako AO tak DO.
Programová časť
Zapojenie aj programy budú dnes dva. Zapojenie aj program pre každé zapojenie vyššie.
DO program
DO program je veľmi jednoduchý jediné čo bude zbierať
tak true
alebo false
, a podľa toho vyhodnocovať, či
je v pôde dosť vody alebo nie:
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"
Prvé dva riadky už poznáme z predchádzajúcich lekcií, je to import
dôležitých knižníc. Ako vždy to budú GPIO
a
time
. Ďalej si potom vytvoríme premennú port
a
nastavíme jej hodnotu 4
(číslo GPIO portu BCM). GPIO mode si
nastavíme na BCM
. Do GPIO setup si dáme na prvé miesto port a na
druhé GPIO.IN
, aby port prijímal vstup (input) zvonku (aby sme od
senzora dostávali vstup práve 1 alebo 0).
Nakoniec si vytvoríme funkciu vyhodnoceni()
s premennou
port
vo vnútri. Vo funkcii vyhodnoceni()
máme
podmienku if
ktorá čaká na vstup z portu GPIO. Keď senzor bude
mať málo vody, vypíše 1 (true). Podmienka sa vyhodnotí ako vstup a vypíše
potřebuji vodu
. V opačnom prípade sa vykoná else
kde je výpis mám dost vody
.
AO program
AO
program vyžaduje pár špeciálnych krokov. V základe sa
ale jedná o podobný kód. Teraz však vyhodnocujeme, či senzor prekročil
alebo neprekročil určitú hodnotu.
Najprv si musíme nainštalovať knižnicu požadovanú naším prevodníkom. To urobíme pomocou príkazu:
sudo pip3 install adafruit_ads1x15
Keď máme knižnicu nainštalovanú, môžeme začať písať kód. Kód bude vyzerať nasledovne:
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 prvej časti si importujeme nainštalovanú knižnicu
adafruit
. Ďalej si ju uložíme do premennej adc
.
Vytvoríme si premennú nastaveni
ktorá nám bude nastavovať
citlivosť prevodníka. Do premennej hodnota potom zapíšeme pomocou
adc.read_adc
- príkaz povie knižnici adc aby čítala na porte
0
s gain
nastavenom pomocou premennej
nastaveni
.
Práve gain
určuje rozsah citlivosti senzora vo Voltoch.
Napr: 1 = rozsah od 4V do -4V. Nakoniec si pomocou podmienok
určíme výpis programu. Keď premenná hodnota
je menšia ako
15000, program vypíše text pod if
, else
vypíše
iný text:
Verím, že sa vám pripojenie a nakódovanie senzora vlhkosti pôdy podarilo. Svoje dojmy a prípadné otázky môžete zanechať v diskusii pod článkom 🙂
V ďalšej lekcii, Pestrý šatník Raspberry Pi - Prehľad HAT modulov , sa trochu neobvykle budeme rozprávať o všetkých zaujímavých klobúkoch (HAT) pre naše Raspberry Pi.