Arduino Polska Forum

Pełna wersja: Czujnik PIR + Termometr
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam wszystkich.


Od kilku dni staram się rozwiązać problem z czujnikiem ruchu. Mianowicie chodzi o to, że jest to mój projekt na licencjat z Informatyki i problemem ma być <b>wykrywanie temperatury jako ruch przez czujnik PIR</b>


Nie umiem sobie z tym poradzić. 

Czy ktoś jest w stanie mi pomóc?

Bardzo chętnie bym udostępnił kod programu, ale z racji, że bedą to potem przepuszczac przez antyplagiat to trochę się boję.

Na ten moment wygląda tak mniej więcej tak:

Czujnik DS18B20 czujka HC-SR501 i przekaźnik LOW SSR zapalający lampkę.

1. Kalibracja czujników
2. Jeśli jest ruch i temperatura ulega zmianie to nie aktywuj SSR
3. Jak zrobić, żeby SSR się aktywowało podczas gdy temperatura jest stała?
Może jestem głupi, ale nie bardzo rozumiem o co chodzi.
DS mierzy temperaturę, a PIR służy do pomiaru zmian temperatury.
Czym zatem jest "wykrywanie temperatury jako ruch przez czujnik PIR"???
A dobra, już wiem o co kaman.
Jeśli wejdziesz do pomieszczenia, to temperatura nie ulegnie zmianie (to znaczy nie od razu) i wtedy uaktywniasz SSR.
Jeśli wdmuchniesz do pomieszczenia powietrze o innej temperaturze, to PIR wykryje to jako ruch, ale temperatura ulegnie zmianie i nie aktywuj SSR.
Problemem jest DS. On nie pokaże tej zamiany temperatury, to znaczy pokaże za jakiś mocno długi czas. Jego obudowa ma sporą pojemność cieplną.
Powinieneś podać więcej szczegółów pracy. Na czy ma to wszystko polegać?
Postaramy się pomóc.
Dziękuje za odpowiedz Smile

Z racji, że buduje model, a w pracy muszę przedstawić problem oraz jego rozwiązanie, zmiana temperatury musi być nagła i widoczna.

Dotychczasowe testy:

Dmuchnąłem ciepłym powietrzem przy czujniku PIR i ten aktywował SSR.

Co chce osiągnąć: 

Termometr ma za zadanie zablokować włączenie się SSR w momencie nagłej zmiany temperatury, takiej jak to dmuchnięcie ciepłym powietrzem.
DS ma duża bezwładność, chyba ze nie zależy ci na czasie wykrycia wtedy po zadziałano PIR blokuj dopóki nie zrobisz co najmniej kilku odczytów i porównań do temperatury odczytanej przed zadziałaniem PIR
No tak. A to z kolei spowoduje wadliwe działanie systemu, gdyż ten będzie reagował ze sporym opóźnieniem.

W mojej głowie powstał drugi pomysł:

Wymyśliłem sobie stworzenie czujnika dualnego. PIR + RCWL-0516.

Chyba, ze sprawę można załatwić w jakiś inny sposób?

Byłby fajnie stworzyć prace licencjacka z czymś ... „nowym” lub chociażby oryginalnym.
Nie odpisałeś na pytanie wyżej "Powinieneś podać więcej szczegółów pracy. Na czy ma to wszystko polegać?"
Założenie pracy miało być takie, ze nagła zmiana temperatury nie będzie wykrywana jako ruch.

Wszystko miało działać przy pomocy czujnika PIR i termometru.

Więcej szczegółów, nie wiem jak mogę to lepiej opisac Sad

Może w ten sposób:

1. Nagly wzrost temperatury, nie wykrywaj jako ruch, chyba, ze ruch faktycznie jest.
2. Nagły spadek temperatury, nie wykrywaj jako ruch, chyba, ze ruch faktycznie jest.

Myślałem, żeby zrobić we floatcie 5 temperatur, wyciągnąć z tego srednia i jeśli temperatura zmierzona podczas wykrycia ruchu jest większa od średniej to nie uruchomić instrukcji związanej z zapaleniem światla i odwrotnie.
Przejdź na czujnik NTC lub obojętnie aby był rezystencjny i miał małą powierzchnię..

Ja bym to zrobił tak odczyty ADC uśredniał i przechował w zmiennej(lub tablicy) 10 takich pomiarów powinno być wystarczające, każdy następny odczyt usuwa ten pierwszy... Majac te dane jesteś bardzo szybko zobaczyć zmianę temperatury. NTC jest bardzo szybkim w odczycie czujnikiem. Jak i zmiany też juz są w miarę rozsądne..

Oczywiście wszystko na liczbach całkowitych... Float to zamulacz..
Ustalasz co jest nagła zmianą temperatury w danym odcinku czasu, np. 0.3oC/1s, zmienną lepiej trzymać w liczbach całkowitych, więc
const int nag=30;
Odczytujesz temperaturę co 1s, przed odczytem zapisujesz poprzednią do oldtemp, aktulaną do nowtemp, obie x100 i typu int, czyli temperatura 23.0625 powinna mieć wartość 2306 i już można łatwo sobie porównywać je ze sobą.
Jeżeli oldtemp-nowtemp>=nag, temperatur spadla o 0.3 stopnia
or
nowtemp-oldtemp >=nag, temperatura wzrosla o 0.3 stopnia
to naglazmianatemperatury=1 else naglazmianatemperatury=0
Sprawdzasz czy zadziałał PIR , jeżeli tak to PIR =1;
Jeżeli (PIR==1 and naglazmianatemperatury=0) zalaczeniePrzekaznikaSSR=1 else zalaczeniePrzekaznikaSSR=0;
Oczywiście trzeba jakoś odmierzać sobie rytm pracy w programie. Odczytana aktywacja PIR powinna być przechowywana do czasu gdy zostanie określone czy zmiana temperatury była nagła. Może to rodzić opóźnienie zadziałania. W DS zlecasz pomiar zaraz po odczycie, by był dostępny za około 750ms do kolejnego odczytu, czyli taka aktualna temperatura to jednak jest temperatura sprzed 1s. Powstaje kwestia czy aktywacja PIR sprzed 2s jeszcze ma jakieś znaczenie.
Jak sobie ustawisz odczyt z mniejszą rozdzielczością to można go robić częściej, ale można nie zauważyć tych nagłych zmian. Jak się wsadzi czujnik do tulejki ochronnej to dmuchnięcie też może być nie zauważone, a goły czujnik łatwiej uszkodzić.
Pięknie Wam dziękuje za pomoc.

Pomysł z tabelą wydaje się być bardzo rzetelny i ciekawy w opisaniu. Pomyśle jeszcze nad tym i dam Wam znać na co się zdecydowałem i czy daje to oczekiwany rezultat.