Chucky77
Vytvořené odpovědi
-
AutorPříspěvky
-
posjirka
Účastníkadd optiboot: to vypadá na chybu programátoru. Předpokládám, že to flashuješ přes nějáký programátor a né přes USB samotného flashovaného arduina. TO by nešlo a musíš použít ISP programátor, nebo druhé arduino v této roli.
add Watchdog: tady není moc věcí co by nemělo fungovat. Maximálně ten delay na konci o 3s. Když k tomu připočteš čas na načtení teplot z čidel (2×0,75 s) tak seš na 5s a do 8 je ještě daleko,… takže by to neměl být problém. To zatuhnutí ti může udělat i LCD display. nevěřil bych tomu, kdyby nám to na medometu takto nezatuhlo taky. 2 hodiny jsem si hráli s programem, vypnuli, za hodinu zapnuli a přesně jak píšeš. čtvrečky a procesor tuhý. Tak jsem zkoušeli změřit napětí, komunikace s PC nulová, napětí v pořádku 🙂 až jsem se dostal na krystal, tak s broukal na nějákých 5 kHz místo 16MHz, tak jsem jeje vymenili, po hodině zas zátuh, až jsem se nas.. vytáhnul LCd a začla znovu uživovoat. No a byl to LCD. Nevím jak ale n 2 arduinech jeden a na 3 ne. Prstě zátuh. Nikde kapka cinu, žádný zkrat, napěťové úrovně signálu v pohodě a za 2 hod. zátuh. Dali jsem nový LCD a už to šlape.
ad Webserver: záleží co od něj čekáš. chceš webserver pro vlastní potřebu uvnitř domu, nebo to chceš monitorovat případě ovládat z venku (práce, druhý konec světa, .. 🙂 )
Pokud jen doma je to v pohodě. Taky jsem tento víkend nad tím ztrávil pár hodin, rozchodil jsem ESP8266 v01. celkem mi pomohlo toto:
https://www.arduinotech.cz/inpage/jak-na-iot-dil-ii-web-na-javascriptu-s-esp8266/pak jsem to zkoušel dát na thingspeak pomocí tohoto návodu:
http://navody.arduino-shop.cz/navody-k-produktum/esp8266-a-thingspeak.htmlaktivoval jsem 1 kanál, nahrál data, pak jsem to chtěl poupravit a nepájivé pole mi při manipulaci opustil drát GND a po zapojení jsem si odpálil ESP- Tak jsem objednal NODEMCU a uvidíme.
macicek86
ÚčastníkDíky za podporu :).
Funguje! Od tvého postu jsem program několikrát přepracoval, doplnil cidlo DHT.
Po prvnim spusteni jsem se setkal s problémem : po zapnutí relé se arduino „kouslo“ zjistil sem že problém byl v napájení jelikož jsem projekt napájel přes usb vstup arduina a po sepnutí relé pravděpodobně nemělo dost proudu pro chod procesoru, tento problém byl vyřešen připojením napájení přímo na pin 5V. i přez to občas arduino vytuhlo a na displeji se zobrazily pouze obdelniky, myslel sem že tento problém vyřeší Watchdog, nicméně se zdá že na mém chinaduinu watchdog nepracuje správně a nedochází k restartu. Bohužel se mi nedaří naflashovat optiboot, vzdy skonci chybou „device signature 0xffffff“ přip. 0x000000 :(. nicmene ted pro zmenu bezi uz dva dny bez problemu.
Nesehnal jsem na rychlo v našich končinách univerzélní DPS, takže projekt skončil jako „Vrabčí hnízdo“ je to nevzhledné ale funkční.
Zvažoval sem implementovat jěstě webserver pro přśtup k informacím o teplotách prostřednictvím ESP8226, nicméně se mi zatím nepodařilo nalézt pro mne dostatečné podklady pro tuto aplikaci. mám k dispozici ESP8226 V7, vím že by tento modul zvládl obshluhovat celou aplikaci sám ale tomuto řešní by jsem se rád vyhnul.k funkci programu:
V připadě že je teplota v bazénu (čidlo umístěno ve skimmeru) o něco menší než než teplota na panelu zapne se čerpadlo (kartušová filtrace – zvolena kuli tomu aby se nedostavali nečistoty do panelu) ohřevu.
Toto čeprpadlo se vypne když teplota na panelu klesne pod určitou uroveň.kažďou hodinu vždy v půl se na pět minut rozběhne velka piskova filtrace, je to kuli tomu že kartušovka nesebrala napadane nečistoty z hladiny. čerpadlo ohřevu je blokováno během chodu piskove filtrace.
piskova filtrace se pote taky spoušti v nastavenou dobu, v připadě použití „=“ bylo však nutné konec cyklu filtrace posunout o jednu hodinu, jinak by běžela o hodinu dele.
Čerpadla jsou propojena pomocí T-kusů u skimmeru a u zpětné trysky přez zpětné klapky. Zpětné klapky jsou důležité jinak by jedna filtrace vytahovala vodu z druhé. Musel jsem však upravit zpětnou klapku kartušove filtrace ustřiženim kousku pružiny jelikož kartusovka nepremohla panel a ještě zpětnou klapku.
Když jsem zpětnou klapku od kartušovky vyřadil, po zapnuti velke filtrace se panel skutečně ochlazoval obracene.Doufám že povidání dava smysl… :).
Uvital bych jakoukoliv radu ohledne doplneni web serweru…
Diky.ZdenekRSA
ÚčastníkDobry den,
dekuji za Vasi odpoved. Ja jsem v tomto oboru zacatecnik, ale myslim, ze mi vase odpoved hodne pomohla. Budu si s tim hrat podle vaseho navodu a dam Vam vedet.
Jeste jednou dekuji.Zbyšek Voda
ÚčastníkDobrý den,
nejsem si teď úplně jistý, ale tento modul komunikuje přes sériovou linku, že?On je problém v tom, že nahrávání programu do Arduina probíhá také přes sériovou linku a když je na ní připojeno ještě něco dalšího, bývá problém s tím, že připojená věc ruší komunikaci na lince.
U desky Arduino Mega máte výhodu, že má vícero hardwarových sériových linek (Označené RX0, TX0, RX1, TX1, …). Programování Arduina probíhá přes RX0 a TX0. Probém můžete vyřešit tím, že WiFi Modul připojíte na jinou sériovou linku, než RX0 a TX0. Pak musíte také upravit program, ale to by mělo být jednoduché 🙂
posjirka
Účastníkještě je možnost použít sw PWM ale myslím, že přepojit 2 piny vs zabrat zbytečně pamět a strojový čas procesoru je jasný vítěz přehodit 2 pin.
Pro sw řešení můžeš použít knihovnu:
https://github.com/Palatis/arduino-softpwmta ti umožní udělat pwm signal na libovolném pinu, jen to zabere kus místa ve flash paměti, časovač tuším timer2 a neustálé přerušení hlavní smyčky programu aby se vykonala pwm funkce.
u HW řešení jen pošleš na pin hodnotu a o ostatní se stará samotný čip a program běží nezávisle …
posjirka
Účastníkprincip máš správný, jen máš špatné zapojení.
Předpokládám, že stejný problém máš i u „pravý motor vpřed“.
Proč:
né všechny piny na Arduinu Uno mají možnost PWM regulace. Ty které to umožňují jsou na desce označeny vlnovkou. Jedná se o piny č. 3, 5, 6, 9, 10, 11.
Některé jiné desky mají PWM i na jiných pinech.
Řešení:
přepoj to na správné piny a uprav si program….pozn. chválím za popis problému, schéma zaopjení a kod programu. Takto se dá najít problém během chvilky a dá se nad problémem v klidu zamyslet. víc takových popisů a forum se nám zkrátí na polovinu 🙂
pedyngro
ÚčastníkDíky, je to ono, měl jsem tam 21 místo 20.
Zbyšek Voda
ÚčastníkNemáte jiný rozměr vytvářeného pole, než uvádíte v hranatých závorkách?
Podobný error hlásí iint x[2][2] = {{1,2},{2,3},{3,4}};
Když to nepomůže, pošlete kód 🙂
Do_it
ÚčastníkTak my ciknete na 734111563 a domluvíme se 🙂
Zbyšek Voda
ÚčastníkNení zač, ať se daří. Jsem rád, že program funguje 🙂
posjirka
Účastníktady bych šel cestou předem připravené knihovny. Zkus „Sensortransmiter“.
Tady je k ní tutorial:
https://www.root.cz/clanky/arduino-na-433-mhz-komunikuje-s-bazenovym-teplomerem/posjirka
Účastníka je něco co ti nefunguje?
Když se dívám na program tak vpadá vcelku schopně. Jednoduchý, přehledný, bez zbytečných kudrlinek.
Co tam vidím za prostor ke zlepšení:
– nemáš vyřešeno nastavení RTC. Lze udělat auto nastavení po připojení k PC. Jinak po výměně baterie o ten čas přijdeš, nebo musíš měnit baterii za chodu.– 10 bit rozlišení na čidle DS18B20 j nesmysl. Jeho tolerance je 0,5 st.C tudíž nějáké průměrování není nic moc. Já tyhle čidla používám pro celé st.C = nepoužívám float ale int nebo lépe byte pro kladné hodnoty. zbytečně nezabíráš paměť procesoru.
-pro nastavení zapniA, vypniA, … můžeš do podmínky dát i rovná se:
if (datumCas.hour() => zapniB && datumCas.hour() =< vypniB) {
lépe ta využiješ formát času. Teď to nepotřebuješ, ale kdyby si šel až do 23 hod, tak ti nepůjde podmínka vypni, protože další hodina je 00.– v popisech nepoužívej diakritiku. Stejně tyto znaky překlopí anglická sada znaků na „?“
co víc napsat? Mě se tenhle sparťanský přístup líbí a pokud ti vše funguje jak má, nevidím v tom problém. Dobrá práce. Jestli budeš mít dobrou vůli, tak sem prosím dej i schéma případě nějákou fotku ať se ostatní můžou inspirovat …
pedyngro
ÚčastníkMoc díky, konečně to funguje, jak má! Už jsem se sám pokoušel nějakým způsobem předat hodnoty pole přes parametr funkce zobraz, ale nevěděl jsem jak. Asi sebudu muset líp naučit C a nespoléhat na to, že co jde v pythonu, jde všude…
Ještě jednou moc děkuji za čas, který jste si na mě udělal, místo abyste mě odkázal na učebnici C.
hoblik
ÚčastníkDiky za odpoved , je mozne abychom si zavolali nebo na skype ?
PetrJarda_1
Účastníkmám to doplněné ještě zářivkovou trubici pro rostliny „Flora“
ale dík za radu, příští sezonu přidámDo_it
ÚčastníkJojo ty jsou dobrý cena ku výkonu ku účinnosti 🙂 přidej na růst cre led modrý bude se více tvořit kořenový bal a protáhne se kiticka více do výšky.
Zbyšek Voda
ÚčastníkJe tam více problémů.
Jeden problém je v tzv. scope – česky tuším rozsah platnosti proměnných.
Na začátku si vytvoříte pole diody, které je globální – můžete k němu přistupovat ve všech funkcích. Potom si třeba ve funkci a vytvoříte pole diody, které je pro tuto funkci lokální. A tím zastíníte globální pole diody. Dále dojde k zavolání funkce zobraz(), ale ta nevidí to lokální pole z funkce a, ale globální pole diody definované na začátku.Kdyby se nejednalo o pole, stačilo by odebrat klíčové slovo boolean ve funkcích a pak už by se měnila hodnota globální proměnné. U pole to ale tak jednoduché není, protože nejde napsat ve funkci
diody[3][3] = {{1,1,1},{1,0,1},{1,1,1}};
.Napadají mě dvě cesty, jak to řešit.
První možnost:
Vytvoříte si několik globálních polí, která budou obsahovat požadované sekvence
Třeba:boolean v1[3][3] = {{1,1,1},{1,0,1},{1,1,1}};
a potom v jednotlivých funkcích překopírujete obsah požadovaného pole do pole diody.
memcpy(diody, v1, 9 * sizeof(boolean));
O memcopy viz zde: http://www.cplusplus.com/reference/cstring/memcpy/Druhá možnost:
Funkci zobraz() přidáte parametr typu pole, přes který vždy předáte pole do funkce zobraz. To pak můžete nechat kód tak, jak máte (lokální pole v tomto případě nevadí), jen přidáte zavolání funkce s parametrem pole: zobraz(diody).
Globální pole diody pak můžete zahodit. Tato cesta je asi schůdnějšíDo_it
ÚčastníkMusí být baterie nabíjena přez USB? Nebo bylo lepší trochu vic rozvést jak si to představujete
Jarda_1
Účastníkpoužívám LED – 10W
http://www.ebay.com/itm/100W-50W-30W-20W-10W-3W-380NM-840NM-Full-Spectrum-High-Power-LED-Chip-Grow-Light-/321831784996?var=510765932395
foto z lednaAttachments:
Do_it
ÚčastníkNebo jelikož čidlo na měření půdy je nic moc tak dát čidlo na detekci deště čidlo na sluníčko a udělat k tomu graf na zalévání
Co používáš za led?santa999
ÚčastníkAsi je to něco nového koukám. Nicméně jsem to dnes zkoušel na XP a tam to jede v pohodě takže pro mě je to na 50% vyřešené 😀
pedyngro
ÚčastníkPokusil jsem se ten soubor nahrát tlačítkem „procházet…“, ale nezobrazilo se to tu, takže jsem to vložil do odpovědi ctrl+c ctrl+v… Jinak moc díky za pomoc!
[code]
byte led1 = 8; //nastavení pinů pro jednotlivé diody
byte led2 = 10;
byte led3 = 12;boolean diody[3][3] = {{},{},{}};
int znak = 20; //doba svícení
int mezeraZnak = 10; //mezera mezi dvěma bliknutími v jednom písmenu
int mezeraPismeno = 30; //mezera mezi písmenychar napis[] = „calex“;
int delkaNapisu = sizeof(napis)/sizeof(napis[0]);void a(){
boolean diody[3][3] = {{1,1,1},{1,0,1},{1,1,1}};
zobraz();
}void c(){
boolean diody[3][3] = {{1,1,1},{1,0,0},{1,1,1}};
zobraz();
}void e(){
boolean diody[3][3] = {{1,1,1},{1,1,0},{1,1,1}};
zobraz();
}void l(){
boolean diody[3][3] = {{1,0,0},{1,0,0},{1,1,1}};
zobraz();
}void o(){
boolean diody[3][3] = {{1,1,1},{1,0,1},{1,1,1}};
zobraz();
}void x(){
boolean diody[3][3] = {{1,0,1},{0,1,0},{1,0,1}};
zobraz();
}void zobraz(){
for (byte i = 0; i < 3; i++){ //postupně projíždí sloupce
for (byte j = 0; j < 3; j++){ //projíždí hodnoty řádku v každém sloupci
if (diody[i][j] == 1){ //pokud je hodnota 1, rozsvítí příslušnou diodu
if (j == 0){
digitalWrite(led1,HIGH);
}
if (j == 1){
digitalWrite(led2,HIGH);
}
if (j == 2){
digitalWrite(led3,HIGH);
}
}
}
delay(znak); //nechá chvíli rozsvíceno
digitalWrite(led1,LOW); //všechno zhasne
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay(mezeraZnak); //nechá zhasnuto
}
delay(mezeraPismeno); //nechá zhasnuto – mezera mezi písmeny
}void setup() {
Serial.begin(9600);
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
}void loop() {
for (int i = 0; i < delkaNapisu; i++){ //projíždí po jednom pole „nápis“
if(napis[i] == ‚a‘){ //pokud je aktuální hodnota v poli „a“, pustí funkci „a“
a();
}
if(napis[i] == ‚c‘){
c();
}
if(napis[i] == ‚e‘){
e();
}
if(napis[i] == ‚l‘){
l();
}
if(napis[i] == ‚o‘){
x();
}
if(napis[i] == ‚x‘){
x();
}
}
}
[/code]Zbyšek Voda
ÚčastníkPošlete celý kód, takhle se nikam neposuneme.
pedyngro
ÚčastníkPole mám definované na začátku programu (mimo setup a loop), zjistil jsem, že při printování z funkce „zobraz“ jsou tam hodnoty, které jsou zadané na začátku při vytvoření pole, ty další změny už to nebere v potaz…
Vojtěch Vosáhlo
ÚčastníkPole musíte mít nadefinované mimo smyčku, třeba na začátku programu. Takhle s ním může pracovat jen smyčka ve které bylo pole „stvořené“.
pedyngro
ÚčastníkDíky, mělo by to fungovat, ale když nastavím např. ve funkci „a“ hodnoty pole „diody“, někde se to cestou ztratí:
void a(){
boolean diody[3][3] = {{1,1,1},{1,0,1},{1,1,1}};
Serial.println(diody[0][0]);
zobraz();void zobraz(){
Serial.println(diody[0][0]);
for (byte i = 0; i < 3; i++){
atd…Když to nechám vyprintovat z té funkce, kde hodnoty nastavuji, je všechno v pořádku, ale v další funkci, která s hodnotami dále pracuje, už je všechno „0“.
Nevíte, čím by to mohlo být?
martinius96
ÚčastníkZdravím, programoval som Arduino UNO s Ethernet shieldom, i keď pri počasí. Údaje som nahrával online na web do databázy, následne bolo možné údaje zobrazovať, pracovať s nimi. Vedel by som vám teda pomôcť so zaznamenaním, uložením a vyobrazením na webe. K dispozícii vám však môžem byť až o 3 týždne. Ak by vás to zaujalo, môžeme sa dohodnúť. Kontaktný e-mail: martinius96@gmail.com
martinius96
ÚčastníkZdravím vás, robil som čosi podobné, a vedel by som vám pomôcť, zaznamenával som štandardné hodnoty, ktoré som nameral a uploadoval to na internet cez Arduino s Ethernet Shieldom v pravideľných intervaloch, na stránke sa údaje aj štatisticky vyhodnocovali a stránka obsahuje aj prognózu počasia. Momentálne je stránka neaktívna, ale je tu: arduino.php5.sk
Zbyšek Voda
ÚčastníkDobrý den, v C název proměnné nezměníte.
Můžete ale udělat dvojrozměrné pole.Místo
boolean dio1[] = {1,1,1}; boolean dio2[] = {1,0,1}; boolean dio3[] = {1,1,1};
zapište
boolean dio[3][3] = {{1,1,1}, {1,0,1}, {1,1,1}}
a potom už můžete indexovat tak, jak jste to zamýšlel:
třeba:dio[j][i]
Jarda_1
Účastníkgrowduino.cz – dobrý, ani ceny nejsou přemrštěné.
Asi jak to máš, ty to je nejjednodužší, ale chilli papričkám vadí přilití což se se může stát pokud bude chladno a zataženo, můj cíl je dávkovat vodu na základě vlhkosti půdy. Ledky také využívám než dám sazeničky ven. -
AutorPříspěvky