Skocz do zawartości

Sterowanie kilkunastoma przekaźnikami


Nocnywedrownik

Pomocna odpowiedź

Witam wszystkich!

Mam pytanie odnośnie możliwości wysterowania modułu 12 przekaźników poprzez Arduino.

Chodzi o to, że mam do obsłużenia 6 elektrozamków w drzwiach, które działają na zasadzie zwolnij klamkę (6 VDC przez czas 100 ms) - przerwa na otwarcie drzwi np. 5 sekund - zablokuj klamkę (-6 VDC czas 100 ms) (potrzebne dwa przekaźniki na jeden elektozamek). Czas cyklu to ok 5,2 sekundy.

Przy każdych drzwiach posiadam czytniki RFID, które będą sygnalizować chęć wejścia.

Chodzi o to, czy wykonywanie jednego cyklu, nie przyblokuje mi możliwości otworzenia w tym samym czasie innych drzwi? W sensie, że jeśli ktoś będzie w trakcie otwierania np drzwi nr 1, uniemożliwi w tym czasie otwarcie drzwi np. nr 4. 

Rozumiem,  że podczas odliczania przerwy 5 sekund pomiędzy podaniem sygnałów +6 VDC/ -6VDC, sprawdzanie stanu wejść z innych par drzwi będzie zblokowane do momentu wykonania pełnego programu?

Taki przykładowy kod przychodzi mi do głowy (dla dwóch par drzwi):

void setup() {
  pinMode(7, OUTPUT); //+6 VDC drzwi nr 1
  pinMode(8, OUTPUT); //-6 VDC drzwi nr 1
  pinMode(9, OUTPUT); //+6 VDC drzwi nr 2
  pinMode(10, OUTPUT); //-6 VDC drzwi nr 2
 
  pinMode(5, INPUT_PULLUP); //Sygnał z drzwi nr 1
  pinMode(6, INPUT_PULLUP); //Sygnał z drzwi nr 2

}
 
void loop()
{

  if (digitalRead(5) == LOW) { //Jeśli jest sygnał z drzwi nr 1
    digitalWrite(7, HIGH); //włącz przekaźnik +6 VDC (klamka odblokowana)
    delay(100); //Czas działania przekaźnika
    digitalWrite(7, LOW); //wyłącz przekaźnik +6 VDC
    delay(5000); //Czas na wciśniecie klamki
    digitalWrite(8, HIGH); //włącz przekaźnik -6 VDC (klamka zablokowana)
    delay(100); //Czas działania przekaźnika
    digitalWrite(8, LOW); //wyłącz przekaźnik -6 VDC

  if (digitalRead(6) == LOW) { //Jeśli jest sygnał z drzwi nr 2
    digitalWrite(9, HIGH); //włącz przekaźnik +6 VDC (klamka odblokowana)
    delay(100); //Czas działania przekaźnika
    digitalWrite(9, LOW); //wyłącz przekaźnik +6 VDC
    delay(5000); //Czas na wciśniecie klamki
    digitalWrite(10, HIGH); //włącz przekaźnik -6 VDC (klamka zablokowana)
    delay(100); //Czas działania przekaźnika
    digitalWrite(10, LOW); //wyłącz przekaźnik -6 VDC
}

Czy jest możliwość rozpisania kodu w ten sposób, ażeby wejścia z pozostałych drzwi wykonywały sekwencje do nich przypisane, niezależnie od stanu na wejściach/wyjściach innych drzwi?

W skrócie mówiąc - chodzi o pracę równoległą dla poszczególnych grup wejść/wyjść.

Edytowano przez Gieneq
Zachęcam do używania bloku kodu
Link do komentarza
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!

Anonim
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...

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.