Licznik impulsów (impulse counter) - Arduino IDE

lotkowskij@gmail.com
Posts: 3
Joined: Sun Oct 09, 2022 7:09 pm

Post

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
User avatar
pzygmunt
Posts: 19240
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków

Post

„ 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.
lotkowskij@gmail.com
Posts: 3
Joined: Sun Oct 09, 2022 7:09 pm

Post

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.
User avatar
klew
Posts: 9693
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

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.
Kiedy będzie Supla Offline Party / SOP#2025 ?
vajera
Posts: 472
Joined: Wed Oct 31, 2018 7:58 am

Post

klew wrote: Wed Dec 02, 2020 12:38 pm
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);
    }
  }
Ok, 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.
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 :)
I know it's kind of archaeological survey ;-) but according to this:
Register Timer interrupt handler, the handler is an ISR. The handler will be attached to the same CPU core that this function is running on.*
*source: https://docs.espressif.com/projects/esp ... timer.html

one can safely assume that using timers is 100% thread safe?

Return to “Arduino IDE”