Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Uno - Centrala alarmowa. Projekt utknął w miejscu.

killerus 04 Feb 2016 20:21 1953 4
Suntrack
  • #1
    killerus
    Level 11  
    Witam

    Na początku chciałbym powiedzieć, że nie mam dużego doświadczenia z platformą. Tak naprawdę poznałem ją jakieś 2 lata temu, gdy kupiłem urządzenie działające na Arduino Nano, byłem po prostu pod wrażeniem, jak coś tak prostego może w sobie ogarnąć tak wiele.
    Z lutownicą jestem od dziecka czyli już jakieś 34 lata, gdyby w moich dziecięcych latach było takie cudo jak arduino, to myślę, że powstała by niejedna ciekawa rzecz na tej platformie.

    No, ale dobra wracając do teraźniejszości , to udało mi się ( ze względu na to, że kiedyś bawiłem się Basic’kiem na C64 i Amosie na Amidze 500 ) napisać prosty program sterujący załączaniem/wyłaczaniem zasilania zdalnie poprzez aplikację na Windowsie (tak, udało mi się nawet napisać mały programik w VB).
    Stąd narodził się pomysł by zaprząść Arduino do czegoś poważniejszego, a mianowicie do bycia systemem alarmowym.
    Składowe alarmu:
    Zasilanie : sieć/akumulator – tutaj sobie poradzę bez problemu
    Centrala : Arduino UNO V3
    Łączność : zewnętrzny moduł SMS GSM Neoway M590 (taki posiadam)
    Pierwsza linia obrony PIR połączony szeregowo z czujnikiem otwarcia drzwi, reakcja po 10 sek.
    Druga linia obrony wiązka laserowa, jej przerwanie powoduje uruchomienie alarmu.
    Sterowanie otwieraniem i zamykaniem bramy (wliczone wyłączniki krańcowe) z klawiatury i poprzez SMS – osobny moduł z przekaźnikami oraz sterowanie z klawiatury.
    Status wyświetlany na ekranie LCD (I2C)
    3 diody sygnalizujące prace centrali:
    -zielona rozbrojone,
    -czerwona działa alarm na PIR i laser,
    -niebieska – reakcja tylko na przecięcie wiązki lasera


    Założenia jakie chciałem osiągnąć to:
    1) 2 osobne wejścia (D9 i D10) na czujniki wyzwalające alarm, aktywowane osobno. Tj. jedno jako główne reaguje na wykryty ruch z czujki PIR Po wykryciu ruchu, czyli przerwanie obiegu na wejściu, mamy 10 sekund na wbicie kodu deaktywującego alarm.
    Drugie przy wykryciu ruchu uruchamia alarm niezwłocznie (w tym przypadku przecięcie wiązki lasere we D10).
    2) Uzbrajanie/rozbrajanie/wyłączenie alarmu poprzez klawiature numeryczną, lub poprzez wysłanie SMSa.
    3) Otwieranie bramy/zamykanie poprzez klawiaturę, lub SMS.
    4) Powiadomienie o uzbrojeniu/rozbrojeniu alarmu na wyświetlaczu oraz poprzez wiadomość SMS wysłaną na wybrany nr telefonu.
    5) Gdy alarm zostanie uruchomiony zostaje jednocześnie wysłany komunikat SMS .
    6) Komunikaty wyświetlane na ekranie LCD.
    7) Dwa osobne kody, jeden na aktywowanie/deaktywowanie czujek PIR, drugi na aktywowanie czujnika wiązki Laserowej, czas aktywacji alarmu po wprowadzeniu kodu to 10 sekund.
    8) Możliwość otwarcia bramy tylko w momencie gdy alarm jest zdezaktywowany.
    9) Przekaźnik uruchamiający syrenę jest cały czas zasilany. Gdy jego zasilanie zaniknie to wtedy zostanie zasilona syrena (jest to pokazane na schemacie).


    Wiem, że brzmi to może zawile, ale postaram się to szybko wytłumaczyć.

    Po pierwsze dlaczego 2 kody ? A więc dlatego, że np. kodem 12345, aktywuje/deaktywuje działanie alarmu przy wykryciu ruchu na czujnikach PIR i Laser, zwłoka sygnalizacji alarmu to 10 sek. (daje nam czas na wprowadzenie kodu wyłączającego alarm).

    Kodem np. 54321 aktywuje i deaktywuje tylko przerwanie wiązki laserowej, PIRy nie maja tutaj znaczenia, alarm uruchamia się od razu.

    W momencie gdy uruchomi się alarm, uruchamia się syrena oraz dostaję powiadomienie SMS.
    Jeśli uważam, że jest to np. fałszywy alarm, specjalnym SMSem mogę wyłączyć alarm.
    Również SMSem o odpowiedniej treści mogę go załączyć (wybór trybu), lub np. otworzyć bramę, lub ją zamknąć.

    Otwieranie/zamykanie bramy:

    Tutaj wykorzystałbym 3 przekaźniki:
    2 sterujące kierunkiem obrotu silnika i jeden odcinający jego zasilanie.

    Do tego dochodzą 2 wyłączniki krańcowe, w momencie ich zwarcia praca silnika zostaje zatrzymana i zostaje wyświetlony odpowiedni komunikat na ekranie LCD oraz wysłany SMS.
    Na schemacie wyłączniki korzystają z 2 wejść na Arduino, ale można użyć jednego, które będzie służyło jako sygnał STOP.
    Opis stanu czujek PIR i lasera:

    Myślę, że tutaj wszystko powinno pracować w obwodzie zamkniętym, czyli jego przerwanie sygnalizuje sytuację ALARMOWĄ.

    Podłączenie klawiatury (4x4, 8 pinów) z tego przykładu www kropka youtube kropka com/watch?v=iXpM-v8MNAE z użyciem oporników, by użyć tylko 4 wejścia w Arduino.

    Całość będzie zasilana poprzez zasilacz buforowy z sieci 220V plus AKU 12V, do tego stabilizator obniżający napięcie na 5V do zasilania przekaźników itd.

    To mój pierwszy tak duży projekt i mam nadzieję, że pomożecie mi w poprawnym napisaniu kodu.

    Część już zacząłem, ale nie wiem, czy idę dobrą drogą. Najgorzej jest mi zrozumieć i napisać kod tak by system rozróżniał kiedy jest uzbrojony i po wykryciu ruchu dawał 10 sekunt na wbicie kodu, tak jak wspominałem raczkuję w tym temacie więc każda pomoc będzie na wagę złota.

    Być może sam projekt/schemat ma wady, to tutaj też moja prośba by je mi wskazać i pomóc zmodernizować całość tak by działała niezawodnie.

    Jak na razie to testy niestety kończą się fiaskiem, utknąłem i nie wiem co dalej zrobić .


    Będę wdzięczny za porady i pomoc

    Pozdrawiam
    Marcin

    Poniżej kod:

    Code: c
    Log in, to see the code
  • Suntrack
  • #2
    dondu
    Moderator on vacation ...
    Z reguły prosimy o więcej szczegółów, bo pytający nie dają nic, a pytają gdzie jest błąd.
    W Twoim przypadku zbyt długi post powoduje, że niewielu chce się go przeczytać :D :D :D
    I znajdź tu "złoty środek" ....

    Wybrałem więc najważniejszy fragment:

    killerus wrote:
    To mój pierwszy tak duży projekt i mam nadzieję, że pomożecie mi w poprawnym napisaniu kodu.

    Część już zacząłem, ale nie wiem, czy idę dobrą drogą. Najgorzej jest mi zrozumieć i napisać kod tak by system rozróżniał kiedy jest uzbrojony i po wykryciu ruchu dawał 10 sekunt na wbicie kodu, tak jak wspominałem raczkuję w tym temacie więc każda pomoc będzie na wagę złota.

    Być może sam projekt/schemat ma wady, to tutaj też moja prośba by je mi wskazać i pomóc zmodernizować całość tak by działała niezawodnie.

    Jak na razie to testy niestety kończą się fiaskiem, utknąłem i nie wiem co dalej zrobić .


    Schemat:

    1. Diody muszą mieć rezystory - mam nadzieję, że są :)

    2. Przekaźniki muszą mieć diody zabezpieczające - mam nadzieje, że są :)

    3. Kodu nie przeanalizuję, bo nie znam Arduino, ale jak na tak opisane funkcjonalności projektu, rzuca się w oczy brak funkcji dzielących zadania na mniejsze spójne fragmenty. Mając funkcje łatwo można robić maszynę stanów, czyli algorytm działania Twojego programu.

    4. Analizując przyczyny problemów z programem należy rozbijać je na poszczególne problemu. Napisanie, że testy są negatywne, daje nam tyle wiedzy ile ma lekarz, gdy pacjent mu powie, że jest chory :)

    Zapewne, ktoś rzuci okiem na Twój kod, ale powinieneś zacząć od punktów 1-2, ale przede wszystkim punkt 3. Gdy już podzielisz program na funkcje i rozrysujesz sobie na kartce algorytm, wtedy wszystko okaże się łatwiejsze.

    Jeżeli wtedy coś nie będzie działało, to łatwo zlokalizujesz lub zlokalizujemy problem.
  • Suntrack
  • #3
    killerus
    Level 11  
    Dziękuje za odpowiedź.

    1. Diody oczywiście są podłączone przez rezystory (na schemacie nie zostało to uwzględnione :P)

    2. Przekaźniki posiadaja diody zabezpieczające, są to gotowe zestawy przekaźników do podpięcia pod Arduino.

    3. Z kodem miam największy problem i w tym temacie szukam właśnie podpowiedzi i praktycznych porad, bo tutaj poległem.

    4. Co do testów to nie potrafię sobie poradzić jak program ma wiedzieć, że został wprowadzony kod aktywujący, lub deaktywujący alarm i tym samym uzbroić, lub rozbroić alarm, bądź wyłączyć wyjącą syrenę.
  • #4
    killerus
    Level 11  
    Ok, udało mi się dziś usprawnić kod i już działa reakcja na wpisanie poprawnego hasła.

    Wbijając 123456 i # aktywujemy, lub deaktywujemy reakcje na odczyt czujki PIR. Po wykryciu ruchu mamy ok 10 sek. na wpisanie hasła by wyłączyć centralkę.

    Wbijając kod 1234 aktywujemy bezzwłoczną reakcję na czujnik laserowy. Tym samym kodem wyłączamy ten czujnik/alarm.

    Teraz musze popracować nad komunikacją poprzez moduł SMS.

    Poprawiony kod poniżej, może komuś się przyda do podobnego projektu.
    Jak najbardziej zapraszam i zachęcam do współpracy :)

    Code: c
    Log in, to see the code
  • #5
    OpenUNITRA
    Level 12  
    Dorzucił bym do projektu moduł czasowy RTC, WIFI z 4.0-4.02 lub więcej BlueTooth na jakimś ESP8266,ESP8255 oraz rozszerzył o inne niebezpieczeństwa dla domu, tj. nieszczelna instalacja gazowa, zalanie wodą czy klimatycznie powiązane jak huragan, orkan, lokalna trąba powietrzna która może wyrządzic nie miejsze szkody jak włamanie.

    Zamiast hasłą opcja smartowej karty z chipem lub rfid.

    Co najważniejsze brak wskazanaia zasilania zasilanie zewnętrzne, wewnetrzne z baterii lub akumulatora, stan naładowania w procentach, w pasku, stan połączenia z GSM-em z ikonką, znakiem szczególnym dla wyświetlaczy alfanumerycznych, jest zasięg , nie ma lub zmina taryfy operatora i automatyczne odłączenia klienta od sieci GSM.

    Dalej to tylko przejście na modul mini MEGA2560 ratuje i pamięciowo, i obslugą większej ilości czujników, także panel wyświetlacza LCD mógł by się zmienić na niewielki wyświetlacz OLED, TFT nawet z dotykiem.

    W kodzie jak już zauważył jeden z przedmówców brakuje strukturek i procedurek np. część kodu wrzucić pod procedure status_alarmu, część pod procedure konfiguracja_alarmu , wtedy kod jest bardziej przejrzysty.