Arduino - dátum, idő deklarálása

Sziasztok,

szeretnék egy kis segítséget kérni Arduino programozással kapcsolatban.

Amit szeretnék:

Szeretném időközönként mágnes kapcsolókat kapcsolni. Pl: minden nap 07:00 és 19:00 5 percre. Az idő függvény deklarálásában az érték kinyerésében akadtam meg, ehhez szeretnék kérni támpontot, hogy ezt hogyan is kellene deklarálni, kezelni. Itt egy kicsit lefagytam... a vezérlés már meg van csak az időket kellene hozzá tennem.

Köszi előre is!

Kalmi

Hozzászólások

A legegyszerubb, ha a millis() fuggvenyt hasznalod, ami a bekapcsolas ota eltelt millisecundumaidat adja vissza 32 bites unsigned-kent (felteve, hogy nem nyulsz hozza az orajeledhez, mert ugye a regiszterekbe bee tudsz piszkalni). Valahogy meg kell adnod, hogy mennyi az aktualis ido, innentol van egy epoch-od meg egy adott timestamphez tartozo datum-ido parosod. Mar csak a korbefordulast kell kezelned, es keszen is vagy. Reboot/aramkimaradas utan persze be kell allitanod ujra az idot.

Masik lehetoseg, ha van hardware-es modulod, ami lekezeli. Ezt peldaul szeretik.

Harmadik lehetoseg, ha van neted, es onnan le tudod kerni idonkent az idot. De ezt mar inkabb ESP alapon celszeru.

A strange game. The only winning move is not to play. How about a nice game of chess?

Akkor jól éreztem, hogy ez nem olyan “egyszerű” dolog. Meg oldható a net is, mert van egy wemos d1 es kutyum, amivel sikerült wi-fivel kapcsolodnom a routerhez. Így feltételezem van net is rajta. Azaz lehetne valahogy atomórát szinkronizalni is.

Az időpontok fontosak lennének, hogy beállított értéknél kapcsoljon a kapcsoló. Erről kaphatok segítséget?

van ntp library (NTPClient) amivel szinkronizálhatsz. Használata egyszerű:


const long utcOffsetInSeconds = 3600;
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds);

Az utcOffsetInSeconds a helyi időzóna.
Ezt követően már csak a következő kell a loopban:


void loop() {
timeClient.update();
int hours = timeClient.getHours();
int minutes = timeClient.getMinutes();

if (hours == 7 && minutes == 0) digitalWrite(RELAY_PIN, 1);
if (hours == 7 && minutes == 5) digitalWrite(RELAY_PIN, 0);

if (hours == 19 && minutes == 0) digitalWrite(RELAY_PIN, 1);
if (hours == 19 && minutes == 5) digitalWrite(RELAY_PIN, 0);
}

Lehetne szebben is, de ez szemléletesebb így ;)
Ha nem relé, hanem valami más, akkor arra figyelni kell hogy 7 óra 0 perckor 1 percen át folyamatosan 1-re fogja állítani, 5 perckor pedig 1 percig folyamatosan a nullára. Ez relénél lényegtelen

// Happy debugging, suckers
#define true (rand() > 10)

NTP erre valo, meg persze pontosabb.

Egyszerubb esetben webserver headerjebol is kinyerheto (vagy direkt erre irt server oldali koddal is megoldhato). Ilyen ebresztoora-szeru funkciot pl. igy csinaltam itthon, van egy raspberrym, ami mindig fut, az azon futo webserverrol kapja a parancsokat es a pontos idobelyeget, amihez szinkronizalhat.

A strange game. The only winning move is not to play. How about a nice game of chess?

Ja, kifelejtettem meg a radios oraszinkronizalos dolgokat. Van a frankfurti DCF77 rendszer, ez nem mindig veheto itthonrol. Ezen kivul - ha van ablakra ralatas - GPS-rol is lehet idot venni.

Mekkora pontossagra van szukseged? Mire szeretned hasznalni? Ez a wifisnel is erdekes.

A strange game. The only winning move is not to play. How about a nice game of chess?

Öntöző rendszert szeretném vezérelni. A nagyon nagy pontosság nem feltétel, de azért jó lenne, ha pl: 7 óra fele, reggel kapcsoljon be :), egyórakkor már kiégne a fű :). 

Nagyon köszönöm a segítségeteket! Megnézem ma, hogy értem is-e ami infókat kaptam és össze tudom-e rakni egy kódba. Remélem sikerül, egyenlőre nem néz ki bonyolultnak a dolog.

XD, jaj!

Akkor miert nem a fenyerot akarod alapul venni? Ha el tudod helyezni ugy a vezerlomodulodat, egy ilyenbol es egy ellenallasbol epitett oszto kozos pontjat rakotod egy tetszoleges mikrokontroller ADC-jere, es figyeled mikor kel fel es nyugszik a Nap. Napnyugtakor beinditod az ontozorendszeredet, meg napkeltekor, es ennyi. Ha (lehetoleg kapacitiv) talajnedvesseg-erzekelod is van, nem locsolsz, ha amugy is esett.

A strange game. The only winning move is not to play. How about a nice game of chess?

Öntözőrendszer: azt tudd, hogy vastagon kitaposott úton jársz, dugig van a net DIY locsolórendszer építéssel, rengeteg példát és ötletet fogsz találni ha rákeresel. A Wemos jó alap, sokan építenek rá ilyen rendszert, de azt vedd figyelembe, hogy kevés a biztonsággal használható GPIO, amik dedikáltak és tuti nem billennek át amikor nem akarod, és nem önti el a kerted e miatt az árvíz (de amúgy ettől függetlenül is célszerű egy független master szeleppel indítani az egészet, aminek az állapotát le tudod kérdezni, vagy beépíteni egy átfolyásmérőt).

https://community.blynk.cc/uploads/default/original/2X/3/32941e2c222564…

Ez alapján úgy 5 körig jó vagy, de egyébként szerintem a RX/TX is is nyugodtan használható lenne (ebbe majd kössön bele aki jobban ért hozzá nálam, biztos vannak itt ilyenek).

Néhány tipp még a plug&play -től a teljes DIY-ig:

- gyári megoldások: Hunter, Rainbird, stb... (de ezeket gondolom ismered)

https://opensprinkler.com (raspberry alap, hackelhető, jól integrálható, opensource, szerintem egy kicsit túl van árazva)

- DIY megoldáshoz yaml alapú custom firmware kreátor ESP-hez: ESPHome (csak beleszórod a modulokat ami kell, és azt csinálja amit szeretnél, hátránya lehet, hogy a vezérelhetősége főképp Home Assistantra van kihegyezve)

- teljesen saját sw (aminek te is nekiálltál)

Az utóbbi is jó buli persze, főleg ha tanulni is szeretnél, ez esetben simán csak kövesd a topicban olvasott tippeket.

Én amúgy tavaly építettem meg a sajátom (szintén Wemos D1 mini alapon, 4 körhöz). Akkor még Espeasy volt rajta, most vacillálok a ESPHome és a saját sw között, mert van hozzá egy i2c kijelzőm is, és az Espeasy-vel elég korlátozottan tudom csak használni. Én amúgy Home Assistantból vezérlem mqtt-n, maga az eszköz buta, az egyetlen automatizmus amit önmagától tud, az a 4db relé közötti interlock funkció (egyszerre mindig csak egy kör lehet bekapcsolva).

Van a frankfurti DCF77 rendszer, ez nem mindig veheto itthonrol.

Ezzel több baj is szokott lenni, pl. az egyik az, amit írtál is, hogy bizonytalan Magyarország területén itt-ott-amott-többfelé a vétel, így időnként vesz valamit a vevő, időnként nem, a vett adatok helyességének ellenőrzése meg annyira gagyi ebben a protokollban, hogy simán tévedhet durvákat egy ilyen óra, és téved is.

Arduino RTC? Gombelem kell bele, 1x beállítod, utána elketyeg magától. Időnként rákérdezel, hogy mennyi az annyi és végrehajtod, amit szeretnél.

Megkockáztatom, alarm funkciója is van és interruptot ad neked valahova.

Erre gondolok: https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=ardui…

Aztán utána kell  olvasni, hogy melyik miben jobb. Van több változat.

Arduino egyébként elég a feladatra. Ha Raspberry Pi és társai irányba mennék el, akkor megnézném időképen a következő időjárást, és ha aznap esni fog, kihagyom az aznapi öntözést :) Lehet ezt szépíteni :)