Edit: w zasadzie mam ogarnięte. Zrobiłem z tego binary_sensor (jeśli odległość mniejsza od X to ON jeśli większa to OFF). Stworzyłem grupę z dwoma czujnikami ruchu plus czujnik odległości (ON/OFF) żeby sterować światłem w łazience.
Edit2: @RobinI30 w sumie to przyda się pomoc. Obecnie mój kod wygląda tak: Czujnik.json (4,3 KB) (zmieniłem rozszerzenie na JSON bo TXT nie przechodzi)
Mam dwa problemy:
Warunek w pętli loop “if (newstate != laststate)” nie wiem dlaczego warunek zawsze jest spełniony. Trochę programuję i powinno według mnie działać to poprawnie, a tak nie jest. ZMiana stanu wysyłana jest za każdym przebiegiem pętli.
…inaczej w każdym obiegu pętli będziesz miał laststate = newstate - a musisz zapamiętać tylko raz w momencie zmiany stanu
…ale na ten delay dostałem wysypki.
Ja stosuje harmonogram zadań, nic się nie blokuje loop się kręci z pełną prędkością.
Wywołuje tylko taski co określony czas. Oczywiście zadbać trzeba aby taski były też nieblokujące.
//*****scheduler*************************************
unsigned long previousMillis = 0;
const long sec = 1000;
const uint8_t timeout1 = 1; //time proces1 [sec]
const uint8_t timeout2 = 250; //time proces2 [sec]
boolean proces1 = false;
boolean proces2 = false;
uint8_t time1 = 0;
uint8_t time2 = 0;
void Scheduler() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis < sec) {
return;
}
previousMillis = currentMillis;
if (time1 < timeout1) {
time1 += 1;
}
else {
proces1 = true;
}
if (time2 < timeout2) {
time2 += 1;
}
else {
proces2 = true;
}
}
//************************************************
void loop()
{
Scheduler();
if (proces2 == true) {
// tu dopisujesz to co ma się wykonać co okres timeout2
time2 = 0;
proces2 = false;
}
if (proces1 == true) {
// tu dopisujesz to coma wykonać co okres timeout1
time1 = 0;
proces1 = false;
}
}
Rozglądałem się trochę pod kątem tego zastosowania.
Problem jest taki, że z drugim serialem w przypadku odczytu nie jest tak różowo.
Ponieważ we wszystkich płytkach w USB jest on trwale zajęty przez konwerter USB<>UART, a “golas”
wymaga dodatkowego “programatora”.
Znalazłem jeden zestaw co by mógł to pogodzić
Małe wymiary, konwerter jest na osobnej płytce i po zaprogramowaniu kanapkę można rozpiąć i podłączyć ME007YS.
Na czas uruchamiania ( gdy potrzebujesz debug) można te dwie płytki połączyć kabelkami w taki sposób aby mieć debug i odczyt czujnika na jednym sprzętowym UART.
Tx jako debug, a Rx odczyt z czujnika.
Konwerter pozostanie jako gratis dla innych zastosowań, jeśli się tym bawisz to wiesz jak się nieraz przydaje.
Na spokojnie przejrzałem również program i powiem … nie widzę tam błędu
Może powodem takiego zachowania jest “pływanie” pomiarów? … nie jestem w stanie w głowie przeprowadzić symulacji.
Jednak na pomiary wprowadzi bym histerezę
Analizowałem schemat Twojej płytki NodeMCU V3 i to powinno kurczę działać nawet dokładnie z tym projektem.
Napisałem wcześniej, że to niewłaściwe podłączenie z powodu tego, że D3(GPIO0) jest już zajęte przez konwerter USB na płytce… ale tego nie podłączamy?
Popytam trochę:
Czujnik na pewno z wyjściem UART (są dwie wersje)?
Czy udało Ci się czymkolwiek odczytać coś z tego czujnika?
Edit:
Przyszedł czas na odświeżenie wątku. Remont łazienki przeszedł z status planowany do statusu projektowania. Obecne rozwiązanie sprawuje się dobrze, więc będę szedł dalej tą ścieżką, ale jak wiadomo apetyt rośnie w miarę jedzenia. Do obecnego rozwiązania planuję dołożyć paski ledowe oraz jeszcze jeden czujnik odległości przy umywalce. Mam, więc do was pytanie, jakie ledy i sterownik zastosować oraz jaki profil z możliwością montażu pod prysznicem. Rozważam paski WS2812B patrzyłem na sterownik wLightBox - sterownik oświetlenia LED RGBW - BleBox ale niestety integracja HA nie obsługuje tego sterownika (BleBox devices - Home Assistant (home-assistant.io) może pójść w własny projekt oparty o jakieś ESP lub Arduino. Druga sprawa czy zmienić czujki ruchu bezprzewodowe na przewodowe i zastosować jeden moduł ESP32 do obsługi czujników ruchu i odległości (może nawet jeden kontroler do wszystkiego czujniki + ledy). Może ktoś ma już podobne rozwiązanie i coś podpowie.
Podsumowanie wersji Beta.
Przyszedł czas na podsumowanie projektu “Inteligentne oświetlenie w łazience”. Po kilku dniach działania wprowadziłem niewielki korekty i modyfikacje. W obecnej chwili rozwiązanie sprawdza się bardzo dobrze. Wszyscy zadowoleni a muzyczka uprzyjemnia pobyt w łazience. A teraz czas na podsumowanie sprzętu i automatyzacji:
Sprzęt
2 x Aqara Motion Sensor
1 x Aqara door and window sensor
1 x Ultradzwiękowy czujnik odległości HC-SR04 (docelowo ME007YS jak ogarnę odczyt na esp8266)
1 x ESP8266
1 x Google Home Mini
1 x Włącznik Światła 1 Klik. ZigBee TUYA
Konfiguracja i oprogramowanie
Zapalanie światła odbywa się na podstawie wykrycia otwarcia drzwi lub (jeśli nie zamknięte) na podstawie wykrytego ruchu z stworzonej grupy czujników ( 2x czujnik ruchu + czujnik odległości)
Cześć,
Przymierzam się do swojej pierwszej automatyzacji - padło na światło w łazience
Chce aby światło zapalało się po wejściu do łazienki - pewnie na podstawie czujki ruchu. W nocy natężenie światła ma być zmniejszone, żeby nie oślepnąć.
Zastanawia mnie tylko kwestia posiedzenia na kibelku lub korzystanie z prysznica - czy wtedy czujka też wyłapie obecność w łazience?
Druga kwestia, to jeżeli chce coś takiego zrealizować, to powinienem umieścić jeszcze jakąś kostkę/przekaźnik przed samą żarówką?
hmmm @Marcin_K pięknie opisane czujniki i zadania… ;-DDDD przeczytałem opis żonie i mówi w zasadzie wystarczyłby jeden czujnik reagujący na ciepło ludzkiego ciała
PIR (ang.Passive Infra Red - pasywny czujnikpodczerwieni) - czujnik elektroniczny służący do wykrywania ruchu. Powszechnie stosowany w systemach alarmowych, systemach automatycznego załączania oświetlenia i wentylacji itp.
Wykrywanie ruchu opiera się na bardzo precyzyjnym pomiarze temperatury. Każda zmiana temperatury na wyższą lub niższą (np. podmuch zimnego powietrza do nagrzanego pomieszczenia) jest traktowana jako alarm. Głównymi elementami czujnika PIR jest pyroelement (detektor podczerwieni) i soczewka Fresnela lub lustro.
W celu eliminacji tzw. fałszywych alarmów stosuje się bardzo skomplikowane algorytmy i montuje 2 lub 4 pyroelementy na bazie azotku galu (GaN) lub azotanu cezu (CsNO3).
@Mariusz_Kuciński
Wygląda i funkcjonalność dość ciekawa, oby był wart swojej ceny.
Widzę że ma też Wykrywanie upadku (Fall detection) w końcu żona będzie wiedziała jak upadniesz wracając po imprezie
Czekam na recenzje jak już go kupisz.
Wyjaśnienie było do czujnik reagujący na ciepło ludzkiego ciała