Jak działają rolety elektryczne większość wie. (po krótce wytłumaczę) Mają dwa wyłączniki krańcowe (kiedy są maksymalnie podniesione i kiedy są maksymalnie opuszczone - oczywiście można to regulować) Wystarczy podłączyć zasilanie i roleta się zamyka lub otwiera. Prąd może płynąć w obwodzie a roleta sama i tak na końcu się zatrzyma.
Teraz mój pomysł…
Opiszę jak za pomocą dwóch przekaźników sterować jedną roletą ( jeden przekaźnik otwiera drugi zamyka roletę). (w moim przypadku będę miał 7 rolet więc potrzebuję 14 przekaźników)
Do całości potrzebne będą :
- Arduino (w moim przypadku MEGA)
- Przekaźniki
-Trochę przewodów
-Przyciski naścienne (na razie są zwykłe tactswitche zapięte w panel)
Opis działania programu:
Gdy nacisnę przycisk pierwszy raz => roleta zjeżdża w dół (chyba że nacisnę go drugi raz wtedy się zatrzyma w dowolnym momencie)
Gdy nacisnę przycisk trzeci => raz roleta się unosi (chyba, że nacisnę go czwarty raz roleta się zatrzyma w dowolnym momencie)
Program jest tak napisany, że po upływie pewnego czasu (dowolnie można go ustawić) przekaźnik się wyłączy i roleta się zatrzyma (bo po co ma być załączony cały czas gdy np. roleta się uniosła? I tak krańcówka ją zatrzymała). Tak samo jest przy opuszczaniu.
Jak to zrobić:
Zdjęcie 1: Tak należy podłączyć przewody rolet do przekaźników
Zdjęcie 1: MEGA
Zdjęcie 2: Moduły przekaźników
Zdjęcie 3: do tych pinów podłączamy piny modułu przekaźników (na razie nie podłączyłem VCC i GND)
Zdjęcie 4: do tych pinów podłączamy piny modułu przycisków. Oczywiście można zrobić sobie przyciski na płytce prototypowej.
Zdjęcie 5: moduł przycisków (z prowizoryczną wiązką)
Zdjęcie 6: tak wygląda podłączony moduł przycisków.
A teraz efekt końcowy: Podłączamy VCC i GND do modułów i lecimy (na razie na surowo ale dzięki ledom widać, ze moduł może zamykać i otwierać roletę)
https://www.youtube.com/embed/cy_SalCuqn4
Żaden ze mnie programista...
W szkicu Bardzo pomogli mi Koledzy z innego forum. Ja go tylko rozbudowałem
Do całości przydało by się jeszcze aby była możliwość np:
- Gdy przycisnę dowolny przycisk dłuższy czas to wszystki rolety się otworzą lub zamkną
- jeden dodatkowy przycisk który sterował by wszystkimi przyciskami (taki przycisk przydaje się w garażu - gdy wyjeżdżamy to go nasikamy i wszystko zjeżdża w dół / podnosi się)
Ale przede wszystkim projekt ten ma jedną wielką wadę... NIESTETY NIE MA NIC WSPÓLNEGO Z SUPLĄ
Piszcie jak Wam się to podoba...
Szkic dla Arduino:
Code: Select all
uint8_t przekaznik1 = 23;
uint8_t przekaznik2 = 25;
uint8_t przekaznik3 = 27;
uint8_t przekaznik4 = 29;
uint8_t przekaznik5 = 31;
uint8_t przekaznik6 = 33;
uint8_t przekaznik7 = 35;
uint8_t przekaznik8 = 37;
uint8_t przekaznik9 = 39;
uint8_t przekaznik10 = 41;
uint8_t przekaznik11 = 43;
uint8_t przekaznik12 = 45;
uint8_t przekaznik13 = 47;
uint8_t przekaznik14 = 49;
uint8_t przycisk = 40;
uint8_t przycisk1 = 42;
uint8_t przycisk2 = 44;
uint8_t przycisk3 = 46;
uint8_t przycisk4 = 48;
uint8_t przycisk5 = 50;
uint8_t przycisk6 = 52;
byte ilosc_wcisniec = 0;
byte ilosc_wcisniec1 = 0;
byte ilosc_wcisniec2 = 0;
byte ilosc_wcisniec3 = 0;
byte ilosc_wcisniec4 = 0;
byte ilosc_wcisniec5 = 0;
byte ilosc_wcisniec6 = 0;
uint8_t blokada;
uint8_t blokada1;
uint8_t blokada2;
uint8_t blokada3;
uint8_t blokada4;
uint8_t blokada5;
uint8_t blokada6;
boolean start1 = 0, start2 = 0, start3 = 0, start4 = 0, start5 = 0, start6 = 0, start7 = 0, start8 = 0, start9 = 0, start10 = 0, start11 = 0, start12 = 0, start13 = 0, start14 = 0;
long czas1 = 0, czas2 = 0, czas3 = 0, czas4 = 0, czas5 = 0, czas6 = 0, czas7 = 0, czas8 = 0, czas9 = 0, czas10 = 0, czas11 = 0, czas12 = 0, czas13 = 0, czas14 = 0;
boolean x = 0, x1 = 0, x2 = 0, x3 = 0, x4 = 0, x5 = 0, x6 = 0;
void setup()
{
pinMode(przekaznik1, OUTPUT);
pinMode(przekaznik2, OUTPUT);
pinMode(przekaznik3, OUTPUT);
pinMode(przekaznik4, OUTPUT);
pinMode(przekaznik5, OUTPUT);
pinMode(przekaznik6, OUTPUT);
pinMode(przekaznik7, OUTPUT);
pinMode(przekaznik8, OUTPUT);
pinMode(przekaznik9, OUTPUT);
pinMode(przekaznik10, OUTPUT);
pinMode(przekaznik11, OUTPUT);
pinMode(przekaznik12, OUTPUT);
pinMode(przekaznik13, OUTPUT);
pinMode(przekaznik14, OUTPUT);
pinMode(przycisk,INPUT_PULLUP);
pinMode(przycisk1,INPUT_PULLUP);
pinMode(przycisk2,INPUT_PULLUP);
pinMode(przycisk3,INPUT_PULLUP);
pinMode(przycisk4,INPUT_PULLUP);
pinMode(przycisk5,INPUT_PULLUP);
pinMode(przycisk6,INPUT_PULLUP);
digitalWrite(przekaznik1, HIGH);
digitalWrite(przekaznik2, HIGH);
digitalWrite(przekaznik3, HIGH);
digitalWrite(przekaznik4, HIGH);
digitalWrite(przekaznik5, HIGH);
digitalWrite(przekaznik6, HIGH);
digitalWrite(przekaznik7, HIGH);
digitalWrite(przekaznik8, HIGH);
digitalWrite(przekaznik9, HIGH);
digitalWrite(przekaznik10, HIGH);
digitalWrite(przekaznik11, HIGH);
digitalWrite(przekaznik12, HIGH);
digitalWrite(przekaznik13, HIGH);
digitalWrite(przekaznik14, HIGH);
}
void loop()
{
if ( !blokada && ( digitalRead(przycisk) == LOW ))
{
blokada = 1;
ilosc_wcisniec++;
x = 1;
}
else if ( blokada && (digitalRead(przycisk) == HIGH)) blokada++;
if (x == 1 && ilosc_wcisniec == 1)
{
digitalWrite(przekaznik1, LOW);
start1 = 1;
czas1 = millis();
x = 0;
}
else if((ilosc_wcisniec == 2) || (start1 && (millis() - czas1 > 10000)))
{
digitalWrite(przekaznik1, HIGH);
start1 = 0;
if((ilosc_wcisniec == 1) && (millis() - czas1 > 300)) ilosc_wcisniec = 2;
}
else if(x == 1 && ilosc_wcisniec == 3)
{
digitalWrite(przekaznik2,LOW);
start2 = 1;
czas2 = millis();
x = 0;
}
else if((ilosc_wcisniec == 4) || (start2 && (millis() - czas2 > 10000)))
{
digitalWrite(przekaznik2, HIGH);
start2 = 0;
if((ilosc_wcisniec == 3) && (millis() - czas1 > 300)) ilosc_wcisniec = 4;
}
if ( ilosc_wcisniec > 4 ) ilosc_wcisniec = 1;
// GRUGI PRZYCISK____________________________________________________(((((((********&&&&&&&
{
if ( !blokada1 && ( digitalRead(przycisk1) == LOW ))
{
blokada1 = 1;
ilosc_wcisniec1++;
x1 = 1;
}
else if ( blokada1 && (digitalRead(przycisk1) == HIGH)) blokada1++;
if (x1 == 1 && ilosc_wcisniec1 == 1)
{
digitalWrite(przekaznik3, LOW);
start3 = 1;
czas3 = millis();
x1 = 0;
}
else if((ilosc_wcisniec1 == 2) || (start3 && (millis() - czas3 > 10000)))
{
digitalWrite(przekaznik3, HIGH);
start3 = 0;
if((ilosc_wcisniec1 == 1) && (millis() - czas3 > 300)) ilosc_wcisniec1 = 2;
}
else if(x1 == 1 && ilosc_wcisniec1 == 3)
{
digitalWrite(przekaznik4,LOW);
start4 = 1;
czas4 = millis();
x1 = 0;
}
else if((ilosc_wcisniec1 == 4) || (start4 && (millis() - czas4 > 10000)))
{
digitalWrite(przekaznik4, HIGH);
start4 = 0;
if((ilosc_wcisniec1 == 3) && (millis() - czas4 > 300)) ilosc_wcisniec1 = 4;
}
if ( ilosc_wcisniec1 > 4 ) ilosc_wcisniec1 = 1;
}
// Trzeci PRZYCISK____________________________________________________(((((((********&&&&&&&
{
if ( !blokada2 && ( digitalRead(przycisk2) == LOW ))
{
blokada2 = 1;
ilosc_wcisniec2++;
x2 = 1;
}
else if ( blokada2 && (digitalRead(przycisk2) == HIGH)) blokada2++;
if (x2 == 1 && ilosc_wcisniec2 == 1)
{
digitalWrite(przekaznik5, LOW);
start5 = 1;
czas5 = millis();
x2 = 0;
}
else if((ilosc_wcisniec2 == 2) || (start5 && (millis() - czas5 > 10000)))
{
digitalWrite(przekaznik5, HIGH);
start5 = 0;
if((ilosc_wcisniec2 == 1) && (millis() - czas5 > 300)) ilosc_wcisniec2 = 2;
}
else if(x2 == 1 && ilosc_wcisniec2 == 3)
{
digitalWrite(przekaznik6,LOW);
start6 = 1;
czas6 = millis();
x2 = 0;
}
else if((ilosc_wcisniec2 == 4) || (start6 && (millis() - czas6 > 10000)))
{
digitalWrite(przekaznik6, HIGH);
start6 = 0;
if((ilosc_wcisniec2 == 3) && (millis() - czas6 > 300)) ilosc_wcisniec2 = 4;
}
if ( ilosc_wcisniec2 > 4 ) ilosc_wcisniec2 = 1;
}
// Przycisk 4 ____________________________________________________(((((((********&&&&&&&
{
if ( !blokada3 && ( digitalRead(przycisk3) == LOW ))
{
blokada3 = 1;
ilosc_wcisniec3++;
x3 = 1;
}
else if ( blokada3 && (digitalRead(przycisk3) == HIGH)) blokada3++;
if (x3 == 1 && ilosc_wcisniec3 == 1)
{
digitalWrite(przekaznik7, LOW);
start7 = 1;
czas7 = millis();
x3 = 0;
}
else if((ilosc_wcisniec3 == 2) || (start7 && (millis() - czas7 > 10000)))
{
digitalWrite(przekaznik7, HIGH);
start7 = 0;
if((ilosc_wcisniec3 == 1) && (millis() - czas7 > 300)) ilosc_wcisniec3 = 2;
}
else if(x3 == 1 && ilosc_wcisniec3 == 3)
{
digitalWrite(przekaznik8,LOW);
start8 = 1;
czas8 = millis();
x3 = 0;
}
else if((ilosc_wcisniec3 == 4) || (start8 && (millis() - czas8 > 10000)))
{
digitalWrite(przekaznik8, HIGH);
start8 = 0;
if((ilosc_wcisniec3 == 3) && (millis() - czas8 > 300)) ilosc_wcisniec3 = 4;
}
if ( ilosc_wcisniec3 > 4 ) ilosc_wcisniec3 = 1;
}
// PRZYCISK 5 ____________________________________________________(((((((********&&&&&&&
{
if ( !blokada4 && ( digitalRead(przycisk4) == LOW ))
{
blokada4 = 1;
ilosc_wcisniec4++;
x4 = 1;
}
else if ( blokada4 && (digitalRead(przycisk4) == HIGH)) blokada4++;
if (x4 == 1 && ilosc_wcisniec4 == 1)
{
digitalWrite(przekaznik9, LOW);
start9 = 1;
czas9 = millis();
x4 = 0;
}
else if((ilosc_wcisniec4 == 2) || (start9 && (millis() - czas9 > 10000)))
{
digitalWrite(przekaznik9, HIGH);
start9 = 0;
if((ilosc_wcisniec4 == 1) && (millis() - czas9 > 300)) ilosc_wcisniec4 = 2;
}
else if(x4 == 1 && ilosc_wcisniec4 == 3)
{
digitalWrite(przekaznik10,LOW);
start10 = 1;
czas10 = millis();
x4 = 0;
}
else if((ilosc_wcisniec4 == 4) || (start10 && (millis() - czas10 > 10000)))
{
digitalWrite(przekaznik10, HIGH);
start10 = 0;
if((ilosc_wcisniec4 == 3) && (millis() - czas10 > 300)) ilosc_wcisniec4 = 4;
}
if ( ilosc_wcisniec4 > 4 ) ilosc_wcisniec4 = 1;
}
// Przycisk 6 ____________________________________________________(((((((********&&&&&&&
{
if ( !blokada5 && ( digitalRead(przycisk5) == LOW ))
{
blokada5 = 1;
ilosc_wcisniec5++;
x5 = 1;
}
else if ( blokada5 && (digitalRead(przycisk5) == HIGH)) blokada5++;
if (x5 == 1 && ilosc_wcisniec5 == 1)
{
digitalWrite(przekaznik11, LOW);
start11 = 1;
czas11 = millis();
x5 = 0;
}
else if((ilosc_wcisniec5 == 2) || (start11 && (millis() - czas11 > 10000)))
{
digitalWrite(przekaznik11, HIGH);
start11 = 0;
if((ilosc_wcisniec5 == 1) && (millis() - czas11 > 300)) ilosc_wcisniec5 = 2;
}
else if(x5 == 1 && ilosc_wcisniec5 == 3)
{
digitalWrite(przekaznik12,LOW);
start12 = 1;
czas12 = millis();
x5 = 0;
}
else if((ilosc_wcisniec5 == 4) || (start12 && (millis() - czas12 > 10000)))
{
digitalWrite(przekaznik12, HIGH);
start12 = 0;
if((ilosc_wcisniec5 == 3) && (millis() - czas12 > 300)) ilosc_wcisniec5 = 4;
}
if ( ilosc_wcisniec5 > 4 ) ilosc_wcisniec5 = 1;
}
// Przycisk 6 ____________________________________________________(((((((********&&&&&&&
{
if ( !blokada6 && ( digitalRead(przycisk6) == LOW ))
{
blokada6 = 1;
ilosc_wcisniec6++;
x6 = 1;
}
else if ( blokada6 && (digitalRead(przycisk6) == HIGH)) blokada6++;
if (x6 == 1 && ilosc_wcisniec6 == 1)
{
digitalWrite(przekaznik13, LOW);
start13 = 1;
czas13 = millis();
x6 = 0;
}
else if((ilosc_wcisniec6 == 2) || (start13 && (millis() - czas13 > 10000)))
{
digitalWrite(przekaznik13, HIGH);
start13 = 0;
if((ilosc_wcisniec6 == 1) && (millis() - czas13 > 300)) ilosc_wcisniec6 = 2;
}
else if(x6 == 1 && ilosc_wcisniec6 == 3)
{
digitalWrite(przekaznik14,LOW);
start14 = 1;
czas14 = millis();
x6 = 0;
}
else if((ilosc_wcisniec6 == 4) || (start14 && (millis() - czas14 > 10000)))
{
digitalWrite(przekaznik14, HIGH);
start14 = 0;
if((ilosc_wcisniec6 == 3) && (millis() - czas14 > 300)) ilosc_wcisniec6 = 4;
}
if ( ilosc_wcisniec6 > 4 ) ilosc_wcisniec6 = 1;
}
}
