feed-image Odebírat tento obsah čtečkou
Nabídka
csenderusktr

Moje Raspberry Pi - plugin OSPy vlhkost půdy a možství vody v nádrži

Pro automat zalévání OSPy (zahrady), který zároveň používám na zalévání domácích rostlin jsem dodělal plugin pro měření množství vody v nádrži a vlhkosti půdy. Měření množství vody se provádí pomocí ultrazvukového čidla umístěného v nádrži ve víku (princip odrazu zvuku od hladiny) a zpracování pomocí ATmega 328 jako jeden obvod (jedna deska). Měření vlhkosti využívá tyto snímače (výstupem v závislosti na vlhkosti je frekvence) připojené na multiplexer 74HC151, který z 8 vstupů vytvoří jeden výstup, který je následně měřen pomocí ATmega 328 jako druhý obvod (druhá deska).

ZDARMA

  • zdroj pro Arduino IDE,

DONATE

  • desky spojů a gerber (Eagle)

Aktualizace 30.7.2016:

Plugin pro ultrazvuk umožňuje použít i čidlo HC-SR04 namísto čidla Parallax - pozor deska nemá vyvedeny vývody trig a echo pro tuto úpravu (musí se napojit dráty přímo na vývody D2 a D3 procesoru!)

Aktualizace 25.2.2016:

Plugin je rozdělen na 2 oddělené obvody (jeden pro měření hladiny na adrese 0x04 a druhý pro měření vlhkosti na adrese 0x05 tj. 2x procesor) pro každý procesor je potřeba nahrát jiný program.

Hladina procesor na adrese 0x04

Procesor ATmega je připojen jako slave obvod na sběrnici I2C s adresou 0x04. Po oslovení master obvodem odešle slave zařízení (deska s procesorem ATmega328) zpět do masteru 2 byte následovně:

byte: 0, 1 
0,1  = vzdálenost ultrazvuk
Příklad pro ultrazvuk:
byte 0= počet nad 255
byte 1= číslo od 0 do 255
ping = 300 bude byte 0=1, byte 1=45 (1*255+45 tedy 300), ping = 10 bude byte 0=0, byte 1 = 10 (0*255+10 tedy 10)

přijímací strana Python cm = data[1] + data[0]*255. Výsledná vzdálenost je v cm od snímače k hladině.

Vlhkost procesor na adrese 0x05

Procesor ATmega je připojen jako slave obvod na sběrnici I2C s adresou 0x05. Po oslovení master obvodem odešle slave zařízení (deska s procesorem ATmega328) zpět do masteru 24 byte následovně:

frekvence:
byte 0= posun 16
byte 1= posun 8
byte 2= 0-255

freq1 = byte[2] + (byte[1]<<8) + byte[0]<<16)

výsledná frekvence je v Hz funguje 0 - 2 000 000 Hz (víc jsem nezkoušel)

Ultrazvukový snímač pro měření vody v nádrži - Parallax (https://www.parallax.com/product/28015)

Rozsah měření 2cm až 3 metry. 3 vodiče pro připojení (+5V,0V,rxtx)

ping

Kapacitní snímač vhlkosti (http://pihrt.com/elektronika/336-prevodnik-kapacita-frekvence)

Rozsah měření cca 100-500 KHz. 3 vodiče pro připojení (+5V,0V,frekvence)

cidlo

 

Schéma zapojení desky pluginu pro měření hladiny ultrazvukem (slave 0x04 s ATmega 328)

schemaping

Deska spojů pluginu pro měření hladiny ultrazvukem

deska

DSC 0008

DSC 0009

Schéma zapojení první verze desky pluginu (slave 0x04, nebo 0x05 s ATmega 328) - dle programu ji lze použít pro měření frekvence, nebo hladiny (pro měření obojího současně potřebujeme tyto desky dvě, nebo jednu tuto desku a jednu desku pro ping).

schema

Deska spojů

deska

spoje

IMG 20160125 101154

IMG 20160128 130237

IMG 20160128 130245

IMG 20160128 130848

DSC 0001

 20160129 185039

 20160129 185106

 

Desky pluginu jsou zapojeny přes I2C konektor do desky zalévače (+5V,SDA,SCL,0V) ze kterého jsou i napájeny.

Po připojení otevřeme prohlížeč, zadáme adresu zalévače a otevřeme plugin "system information" kde se zobrazí výpis I2C zařízení. Pokud se nám zobrazí adresa 0x04 je komunikace a deska pluginu pro měření hladiny OK. Deska měření vlhkosti má adresu 0x05.

system

Po otevření pluginu "Water tank and humidity monitor" vydíme toto okno (pracovní verze 25.2.2016)

plug2

Foto z osazení ultrazvukového čidla na nádrži z vodou, deska I2C pro plugin OSPy a pohled na starší verzy HW OSPy s připojením LCD...

DSC 0068

tank vysvetleni

DSC 0069

Deska s adresou 0x04 pro měření hladiny

DSC 0071

DSC 0070

DSC 0072

KOMPLET SESTAVA - pro domácí zalévání rostlin (asi ne úplně každý má na kytky toto běžně doma :-D )

DSC 0010

Možnosti pluginu:

  • měření hladiny vody v nárži ultrazvukem -> pokud je málo vody než je nastaveno tak plugin pošle email s informací, zablokuje scheduler a nastaví režim STOP zalévání
  • měření vlhkosti půdy (stanice 1 - 8) na principu měření frekvence z čidel vlhkosti (čidla převádí změnu vhlkosti na změnu frekvence, která se dále zpracovává) a dle toho se upravuje čas potřebný pro sepnutí daného výstupu (stanice) dle klíče: 0% vlhkosti je 100% času programu, 100% vlhkosti je 0% času programu dané stanice.
Oštítkován jako: Arduino Raspberry Pi OSPy

Komentáře   

#6 Martin Pihrt 2016-12-12 15:18
Cituji Martin Pihrt:
Cituji Ondrej:
Dobrý deň,
Neskúšali ste ešte miesto tohto ultrazvukového snímača použiť nejaký na Andruino, ktorý je cenovo dostupnejší ?

Dobrý den,
nezkoušel jsem jiné, ale v principu pokud se upraví Arduino kód (přidá pin a pár změn v programu) půjde použít i jiné čidlo.... například HC-SR04 (
http://www.instructables.com/id/Easy-ultrasonic-4-pin-sensor-monitoring-hc-sr04/) OSPy plugin s tím nebude mít problém (pouze načítá hodnotu z čidla přes I2C). Nemám jiné čidlo abych to mohl předělat. Pokud máte zájem (a nechcete si to upravit sám) podpořte mě (zašlete čidlo, nebo donate a já plugin upravím). Děkuji MP

Tak jsem koukal do přílohy pod článkem a kód tam mám i pro variantu s čidlem HCSR04 - nemusí se tedy nic upravovat...
MP
#5 Martin Pihrt 2016-12-12 15:03
Cituji Ondrej:
Dobrý deň,
Neskúšali ste ešte miesto tohto ultrazvukového snímača použiť nejaký na Andruino, ktorý je cenovo dostupnejší ?

Dobrý den,
nezkoušel jsem jiné, ale v principu pokud se upraví Arduino kód (přidá pin a pár změn v programu) půjde použít i jiné čidlo.... například HC-SR04 (
http://www.instructables.com/id/Easy-ultrasonic-4-pin-sensor-monitoring-hc-sr04/) OSPy plugin s tím nebude mít problém (pouze načítá hodnotu z čidla přes I2C). Nemám jiné čidlo abych to mohl předělat. Pokud máte zájem (a nechcete si to upravit sám) podpořte mě (zašlete čidlo, nebo donate a já plugin upravím). Děkuji MP
#4 Ondrej 2016-12-12 14:09
Dobrý deň,
Neskúšali ste ešte miesto tohto ultrazvukového snímača použiť nejaký na Andruino, ktorý je cenovo dostupnejší ?
#3 Martin Pihrt 2016-07-30 09:21
Cituji Chris:
unsigned int getPing() { //replay distance ultrasone
pinMode(trig, OUTPUT); // the PING is triggered by a HIGH pulse of 2 or more microseconds.
digitalWrite(trig, LOW); //Give a short pulse beforehand to ensure a clean HIGH pulse:
delayMicroseconds(2);
digitalWrite(trig, HIGH); // generate ultrasound
delayMicroseconds(10);
digitalWrite(trig, LOW);
pinMode(echo,INPUT); // read the signal from the PING
int duration = pulseIn(echo, HIGH);
// convert the time into distance
//int inches = microsecondsToInches(duration);
int cm = microsecondsToCentimeters(duration);
// Serial.print(inches);
// Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
return cm;
} // end unsigned int

Hi Chris,
try use this code in attachments after login on my website: Zdrojový program pro Arduino IDE - deska ping [verze 0x04 a HC-SR04 čidlo]...
Regards Martin
#2 Chris 2016-07-29 22:55
unsigned int getPing() { //replay distance ultrasone
pinMode(trig, OUTPUT); // the PING is triggered by a HIGH pulse of 2 or more microseconds.
digitalWrite(tr ig, LOW); //Give a short pulse beforehand to ensure a clean HIGH pulse:
delayMicrosecon ds(2);
digitalWrite(tr ig, HIGH); // generate ultrasound
delayMicrosecon ds(10);
digitalWrite(tr ig, LOW);
pinMode(echo,IN PUT); // read the signal from the PING
int duration = pulseIn(echo, HIGH);
// convert the time into distance
//int inches = microsecondsToI nches(duration) ;
int cm = microsecondsToCentimeters(duration);
// Serial.print(inches);
// Serial.print("i n, ");
Serial.print(cm );
Serial.print("c m");
Serial.println( );
return cm;
} // end unsigned int
#1 Chris 2016-07-29 22:54
Hello Martin ,
Do you have experience with HC-SR04 sensor ?
Because of echo pin and trigger pin , i've tried to change to code for getPing
serial.print gives me the right distance. E.g. 42 cm
but on the lcd display totaly different 9 cm ....
any idea ?
Greetings Chris

Nemáte oprávnění pro vkládání komentářů.