Close

Rada pro začátečníka -stmívač a žaluzie

Úvodní stránka Fórum Vaše projekty Arduino Rada pro začátečníka -stmívač a žaluzie

  • Toto téma obsahuje celkem 30 odpovědí. Do diskuze (6 diskutujících) se naposledy zapojil uživatel Ladis_Kv a poslední změna proběhla před 7 roky a 6 měsíci.
Aktuálně je na stránce zobrazeno 15 příspěvků - 16. až 30. (celkem z 31)
  • Autor
    Příspěvky
  • #8706
    petan
    Účastník

    Na otevření/zavření ti stačí jenom jedna proměnná. Bool může nabývat dvou hodnot true = otevřeno a false = zavřeno. Když budeš mít pro otevřeno a zavřeno dvě proměnné, tak si v tom uděláš akorát guláš. Nehledě na to, že existuje možnost mít obě aktivní. Co by pak platilo? Otevřeno, nebo zavřeno?

    
    bool otevreno = false; //pokud je true, je otevřeno; pokud je false, je zavřeno
    

    V podmínce „else“ už neřeš intenzitu osvatělení pomocí IF. Když se neprovede první IF (když je dost světla), tak se provedou příkazy za ELSE. Už to namusíš komplikovat další podmínou.

    Koukni se na můj starší příspěvek. Tam je v podstatě celej program, kromě setupu a deklarací proměnných. Příkazy pro otevření a zavření žaluzií si doplníš s tvýho příspěvku (DigitalWrite atd). Deklaraci před a v vouid setup(); doplň taky od sebe + tu deklaraci proměnné bool… Případně dopřejmenuj nějaký proměnný (já mám int ldr_value označenou jako intenzita).

    PS.: Nemělo by být ldr = A0?
    PPS.: Já jsem taky začátečník. Jedinej program, kterej jsem zatím naprogramoval je v tomto sodobaru
    PPPS.: Doporučuji zkouknout tu knížku, co tu furt vyskakuje. Je tam spousta základů
    PPPPS.: Docela mě překvapuje, jak je to tu mrtvý. Doteď jsem si myslel, že si s Arduinem hrajou uplně všichni kromě mě 🙂
    PPPPPS.: Přešel bych na PHPbb fórum (nebo jak se jmenuje). Tohle je celkem nepřehledný a pomalýýýýýýýýýýý 😛

    #8707
    posjirka
    Účastník

    já bych taky stav řešil 1 proměnnou.
    Za mě tedy spíš typu „byte“ jako 3 stavovou hodnotu:
    1 – otevřeno
    2 – mezistav
    3 – zavřeno
    Otázka je jak chceš řídit ten motor?
    Předpokládám že tam bude H mustek.
    Kdyby to bylo 2 cívkové servo tak dám koncáky do krajních poloh, nevypínám signál na otevření/zavření a nechám to na koncák ať si rozpojí cestu.
    U H-mustku to bude trochu složitější. Právě koncák ti pak může na základě své stavu říct jak to s žaluzii vypadá.
    Takže zapoj koncový spínače (1x otveřeno, 1x zavřeno) na 2xDI arduina.
    Pak je to vcelku jednoduchá podmínka:
    1, sepni motor a nekonečná smyčka dokud není sepnutý spínač
    2, vypni motor
    3, 1s počkej

    ukážu ti to na 1 funkci:

    void otevri(){
    	while(digitalRead(7) == 1){	// cekej na koncak
    		digitalWrite(8,LOW); // vypni motor 1
    		digitalWrite(9,HIGH); // sepni motor 2
    	}
    	digitalWrite(9,LOW); // vypni motor 2
    	delay(1000); // cekej 1s
    }
    #8712
    petan
    Účastník

    V jakým stavu bude výstup 9, když bude DigitalRead(7) v log. 1? 😎

    Osobně bych použil buď dva koncáky, nebo koncák a inkrementální snímač (ideální řešení), nebo krokáč, nebo servo.

    Koncák a inkrementální snímač by měl výhodu v najetí na referenční polohu (třeba zcela otevřené žaluzie) a pak by si to mohlo žít vlastním životem – např. 500 impulsů otevřené žaluzie, 1200 impulsů zavřené žaluzie, 1500 impulsů zatažené žaluzie apod. Kdyby se to ztratilo, najelo by si to znovu na referenční polohu.
    Takhle fungují vyjíždějící dveře např. Efaflex. Nemají jediný koncák – referenční polohu si najdou pomocí přetížení měniče a od této polohy si odpočítávají pozici. Když se ztratí (výpadek proudu), najedou si nahoru, snulují si vnitřní počítadlo a jedou dál. Dá se pak nastavit, aby dolní poloha byla 5 cm nad zemí, horní třeba v půlce atd. atd.

    Potom by se u těch žaluzií neřešil nějaký čas, který je závislý mimo jiné i na teplotě (pokud je převodovka mazaná tukem, tak má nějakej odpor), ale vždy počet pulzů, který by měl být konstantní.

    Inkrementální snímač jsem zatím nikdy neřešil, ale ačkoliv není potřeba řešit směr počítání (ten je daný podle spuštění motoru), tak se bude zřejmě jednat jenom o připojení snímače na pin, který umí přerušení a v každém přerušení přičíst, nebo odečíst hodnotu podle směru otáčení motoru. Při najetí na koncák hodnotu vynulovat… Jen takovej nástřel by mohl vypadat třeba takto.

    
    int aktualni_pozice = 0; //proměnná s aktuální pozicí
    int smer = 0; //0 - stop, 1 nahoru, 2 dolu
    
    void reset(){
    //najelo se na koncák (referenční poloha)
    aktualni_pozice = 0;
    }
    
    void preruseni(){
    //provede se při přijmutí impulzu ze snímače. Tohle si zapíná sám procesor.
    //ještě jsem to nezkoušel, tak nevím jak to funguje
    //ale na netu toho určitě bude mrtě
    
    //provede zvýšení, nebo snížení počtu podle směru pohybu žaluzií
    switch(smer)
    case 0:
    //stojí
    break;
    case 1:
    //jede nahoru, pozice se zvyšuje
    aktualni_pozice++;
    break;
    case 2:
    //jede dolu, pozice se zmenšuje
    aktualni_pozice--;
    break;
    }
    
    void pohyb(){
    switch(smer)
    case 0:
    //zastav vole
    stop();
    break;
    case 1:
    //příkaz pro jetí nahoru
    if(aktualni_pozice == 0){
    //je v pozici 0, což by mohly být zatažené žaluzie, takže zastav (viz níž)
    stop();
    }
    break;
    case 2:
    //příkaz pro jetí dolu
    if(aktualni_pozice == 100){
    //je v pozici 100, což by mohly být otevřené žaluzie, takže zastav (viz níž)
    stop();
    
    break;
    }
    
    void stop(){
    //příkazy pro zastavení motoru (různý didžitl outputy atd..)
    smer = 0;
    }
    

    Je to jen takovej nástřel. Ani jsem to kloudně neprohlížel, protože tahlecta internetová mašinérie neformátuje text.
    V reálu by bylo asi dobrý nehlídat přesně 0, nebo 100 impulzů, ale třeba od 95 do 105. Mohlo by se stát, že by Arduino nestihlo něco zaznamenat atd… I když tady by to asi nehrozilo. Ale sichr je sichr…

    Jak na to pak koukám, tak by šel udělat ovladač na otevřený, zavřený atd. žaluzie, který by z jakékoliv polohy vždycky na první dobrou zajely do pozice kam chceš. Vědí, kde jsou, vědí kam mají jet. Tak no-problem….

    A nebo to ovládej táhlem jako do teď a nic neřeš 😀 Ale zas na druhou stranu, tohle je taková bejkárna, že to má cenu zkusit. Člověk se alespoň něčemu přiučí.

    Ps.: Bejt tebou, tak si nejdřív rozbyslím, jak budeš ovládat ty žaluzky na hardwarovej úrovni – servo, krokáč, dc-motor. Čas, koncáky, inkrementální snímač, kombinace, … Zdar, jdu spát

    #8717
    Ladis_Kv
    Účastník

    Ahoj,tak moc řešení (myslím hardware) nemám,kvuli tomu prostoru.Ale už mi došel motorek z Číny – suprovní – malý a výkonný,který žaluzii utáhne.Takže je to DC motor.
    Asi by byl dobrý enkoder,který bude počítat pulzy.
    Pohledám a zkusím najít-ikdyž mám strach že kolečko s průměrem 2,5cm nenajdu.
    Ale budu hledat.
    No a koncáky?Nad těmi se taky zamyslím.Mám doma dost jazýčkových relátek,tak uvidím jestli by to tam šlo někde přizpůsobit.

    Je fakt že u toho měření času to bude asi komplikovanější a najít ten čas pro odklonění a zavření žaluzek bude složitější – je to v rozmezí 10-45-80 stupňů.
    Chtěl jsem to zkusit.Byl to prvotní nápad a vše se může změnit. Jinak celé vytáhnout a pak spustit dolu by bylo jednodušší.

    Každopádně díky na nápady.Super.
    Klidně sem posílejte co vás napadne.
    pěkný den,či večer
    Byla to myšlenka a snad se i zrealizuje….
    p.s.vývoj je složitý.A to ještě když nejsem moc kamarád s Arduinem(ale snažím se)

    #8718
    Vojtěch Vosáhlo
    Účastník

    Jak jsem psal výše tak kolečko si můžete nechat vytisknout na průhlednou fólii (budou to dělat v každém větším papírnictví). Obrázek můžete taky jednoduše škálovat takže s velikostí osičky nebude problém. Vyhledání „rotary encoder pattern“ nebo „wheel“ vám vyhodí spoustu možností. V tomhle případě by nebyly koncáky potřeba když se ten program dobře napíše. ?
    Hodně štěstí

    #8719
    Ladis_Kv
    Účastník

    Jo dík…kdo hledá ten najde… https://goo.gl/Ep0cQY ….
    tak nevím.No a ale cena stoupá.. 🙁
    Asi možná toto -encoder https://goo.gl/Ubfuen ..
    jak se říká babo raď. 😀

    #8722
    Vojtěch Vosáhlo
    Účastník

    No když už máte motor tak možná lepší jen dokoupit enkoder ?

    #8723
    posjirka
    Účastník

    ty uhly natočení se dají řešit taky časem. V předchozí praci jsme řešili natočení serva taky časovou konstantou. Servo přejede z 0-180 st třeba za 90s. Když potřebuji přejet na 45 st tak nechám 30s sepnuté servo a zapíšu si do paměti na jaké je asi poloze. Většinou se jednalo o regulaci teploty, takže stačilo při poklesu/zvýšení teploty posunout servo na tu či onu stranu. na přesnost se nehrálo. Navíc serva od Belima byli vcelku stabilní co se linearity posunu v čase týká a nemusel se kupovat potenciometr na snímání polohy.
    Tady by ti stačilo jednou změřit jak dlouho trvá přejetí z min. na max. a dát to třeba po 5 st natočení. Jednou za čas znulovat na jednu z krajních poloh (když za poledních 7 dní nenajedu na koncák tak si zresetuj polohu a najeď tam te´d)
    Encoder je super řešení i včetně možnosti škálování (probarvenosti) pro přibližné měření aktuálního úhlu, nicméně šel bych asi cestou 2-4 drah které by mě ukazovalu aktuální poluhu (binární stav zabarvených značek na drahách)
    Možnosti je spousta … budeš to tedy řídit H mustekm?
    Navrhni si funkční zapojení a fyzické zapojení (schéma) a můžete tady pak bádat na reálnými možnostmi …

    #8725
    petan
    Účastník

    Pokud budeš dokupovat enkodér, tak je lepší ho dát na co nejrychlejší část motorku. Ono by potom mohlo dělat na tej hlavní hřídeli jenom pár pulzů a rozlišení je rázem v tahu. To se mi pak jeví lepší ten motor „vše v jednom“ jak si posílal.

    Kolik potřebuješ otáček motoru (myslím už za převodovkou) na přetočení žaluzií do poloh? pokud by to bylo do deseti otáček, tak by si mohl koupit nějaký mrňavý servo, to vykuchat, potenciometr připojit na hřídel, posílit výstupy původní elektroniky a v podstatě by si měl výkonný servo vlastní konstrukce. Navíc velice jednoduše ovládatelný (jsou na to knihovny).

    Serva bez zpětné vazby se používají třeba u kotlů. To se otočí o 90° třeba za dvě minuty. Rychlost je celkem spolehlivá, takže se dá dobře řídit. Když se pak vrací do „nulové polohy“ a tak kontrolér pustí ovládací impulz delší, aby byla jistota, že je v nulové poloze – provede se najetí na referenční bod.

    #8764
    Ladis_Kv
    Účastník

    Tak kolik otáček,to ještě přesně nevím.Zítra budu zkoušet přímo na žaluzii.Sehnal jsem si starší,tak můžu laborovat.
    Hele ještě mám menší problém.Když arduino resetuji,tak v poloze otevřeno při resetu se spustí cyklus a když resetuji v režimu zavřeno,tak se neděje nic-tak to má být.Jsou tam jen dva stavy.Zavřeno a otevřeno.Jak bys to ošetřil?Kdyby přes den vypnul proud tak by to otevíralo dvakrát… 🙁
    Mám to zatím jen časově.Koncáky a enkoder zatím nemám.
    tady je funkční prográmek (zatím)
    int ldr = A0;
    int ldr_value = 0;
    boolean otevreno;
    void setup()
    {
    pinMode(8,OUTPUT);
    pinMode(9,OUTPUT);
    //pinMode(A0,INPUT);
    Serial.begin(9600); //spuštění serioveho rozhrani
    }
    void loop()
    {
    ldr_value = analogRead(ldr); //čte hodnoty čídla
    Serial.println(ldr_value);
    if(ldr_value > 500){ //první podmínka (stmívání)
    if(otevreno){
    zavri();
    }
    }
    else{
    if(!otevreno){ //druhá podmínka (rozednění)
    otevri();
    }
    }
    }
    void zavri(){
    digitalWrite(8,HIGH); // pro dc motor
    digitalWrite(9,LOW);
    delay(150);
    otevreno = false;
    vypni();
    }
    void otevri(){
    digitalWrite(8,LOW); // pro dc motor
    digitalWrite(9,HIGH);
    delay(800);
    otevreno = true;
    vypni();
    }
    void vypni(){
    digitalWrite(8,LOW); // pro dc motor
    digitalWrite(9,LOW);
    delay(1000);
    }

    #8765
    petan
    Účastník

    Po restartu je proměnná otevřeno false. A vlastně všechny proměnný jsou po restartu 0, LOW, false, …

    A protože si ji nikde neukládáš a ani nezjišťuješ koncákem, tak se ti spustí kód za else (je světlo) a druhá podmínka taky (negované false je true).

    Právě takovejhle problém se řeší u těch dveří. Po restartu nevědí kde jsou (během výpadku napájení s nimi někdo mohl pohnout atd.). Takže se po zapnutí napájení provede inicializace. Najde si to koncovou polohu, zresetuje se to a už to frčí…

    Jedna varianta je ukládat poslední stav do EEPROM, ale ta na to není moc vhodná. Lepší by byl ten koncák, který by definoval jednu jistou stranu.

    #8766
    Ladis_Kv
    Účastník

    No díky.Až to nahodím fyzicky na žaluzku,tak budu zjištovat,jestli by tam šel dát nějaký koncák…
    Budu informovat.
    Dík 😉

    #8768
    Cuore
    Účastník

    Obávám se, že encoder je cesta do pekel. Budeš tam mít spoustu mechanických vůli a čím dáš encoder blíž k motoru, tím bude proměřování větší. Takže zbytečná práce. V průmyslu se na tyto aplikace používají tzv. Lankové snímače což je kombinace encoderu a lankového bubnu. Konec lanka připevníš na spodní lištu žaluzií a měříš přesnou polohu.

    #8769
    Ladis_Kv
    Účastník

    Díky za názor,ale obávám se že lankový snímač by mi byl k ničemu.Jak jsem psal dříve,tak převážně se mi jedná zatím o roztahování a zatahování žaluzii podle denního světla.
    Takže vytahovat zatím nebudu.Ale možná do budoucna se to bude hodit.
    díky

    #8805
    posjirka
    Účastník

    jen že jsem na to narazil, tak dávám sdílet.
    Chápu že to není nic extra, ale kdo ví …

    Arduino-powered roller blinds

Aktuálně je na stránce zobrazeno 15 příspěvků - 16. až 30. (celkem z 31)
  • Pro reakci na toto téma se musíte přihlásit.