yenda.net
Vytvořené odpovědi
-
AutorPříspěvky
-
posjirka
Účastníka co když zkusíš tenhle exampl.
Tutoriál – užívání hodin reálného času DS1307 a DS3231 s Arduinem
Ten funguje? Ten projekt osvětlení akvaria v podstatě jen rozšiřuje tento tutorial.
Pak mě napadá jen pár věcí proč to nefunguje:
– špatné zapojení (např prohození SDA a SCK)
– špatný modul/čip DS3231
– chybná adresa modulu (na modulu se dá nastavit tak můžeš mít nastavenou jinou než defaultní)DS3231 bohužel doma nemám a nedostává se mi času s tím experimentovat ….
letakp
ÚčastníkTak jsem se díval na ty knihovny a zjistil jsem, že tam asi fakt nic není, tak jsem stáhl a nainstaloval knihovnu a potom se před #include „wire.h“ nainstalovalo toto:
#include <RtcDateTime.h>
#include <RtcDS3231.h>
#include <RtcTemperature.h>Ale stejně to na monitoru vypisuje to stejné.
letakp
ÚčastníkTak toto je moje verze upravená podle původního návrhu od vnouzirozbijsklo:
#include „Wire.h“
#define DS3231_I2C_ADDRESS 0x68
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
return( (val/16*10) + (val%16) );
}
int svetlo1 = 9;
int sviti = 0;
int den = 0;
int jas = 0;byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
void setup()
{Wire.begin();
Serial.begin(9600);
// set the initial time here:
// DS3231 seconds, minutes, hours, day, date, month, year
//setDS3231time(30,27,19,7,15,11,15);
}
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year)
{
// sets time and date data to DS3231
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set next input to start at the seconds register
Wire.write(decToBcd(second)); // set seconds
Wire.write(decToBcd(minute)); // set minutes
Wire.write(decToBcd(hour)); // set hours
Wire.write(decToBcd(dayOfWeek)); // set day of week (1=pondeli, 7=nedele)
Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
Wire.write(decToBcd(month)); // set month
Wire.write(decToBcd(year)); // set year (0 to 99)
Wire.endTransmission();
}
void readDS3231time(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set DS3231 register pointer to 00h
Wire.endTransmission();
Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
// request seven bytes of data from DS3231 starting from register 00h
*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f);
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());}
void displayTime()
{
;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
&year);
// send it to the serial monitor
Serial.print(hour, DEC);
// convert the byte variable to a decimal number when displayed
Serial.print(„:“);
if (minute<10)
{
Serial.print(„0“);
}
Serial.print(minute, DEC);
Serial.print(„:“);
if (second<10)
{
Serial.print(„0″);
}
Serial.print(second, DEC);
Serial.print(“ „);
Serial.print(dayOfMonth, DEC);
Serial.print(„/“);
Serial.print(month, DEC);
Serial.print(„/“);
Serial.print(year, DEC);
Serial.print(“ Day of week: „);
switch(dayOfWeek){
case 7:
Serial.println(„nedele“);
break;
case 1:
Serial.println(„pondeli“);
break;
case 2:
Serial.println(„utery“);
break;
case 3:
Serial.println(„streda“);
break;
case 4:
Serial.println(„ctvrtek“);
break;
case 5:
Serial.println(„patek“);
break;
case 6:
Serial.println(„sobota“);
break;
}
}
void loop()
{pinMode(svetlo1,OUTPUT);
displayTime(); // display the real-time clock data on the Serial Monitor,
delay(1000); // every secondbyte s, m, h, dvt, dvm, mesic, r;
readDS3231time(&s, &m, &h, &dvt, &dvm, &mesic, &r);if (h >= 9 && h < 21) den = 1; // nastaveni intervalu sviceni
else den = 0;
for (byte brightness = 0; den == 1 && sviti == 0 && brightness < 255; brightness ++) {
analogWrite(svetlo1, brightness);
if(brightness == 255) sviti = 1;
delay(3500);
}for (byte brightness = 255; den == 0 && sviti == 1 && brightness > 0; brightness –) {
analogWrite(svetlo1, brightness);
if(brightness == 0) sviti = 0;
delay(3500);}}
posjirka
ÚčastníkMožná to nebyly chybičky ale jiná verze knihovny.
Pošli sem tvuj program a uvidíme.Zbyšek Voda
ÚčastníkDobrý den, jestli se nepletu, tak knihovna WiFi.h je určena pro oficiální WiFi shield.
ESP je možné ovládat pomocí AT příkazů, které budete posílat přes sériovou linku, např:
Serial.println("AT");
caci
ÚčastníkProjekt je již dokončen.
letakp
ÚčastníkDobrý den. Jsem akvarista amatér a toto téma mně chytlo a chtěl jsem vyzkoušet to stmívání a rozednívání LED pásků. Proto jsem otevřel toto téma a nahrál program do programu a projel test. Při tomto jsem zjistil pár drobných chybiček, ty jsem opravil a program mi v seriovém monitoru nezobrazuje aktuální čas a datum. vypisuje mi pouze tuto hlášku každou vteřinu: 45:165:85 165/165/165 Day of week:
Chtěl jsem se zeptat, co mám špatně. Mám RTC DS3231 a klon NHduino UNO. Děkuji za odpověď.
Pavelmartin.kouda
ÚčastníkDobrý den,
tak jsem pokročil o kousek dál. Měl jsem jako vývojovou desku vybranou „Arduino Uno“:• switch jsem dal do OFF, nahrál sketch PR1.ino (viz. přílohy), program se nahrál a na seriovém monitoru vypisoval co má
• switch jsem dal do OFF, nahrál sketch PR2.ino (viz. přílohy), program se nahrál a seriový monitor napsal „WiFi shield not present“ 🙁
• z popsaného postupu se mi povedlo „Example 1: Arduino to WiFi communication“ i s výpisem v TCP debugeru; druhý příklad mi ve finále nevypisoval v TCP debugeru nic, možná je chyba v tom, že mám na routeru nastavené zabezpečení WPA-PSK ale heslo jsem v konfiguraci zadal správnéTento shield se nedá použít s knihovnou #include <WiFi.h> a pracovat s ním jako ve sktchi PR2.ino?
Díky
YonYcz
ÚčastníkKrásná práce chlapci! snažím se čerpat z tohoto projektu pro svůj projekt, ale upřimně se v některých věcech ztrácím.. byl by ochoten posjirka se mnou sdílet nějaký čas ? 🙂 nevím jestli mám založit nový thread, tady se mi to špinit nechce (nebo prosím o kontakt do emailu jakub(tečka)pan(zavináč)seznam(tečka)cz, pořešíme co a jak a třeba založím nový..)
Díky!Zbyšek Voda
ÚčastníkKdyž se koukám do návodu, tak ani nemusíte odpojovat shield. Stačí při programování přepnout oba přepínače na shieldu do pozice OFF. Potom naprogramujete Arduino (takže zvolíte desku Arduino UNO) a přepnete přepínače zpět na ON. Podrobněji je postup popsán ZDE.
Myslím si, že ta propojka není nutná. Zkuste to bez a uvidíte 🙂
martin.kouda
ÚčastníkDěkuji, vyzkouším a dám vědět.
A jenom se ještě zeptám:
• jak nakonfigurovat IDE? Vývojová deska Generic ESP8266 nebo Arduino Uno?
• mám nechat to propojení RX – TX (TX – RX, zelené drátky viz. foto)?MK
Zbyšek Voda
ÚčastníkZkuste na čas programování rozpojit sériovou linku, popřípadě úplně odpojte celý shield.
Programování totiž probíhá tak, že USB převodník převádí „příkazy“, které přicházejí z PC a posílá je přes sériovou linku do čipu Arduina. Jelikož ale k této sériové lince máte připojené i ESP, může to způsobovat problémy.Zkuste to a uvidíme 🙂
martin.kouda
ÚčastníkTak ještě upřesnění. Pokud mám desku propojenou (viz. obrázek) a vývojovou desku nastavenou na Arduino, tak mi IDE při pokusu o nahrání vypíše:
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00Když nastavím vývojovou desku na Generic ESP8266 (při stejném propojení viz. obrázek), tak při pokusu o nahrání mi IDE vypíše:
warning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_upload_mem failedUž fakt nevím kudy kam a mám pocit, že se motám v bludném kruhu,
díky za jakékoli nasměrování,
MartinAttachments:
martin.kouda
ÚčastníkDobrý den,
ano Arduino funguje samotné i s připojeným shieldem (zkoušel jsem populární blink.ino).
Z návodu jsem zkoušel vyčíst vše co jsem mohl (ale možná mi něco uniklo), tj.:
– spojil jsem RX pin Arduina s TX pinem shieldu
– spojil jsem TX pin Arduina s RX pinem shieldu
– SW1 jsem dal offVíc jsem neudělal. Je potřeba ještě něco?
Aleš
ÚčastníkTvrdé malé trny bude rozprskané tavidlo, které po vychladnutí ztvrdlo.
Podle mých 35ti letých zkušeností se bez kalafuny pájet nedá. V pájce s tavidlem je tavidla málo, a spoj je potom nekvalitní. Takže koupit kalafunu, nejlepší je z drogerie kalafuna na prase. Nasypat do nějakého kalíšku, nejlépe kovového, aby se nepálil při dotyku s páječkou. Na chvilku kalíšek s kalafunou strčit pod lampičku s normální 100W žárovkou, a nechat ji spéct dohromady (nepřipálit).
Po pájení potom tišťák omýt izopropylem, pokud tam zbytky kalafuny esteticky vadí. Já to většinou nesmývám, protože kalafuna není agresivní, a na spojích nevadí.
Nebo si koupit tekuté tavidlo. S tím je ale práce o hodně horší, člověk se neubrání upatlání rukou, stolu, atd. Většina tekutých tavidel se MUSÍ po pájení omýt, protože je agresívní, a po čase by spoj zoxidoval.krkstex
ÚčastníkSoučasné řešení je primitivní – termostaty z Ebay a pár relátek a jedna chytřejší krabička, vzájemně propojené a odstavitelné pomocí přepínačů.
Takže pro nové řešení znám jen logiku, potřebné měřící rozsahy a regulační zásahy. Případně potenciální možnosti rozšíření o ekvitermní řízení, nutné výstupy pro automatické kotle a ovládání dalších zdrojů. HW asi nepoužitelný.Používám:
http://www.ebay.com/itm/NEW-50-110-c-DC-12V-Digital-Thermostat-Cooling-Heating-Temperature-Controller-/401031203498?hash=item5d5f528aaa:g:QlcAAOSwrx5UW5LO
Na ochranu proti přetopení a odstavení čerpadla terciálního okruhu, při nízké teplotě v sekundárním okruhuV kombinaci s 12 polohovm přepínačem a 12 čidly:
http://www.ebay.com/itm/Digital-Temperature-Controller-Thermostat-30-300-w-Sensor-12V-24V-110V-220V-/271713404031?var=&hash=item3f4361847f:m:mVYjiKaS9q4rP8L8kZIjH8A
na zobrazování teplot v systémuMonitoring teploty spalin a přechod ze stavu zátop do topení (překročení určité teploty spalin) odstavování kotlového čerpadla při vyhasnutí
Řízení nabíjení bojleru:
http://www.regulus.cz/cz/regulator-ur1A pro řízení výkonu kotle ( otáček ventilátoru) v režimu topení:
http://www.logitron.cz/data/user-content/dokumenty/navody/toptermostat/CZ/euroster-11W.pdfZbyšek Voda
ÚčastníkDobrý den,
samotné Arduino vám tedy funguje v pořádku (třeba na blikání LED)?Zkoušel jste postupovat podle návodu k setu?
jurisek81
ÚčastníkPokud je to přes relé jde aplikaci velmi snadno přenést do PLC. Nemusí být Amit který má výhodu v analogových vstupech. Může být i levnější Deco nebo renomované Omron, Siemens.
Lepší je mít čídla a hodnoty zpracovávat v jednotce a nastavovat. teď tam máte asi spínané teplotní čidla ?
Některé PLC umí web nebo SMS jde tak topení ovládat z mobilu.Na inteligentní domy chystám vlastní projekt. Vím v čem jsou současné řešení špatné 🙂
krkstex
ÚčastníkCo se týče platformy nechám věc na odbornících. Logiku umím dát dohromady, ale programování neumím.
Jsem z Plzně, takže komunikace spíš přes mail, skype apod.
Primárně hledám řešení pro sebe, ale myslím, že by bylo možné řešení zpeněžit na trhu. Když jsem koupil kotel hledal jsem řídící jednotky a upřímně to co se prodává je vlastně velmi primitivní, bez vetšího přesahu mimo kotelnu. Originální příslušenství ke kotlům Atmosje drahé a “ hloupé“.
Nejsem si úplně jistý směrováním na Amit přínos. Nejspíš nedostatek mých informací.
Během zimy jsem si zkutil pomocí relátek a dalších věcí jednoduchou verzi řízení kotle spolu s ovládacím panelem. Tam jsou nějaké bezp. prvky i ruční ovládání. Můžu úposlat fotky.Nebráním se být součástí většího projektu. Pokud to bude využitelné i pro moje potřeby. Myslel jsem při přemýšlení i nad zapínáním 2. zdroje ( plynový kotel) a na další věci.
jurisek81
ÚčastníkDobrý den,
Arduino bych určitě nepoužíval to je hračka. Tohle musí nonstop fungovat. Jedině PLC. Úloha není složitá ale od počítače to nerozlousknu.
Mohu nabídnou :
Budu dělat řešení sám s podporou Amit. (znám jejich jednotky mám tam podporu).
Záleží jak daleko jste od Ostravy. (jezdit do Prahy asi nemá smysl. Taky je otázka jestli je to jedna instalace nebo lze řešení použít dál.
Tedy jestli hledáte jen tohle řešení nebo i pro další zakázky.Nesměrování na Amit který Vám dá kontakt na borce kteří tohle přímo řeší.
Najít firmu která děla MaR. Nemusí být Amit.
K programu. Chod a zapojení bych pochopil. Musí se taky udělat ovládaní nastavení hodnot režimů a nějaké kontroly (nouzové vypnutí, řešení výpadku komponentů). V současné době programuji zařízení kde řízení je podobné ale mám navíc uživatelský panel, webové rozhraní a záznam hodnot.
Taky chystám svůj projekt inteligentních domků. Tady by bylo propojení zajímavé v návaznosti na akumulaci. Řízení by bylo „divočejší“ ale umělo by vytáhnout maximum efektivity.radek.vaczy
ÚčastníkDeset vysilacu a jeden prijimac s vystupnimy rele
ArduXPP
ÚčastníkDostáváte z Číny fakturu ?
posjirka
Účastníktakže budeš mít 10 vysílaču a 10 přijímačů.
Každý z přijímačů bude mít 1 rele?chápu to správně ?
posjirka
Účastníkjakou máš vzdálenost vysílač/přijímač?
jakou používáš anténu?
jaké máš napětí na vysílači?zkus si poslat jen 1 hodnotu a to neustále dokola ….
můžeš zkusit načíst třeba ovladač od centrálního zamykání od auta …krkstex
ÚčastníkVezmu popis nejprve trochu ze široka, aby bylo rozumnět.
Jedná se o řízení systému kde je kotel, s ventilátorem, akumulační nádoby, bojler na TUV a okruh vlastního topení.
Systém topení má 3 okruhy.
Primární – kde kotlové čerpadlo (prvek Ladomat – obsahuje čerpadlo a rozdělovací prvek) pouze odebírá teplou vodu z výstupu a vrací ji na vstup kotle.
Sekundární okruh je mechanicky (přes Ladomat) připojován k primárnímu, pokud se teplota na výstupu z kotle dostane nad určitou teplotu. Na tomto okruhu jsou akumulační nádrže, bojler na TUV a čerpadlo terciálního okruhu ( vlastní topení s radiátory).
Terciální okruh – okruh vlastních radiátorů, kde je oběhové čerpadlo řízené prostorovým termostatem v místnosti.U kotle se sledují hodnoty teploty spalin 0-400 °C a teplota výstupní vody. Řídí se zapínání a vypínání kotlového čerpadla – aby se kotel po natopení nádob z nich zpětně nedohříval a zároveň se maximálně využilo zbytkového tepla; řídí se otáčky ventilátoru – regulace výkonu kotle otáčkami ventilátoru a udržení teploty spalin v určitém rozmezí .
Akumulační nádrže – u nich se sleduje teplota na 6 místech ( v různých výškách) – z toho lze usuzovat na míru nabití nádoba tudíž potřebu výkonu kotle.
Bojler na TUV – sleduje se teplota v bojleru a v sekundárním okruhu. Pokud je v sekundárním okruhu vyšší teplota než v bojleru zapne se čerpadlo, které nabíjí bojler.
Čerpadlo terciálního okruhu – ochranná funkce – ikdyž není požadavek na topení do domu od prostorového termostatu, ale teplota v kotli a v nádržích se blíží teplotě varu, tak čerpadlo běží, aby se teplo odvádělo do domu.
Schéma topení pro představu je v příloze.
Vlastní cyklus topení má fáze:
Zátop – nízká teplota v primárním okruhu, nárůst teploty spalin – kotlové čerpadlo pomáhá prohřát kotel, ventilátor běží na 100%
Topení – kotel běží – stabilní teplota výstupní vody (díky Ladomatu cca. 75°C), udržování teploty spalin řízením otáček ventilátoru v určitém rozmezí – topení do terciálního okruhu, nabíjení bojleru a ukládání do ak. nádrží.
Teplá rezerva – bojler nabitý, dům odebírá občas, nádrže se blíží natopení – palivo žhne, vnetilátor stojí, teplota v primárním i sekundárním okruhu vč. nádob podobná
Chladnutí – teplota v primárním okruhu klesá a ani ventilátor již nedokáže teplotu udržet na úrovni zbytku systému – využívání odběru z primárního okruhu do terciálního – využití zbytkového tepla – teplota požadovaná pro terciální okruh je nižší než teplota dodávaná primárním okruhem – šetření energie z nádob
Vyhasnutí – ventilátor není schopen dostat teplotu kotle nad teplotu, kdy se primární okruh mechanicky připojuje k sekundárnímu ( využívání zbytkového tepla) – odstavení ventilátoru i kotlového čerpadla.Snad je obecné zadání srozumitelné. Klidně se doptejte. Vzhledem ke zkušenostem s topením s touto soustavou jsou pro mě některé věci jasné,ale bez této zkušenosti mohou být souvislosti nejasné.
Attachments:
jurisek81
ÚčastníkNapište mi přesně jak se to má řídit, vstupy, výstupy. Pošlu Vám nějaký návrh.
radek.vaczy
ÚčastníkNa zdi budou spinace kazdy s jednin kodem stejny pro zap i vyp prijimac bude mit rele vystupy. Jednim vypinacem budu ovladat vzdy jen jedno rele. Oedna se o ovladani svetel
posjirka
Účastníknení mi jasné co přesně potřebuješ ovládat.
Možná by ti pomohlo použít zásuvky (230V) na 433MHz, které stojí cca 500 kč/3-4 kusy i s ovladačem.
Ty zásuvky jsou ovládané podobným systémem a stačí si nastavit/odposlouchat vysílač na stejný protokol a pro jednotlivé zásuvky pak můžeš naprogramovat různé kombinace.http://www.instructables.com/id/Decoding-and-sending-433MHz-RF-codes-with-Arduino-/
radek.vaczy
Účastníkdoplním že vysílač je attiny s rf modulem a spínací tlačítko. Vysíláč vždy pošle jen kod při stisknutí a pak je v režimu spánku. vysílačů budu mít 10 a jeden přijímač Program pro přijímač
#include <LwRx.h>
const int rele1 = 30
const int rele2 = 31
const int rele3 = 32
const int rele4 = 33
const int rele5 = 34
const int rele6 = 35
const int rele7 = 36
const int rele8 = 37
const int rele9 = 38
const int rele10 = 39
const int rele11 = 40
const int rele12 = 41
const int rele13 = 42
const int rele14 = 43
const int rele15 = 44
const int rele16 = 45void setup() {
pinMode(rele1,OUTPUT);
pinMode(rele2,OUTPUT);
pinMode(rele3,OUTPUT);
pinMode(rele4,OUTPUT);
pinMode(rele5,OUTPUT);
pinMode(rele6,OUTPUT);
pinMode(rele7,OUTPUT);
pinMode(rele8,OUTPUT);
pinMode(rele9,OUTPUT);
pinMode(rele10,OUTPUT);
pinMode(rele11,OUTPUT);
pinMode(rele12,OUTPUT);
pinMode(rele13,OUTPUT);
pinMode(rele14,OUTPUT);
pinMode(rele15,OUTPUT);
pinMode(rele16,OUTPUT);digitalWrite(rele1,LOW);
digitalWrite(rele2,LOW);
digitalWrite(rele3,LOW);
digitalWrite(rele4,LOW);
digitalWrite(rele5,LOW);
digitalWrite(rele6,LOW);
digitalWrite(rele7,LOW);
digitalWrite(rele8,LOW);
digitalWrite(rele9,LOW);
digitalWrite(rele10,LOW);
digitalWrite(rele11,LOW);
digitalWrite(rele12,LOW);
digitalWrite(rele13,LOW);
digitalWrite(rele14,LOW);
digitalWrite(rele15,LOW);
digitalWrite(rele16,LOW);Serial.begin(9600);
lwrx_setup(2); //prijimac zapojen na pin 2}
void loop() {
// proměná pro 10 hodnot
byte data[10];
// proměnná pro delku dat
byte delka = 10;//když jsou přijata data
if (lwrx_message())
{
// ulož data do promené data
lwrx_getmessage(data,&delka);// rele 1
if ( data[0] == 1)
{
digitalWrite(rele1,HIGH);
}
else
{
digitalWrite(rele1,LOW);
}}
}
}Aleš
ÚčastníkMám jich tady asi 8ks, některé běží už přes rok v kuse, a u žádného nemám odporový dělič. Asi by tam být měl, ale není to podle mých zkušeností nutné 😉
-
AutorPříspěvky