Dzień dobry, pierwszy post na tym forum
Nie mogłem znaleźć tu nigdzie takiego rozwiązania dla licznika Geigera.
Chodzi o liczenie impulsów w czasie na ESP8266.
Czyli np na GPIO02 "wpadają" impulsy i ich ilość jest zliczana w czasie 1 minuty, następnie prezentowana w postaci - "ilość impulsów/min" lub w przeliczeniu na uSv, w zależności od zastosowanej rurki.
W tych dziwnych czasach mam taki pomysł, żeby zrobić stacjonarny miernik promieniowania na podwórku, zasilany baterią słoneczną i własnie odczyt realizowany prze SUPLĘ. W efekcie może wystąpić powiadomienie lub włączenie po przekroczeniu pewnego progu.
Licznik Geigera na 5V już mam zrobiony i fajnie działa, licznik impulsów z GUI-Generic zaimplementowałem do ESP-01S, ale to za mało, trzeba pamiętać ile było i kiedy. W programowaniu asem nie jestem, to moje początki.
Czy możecie pomóc, może podchwycicie temat?
Ogólnie urządzeń Supla mam już zamontowanych kilkanaście w 3 obiektach i stąd pomysł na rozwinięcie o licznik Geigera w aplikacji.
Miłego dnia
Licznik impulsów (impulse counter) - Arduino IDE
-
- Posts: 19240
- Joined: Tue Jan 19, 2016 9:26 am
- Location: Paczków
„ ale to za mało, trzeba pamiętać ile było i kiedy” tym zajmuje się serwer i nie musisz tego implementować. Wystarczy jak coś będzie generowało impulsy.
-
- Posts: 3
- Joined: Sun Oct 09, 2022 7:09 pm
OK, chyba się nie rozumiemy, no chyba, że serwer ma robić obliczenia.
Informacja w aplikacji ma podawać wynik ilości impulsów w ciągu 60 s.
jeszcze lepiej, gdyby podawała wynik w uSv, czyli ilość impulsów/60s razy mnożna zależna od detektora.
Zatem proszę o pomoc w temacie.
Informacja w aplikacji ma podawać wynik ilości impulsów w ciągu 60 s.
jeszcze lepiej, gdyby podawała wynik w uSv, czyli ilość impulsów/60s razy mnożna zależna od detektora.
Zatem proszę o pomoc w temacie.
-
- Posts: 9693
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
Mi to wygląda podobnie do czujników prędkości wiatru. Tam obrót wiatraczka generuje impuls, i do użytkownika prezentowana jest prędkość wiatru (np. w m/s) na podstawie częstotliwości rejestrowanych impulsów.
Zerknij sobie na ten wątek: viewtopic.php?t=5131
Wydaje mi się, że temat wiatromierza pojawiał się też w innych miejscach.
Co do jednostek, to aktualnie w Supli nie ma kanału do tego typu pomiarów, więc pozostaje używanie innych kanałów (np. termometru). W przyszłości ma być dodany kanał pomiarowy ogónego przeznaczenia i on pozwoli na ustawienia dowolnych pomiarów i jednostek.
Zerknij sobie na ten wątek: viewtopic.php?t=5131
Wydaje mi się, że temat wiatromierza pojawiał się też w innych miejscach.
Co do jednostek, to aktualnie w Supli nie ma kanału do tego typu pomiarów, więc pozostaje używanie innych kanałów (np. termometru). W przyszłości ma być dodany kanał pomiarowy ogónego przeznaczenia i on pozwoli na ustawienia dowolnych pomiarów i jednostek.
Kiedy będzie Supla Offline Party / SOP#2025 ?
-
- Posts: 472
- Joined: Wed Oct 31, 2018 7:58 am
I know it's kind of archaeological survey but according to this:klew wrote: Wed Dec 02, 2020 12:38 pmOk, so it works, but SuplaDevice code is not thread safe. I was thinking about moving it to another core and putting into some loop, but this ticker will actually do the same and code looks more consistent with esp8266/avr implementation.elmaya wrote: Wed Dec 02, 2020 12:33 pm Ticker does not use interrupts but runs on core 0. "arduino uses core 1"
it works fine even when disconnected from the network "I have only noticed a small difference with the buttons, less response when disconnected but nothing dramatic"
Also consider completing "esp32_wifi.h" by adding:Code: Select all
void fillStateData(TDSC_ChannelState &channelState) { channelState.Fields |= SUPLA_CHANNELSTATE_FIELD_IPV4 | SUPLA_CHANNELSTATE_FIELD_MAC | SUPLA_CHANNELSTATE_FIELD_WIFIRSSI | SUPLA_CHANNELSTATE_FIELD_WIFISIGNALSTRENGTH; channelState.IPv4 = WiFi.localIP(); WiFi.macAddress(channelState.MAC); int rssi = WiFi.RSSI(); channelState.WiFiRSSI = rssi; if (rssi > -50) { channelState.WiFiSignalStrength = 100; } else if (rssi <= -100) { channelState.WiFiSignalStrength = 0; } else { channelState.WiFiSignalStrength = 2 * (rssi + 100); } }
I'll have still to make it thread safe.
I'll add this fillStateData implementation. It was waiting in my queue, but due to lack of working timers, I didn't have any motivation to work on those other topics, when main functionalities were not working at all
*source: https://docs.espressif.com/projects/esp ... timer.htmlRegister Timer interrupt handler, the handler is an ISR. The handler will be attached to the same CPU core that this function is running on.*
one can safely assume that using timers is 100% thread safe?