Skocz do zawartości

Sterownik schodów UNO R3


mkzord

Pomocna odpowiedź

#define diCzujnikGora 12
#define diCzujnikDol 13
#define PIR 2
#define dqLampka1 3
#define dqLampka2 5
#define dqLampka3 6
#define dqLampka4 9
#define dqLampka5 10
#define dqLampka6 11
int zapalanie = 0;
int czujnikdolny = 1;

 
void setup() {
  Serial.begin (9600);
  pinMode(diCzujnikGora, INPUT_PULLUP);
  pinMode(diCzujnikDol, INPUT_PULLUP);
  pinMode(PIR, INPUT_PULLUP);
  pinMode(dqLampka1, OUTPUT);
  pinMode(dqLampka2, OUTPUT);
  pinMode(dqLampka3, OUTPUT);
  pinMode(dqLampka4, OUTPUT);
  pinMode(dqLampka5, OUTPUT);
  pinMode(dqLampka6, OUTPUT);
}

void loop() {


 
 if (digitalRead(diCzujnikGora)== LOW && digitalRead(diCzujnikDol)==HIGH ){ //aktywowanie czujnika u góry a następnie sekwencja z góry do dołu
  int stanCzujnikaGora = 0; 
  int opoznienieGaszenia = 1; 
  zapalanieDiody(3); 
  delay(1);
  zapalanieDiody(5);
  delay(1);
  stanCzujnikaGora=digitalRead(12);
  if(stanCzujnikaGora==LOW){
    opoznienieGaszenia=2000;
  }
  zapalanieDiody(6);
  delay(1);
   stanCzujnikaGora=digitalRead(12);
  if(stanCzujnikaGora==LOW){
    opoznienieGaszenia=4000;
  }
  zapalanieDiody(9);  
  delay(1);
   stanCzujnikaGora=digitalRead(12);
  if(stanCzujnikaGora==LOW){
    opoznienieGaszenia=6000;
  }
  zapalanieDiody(10); 
  delay(1);
   stanCzujnikaGora=digitalRead(12);
  if(stanCzujnikaGora==LOW){
    opoznienieGaszenia=8000;
  }
  zapalanieDiody(11); 
   stanCzujnikaGora=digitalRead(12);
  if(stanCzujnikaGora==LOW){
    opoznienieGaszenia=10000;
    
  }


  delay(stanCzujnikaGora);

  sciemnianieDiody(3);
  delay(10);
  sciemnianieDiody(5);
  delay(10);

  
  sciemnianieDiody(6);
  delay(10);
  sciemnianieDiody(9);
  delay(10);
  sciemnianieDiody(10);
  delay(10);
  sciemnianieDiody(11);
  stanCzujnikaGora=1;
  
 }

 if(digitalRead(diCzujnikGora)==HIGH && digitalRead(diCzujnikDol)== LOW){   //aktywowanie czujnika u dołu a następnie sekwencjaz dołu do góry

  int opoznienieGaszenia= 0;
  int stanCzujnikaDol=0;
  zapalanieDiody(11); 
  delay(1);
  zapalanieDiody(10); 
  delay(1);
  stanCzujnikaDol = digitalRead(13);
  if(stanCzujnikaDol == LOW){
    opoznienieGaszenia= 2000;
  }
  zapalanieDiody(9);
  delay(1);
  stanCzujnikaDol = digitalRead(13);
  if(stanCzujnikaDol == LOW){
    opoznienieGaszenia= 4000;
  }
  zapalanieDiody(6);
  delay(1);
  stanCzujnikaDol == digitalRead(13);
  if(stanCzujnikaDol = LOW){
    opoznienieGaszenia= 6000;
  }
  zapalanieDiody(5);  
  delay(1);
  stanCzujnikaDol == digitalRead(13);
  if(stanCzujnikaDol = LOW){
    opoznienieGaszenia= 8000;
  }
  zapalanieDiody(3); 
    stanCzujnikaDol ==
    digitalRead(13);
  if(stanCzujnikaDol = LOW){
    opoznienieGaszenia= 10000;
  }
  delay(opoznienieGaszenia);
  
  sciemnianieDiody(11); 
  delay(1);
  sciemnianieDiody(10);
  delay(10);
  sciemnianieDiody(9);
  delay(10);
  sciemnianieDiody(6);
  delay(10);
  sciemnianieDiody(5);
  delay(10);
  sciemnianieDiody(3);
 }

 if(digitalRead(diCzujnikGora)==LOW && digitalRead(diCzujnikDol)== LOW){   //jednoczesne aktywowane dwóch czujników
  digitalWrite(dqLampka5, HIGH);
  digitalWrite(dqLampka3, HIGH);
  digitalWrite(dqLampka1, HIGH);
  delay(5000);
  digitalWrite(dqLampka5, LOW);
  digitalWrite(dqLampka3, LOW);
  digitalWrite(dqLampka1, LOW);
  
  
 }

 
  }
void zapalanieDiody(int pin){
    for (int i=0; i<=220; i+=16){
     analogWrite(pin, i);
     delay (50);
      Serial.println(i);
    }
                             }
void sciemnianieDiody(int pin1){
    for (int j=200; j>=0; j-=2){
     analogWrite(pin1, j);
     delay (6);
     Serial.println(j);
    }
}

  
 

 

Witam,

jestem początkującym z Arduino i kodem C, napisałem program sterowania oświetleniem schodów z dwoma czujnikami ruchu. Oświetlenie zapalane i gaszone jest stopień po stopniu.
Program nie jest skończony, proszę o pomoc i wskazówki.

Założenie wstępne:
1) Aktywowanie czujnika na dole - animacja zapalania schodów od dołu do góry. Gdy w momencie wchodzenia ktoś następny aktywuje czujnik , przedłuży się czas pomiędzy ostatnim zapalonym schodkiem a rozpoczęciem wygaszania schodków. W zależności w którym momencie ktoś dołączy, czas przedłużenia jest zmieniany

2)To samo co wyżej, tylko aktywowanie czujnika na górze

3) Chciałbym dodać sytuacje, w której, gdy ktoś wchodzi z dołu do góry i inna osoba aktywuje czujnik u góry - schodzą w trybie natychmiastowym kończą animację( czyli zapalają się niezapalone schodki), następnie zapalenie trwa 10sekund i stopnie zostają wygaszane.

4)Analogicznie w druga stronę^^

 

5)W programie mam dodane, jednak nie działa prawidłowo: Jeżeli dwa czujniki zostaną aktywowane jednocześnie, to wszystkie schodki się zapalają i wygaszają po 10 sekundach.

Nie działa to, ponieważ nie ma odstępu dla sprawdzania stanu czujnika(musza być wciśnięte idealnie w tej samej sekundzie).
Jak zrobić jakąś zmienną globalną, która po aktywacji czujnika zapisuje jego stan na 2 sekundy? 

Dodatkowo nie potrafię wyjść z pętli if - chciałbym stale sprawdzać stan czujników i  jeżeli dwa czujniki by wykryły ruch to wykonała by się pętla opisana w tym podpunkcie.

 

 


 

Link do komentarza
Share on other sites

  int stanCzujnikaGora = 0; 
  int stanCzujnikaDol = 0; 

if(digitalRead(diCzujnikGora) == LOW){
  stanCzujnikaGora = 1;
    delay(2000);
  stanCzujnikaGora = 0;
}
if(digitalRead(diCzujnikDol) == LOW){
  stanCzujnikaDol = 1;
    delay(2000);
  stanCzujnikaDol = 0;
}
if(stanCzujnikaGora == 1 && stanCzujnikaDol == 1 ){

 digitalWrite(dqLampka5, HIGH);
  digitalWrite(dqLampka3, HIGH);
  digitalWrite(dqLampka1, HIGH);
  delay(5000);
  digitalWrite(dqLampka5, LOW);
  digitalWrite(dqLampka3, LOW);
  digitalWrite(dqLampka1, LOW);
}

Jeśli źle to przepraszam.Też jestem początkujący.

Nie wiem czy się przyda ale masz tu linka do artykułu o czujnikach pir i przerwaniach: https://forbot.pl/blog/kurs-arduino-ii-przerwania-kontaktron-czujnik-pir-id16792

Link do komentarza
Share on other sites

Poczytałem - popróbuję z opóźnieniem millis zamiast przerwań.

Mam pytanie odnośnie sterowania lampkami poprzez sterowniki typu arduino:
 

Na czym i jak zrealizowalibyście projekt sterowania schodami (z parteru na piętro i z piętra na 2 piętro), gdzie założeniem jest:
1) 4 czujniki ruchu

2) 2 czujniki analogowe natężenia światła

3) 24 wyjścia PWM

4) lampki na napięcia 12V, 24V lub 230V

Jak domyślam się , przekaźniki na 5V tutaj się nie sprawdzą przy sterowaniu PWM. Trzeba jakiś shield? np NodeMCU v3 + shield z wyjściem na 24V i 1 A na kanał ?

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.