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 10 měsíci.
-
AutorPříspěvky
-
5.10.2016 v 12:49 #8655
Ladis_Kv
ÚčastníkZdravím.Nedávno jsem si pořídil Arduino a velice mě zaujalo.
Potřeboval bych ale poradit s programem pro žaluzie.
Potřebuji aby příkaz if mi při splněné podmínce splnil,ale jen jednou (na určitou dobu -třeba 5 sekund a pak už ne.
Dokud se podmínka nezmění.
To znamená že až fotoodpor změní stav tak se udělá druhá podmínka.
Mám to na zatáhnutí žaluzii večer a ráno na odtažení podle fotoodporu.int ldr = 0; //analogovy pin kde je pripojeno LDR
int ldr_value = 0; //variable to store LDR values
int c = 1000;
void setup()
{
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
Serial.begin(9600); //spuštění serioveho rozhrani
}void loop()
{
ldr_value = analogRead(ldr); //čte hodnoty LDR
Serial.println(ldr_value); //zobrazí hodnoty LDR na seriove lince
if(ldr_value > 500){ //první podmínka (stmívání) hodnota z fotoodporu
digitalWrite(8,LOW); // pro dc motor
digitalWrite(9,HIGH);
delay(6*c);}
if(ldr_value > 500) digitalWrite(9,LOW);
if(ldr_value < 500) ……………….;//druhá podmínka (rozednění)
……
…… ještě nemám doděláno
delay(100); //waitTakto jsem začal a nevím jestli dobře.
Díky moc za rady.
L.5.10.2016 v 13:05 #8656Zbyšek Voda
SprávceCo je připojeno na pinech 8 a 9?
Zkusím vás nasměrovat 🙂 Přidejte si ještě jednu proměnnou, ve které budete uchovávat, jestli je žaluzie zatažená, nebo roztažená.
Potom budete zkoumat:
-je hodnota nad určitou hodnotu a je roztaženo? -> zatáhni
-je hodnota pod určitou hodnotu a je zataženo? -> roztáhniTaké nesmíte zapomenout nastavit aktuální hodnotu proměnné po zatažení či roztažení.
PS. Asi v kódu myslíte analogový pin A0, ne jenom 0 🙂
5.10.2016 v 13:59 #8660Ladis_Kv
ÚčastníkNa pinech 8 a 9 bude dc motorek,přes budič L298N.
A ten analog je A0.
Když se setmí tak hodnota zůstane (nad 500) ,takže potřebuji aby to jednou seplo na určitou dobu a pak se vlastně čeká až na ráno kdy se hodnota změní pod 500.5.10.2016 v 18:36 #8661petan
Účastníkvoid loop(){ if (intenzita > 500){ //pokud je tma if(otevreno){ //pokud je tma (z předchozí podmínky) a žaluzky jsou otevřeny zavri(); } } else{ //pokud není tma if (!otevreno){ //pokud není tma (z předchozí podmínky else) a žaluzie jsou zavřeny otevri(); } } } void zavri(){ //zde napsat příkazy k zavření žaluzií (zapnutí výstupů apod) delay(5000); otevreno = false; vypni(); } void otevri(){ //zde napsat příkazy k otevření žaluzií (zapnutí výstupů apod) delay(5000); otevreno = true; vypni(); } void vypni(){ //příkazy k vypnutí pohonu žaluzií }
Asi takhle bych to viděl… Psal jsem to „poslepu“, ale mělo by to fungovat. Možná budou šatně velikosti písmen.
5.10.2016 v 18:56 #8664Ladis_Kv
ÚčastníkDíky moc,
je vidět že to dost umíte.
Já to promyslím vše,dopíšu jak má být a vyzkouším.
Pak se ozvu a napíšu jak to dopadlo.
p.s. jsem trochu pomalejší… 😀
ještě jednou díky
L.5.10.2016 v 20:20 #8665Ladis_Kv
ÚčastníkNo trochu v tom bádám…a nevím..
asi to nebude fungovat,nebo tomu nějak nerozumím.
Budu mít na dvou digi výstupech zapojen budič pro morky.A tam se bude otáčet napětí.
Nemám koncáky a nic jiného.Chci to zkusit časově.Pokud to půjde.A chci jen zavřít a otevřít žaluzie -ne vytahovat je nahoru a dolu.
Prvně jsem tam chtěl dát krokový motor,ale nenašel jsem vhodný typ(jak výkonem,tak velikosti).
Máte někdo jiné nápady,které by mi pomohly?Děkuji
Budu rád za jakoukoli radu k danému problému.5.10.2016 v 20:57 #8666petan
ÚčastníkČemu nerozumíš? Zkus si projít kód řádek po řádku. Schválně jsem ho rozdělil na jednotlivý funkce, aby si mohl každou pochopit zvlášť. Navíc rozdělení na jednotlivý funkce (procedury) usnadňuje úpravy v programu.
Nebo zkus servo. To se umí jednoduchým příkazem otočit o 180°. Ráno nastavíš, aby se servo otočilo např. na 0° a večer na 180°. Servo má v sobě elektroniku, která si sama měří úhel, takže opravdu jenom pošleš hodnotu a o nic jinýho se nestaráš.
Pro servo by to mohlo vypadat takhle:
#include <Servo.h> Servo servopohon; //instance objektu (to neřeš) void setup() { servopohon.attach(8); //servo připojeno na pinu 8 } void loop() { //opakuj stále dokola intenzita = analogRead(A0); //načti intenzitu osvětlení if (intenzita > 500){ //pokud je tma servopohon.write(0); // nastavit úhel na 0 } else{ //pokud není tma servopohon.write(180); // nastavit úhel na 180 } }
5.10.2016 v 21:25 #8667Ladis_Kv
Účastníkjo servo by bylo lepší, ale nenašel jsem které by mělo průměr 25mm a dostatečný výkon aby to s tím otočilo.
Zatím jsem takový nenašel.Jen motor DC s převodovkou.
Ten motor by měl být schovaný v žaluzii.
No zkusím se s tím nějak poprat.
Díky6.10.2016 v 15:22 #8673Vojtěch Vosáhlo
ÚčastníkJá bych použil nějaké optické hradlo a takové to kolečko kde se střídá černá a průhledná. Vzor se dá sehnat na internetu a na laserovce vytisknout na průhlednou fólii. Hradlo můžete koupit a nebo i s kolečkem vytáhnout ze staré tiskárny. Asi by to mohlo fungovat dobře, nemusíte natahovat kablíky pro koncáky a můžete použít nějaký obyčejný motor. Pak se to dá ovládat prakticky jak servo.
Držim palce6.10.2016 v 16:09 #8684Ladis_Kv
ÚčastníkJo tak nad tím jsem uvažoval taky.Bylo by to super (optické snímače jsou i levné) a také přesné hlídání krajních poloh.Jenže jak jsem psal dříve,tak to chci dát dovnitř žaluzie (kde jsou převody a roluje se tam ten pásek)
A tam je prostor cca 25x25x70mm. Takže mi tam tam optický člen nevejde.
Vlastně potřebuji jen aby příkaz IF udělal jen jednou a pokud se neudělá druhá podmínka tak aby se už nedělal ten první příkaz.Vypadá to jednoduše,ale…..
Viz výše mi poradil Petan.Trochu nad tím musím popřemýšlet a něco vytvořit.
Jsem opravdu začátečník,tak mi to do té hlavy moc nejde…
Ale díky za rady.6.10.2016 v 21:37 #8690posjirka
Účastníkpokud tam máš 25x25x70mm tak to je místa víc než dost:
http://www.ges.cz/cz/tcst1103-GES05100332.html
http://www.ges.cz/cz/tcst2103-GES05100333.html
http://www.ges.cz/cz/cny70-GES05100334.html
stačí si vybrat který ti bude vyhovovat a samozřejmě je ještě více typů.
Dal bych to na PCB, který by ti umožnil jak lepší přidělaní, tak i připojení kabelu ….6.10.2016 v 22:32 #8691Ladis_Kv
Účastníkjo to je dost místa,ale zrovna ho zabírá motor s převodovkou a chtěl bych jít k tomu jen s dvěma dráty.
motor bych tam chtěl tento https://goo.gl/AG8l9X7.10.2016 v 20:37 #8699petan
ÚčastníkPřipoj k motoru ještě enkodér např. jako tento: https://goo.gl/xbrZ63 a počítej impulsy. Pak s tím můžeš dělat víc věcí – zatáhnout/roztáhnout, zavřít/otevřít. Dalo by se detekovat třeba zaseknutí žaluzií apod…
9.10.2016 v 0:01 #8701Ladis_Kv
ÚčastníkPetane mohl by jsi mi prosím tě s tím programem pomoct(napsat ho).Sám to zřejmě nezvládnu.Nějak v tom lítám a nedokážu udělat
cyklus aby při „tmě“ se udělal 1 příkaz pro povel „zavři“ a potom se zase mohl udělat až po cyklu otevři.
Nakonec tam nebude intenzita,ale logická 1(zavřeno),nebo logická 0(otevřeno).
Pro tebe to bude maličkost a já se tím naučím víc…
Nebo pokud budeš ochotný tak mi to pošli na e-mail. ladkva@gmail.com
Díky
L.10.10.2016 v 12:12 #8704Ladis_Kv
ÚčastníkTak jsem to dal dohromady,ale ještě nevím jak deklarovat „otevreno“ a „zavreno“ -třetí a čtvrtý řádek.
Aby potom fungovalo true a false.
Poradiš mi?Děkujiint ldr = 0;
int ldr_value = 0;
//int otevreno = ???
//int zavreno = ??
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(otevri){
zavri();
// }
}
else{
if(ldr_value < 500){ //druhá podmínka (rozednění)
otevri();
}
}
}void zavri(){
digitalWrite(8,HIGH); // pro dc motor
digitalWrite(9,LOW);
delay(3000);
zavreno = false;
vypni();
}
void otevri(){
digitalWrite(8,LOW); // pro dc motor
digitalWrite(9,HIGH);
delay(1000);
otevreno = true;
vypni();
}
void vypni(){
digitalWrite(8,LOW); // pro dc motor
digitalWrite(9,LOW);
delay(1000);
} -
AutorPříspěvky
- Pro reakci na toto téma se musíte přihlásit.