Skocz do zawartości
mkzord

Sterownik schodów UNO R3

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.

 

 


 

Udostępnij ten post


Link to post
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

Udostępnij ten post


Link to post
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ł ?

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...