• 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
Zatrzymanie silnika
#1
Witam, 

Robię projekt na Arduino uno, który będzie sterować silnikiem. Do tego projektu zamierzam użyć dwa czujniki odległości. Mój silnik mam za zadanie otworzyć i zamknąć klape. Gdy czujnik coś wyłapie na danej odległości kapa ma się otwierać przez jakiś czas, później chwila pauzy no i po pauzie ma się zamknąć. Mój problem polega na tym, że nie wiem jak napisać kod, który zatrzyma silnik przy zamykaniu klapy wtedy, gdy czujnik odległości coś wykryje. Chciałbym, żeby to działało na takiej samej zasadzie jak brama wjazdowa. Czyli jak fotokomórka coś wykryje przy zamykaniu bramy to wtedy brama się zatrzyma i po chwili zacznie się na nowo otwierać.
 
Dodałbym ten kod tutaj, tylko nie wiem jak ;(

Z góry dziękuję za pomoc!
 
Odpowiedź
#2
Rozwiązań jest wiele. Najrozsądniejsze wydaje się aby czujnik wywołał przerwanie w obsłudze którego silnik zostanie zatrzymany.
 
Odpowiedź
#3
(06-12-2018, 20:56)es2 napisał(a): Rozwiązań jest wiele. Najrozsądniejsze wydaje się aby czujnik wywołał przerwanie w obsłudze którego silnik zostanie  zatrzymany.

Tak, tylko problem w tym, że nie wiem jak ta komende wpisać 

U mnie jest coś takiego, teraz pytanie co tam dopisać?

void CZUJNIK1(){

digitalWrite(OTWIERANIE, HIGH); 
delay(czas2);
digitalWrite(OTWIERANIE, LOW); 
delay(pauza); 
digitalWrite(ZAMYKANIE, HIGH);
delay(czas1);
digitalWrite(ZAMYKANIE, LOW);

}

void CZUJNIK2(){

digitalWrite(OTWIERANIE, HIGH); 
delay(czas2);
digitalWrite(OTWIERANIE, LOW); 
delay(pauza); 
digitalWrite(ZAMYKANIE, HIGH);
delay(czas1);
digitalWrite(ZAMYKANIE, LOW);
 
Odpowiedź
#4
Tu znajdziesz informacje jak napisać program: https://forbot.pl/blog/kursy .
 
Odpowiedź
#5
(06-12-2018, 21:03)Matfa11 napisał(a):
(06-12-2018, 20:56)es2 napisał(a): Rozwiązań jest wiele. Najrozsądniejsze wydaje się aby czujnik wywołał przerwanie w obsłudze którego silnik zostanie  zatrzymany.

Tak, tylko problem w tym, że nie wiem jak ta komende wpisać 

U mnie jest coś takiego, teraz pytanie co tam dopisać?

void CZUJNIK1(){

digitalWrite(OTWIERANIE, HIGH); 
delay(czas2);
digitalWrite(OTWIERANIE, LOW); 
delay(pauza); 
digitalWrite(ZAMYKANIE, HIGH);
delay(czas1);
digitalWrite(ZAMYKANIE, LOW);

}

void CZUJNIK2(){

digitalWrite(OTWIERANIE, HIGH); 
delay(czas2);
digitalWrite(OTWIERANIE, LOW); 
delay(pauza); 
digitalWrite(ZAMYKANIE, HIGH);
delay(czas1);
digitalWrite(ZAMYKANIE, LOW);
Dałeś strzępki kodu więc nie da sie pomóc.
Jak dasz cały, to pewnie dostanę kołatania serca, bo obawiam się, że czas1, czas2, pauza mają setki ms lub więcej. Poczytaj o millis. Delay-em zawieszasz program nie zobaczy on zmiany stanu czujnika. Przerwania nic nie dadzą, bo co z tego, że przerwanie zatrzyma silnik, jak za chwile, po jakimś tam Delay wykona się digitalWrite(OTWIERANIE, HIGH);
Musisz:
- Zapoznać się z podstawowym kursem Arduino.
- Zapoznać się z z wielowątkowością (choćby z użyciem millis).
- Zapoznać się z przerwaniami zewnętrznymi.
Na szczęście nie musisz zapoznać się z RTOS-em.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości