|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
SimonS Član
Pridružen-a: Čet 01 Jul 2004 11:18 Prispevkov: 4592 Aktiv.: 20.57 Kraj: Kobarid
|
Objavljeno: Čet Feb 22, 2024 8:28 pm Naslov sporočila: Avtomatsko zalivanje |
|
|
Projekt ni nov. Je že 4. leta v uporabi in se dobro obnese.
V prvem delu bom predstavil tiskanino.
Pravzaprav vse izhaja in univerzalne tiskanine, ki sem jo izdelal in (čeprav je sedaj ESP32 bolj smiselna rešitev) jo še danes uporabljam za majhno IoT napravo.
Procesor je ESP8266. Smiselno je izbrati enega, ki ima možnost priklopiti zunanjo anteno, da bo domet boljši.
Nanj se lahko priklopi 2x DS18B20 senzorja in/ali SHT31 za merjenje temperature in vlage zraka.
Na ADC imam priključeno kapacitivno sondo za merjenje vlažnosti zemlje.
Vezje ime tudi 2. tranzostorska izhoda. Z tem bi lahko direkt krmilil tuljavo solanoid ventila, ampak vseeno priporočam uporabo relejske ploščise, saj se pri kitajcih dobijo za smešno ceno.
Sama tiskanina ima še nekaj prostih pinov, ki se jih lahko porabi za drugega
Napajanje je 12V iz vzroka, ker imam 12V relejsko ploščo in ventile. Lahko se napaja z nižjo napetostijo nikakor pa ne z višjo!
Tudi izbira napajalnika ni kritična. Paziti je potrebno, da zmore tokovne zahteve ventila.
Komponente ki ga uporabljam jaz:
12V El. ventil
senzor za vlažnost prsti
relejka plošča
Pozor! ESP8266 ADC meri v območju 0-1V zato je tudi na vhodu kar močan uporovni delilnik. Pa tudi 10bit resolucija ni ravno za hvalit, ampak za ta projekt je čisto dovolj.
Opis: |
|
Velikost datoteke: |
113.77 KB |
Pogledana: |
20 krat |
|
Opis: |
|
Download |
Ime datoteke: |
GERBER-njiva_2.zip |
Velikost datoteke: |
102.04 KB |
Downloadano: |
8 krat |
Opis: |
|
Download |
Ime datoteke: |
njiva_2.pdf |
Velikost datoteke: |
46.21 KB |
Downloadano: |
15 krat |
_________________ Lep dan
Simon |
|
Nazaj na vrh |
|
|
SimonS Član
Pridružen-a: Čet 01 Jul 2004 11:18 Prispevkov: 4592 Aktiv.: 20.57 Kraj: Kobarid
|
Objavljeno: Pet Feb 23, 2024 8:48 pm Naslov sporočila: |
|
|
Programiranje
Upravljanje je "oblačno" z razlogom, da je doseglivo iz kjerkoli. V prvi verziji sem upravljal z cayenne, ampak le tega so v jeseni ugasnili.
Ob iskanju alternative sem preiskusil par ponudnikov in se nakoncu odločil za Blynk. V brezplačni verziji je sicer omejen, ampak se da.
Ker za razliko od arduinovega cloud omogoča OTA (over the air) programiranje lastnih naprav sem seveda to izkoristil. Pri tem je potrebno paziti, da je program dovolj majhen (manj kot 50% flash), da ga lahko sploh nalagamo.
Za programiranje uporabljam arduino. Pri tem je potrebno naložiti par knjižnic.
za dallasove senzorje in blynk. Kdor pozna arduino ve kako se to napravi in ne bom tu razlagal.
Preden se lotimo česarkoli pa se je potrebno registrirati na Blynk.
Po uspešni registraciji v Developer Zone kliknemo na New template
Pod NAME si nekaj izmislimo. Naprimer "njiva in vrt". HARDWARE izberemo ESP8266, CONNECTION TYPE pustimo WiFi, DESCRIPTION lahko pustimo prazno.
Potrdimo z Done.
Sedaj na "Datastreams" kreiramo virtal pine, s katerimi prenašamo podatke iz serverja na naš board in obratno.
Kliknemo na "+ New Datastream" in "virtual pin".
Tu pod NAME upišemo kaj je. Naprimer "temp 1", ALIAS pustimo kot je, PIN kateri virtualni port uporabimo.
V programu imam definirano tako:
- V10 temperatura 1
- V11 temperatura 2
- V12 Vlažnost prsti
- V13 rele 1
- V14 rele 2
- V15 podatki iz ADC (o tem več pozneje)
DATA TYPE kakšni podatki. (Integer - cela števila, Double - števila z decimalkami in String - za tekst). UNITS kaj prikaže zraven. naprimer Celsius za stopinje... MIN, MAX minimalna in maksimalna vrednost in (če izberemo Double) DECIMALS kako izgleda prikaz.
Sedaj pride prva omejitev. Dovoljeno je le 5. virtual pinov. Enega od teh izpusti.
S klikom na "Home" na desni strani v čnemu oknu vidimo TEMPLATE_ID in TEMPLATE_NAME. To bomo rabili zelo kmalu v arduino programu. Skopiramo si z klikom na črno okno.
Sedaj poženemo arduino in new project. Potem odpremo template, ki se nahaja pod File/examples/Blynk/Blynk.Edgent/Edgent_ESP8266
Kompletno vsebino prve strani zamenjaj z spodnjim tekstom.
Ampak pozor. Zamenjati je potrebno vrsti:
#define BLYNK_TEMPLATE_ID
#define BLYNK_TEMPLATE_NAME
z vrstama, ki smo jih prej skopirali iz Blynk webstrani
Koda: |
/*
* Program za zalivanje vrta
* 2.2024 V1.0 Simon Skočir
*/
#define BLYNK_TEMPLATE_ID "*** zamenjaj z svojo****"
#define BLYNK_TEMPLATE_NAME "*** zamenjaj z svojo***"
#define BLYNK_FIRMWARE_VERSION "0.1.0"
#define BLYNK_PRINT Serial
//#define BLYNK_DEBUG
#define APP_DEBUG
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "BlynkEdgent.h"
#define limit_1 7200000 // absolutna omeitev časa zalivanja rele 1 3600000 = 1 ura
#define limit_2 7200000 // absolutna omeitev časa zalivanja rele 2
#define pri_100 1012 // vrednost ADC pri 100% vlage
#define pri_0 666 // vrednost ADC pri 0% vlage
unsigned long cas_rele_1 = 0, cas_rele_2 = 0 ; // timerji za absolutno omejitev časa zalivanja na 3 ure
float temperature_1, temperature_2, zajem_adc, vlaga_z;
const int beri_senzor = A0; // ESP8266 Analog Pin ADC0 = A0
const int oneWireBus1 = 4; // DS18b20 1 temperaturni senzor
const int oneWireBus2 = 5; // DS18b20 2 temperaturni senzor
int rele_1 = 12; // rele 1
int rele_2 = 13; // rele 2
OneWire oneWire1(oneWireBus1);
DallasTemperature sensors_1(&oneWire1);
OneWire oneWire2(oneWireBus2);
DallasTemperature sensors_2(&oneWire2);
BlynkTimer timer;
void setup()
{
Serial.begin(9600);
pinMode(rele_1, OUTPUT);
pinMode(rele_2, OUTPUT);
ESP.wdtDisable(); // vklop WatchDoga
delay(100);
timer.setInterval(1000L, poslji);
BlynkEdgent.begin();
}
void omeitev() {
unsigned long trenutno = millis();
if (trenutno - cas_rele_1 > limit_1) {
digitalWrite(rele_1, LOW);
Blynk.virtualWrite(V13, LOW);
}
if (trenutno - cas_rele_2 > limit_2) {
digitalWrite(rele_2, LOW);
Blynk.virtualWrite(V14, LOW);
}
}
void poslji(){
sensors_1.requestTemperatures();
sensors_2.requestTemperatures();
temperature_1 = sensors_1.getTempCByIndex(0); // temperatura senzor 1
temperature_2 = sensors_2.getTempCByIndex(0); // temperatura senzor 2
zajem_adc= analogRead(beri_senzor); // beremo analogno vrednost iz ADC
vlaga_z = map(zajem_adc, pri_100, pri_0, 0 ,100); // pretvozba vlage na 0-100% glede na ADC
Blynk.virtualWrite(V10, temperature_1);
Blynk.virtualWrite(V11, temperature_2);
Blynk.virtualWrite(V12, vlaga_z);
Blynk.virtualWrite(V15, zajem_adc);
}
void loop() {
BlynkEdgent.run();
timer.run();
omeitev();
ESP.wdtFeed(); // nafutraj WD
}
BLYNK_WRITE(V13)
{
bool prozi = param.asInt(); // prožimo zalivanje
if (prozi)digitalWrite(rele_1, HIGH);
else digitalWrite(rele_1, LOW);
cas_rele_1= millis(); // timer koliko časa je vklopljen
}
BLYNK_WRITE(V14)
{
bool prozi = param.asInt();
if (prozi)digitalWrite(rele_2, HIGH);
else digitalWrite(rele_2, LOW);
cas_rele_2= millis(); // timer koliko časa je vklopljen
} |
Kot je videti je program skrajno enostaven in ni potrebno dosti komentarja.
Omenim edino definicije
- limit_1, limit_2 ki je limit, koliko časa je maksimalno zalivanje, če pozabimo izklopiti
- pri_100 je vrednost, ki jo dobimo na ADCju (virtual port 15), ko pomočimo senzor v vodo
- pri_0 je vrednost, ki jo dobimo na ADC, ko je senzor suh.
Kaj točno to pomeni in kako definiramo te številke več pri kalibraciji in zgonu
Program sedaj pripravljen za nalaganje.
Postopek: Na PCB postavimo jumper FLASH pina, povežemo USB <-> UART konverter RX, TX in GND na PROG pine. Vklopimo napajanje
V arduinu pod Tools/Board izberemo "generic ESP8266 module" in kliknemo na "upload"
Toliko za danes
Opis: |
|
Velikost datoteke: |
91.65 KB |
Pogledana: |
2 krat |
|
Opis: |
|
Velikost datoteke: |
112.05 KB |
Pogledana: |
4 krat |
|
Opis: |
nastavitve za programiranje |
|
Velikost datoteke: |
145 KB |
Pogledana: |
3 krat |
|
_________________ Lep dan
Simon |
|
Nazaj na vrh |
|
|
SimonS Član
Pridružen-a: Čet 01 Jul 2004 11:18 Prispevkov: 4592 Aktiv.: 20.57 Kraj: Kobarid
|
Objavljeno: Sob Feb 24, 2024 6:15 pm Naslov sporočila: |
|
|
Prvi zagon
Program je naložen, template kreiran. Vse je pripravljeno na prvi zagon.
Na krmilno elektroniko povežemo senzorje (pač kar rabimo). Recimo da povežemo en DS18b20 in sondo za vlažnost prsti.
Ker smo elektroniki mislim, da je razvidno z sheme in ne bom podrobno opisoval.
Napravo lahko upravljamo preko web dashboarda, ampak bolj enostavno je upravljanje z aplikacijo telefona. Blynk ponuja brezplačno aplikacijo za Android in Apple. Opisal bom za Android, ampak verjetno za Apple ni nič drugače.
V trgovini play poiščemo Blynk IoT aplikacijo in jo naložimo. Ko jo poženemo se prijavimo z istimi podatki kot na Blynk.io
Priklopimo napajalno napetost na vezje.
Na Blynke app kliknemo zgoraj desno na "..." in izberemo "+ Add new device"
izberemo "Find devices nearby" in sledimo navodilom. Tu se tudi vpiše SSID in geslo za WiFi mreže na katero bo naprava povezana.
Ko smo uspešno registrirali napravo kliknemo na njeno ikono.
Kliknemo na ključ zgoraj desno tako, da lahko urejamo dashboard.
s klikom na "+" izberemo Widget. S klikom nanj izberemo še kateri virtual pin bomo uporabili zanj. Tu je seveda še ogromno možnosti od barv, velikosti pisave, .....
obvezno še izberemo en prikaz za V15.
Ko smo z prikazom zadovolni gremo iz editorja (puščica nazaj levo zgoraj) in že bi morala biti prikazana temperatura in neka nerealna vrednost vlažnosti prsti.
Postopek kalibracije vlažnosti prsti sem si zamislil tako.
Ko je sonda suha preberemo vrednost ADC (ki je na V15) in v arduino program vnesemo to pod
sondo potopimo v kozarec vode in ponovno odčitamo vrednost ADC.
To vrednost vnesemo pod
Tu, da ne pozabim omeniti, je potrebno tudi popraviti verzijo na višji, kicer jo ne bo preneslo.
Koda: |
#define BLYNK_FIRMWARE_VERSION "0.1.1" |
Program prevedemo in kreiramo BIN file. To se napravi z klikom na Sketch/Export compiled Bineary. Odpremo direktorij z klikom Sketch/Show Sketch Folder
Tu je sedaj generirana datoteka, ki jo lahko naložimo preko aplikacije (ni potreben programator!)
Opdpremo na PCju Blynk web dashboard in pod developer zone izberemo Blynk.Air (OTA)
Izberemo "new Shipping" izberemo TEMPLATE (če jih je več) in označimo katero DEVICE bomo nadgradili (če jih je več) potem samo že izberemo BIN datoteko iz arduina in "Start Shipping)
To je to. Počakati je potrebno cca minuto da se program naloži in pobere.
Naša naprava je skalibrirana in pripravljena za delo.
Opis: |
|
Velikost datoteke: |
70.69 KB |
Pogledana: |
5 krat |
|
Opis: |
|
Velikost datoteke: |
82.02 KB |
Pogledana: |
2 krat |
|
Opis: |
|
Velikost datoteke: |
103.78 KB |
Pogledana: |
6 krat |
|
Opis: |
|
Velikost datoteke: |
80.83 KB |
Pogledana: |
2 krat |
|
_________________ Lep dan
Simon |
|
Nazaj na vrh |
|
|
SimonS Član
Pridružen-a: Čet 01 Jul 2004 11:18 Prispevkov: 4592 Aktiv.: 20.57 Kraj: Kobarid
|
Objavljeno: Pon Feb 26, 2024 7:46 pm Naslov sporočila: |
|
|
Avtomatizcija
Tako kot je sicer deluje, ampak mi bi želeli, da se zaliva avtomatsko.
Blynk je zelo močan pri tem. Ampak, če hočemo avomatizacijo, moramo prvo povedati katere virtual porte bomo uporabljali in kaj je na njih.
To se lahko nastavi preko aplikacije ali preko web vmesnika. Popolnoma enakovredno je. Jaz zaradi lažje demonstracije uporabil web vmesnik.
V "Developer Zone" izberemo željen template in kliknemo na "Automations" in zgoraj desno na "Edit"
Potem pri vlaga, rele1, rele2 omogočimo "Condition" in "Action". Pogledamo tudi če so releji označeni kot "Switch" in vlaga kot "Sensor". Potem shranimo.
Kliknemo na Automations (če tega ne vidite obnovite stran -> F5) in desno "+ Create Automation"
Izberemo "Schedule"
Potem uro začetka dogodka in katere dni v tednu.
Spodaj izberemo "Control Device" in ime naprave (jaz imam njiva) To potem označimo rele1 in klik na drsnik, kar pomeni da ob tej uri vklopi rele, ki odpre ventil vode. Lahko seveda izbereš oba releja
Da ne bo zalivalo vrta v nedogled gremo na naslednji korak.
"Add next action" in izberemo "Wait, Then Do Something"
Tu je najbolj enostavno izbrati timer in izbrati koliko časa bo trajalo zalivanje.
"Add next action" -> "Control Device" in isto izberemo njiva in rele1 ampak tokrat pustimo drsnik v izključenem načinu
To je to. Naprava so ob nastavljeni uri odprla ventil in zalivala določen čas in zaprla ventil.
Ampak dobro bi bilo pa, da ob previsoki vlažnosti zemlje sploh nebi zalivalo.
Za to bo potrebno spisati novo avtomatizacijo
Tokrat izberemo "Device State
Zopet napravo (njiva) in potem vlaga.
Ker nima opcije (če je večje) izberemo "is between" in vrednosti pri kateri vlagi bi želeli, da se izklopi ter 100.
Sledi "What you can do" -> "Control Device" in označimo rele1 in drsnik za izključitev.
Ta avtomatizacija pomeni, ko je vlažnost zemlje več kot 50% izklopi rele1
Opis: |
nastavitev parametrov za avtomatizacijo |
|
Velikost datoteke: |
88.72 KB |
Pogledana: |
1 krat |
|
Opis: |
|
Velikost datoteke: |
57.01 KB |
Pogledana: |
0 krat |
|
Opis: |
|
Velikost datoteke: |
58.31 KB |
Pogledana: |
0 krat |
|
_________________ Lep dan
Simon |
|
Nazaj na vrh |
|
|
SimonS Član
Pridružen-a: Čet 01 Jul 2004 11:18 Prispevkov: 4592 Aktiv.: 20.57 Kraj: Kobarid
|
Objavljeno: Pon Feb 26, 2024 8:01 pm Naslov sporočila: |
|
|
Pozabil sem omeniti, da ime naprave, ki ga kreira Bynk lahko spremenimo.
Pod "Devices" izberemo napravo in zgoraj zraven imena kliknemo na "..." in "rename".
Dodajanje več zalivalnih enot je super enostavno.
Program je identičen. Ni potrebno nič spreminjati, saj mu Blynk dodeli unikatno ime (ki ga po zgornjem postopku preimenujemo)
Kar je še bolj lepo je, da template ostaja enak in je že ready to use. Edino avtomatizacijo je potrebno ročno urediti.
Koliko naprav lahko dodamo pa je že omejitev plana. Jaz sem kupil "Maker" plan in za onih par EUR na mesec se mi odpira veliko več opcij, kot sicer v brezplačni verziji.
Moja zalivalna naprava tudi nadzira količino vode v štirni in ob niskem nivoju ne zaliva.
Sicer Blyn še spoznavam in verjetno je še kup bolj enostavnih korakov
Naslednjič še par slik izdelanega sistema
Opis: |
|
Velikost datoteke: |
72.68 KB |
Pogledana: |
7 krat |
|
_________________ Lep dan
Simon |
|
Nazaj na vrh |
|
|
SimonS Član
Pridružen-a: Čet 01 Jul 2004 11:18 Prispevkov: 4592 Aktiv.: 20.57 Kraj: Kobarid
|
Objavljeno: Čet Feb 29, 2024 8:26 pm Naslov sporočila: |
|
|
Seveda, opcij je polno. Dandanes se dobijo razni moduli po smešnih cenah.
Ampak za nas hobiste je DIY posebno veselje.
Blynk je v free ferziji res omejen. Ampak za 3x kavico na mesec dobiš ogromno in tu res lahko rečeš "only the sky is the limit"
Še obljubljene slike mojega sistema. Jih je več na različnih lokacijah.
Preden me boste pluvali. To je bilo narejeno že dosti let nazaj in še to iz ostankov. Namensko je bil kupljen le ventil in sonda za vlago.
Zaščito za sondo, ki pride zakopana v zemljo sem naprintal. Notranjost pa sem zalil z namenskim silikonom za zaščito vezji. Verjetno bi klasični brezkislinski silikon enako dobro služil namenu.
Opis: |
|
Velikost datoteke: |
108.44 KB |
Pogledana: |
33 krat |
|
Opis: |
|
Velikost datoteke: |
173.65 KB |
Pogledana: |
20 krat |
|
Opis: |
|
Velikost datoteke: |
38.66 KB |
Pogledana: |
7 krat |
|
Opis: |
|
Download |
Ime datoteke: |
zascita_v2.zip |
Velikost datoteke: |
546 Bytov |
Downloadano: |
3 krat |
_________________ Lep dan
Simon |
|
Nazaj na vrh |
|
|
Profesor Einstein Član
Pridružen-a: Ned 24 Sep 2006 0:13 Prispevkov: 1423 Aktiv.: 6.64 Kraj: Rogaška Sl.
|
Objavljeno: Ned Mar 03, 2024 11:31 pm Naslov sporočila: |
|
|
Sem si naročil merilnike vlage... potestiram ko pridejo.
lp.
_________________ --
"Če bi volitve kaj pomagale, bi jih prepovedali." (Mark Twain) |
|
Nazaj na vrh |
|
|
fricky Član
Pridružen-a: Pon 22 Sep 2003 15:37 Prispevkov: 258 Aktiv.: 1.16 Kraj: Ribniško Pohorje
|
Objavljeno: Sre Apr 24, 2024 9:27 pm Naslov sporočila: |
|
|
Uporaben projekt.
Če bi se nabralo nekaj kandidatov za naročilo PCB bi si lahko malo porazdelili stroške.
Bi še kdo izdelal zalivanje?
|
|
Nazaj na vrh |
|
|
SimonS Član
Pridružen-a: Čet 01 Jul 2004 11:18 Prispevkov: 4592 Aktiv.: 20.57 Kraj: Kobarid
|
Objavljeno: Sre Apr 24, 2024 10:10 pm Naslov sporočila: |
|
|
Imam nekak tiskanin viška. Če rabiš napisi pod ZS. Cena 10€
_________________ Lep dan
Simon |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 83 dni
Powered by phpBB © 2001, 2005 phpBB Group
|