Keresés

Részletes keresés

titusz99 Creative Commons License 2017.01.16 0 0 2742

Timer library val így néz(het) ki (f1-f9-ig a lépések):

#include "Timer.h"
#define INTERVAL_SD 3000 // sd kártya írás ciklus
#define INTERVAL_LCD 4000 // lcd írás ciklus
#define INTERVAL_PROG 6000 //program futás ciklus
Timer t
void setup() {
t.after(INTERVAL_SD, f1);
}
void loop() {
t.update();
}
void f1()
{
kiolvas_t();
sd_iras();
serial_print();
t.after(INTERVAL_LCD , f2);
}
void f2()
{
lcd_idopont();
kiolvas_t();
t.after(INTERVAL_PROG , f3);
}
void f3()
{
szabalyozas();
t.after(INTERVAL_LCD , f4);
}
void f4()
{
lcd_puffer();
kiolvas_t();
t.after(INTERVAL_PROG 00, f5);
}
void f5()
{
szabalyozas();
kiolvas_t();
t.after(INTERVAL_LCD , f6);
}
void f6()
{
lcd_teljesitmeny();
kiolvas_t();
t.after(INTERVAL_PROG , f7);
}
void f7()
{
szabalyozas();
kiolvas_t();
t.after(INTERVAL_LCD , f8);
}
void f8()
{
lcd_fusthofok();
kiolvas_t();
t.after(INTERVAL_PROG , f9);
}
void f9()
{
szabalyozas();
serial_print();
t.after(INTERVAL_SD , f1);
}

Előzmény: Törölt nick (2740)
titusz99 Creative Commons License 2017.01.16 0 0 2741

Tehát ezek szerint 1 loop ciklus 43 sec?

 

Nézd meg a Timer library-t.

Nagyon meg tudja könnyíteni a program írását.

És sokkal átláthatóbbá válik.

Előzmény: Törölt nick (2740)
Törölt nick Creative Commons License 2017.01.16 0 0 2740

kiolvas_t //minden hőmérőt kiolvas

3 mp után

sd_iras // sd-re ment adatokat

serial_print // serial-ra kiír adatokat

+4 mp után

lcd_idopont // lcd-re kiírja az időpont adatokat

kiolvas_t // frissíti a hőfok adatokat

+6 mp után

szabalyozas // az adatok alapján elvégzi a szabályozást

+4 mp után

.

.

.

.

8 ciklus összesen =43 mp

Előzmény: titusz99 (2738)
halaloszto Creative Commons License 2017.01.16 0 0 2739

én másképp vagyok bekötve. nekem nyilván a nagyvilágból kell elérni, ha otthon vagyok tudom kb mennyi fok van.

Előzmény: titusz99 (2736)
titusz99 Creative Commons License 2017.01.16 0 0 2738

Egy loop-on belül:

Egyszer lefutnak 3 másodpercenként:

sd_iras();
serial_print();

 

Egyszer lefutnak 4 másodpercenként:

lcd_idopont();
kiolvas_t();

De nem futnak le:

lcd_puffer();
kiolvas_t();

 

és

lcd_teljesitmeny();
kiolvas_t();

és

lcd_fusthofok();
kiolvas_t();

 

 

Egyszer lefutnak 6 másodpercenként:

szabalyozas();

de nem futnak le:

szabalyozas();
kiolvas_t();

 

és

szabalyozas();
kiolvas_t();

és

szabalyozas();
serial_print();

 

 

 

Előzmény: Törölt nick (2735)
titusz99 Creative Commons License 2017.01.16 0 0 2737

Ha időzítések kellenek használjátok a Timer könyvtárat.

https://github.com/JChristensen/Timer

 

Ha az arduino-t havonta egyszer újraindítjátok akkor a millis használata elmegy.

De így kb. az 50. napon meghülyül (millis túlcsordul).

Helyesen(az első):

if(millis() - sdTimestamp >= INTERVAL_SD)

 

Minek az a sok kiolvas_t();

Több feltételben is használod ugyan azokat a timestamp-okat.

Egyébként ezért nem fut le némelyik.

Előzmény: Törölt nick (2735)
titusz99 Creative Commons License 2017.01.16 0 0 2736

Nyílván nem a nagyvilágból kell elérni.

Talán elég az otthoni hálózatból.

Előzmény: halaloszto (2734)
Törölt nick Creative Commons License 2017.01.16 0 0 2735

Valamit nem jól csináltam, nem futnak le egymás után az egyes ciklusok, csak az lcd_idopont (); ismétlődik:

#define INTERVAL_SD 3000 // sd kártya írás ciklus
#define INTERVAL_LCD 4000 // lcd írás ciklus
#define INTERVAL_PROG 6000 //program futás ciklus
unsigned long sdTimestamp =0; // millis-hez állítja sd ciklus idejét
unsigned long lcdTimestamp =0; //millis-hez állítja lcd ciklus idejét
unsigned long progTimestamp =0; // millis-hez állítja prog ciklus idejét

.

.

.

.

.

void loop()
{
kiolvas_t();

if(sdTimestamp + INTERVAL_SD < millis())
{
digitalWrite(LED1, !digitalRead(LED1)); // toggles the LED on/off
sd_iras();
serial_print();
sdTimestamp = millis();
}
if(lcdTimestamp + INTERVAL_LCD < millis())
{
digitalWrite(LED1, !digitalRead(LED1)); // toggles the LED on/off
lcd_idopont();
kiolvas_t();
lcdTimestamp = millis();

}
if(progTimestamp + INTERVAL_PROG < millis())
{
digitalWrite(LED1, !digitalRead(LED1)); // toggles the LED on/off
szabalyozas();
progTimestamp = millis();

}
if(lcdTimestamp + INTERVAL_LCD < millis())
{
digitalWrite(LED1, !digitalRead(LED1)); // toggles the LED on/off
lcd_puffer();
kiolvas_t();
lcdTimestamp = millis();

}
if(progTimestamp + INTERVAL_PROG < millis())
{
digitalWrite(LED1, !digitalRead(LED1)); // toggles the LED on/off
szabalyozas();
kiolvas_t();
progTimestamp = millis();

}
if(lcdTimestamp + INTERVAL_LCD < millis())
{
digitalWrite(LED1, !digitalRead(LED1)); // toggles the LED on/off
lcd_teljesitmeny();
kiolvas_t();
lcdTimestamp = millis();

}
if(progTimestamp + INTERVAL_PROG < millis())
{
digitalWrite(LED1, !digitalRead(LED1)); // toggles the LED on/off
szabalyozas();
kiolvas_t();
progTimestamp = millis();

}
if(lcdTimestamp + INTERVAL_LCD < millis())
{
digitalWrite(LED1, !digitalRead(LED1)); // toggles the LED on/off
lcd_fusthofok();
kiolvas_t();
lcdTimestamp = millis();

}
if(progTimestamp + INTERVAL_PROG < millis())
{
digitalWrite(LED1, !digitalRead(LED1)); // toggles the LED on/off
szabalyozas();
serial_print();
progTimestamp = millis();

}
}

halaloszto Creative Commons License 2017.01.16 0 0 2734

ahhoz még kell dinamikus dns és portforward a routereden. érteni is kell hozzá meg nem is veszélytelen

Előzmény: titusz99 (2732)
titusz99 Creative Commons License 2017.01.16 0 0 2733

És mit mérsz?

Dallas-val nincs gond (kivéve ha fake).

MAX6675-nél adódhatnak problémák.

Előzmény: stinky14 (2730)
titusz99 Creative Commons License 2017.01.16 0 0 2732

Ha ESP-t +ban webszerverként programozod fel, akkor közvetlenül is lekérdezheted telefonról.

Előzmény: stinky14 (2730)
titusz99 Creative Commons License 2017.01.16 0 0 2731

Igen.

Tulajdonképpen thingspeak szerverére el kell juttatni az adatokat.

A telefonon levő program meg onnan veszi le.

Ezért a legegyszerűbb arduino-t helyettesíteni ESP-vel.

A barométerem is így megy. A tápját egy szgép adja USB-n.

Előzmény: stinky14 (2729)
stinky14 Creative Commons License 2017.01.16 0 0 2730

Szerkeszteni már nem tudtam. 

Sajnos még csak bluetoothon tudok kommunikálni. Tesztelgetem a rendszereket, hogy végül minek a felhasználásával építsem meg teljesen a ház vezérlését. De egy wifi modul még belefér próbának. 

Előzmény: stinky14 (2729)
stinky14 Creative Commons License 2017.01.16 0 0 2729

Még csak rálestem a programra, de jól látom, hogy kötelező hozzá wifi vagy enternet modul? 

Előzmény: titusz99 (2728)
titusz99 Creative Commons License 2017.01.16 0 0 2728

Az enyémet ezen a címen lehet elérni.

Jelenleg csak egy barométer (ESP8266) küldi az adatokat.

Előzmény: stinky14 (2727)
stinky14 Creative Commons License 2017.01.16 0 0 2727

Tökéletes!! Köszönöm! 

Előzmény: titusz99 (2726)
titusz99 Creative Commons License 2017.01.16 0 0 2726

pl.: thingspeak

Előzmény: stinky14 (2725)
stinky14 Creative Commons License 2017.01.16 0 0 2725

Létezik olyan androidos program, amelyikkel ki tudnám rakni a mért hőmérsékletet widgetként a főképernyőre? 

 

titusz99 Creative Commons License 2017.01.16 0 0 2724

Amikor a millis() átfordul, lesznek meglepetések.

Előzmény: Vargham (2723)
Vargham Creative Commons License 2017.01.16 0 0 2723

Miért is?

Előzmény: titusz99 (2722)
titusz99 Creative Commons License 2017.01.16 0 0 2722

Amit még javítani kellene:

 

       (timestampButton + BUTTON_SHORT < millis())

 

helyett

       (millis() - timestampButton > BUTTON_SHORT)

 

És persze a többi millis() sorokat is. (41, 47 és 64-es sorokban)

 

Üdv.:Titusz

Előzmény: Vargham (2720)
Nooorbi91 Creative Commons License 2017.01.15 0 0 2721

Köszönöm, így már tökéletesen működik! :)

Előzmény: Vargham (2720)
Vargham Creative Commons License 2017.01.15 0 0 2720

Ezt az értéket növelted?

#define LAMP_TIMEOUT    5000 //ms

Kell egy L (long int jelölése) a végére

#define LAMP_TIMEOUT    5000L //ms

 

Valamint int helyett:

unsigned int timestampLamp = 0;
unsigned int timestampButton = 0;

long

unsigned long timestampLamp = 0;
unsigned long timestampButton = 0;

 

Ezeket javítottam, itt a link

https://gist.github.com/vargham/772c6b116f4aec4f0792dd573ee00137

 

Mást is átírtál a kódban?

Előzmény: Nooorbi91 (2719)
Nooorbi91 Creative Commons License 2017.01.15 0 0 2719

Végre elkészült a lámpa és fel is szereltem a helyére.
Viszont amikor a világítási időt feljebb vettem jöttek a bajok.

5mp idővel még semmi gond.  De veszem egyre feljebb egyre gyakrabban fagy le.
2 perces időt akarok beállítani egyenlőre, de ott már mindig gond van vele.
2 perc után lekapcsol ahogy kell, de aztán a következő gombnyomásra már rögtön a folyamatosan világító üzemmódba kapcsol(világít az ezt jelző LED) és hiába nyomkodom a gombot, le se lehet kapcsolni.

Próbapanelen, uno vezérlővel ugyan ez csinálja. (a kész lámpába nano került)

Előzmény: Vargham (2597)
spiler0078 Creative Commons License 2017.01.11 0 0 2718

Szia!

 

Köszi a hozzászólást :)

 

"Illetve, ha 3 másodpercnél tovább nyomom, akkor az összes lámpát lekapcsolja. Ez elég hasznos, ha megyek el, a bejárati ajtó mellől minden lámpát le tudok kapcsolni. Vagy lefekvés előtt, a hálószobából." - Ez tetszik, szerintem ezt én is megcsinálom. :)

 

"a nagyszobából a fürdőszoba kapcsolódjon, és fordítva." - Itt igazából arról van szó, hogy szoftverből is meg lehessen oldani, hogy honnan mit szeretnék kapcsolni, ha netán valamelyik helyiség funkciója változna... Ez csak lehetőség, de lehet, hogy tényleg egyszerűbb átkötni... Majd kiderül... :)

"És ha filmet akarsz nézni, akkor elveszed a világítást a fürdőszobából, ahol valaki éppen zuhanyozik.

Itt nem arra gondoltam, hogy az egész házban lekapcsolom, hanem csak a nappaliban található fő fényforrásokat, esetleg ha túl világos van, még félig leengedem a redőnyt is :)

A fürdőt természetesen nem kapcsolnám le :)

Igen, hobbi is. Köszi a biztatást, rajta vagyok a témán.

üdv

spiler

Előzmény: djz (2715)
Gogol69 Creative Commons License 2017.01.11 0 0 2717

Szia!

Nem kupeckedni akarok, + az árát sem tudom. Már vagy egy éve vettem.

Neked mennyit ér?

+ Hova kell eljuttatni?

Küld el privátban az email-ra. 

 

Előzmény: enginer (2714)
Sploc Creative Commons License 2017.01.11 0 0 2716

Huuhh... Köszönöm, a lényegretörő gyorstalpalót, hát azt hiszem az almapucolás, és a hagyma üvegesítés ettől egyszerűbb. :-)

Köszönöm még egyszer, így már egy kicsit világosabb.

Előzmény: Prof (2679)
djz Creative Commons License 2017.01.11 0 0 2715

Szia!

Én 2005-2006 tájékán csináltam ilyesmi rendszert a lakásomba.
Egy gombnyomásra felkapcsol, a következőre le. Illetve, ha 3 másodpercnél tovább nyomom, akkor az összes lámpát lekapcsolja. Ez elég hasznos, ha megyek el, a bejárati ajtó mellől minden lámpát le tudok kapcsolni. Vagy lefekvés előtt, a hálószobából.
"Mindent felkapcsoló" nyomógombom is van, ezt emlékeim szerint pont egyszer használtam, amikor kipróbáltam. :)
Annak idején persze nem Arduinoval oldottam meg, hanem egy Siemens Logo! programozható relével. Ennek kétségtelen előnye, hogy DIN sínre szerelhető, profi tokozású, minden szabványnak megfelelő készülék, a bemenetek sok-sok méter esetén is megelégszenek két szál vezetékkel, nem kell foglalkozni a zavarmentesítéssel, a kimenetek pedig relések. És nekem volt egy elfekvő darabom, egy másik projektből maradt meg. Ilyen relék minden gyártó kínálatában vannak, én Omronnal és Eatonnal szoktam még dolgozni leggyakrabban. Relatíve kevés ki/bemenet esetén érdemes gazdaságossági számításokat végezni.
A melyik nyomógomb - melyik lámpa váltást én nem programból, hanem a relék bekötésének változtatásával oldanám meg, szerintem kár túlbonyolítani. Bár nem egészen értem, hogy miért akarnék olyat, hogy a nagyszobából a fürdőszoba kapcsolódjon, és fordítva.

Az előre programozott események: láttam komoly lakásautomatizálási rendszereket, pont addig használták, amíg megmutatták a vendégeknek. Aztán rájöttek, hogy már az alapgondolat se volt jó, és akkor ugye ki kell hívni a szakembert, aki átprogramozza. Nyilván, ha magad csinálod, ez nem probléma.
A mobiltelefonos megoldás jó ötletnek tűnhet, de az összes családtagnak tele lesz vele a hócipője, csak Te fogod használni. És ha filmet akarsz nézni, akkor elveszed a világítást a fürdőszobából, ahol valaki éppen zuhanyozik.
Így hirtelen ennyi jutott az eszembe, de nem akarom elvenni a kedved, ez egy jó és megvalósítható projekt, különösen, ha ez a hobbid is. Csak azért sok mindent át kell gondolni, hogy ne csak az asztalon működjön, hanem élesben is.

Előzmény: spiler0078 (2713)
enginer Creative Commons License 2017.01.11 0 0 2714

mennyiért adod?

 

Előzmény: Gogol69 (2675)
spiler0078 Creative Commons License 2017.01.11 0 0 2713

Szia!

 

Ha megnyomom a gombot akkor kapcsolja fel- , ha még egyszer akkor kapcsolja le a hozzá rendelt fényforrást. 

 

Azért gondolnám arduino-val vezérelni, mert ilyenkor átkötés nélkül, program kód módosítással meg tudom változtatni, hogy melyik kapcsoló mit kapcsoljon.

 

Szeretnék un. "pánik" gombot, ami a lakásban mindenhol felkapcsolja a villanyt, és ezeket majd szeretném mobilról is kapcsolgatni.  Ez mellett pedig szeretnék előre programozott eseményeket is (mobilról), mint pl Filmnézés (ilyenkor a TV mögötti kis világítás be, Nappali össz. világítás ki és a konyha jelzőfény be), stb...

 

Ilyenek miatt gondoltam, hogy mikrokontrollerrel kapcsolok... 

Vagy ezeket másképp szokták csinálni? Nyitott vagyok ha van jobb ötlet :)

 

Köszi

 

 

 

 

Előzmény: djz (2712)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!