Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Detekcja osób na schodach pod automatyczne oświetlenie

danio124 07 Jul 2021 22:08 477 13
Fluke Kamera Termowizyjna
  • #1
    danio124
    Level 5  
    Dzień dobry,

    oświetlenie na schodach bez bajerów w stylu każdy stopień zapalany osobno. Wszystkie stopnie zapalane razem i dwa czujniki E18-D80NK jeden na dole drugi u góry. Napisałem prosty program, który uruchomi przekaźnik na określony czas po detekcji ruchu.

    Code: c
    Log in, to see the code


    Chciałbym zapytać o strukturę programu, która bardziej zautomatyzuję oświetlenie przykładowo: wchodzę na schody zapala się, schodzę ze schodów gaśnie. Czy na dwóch czujnikach jest to w ogóle wykonalne, aby zapobiec różnym nieprzewidzianym sytuacją, kiedy to np. dwie osoby w tym samym momencie wchodzą na schody z różnych stron lub ktoś wejdzie i się wróci? Jeżeli można to jakoś sensownie zaprogramować to poproszę o wskazówki.
  • Fluke Kamera Termowizyjna
  • #3
    gps79
    Level 25  
    Twój kod nie będzie działał, jak założyłeś, ze względu na użycie delay(5000); 5 sekund jest liczone od pierwszego wyzwolenia czujnika, a ma być liczone od wyjścia z obszaru działania czujnika.
  • #4
    khoam
    Level 40  
    Każdy z czujników powinien wyzwalać przerwanie, w którym będzie zapadała decyzja o zgaszeniu lub zapaleniu światła. Tego rodzaju rzeczy nie obsługuje się przez pętlę loop(). Moim zdaniem powinieneś poczytać co nieco o przerwaniach.
    https://www.tutorialspoint.com/arduino/arduino_interrupts.htm
    https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/
  • Fluke Kamera Termowizyjna
  • #5
    dondu
    Moderator on vacation ...
    danio124 wrote:
    Czy na dwóch czujnikach jest to w ogóle wykonalne, aby zapobiec różnym nieprzewidzianym sytuacją, kiedy to np. dwie osoby w tym samym momencie wchodzą na schody z różnych stron lub ktoś wejdzie i się wróci?

    ... albo dwie osoby naruszają jednocześnie strefę jednego czujnika idąc w przeciwnych kierunkach,
    ... albo schody wystarczająco szerokie dla dwóch osób, które idą obok siebie ... co w tej sytuacji?
    ... albo narusza strefę czujnika i natychmiast wraca (narusza czujnik tylko raz).

    Rozpisz sobie wszystkie możliwe przypadki. Na tej podstawie sam opracujesz algorytm i zabezpieczenia na wypadek różnych innych niż normalne sytuacji.

    khoam wrote:
    Każdy z czujników powinien wyzwalać przerwanie, w którym będzie zapadała decyzja o zgaszeniu lub zapaleniu światła. Tego rodzaju rzeczy nie obsługuje się przez pętlę loop(). Moim zdaniem powinieneś poczytać co nieco o przerwaniach.

    Choć oczywiście wykorzystanie przerwań jest jedną z możliwości, sam proces przejścia człowieka przed czujnikiem będzie trwał wystarczająco długo, by wszystko mogło dziać się w pętli głównej bez konieczności wykorzystania przerwań.

    @danio124
    Niemniej jednak, dla rozwijania swoich umiejętności warto byś zastosował się do uwagi kol. khoam. Umiejętność wykorzystania przerwań do różnych celów, jest bardzo przydatna.
  • #6
    emarcus
    Level 38  
    danio124 wrote:



    Oświetlenie na schodach bez bajerów w stylu każdy stopień zapalany osobno. Wszystkie stopnie zapalane razem i dwa czujniki E18-D80NK jeden na dole drugi u góry

    Chciałbym zapytać o strukturę programu, która bardziej zautomatyzuję oświetlenie…


    A ja chciałbym zapytać dlaczego wybrałeś takie właśnie czujniki ?
    Nie są to czujniki ruchu, lecz odległości i to ‘zgrubnej’ dlatego ich nazwa ‘proximity’ czyli w okolicy ustawionego punktu odległości. Jeżeli odległość przedmiotu odbiega zbyt dużo od nastawionej, jest duża szansa na nie wykrycie (ignorowanie ) przedmiotu. Dotyczy to rozbieżności w obydwu kierunkach ( zbyt blisko i zbyt daleko). Regulacja tej optymalnej odległości jest potencjometrem w tylnej części sensora obok diody sygnalizującej jego stan wyjścia.
    Druga rzecz to: o ile w przedstawionej konfiguracji układ może pracować w odniesieniu do jednego tylko użytkownika schodów, to możliwość wprowadzenia jednocześnie więcej osób w obserwowany rejon (schody) uniemożliwi znalezienie logicznej jego funkcjonalności.
    W sytuacjach okupacji schodów przez więcej niż 1 osoba jednocześnie, potrzebujesz liczyć ich ilość i wygaszać światło przy zerowej ilości. Tu można wykorzystać timer dla stopniowego przyciemniania jaki specjalny effekt wizualny.
    Sensory te nie mają zdolności wskazania kierunku przesuwanego względem nich obiektu.
    Upierając się pozostania z tymi czujnikami, potrzebowałbyś zainstalować po dwa takie sensory zarówno na dole schodów jak i u góry tworząc enkodery pozwalajace znać liczbę ilości okupantów schodów w każdym momencie programu .

    I trzecia; nie całkowicie marginesowa sprawa to: w arduino należy (o ile to możliwe) unikać podłączania czegokolwiek pod piny cyfrowe D0 i D1.

    e marcus
  • #7
    danio124
    Level 5  
    Dziękuję za wszystkie podpowiedzi i przepraszam za małą zwłokę w odpowiedzi. @emarcus właśnie zdążyłem się przekonać, że to słabe rozwiązanie. Generalnie ciężko je wyregulować, bo jeżeli ustawiam czułość zbyt mocno to czujnik wykrywa cały czas. Ostatecznie udało mi się ustawić tak, że łapie do połowy schodka i w zależności, którą nogą zacznie się wchodzić na schody to wykrywa lub nie. Ewentualnie mógłbym zamontować kolejny po drugiej stronie, ale u góry nie mam takiej możliwości. Zatem jakie czujniki polecasz do takiej aplikacji?

    Zależało mi tylko na załączaniu czasowym oświetlenia głównie z uwagi na to, że słabo programuję. Założenia miałem takie, że jeżeli jeden czujnik uruchomi led np. na 15 sekund to ten drugi jest przez ten czas nieaktywny, żeby schodząc ze schodów nie rozpoczynać odliczania od nowa. Zabieram się za napisanie czegoś bardziej eleganckiego bez delay().

    P.S.
    Przyznaję ze perspektywa z enkoderem jest bardzo kusząca. Domyślam się, że najlepiej do tego celu postawić barierę świetlną (chyba w ogóle powinienem od tego zacząć), ale u góry nie mam takiej możliwości.
  • #8
    emarcus
    Level 38  
    danio124 wrote:

    . Zatem jakie czujniki polecasz do takiej aplikacji?

    Zależało mi tylko na załączaniu czasowym oświetlenia głównie z uwagi na to, że słabo programuję. .

    Myślę że PIR sensor (HC-SR501) byłby lepszym wyborem zamontowany gdzieś w górnej lokacji aby obejmował całe schody.
    Zleżnie od lokalnych warunków być może potrzebowałbyś ze dwa takie sensory.
    Mają one wbydowane dwa potencjometry do regulacji czułości i czasu trwania aktywnego sygnału na wyściu, a także jumper na uaktywnienie powtarzalności funkcji .
    Nie zaszkodzi przeglądnąć tą stronę:
    https://lastminuteengineers.com/pir-sensor-arduino-tutorial/

    Innym rozwiązaniem może być zastosowanie UltraSonic technologii, na przykład: sensor HC-SR04

    e marcus
  • #9
    danio124
    Level 5  
    emarcus wrote:
    Myślę że PIR sensor (HC-SR501) byłby lepszym wyborem zamontowany gdzieś w górnej lokacji aby obejmował całe schody.


    Próbowałem kiedyś na tych. Wyregulować to tak żeby nie reagowało podczas przechodzenia obok schodów, a zarazem tak żeby wykrywało wchodząc na pierwszy schodek jest w zasadzie niemożliwe. Stąd mój wybór padł na E18-D80NK. Liczyłem, że mały kąt widzenia załatwi sprawę, ale pojawiły się inne problemy, o których pisałem. Coraz bardziej przekonuję się, że na schody jedynym słusznym rozwiązaniem jest postawienie bariery optycznej np.: Link1 lub Link2.

    Swoją drogą w tym sterowniku stosowana jest chyba bariera podczerwieni. Nie zdziwiłbym się gdyby w tych puszkach siedziało coś na wzór Link1.

    Napisałem taki kod. Poproszę o komentarz.

    Code: c
    Log in, to see the code


    Próbuję jeszcze dopisać możliwość zapleniana na stałe i gaszenia z dwóch przełączników monostabilnych (góra-dół).
  • #10
    gps79
    Level 25  
    Ten program funkcjonalnie nie różni się od poprzedniego. Zawiera ten sam błąd, który wskazałem wyżej.
    Ledy powinny świecić przez 5 sekund od wyjścia z sensora, a nie liczyć 5 sekund od wejścia w sensor.
    to " and flaga == 0)" nie jest potrzebne w pierwszym if-ie.
    Pomyśl o tym.

    A z drobiazgów, to || zamiast "or" i && zamiast "and". Dobrą praktyką jest umieszczanie poszczególnych warunków if-a w nawiasach.
  • #11
    khoam
    Level 40  
    gps79 wrote:
    A z drobiazgów, to || zamiast "or" i && zamiast "and".

    Operatory "or" oraz "and" są alternatywnymi operatorami w C/C++ i ich użycie nie jest błędem, aczkolwiek może wydawać się nieco egzotyczne.
    Link
  • #12
    danio124
    Level 5  
    Czyli powinienem reagować na zbocze opadające. Ale po co jeżeli tylko odliczam czas od wykrycia ruchu?

    gps79 wrote:
    " and flaga == 0)" nie jest potrzebne w pierwszym if-ie.


    Stosuję to po to, aby nie zaczynać liczenia od początku kiedy schodzę ze schodów.

    Dodano po 3 [minuty]:

    danio124 wrote:
    A z drobiazgów, to || zamiast "or" i && zamiast "and". Dobrą praktyką jest umieszczanie poszczególnych warunków if-a w nawiasach.


    Zwróć uwagę na mój kod w pierwszym poście. Stosuję je zamiennie. Po co? Bo się dopiero uczę i badam temat.
  • #13
    gps79
    Level 25  
    danio124 wrote:
    Ale po co jeżeli tylko odliczam czas od wykrycia ruchu?

    Wyobraź sobie schody, po których wchodzisz 4.8s i masz na nich n czujników (nie istotne, czy 2, czy więcej).
    Gdy wejdziesz po tych schodach, to wg Twojego algorytmu podświetlanie zgaśnie 0.2s po wejściu, a wypadałoby, aby zgasło 5s po wejściu.

    Quote:
    Po co?

    Po to, aby wszyscy czytający Twój kod wiedzieli, że piszesz w C, a nie w tylko Tobie znanym języku. Ułatwi to innym wychwycenie ew. błędów, a Ty przy okazji nauczysz się czegoś nowego (co jest Twoim celem z tego, co piszesz).

    Mówię to z życzliwości bazując na moich 12-letnich doświadczeniach w embedded software.
  • #14
    emarcus
    Level 38  
    gps79 wrote:

    Gdy wejdziesz po tych schodach, to wg Twojego algorytmu podświetlanie zgaśnie 0.2s po wejściu, a wypadałoby, aby zgasło 5s po wejściu.
    ,,,,,,,,,,,,,,
    Wyobraź sobie schody, po których wchodzisz 4.8s i masz na nich n czujników (nie istotne, czy 2, czy więcej).
    ..............
    Mówię to z życzliwości bazując na moich 12-letnich doświadczeniach w embedded software.


    Te 12 lat w 'embedzie' było chyba liczone tym samym algorytmem co te 0.2 s/4.8s wędrówki po schodach.

    e marcus