Skocz do zawartości

włącznie/wyłącznie światła


feeleek

Pomocna odpowiedź

Na wstępie chciałbym zaznaczyć że nadal jestem w "żłobku" jeśli chodzi o programowanie.

Chciałbym zapytać jak można wykonać, zakładam dość prosty mechanizm który będzie za pomocą czujnika ruchu włączał światło które będzie się świecić aż 

do ponownego wykrycia ruchu przez czujnik który je ponownie wyłączy. Jeśli jest to trochę niezrozumiałe dla przykładu powiem że chodzi mi o umieszczenie takiego mechanizmu np. w korytarzu, gdzie np. wstaję w nocy idę do łazienki czujnik uruchamia światło na korytarzu ( świeci się cały czas ) wracam i ten sam czujnik je wyłącza. Chodzi mi oczywiście o wykorzystanie arduino i czujnika pir. Wiem jak zrobić żeby się włączył -> funkcja delay(np.20000) ale nie o to mi chodzi.

 

Edytowano przez feeleek
doprecyzowanie
Link do komentarza
Share on other sites

Ja mam to zrobione trochę inaczej - dwa czujniki i zależnie od tego który pierwszy zasygnalizuje ruch zapalam albo gaszę światło.

Poszukaj kodu który przełącza coś przy naciśnięciu klawisza. Różnica jest tylki w polaryzacji sygnału.

Link do komentarza
Share on other sites

Kolego ethanak też pierwotnie wpadłem na pomysł nad zastosowaniem dwóch czujników, ale żeby maksymalnie uprościć instalacje próbuje zrobić to nad jednym. Jeśli oczywiście będzie to niemożliwe lub wykonanie tego będzie o wiele trudniejsze to pójdę Twoim tropem.

Kolego farmaceuta posiadam arduino uno, jeśli chodzi o czujnik to obecnie mam HC-SR04 -podstawowy zestaw, ale nie upieram się do konkretnego czujnika. Wszelkie podpowiedzi co i jak chętnie przyjmę. 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

@feeleek ja to widzę tak...jak już ma być jeden czujnik to: gdy światło wyłączone i zostaje wykryty ruch zapalamy światło, ustawiamy jakąś zwłokę (po to żeby czujnik przez powiedzmy 5-10s nie wyłączył światła gdy po chwili znów wykryje ruch( gdybyś nie zdążył opuścić korytarza) po tej zwłoce zaczynamy odliczać czas po upływie którego światło automatycznie zgaśnie jeśli ruch nie został wykryty (powiedzmy ~10min) lub gasimy światło gdy ruch zostanie ponownie wykryty...no chyba że koniecznie chcesz żeby światło gasło tylko w sytuacji kiedy został wykryty ponowny ruch?

Link do komentarza
Share on other sites

No właśnie dokładnie chcę aby światło gasło po ponownym wykryciu ruch, (zdaję sobie z tego sprawę że jeśli ponownie czujnik nie wykryje ruch to światło będzie się świecić  choćby dwa dni).  Upieram się przy tym dlatego że taki mechanizm mógł bym wykorzystać jeszcze w innym miejscu, np. oświetlenie blatu kuchennego gdzie nie mam ochoty machać łapami co 30s. Co do korytarza ostatecznie będzie można wykorzystać po prostu opóźnienie, ale jak by to się udało tak jak chcę to by było zaje... 

Link do komentarza
Share on other sites

(edytowany)

Na chwilę obecna wyskrobałem coś takiego https://wokwi.com/projects/405148752796008449 ( nie wiem jak wkleić tutaj schemat połączeń wiec daje link).

Zastosowałem dwa czujniki, ale czy możecie na to kuknąć i skomentować ? Jeden czujnik włącza , a drugi wyłącza. 

edit.1  - może mi ktoś jeszcze jedno wytłumaczyć. Sam znalazłem swój błąd, mianowicie w "void setup" nie został zdefiniowany pin 10, 

             a mimo to według wokwi wszystko działa !!! ponieważ na chwile obecna nie dysponuje dwoma czujnikami ruchu nie mogę tego        sprawdzić w realu. Co o tym sądzicie ?

 

Edytowano przez feeleek
znaleziono błąd
Link do komentarza
Share on other sites

(edytowany)

 

1 godzinę temu, feeleek napisał:

Zastosowałem dwa czujniki, ale czy możecie na to kuknąć i skomentować ? Jeden czujnik włącza , a drugi wyłącza. 

Zasada działania jest podobna do twoich oczekiwań, tyle że działa jednokierunkowo - jeden tylko załącza, a drugi tylko gasi.
Jeżeli chcesz użyć jednego czujnika, musisz użyć co najmniej jednej zmiennej do zachowania poprzedniego stanu i odpowiednio go interpretować.

1 godzinę temu, feeleek napisał:

może mi ktoś jeszcze jedno wytłumaczyć. Sam znalazłem swój błąd, mianowicie w "void setup" nie został zdefiniowany pin 10, 

             a mimo to według wokwi wszystko działa !!! ponieważ na chwile obecna nie dysponuje dwoma czujnikami ruchu nie mogę tego        sprawdzić w realu. Co o tym sądzicie ?

Dlatego że w w mikrokontrolerach AVR domyślny kierunek każdego pinu to wejście. (rejestr kierunku portów (pinów) jest zerowany przy starcie)
Oczywiście nie zwalnia to z definiowania kierunku, chociażby dlatego że kod Arduino można przenosić na inne zgodne mikrokontrolery, a tam może być różnie.
 

Edytowano przez KatzePL
Link do komentarza
Share on other sites

16 godzin temu, feeleek napisał:

Chciałbym zapytać jak można wykonać, zakładam dość prosty mechanizm który będzie za pomocą czujnika ruchu włączał światło które będzie się świecić aż 

do ponownego wykrycia ruchu przez czujnik który je ponownie wyłączy.

 

12 godzin temu, feeleek napisał:

Na chwilę obecna wyskrobałem coś takiego https://wokwi.com/projects/405148752796008449

Trochę to przerobiłem.

#define inputPir 12
#define LED 13
bool StatusLED, clip, pir = 0;

void setup() {

  pinMode(LED, OUTPUT);             //Dioda jako wyjście
  pinMode(inputPir, INPUT_PULLUP);  //Przycisk jako wejście
}

void loop() {

  pir = digitalRead(inputPir);
  if (pir == 0 && clip == 0) {
    clip = 1;
    StatusLED = !StatusLED;
    digitalWrite(LED, StatusLED);
    delay(5000);  //Ponowna gotowość za 5s (zdefiniować do potrzeb)
  } else if (pir == 1) {
    clip = 0;
  }
}

Tylko pamiętaj, że sterujesz masą (GND). W przeciwnym wypadku należy zanegować linijkę;

pir = !digitalRead(inputPir);

 Oraz sprawdzić fizyczny stan negacji wejścia do GND. 

Link do komentarza
Share on other sites

P.S.

16 godzin temu, farmaceuta napisał:

ja to widzę tak...jak już ma być jeden czujnik to: gdy światło wyłączone i zostaje wykryty ruch zapalamy światło, ustawiamy jakąś zwłokę (po to żeby czujnik przez powiedzmy 5-10s nie wyłączył światła gdy po chwili znów wykryje ruch( gdybyś nie zdążył opuścić korytarza) po tej zwłoce zaczynamy odliczać czas po upływie którego światło automatycznie zgaśnie jeśli ruch nie został wykryty (powiedzmy ~10min) lub gasimy światło gdy ruch zostanie ponownie wykryty...no chyba że koniecznie chcesz żeby światło gasło tylko w sytuacji kiedy został wykryty ponowny ruch?

Ty to maż łeb...

#define inputPir 12             //Wejście czujki PIR
#define LED 13                  // Wyjście
bool StatusLED, clip, pir = 0;  //Zmienne statut
unsigned int TT, czas, tt;      // Zmienne pomocnicze czasu millis

//----------------------------------------------------------------------------------------
int opoznieniePIR = 5UL;  // Opóźnienie styku czujki PIR. 5s Ustaw czas do potrzeb w (s)
int WylaczLED = 300UL;     // Wyłącz LED po 5min. Ustaw czas do potrzeb w (s)
//---------------------------------------------------------------------------------------

void setup() {

  pinMode(LED, OUTPUT);             //Dioda jako wyjście
  pinMode(inputPir, INPUT_PULLUP);  //Przycisk jako wejście
}

void loop() {

  pir = digitalRead(inputPir);
  digitalWrite(LED, StatusLED);

  TT = millis() / 1000;
  czas = TT - tt;

  if (pir == 0) { tt = TT; }  // resetuj zegar gdy reakcja PIR

  if (czas > WylaczLED) {
    StatusLED = 0, clip = 0;
  }

  if ((pir == 0) && (clip == 0)) {
    clip = 1;
    StatusLED = !StatusLED;
  } else if ((pir == 1) && (czas > opoznieniePIR)) {
    clip = 0;
  }
}

A mi się chyba dosłownie nudzi... 

Link do komentarza
Share on other sites

Znowu mam problemy z 13 letnim laptopem, nic nowego nie mozna zainstalowac. Nawet nowe Arduino IDE. Wydaje sie ze @rafal220  ma dobry pomysl. Ja tez nie rozumiem dlaczego koniecznie swiatlo ma sie ciagle swiecic az do momentu wykrycia kolejnego (parzystego) ruchu.  Pozatym ten czujnik ma (o ile dobrze pamietam ) zworkę i jak ja ustawisz to sygnal jest ciagly podczas wykrycia ruchu. Wystarczy po prostu jakis przezutnik astabilny i czujnik w jakim celu Arduino ?

Link do komentarza
Share on other sites

@KatzePL A co wyście na czat się wszyscy poobrażali? Mam 14-letni PC i wszystko działa. 

@ethanak Z tego co czytam, to chyba autorowi bardziej rozchodzi się o tą uproszczoną wersję. No bo z dwoma czujnikami,  to by mu działało z tym kodem który podał w linku. Pytanie po co zostawił na tej stronie otwartą modyfikację. xD

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.