• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Problem z programem do wlaczania bramy
#1
Witam, zabawe z arduino zacząłem od niedawna i srednio idzie mi programowanie w języku C.
Wymysliłem sobie, że zrobie model bramyna arduino.
przycisk S1 i S2 to będą przyciski S1-w lewo, S2-w prawo
do tego czyjnik (przycisk na modelu) gdy brama sie zamknie C1 i drugi czujnik na drugim koncu bramy gdy brama sie otworzy C2, do tego dwie diody imitujące w którą strone będzie się okręcał silnik K1-silnik bedzie sie krecil w lewo(brama bedzie zamykana)  i K2(silnik bedzie otwierał brame)
Więc działanie miało byc takie. Naciskam przycisk w LEWO(S1) i brama się zamyka, naciskam S2 i brama się otwiera, jesli ktos wejdzie na kurs kolizyjny, brama staje i wtedy moge sobie zarządzic czy chce ją zamknąć czy otworzyć. Fajnie byłoby tez gdyby szlo zrobic tak ze gdy sie OTWIERA/ZAMYKA to moge od razu zmienic na ZAMYKANIE/OTWIERANIE sie bramy bez czekania az dojedzie do konca i czujnk zadziała
Tutaj przedstawiam mój marny sketch.... Smile
chciałem też dodac czujnik w razie gddyby ktoś  stanął na kursie kolizyjnym z bramą stad czujnik C3 i lampe ktora migałaby podczas zamykania i otwierania, stad SYGNALIZATOR.
Kod:
int c1 = 12;
int c2 = 11;
int c3 = 10;
int s1 =9;
int s2 = 8;
int k1 = 7;
int k2 = 6;
int sygnalizator = 5;

void setup () {
  pinMode(k1, OUTPUT);
  pinMode(k2, OUTPUT);
  pinMode(sygnalizator, OUTPUT);
  pinMode(c1, INPUT_PULLUP);
  pinMode(c2, INPUT_PULLUP);
  pinMode(c3, INPUT_PULLUP);
  pinMode(s1, INPUT_PULLUP);
  pinMode(s2, INPUT_PULLUP);
}

void loop() {


  if  (digitalRead(c1^s2) == LOW)//jesli c1 i s2 beda zwarte to
   { digitalWrite(k2, HIGH); //k2 czyli silnik w prawo sie zalaczy
   while (digitalRead(c2) == HIGH)//bedzie tak dlugo pracowal az
   { 
   digitalWrite(k2, LOW); //na czujniku c2 pojawi sie sygnal 
   }
   }   else if (digitalRead(c2^s1) == LOW) //tutaj podobnie co wyzej
   { digitalWrite(k1, HIGH);
   while (digitalRead(c1) == HIGH) {
   digitalWrite(k1, HIGH);
   }
   }
}
Mam nadzieje ze pomożecie.
 
Odpowiedź
#2
Do sterowania bramą wystarczy jeden przycisk (OTWÓRZ/STOP/ZAMKNIJ). Co w przypadku gdy brama sie otwiera a naciśniesz zamknij, szarpnie silnikiem w przeciwnym kierunku. Niektóre siłowniki może połamać.
Jeżeli chcesz na dwa przyciski, to w przypadku gdy jest praca bramy naciśnięcie dowlonego powinną ją zatrzymać, a ponowne naciśnięcie dopiero wywołać ruch.
 
Odpowiedź
#3
to w przypadku gdy jest praca bramy naciśnięcie dowolnego powiną ją zatrzymać, a ponowne naciśnięcie dopiero wywołać ruch.
Nie prawda można zastosować tak zwana zmianę kierunku bezkolizyjna mianowicie, gry brama się otwiera i klikamy zamknij wtedy brama powoli się zatrzymuje i rusza w kierunku zamknij pod dobnie w druga stronę.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#4
(10-11-2017, 23:53)adix napisał(a): można zastosować tak zwana zmianę kierunku bezkolizyjna mianowicie, gry brama się otwiera i klikamy zamknij wtedy brama powoli się zatrzymuje i rusza w kierunku zamknij pod dobnie w druga stronę.
Ciekawe rozwiązanie Smile Nigdy nie rozważałem tego w taki sposób, ale rzeczywiście to dobry pomysł. To zależy jednak, czego chciałby autor, bo może ważniejsza dla niego jest możliwość zatrzymania bramy w dowolnym momencie.
 
Odpowiedź
#5
Zatrzymanie bramy w dowolnym momencie jest możliwe nadal np.
otwierasz stop i chcesz dalej otwierać wciskasz otworzy i tak samo zamknij .
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości