Skocz do zawartości

Sterowanie oświetleniem za pomocą przekaźników, arduino i modułu czasu rzeczywistego DS1302


kacpermateusz7

Pomocna odpowiedź

Witam całą społeczność. Tak jak w tytule chciałbym wykonać sterowanie oświetleniem za pomocą modułu 6 przekaźników (każdy przekaźnik oddzielny komplet lampek), arduino oraz modułu czasu rzeczywistego DS1302. Wcześniej wykonałem takie sterowanie, ale opierało się ono na funkcji delay, która nie zbyt dobrze działała. O ile posiadam już zakupione wszystko, co potrzebne, ale za bardzo nie wiem jak się do tego zabrać. Cały projekt ma działać na zasadzie włącz 6 przekaźników o godzinie 20, a o godzinie 1 w nocy wyłącz wszystkie przekaźniki. Chciałbym poprosić społeczność o pomoc w edycji kodu. Przedstawiony kod jest przystosowany pod moduł DS3231

 

#include <DS3231.h>

int Relay = 4;

DS3231  rtc(SDA, SCL);
Time t;

const int OnHour = 18;
const int OnMin = 49;
const int OffHour = 18;
const int OffMin = 55;

void setup() {
  Serial.begin(115200);
  rtc.begin();
  pinMode(Relay, OUTPUT);
  digitalWrite(Relay, HIGH);
}

void loop() {
  t = rtc.getTime();
  Serial.print(t.hour);
  Serial.print(" hour(s), ");
  Serial.print(t.min);
  Serial.print(" minute(s)");
  Serial.println(" ");
  delay (1000);
  
  if(t.hour == OnHour && t.min == OnMin){
    digitalWrite(Relay,LOW);
    Serial.println("LIGHT ON");
    }
    
    else if(t.hour == OffHour && t.min == OffMin){
      digitalWrite(Relay,HIGH);
      Serial.println("LIGHT OFF");
    }
}

 

Edytowano przez kacpermateusz7
Link do komentarza
Share on other sites

  1. Zaprojektuj strukturę relay_control, która opisuje przekaźnik (ewentualnie jego pin) oraz zawiera informacje o godzinach włączenia i wyłączenia
  2. W pętli loop pobierz godzinę i minutę, którą aktualnie zwraca zegar RTC
  3. Dla każdego przekaźnika:
    1. Wybierz najbliższą aktualnej godzinę włączenia i najbliższą godzinę wyłączenia ze struktury relay_control
    2. Sprawdź, czy aktualna godzina jest późniejsza niż godzina włączenia
      1. Sprawdź czy aktualna godzina jest wcześniejsza niż godzina wyłączenia
        1. Włącz przekaźnik, jeżeli nie jest ON
      2. W innym przypadku wyłącz przekaźnik jeżeli nie jest OFF
    3. W innym przypadku wyłącz przekaźnik jeżeli nie jest OFF

Jakoś tak, ale mogłem gdzieś walnąć błąd w warunkach, pisane na kolanie

Edytowano przez H1M4W4R1
  • Lubię! 1
Link do komentarza
Share on other sites

Doszedłem do tego momentu i dalej nie wiem czego jeszcze brakuje. Może społeczność zerknąć.

#include <Ds1302.h>

int Przekaznik_1 = 1;

const int OnHour = 20;
const int OnMin = 00;
const int OffHour = 01;
const int OffMin = 00;

void setup() {
  
  Serial.begin(115200);
  rtc.begin();
  pinMode(Przekaznik_1, OUTPUT);
  digitalWrite(Przekaznik_1, HIGH);
}

void loop() {
  t = rtc.getTime();
  Serial.print(t.hour);
  Serial.print(" hour(s), ");
  Serial.print(t.min);
  Serial.print(" minute(s)");
  Serial.println(" ");
  delay (1000);
  
  if(t.hour == OnHour && t.min == OnMin){
    digitalWrite(Przekaznik_1,LOW);
    Serial.println("LIGHT ON");
    }
    
    else if(t.hour == OffHour && t.min == OffMin){
      digitalWrite(Przekaznik_1,HIGH);
      Serial.println("LIGHT OFF");
    }
}

 

Link do komentarza
Share on other sites

14 minut temu, kacpermateusz7 napisał:

Doszedłem do tego momentu i dalej nie wiem czego jeszcze brakuje. Może społeczność zerknąć.

Fakt, moje rozwiązanie uwzględnia większość tego, co byś ewentualnie chciał zmienić w przyszłości (nawyk zawodowy). W przypadku Twoich wymagań wystarczy kilka razy zrobić kopiuj i wklej dla każdego z przekaźników. Musisz mieć przypisane 6 przekaźników, zainicjowane 6 pinów w metodzie setup oraz aktywowane / dezaktywowane 6 pinów w metodzie loop po osiągnięciu odpowiednich godzin.

Jeżeli liczysz na gotowca, to nie jest takie forum. My tylko dajemy wędkę (sposób na rozwiązanie problemu), żyłkę musisz kupić sam (zdobyć odpowiednią wiedzę). Potem możesz łowić ryby (mieć gotowe rozwiązanie).

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

46 minut temu, H1M4W4R1 napisał:

My tylko dajemy wędkę

To Ja chociaz haczyk dorzuce od siebie i ze dwa kretliki...😉

byte tab[] = {1,2,3,4,5,6}; //nr pinow przekanikow (do zmiany)..
byte i = 0;
byte ii 
  


for (int i = 0; i < 6; i++) { //wlaczasz wszystkie przekazniki
  digitalWrite(tab[i], HIGH);
  }

for (int i = 0; i < 6; i++) { // gasiez wszystkie przekazniki
  digitalWrite(tab[i], LOW);
  }

(Byte do wywalenia...mam chory psychicznie tel i nie nadaje sie do uzywania tego forum..)

Edytowano przez farmaceuta
  • Lubię! 1
Link do komentarza
Share on other sites

1 godzinę temu, kacpermateusz7 napisał:

Kurczę w drodze wyjątku nie dał byś rady ujednolicić tego kodu aby to działało tylko na jednym przekaźniku. Z resztą bym sobie poradził. 

Pomysł, aby ktoś za Ciebie to ujednolicił, jest słaby. Za to pomysł, aby uruchomić tylko jeden przekaźnik, a potem pomyśleć co dalej, jest bardo dobry. 

Co więcej. Ja bym sugerował ogarnąć najpierw RTC. DS3231 działa na I2C a RTC1302 na coś w rodzaju SPI w którym jeden pin współdzieli MISO i MOSI. 

Czyli metodą baby steps: pierwszy kroczek wybrać bibliotekę do DS1302. Drugi kroczek połączyć się z DS1302 odczytać coś i wypisać po serialu. A dopiero potem ogarnąć całą komunikację z RTC. Uruchomić jeden przekaźnik. I wtedy pomyśleć jak te puzzle zgrać w jedną całość... czyli to co opisał @H1M4W4R1 😋

Edytowano przez pmochocki
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.