Opiszę dzisiaj jak zrobić licznik impulsów. Ja wykorzystuję go do liczenia ilości zużytej wody, oraz odczytu stanu licznika wody. Kolejny licznik pokazuje zużycie ekogroszku w kg w ciagu dnia, tygodnia, miesiąca i roku.
Najpierw sprzęt. Ja używam Wemos d1. Wykorzystałem GPIO12 (D6) oraz GPIO13 (D7) z racji, że są blisko pinu z napięciem 3,3V. Ten pin potrzebujemy do stworzenia pull up (poczytajcie w internetach), czyli łączymy pin 3,3v rezystorem 4,7 kom z wejściem D6 i drugim rezystorem z wejściem D7. U mnie wygląda to tak
Do pomiaru ilości wody założyłem za głownym licznikiem wody, dodatkowy licznik taki jak na zdjęciu. Kupiłem na Allegro za jakies 70zł. Ma on wyjście impulsowe (1 impuls na 1l wody). Wystają z niego 2 przewody. Jeden podpinamy do wejścia wemosa D6, a drugi do masy oczywiście też w wemosie.
Drugi mój licznik to ilość zużytego ekogroszku w podajniku pieca.Mam podajnik tłokowy, więc założyłem wyłącznik krańcowy
w takim miejscu, że gdy tłok się wysuwa to na chwilę dotyka krańcówkę, która przepuszcza impuls. Z wyłacznika krańcowego podłączamy przedowy do D7 i masy. Potrzebujemy jeszcze zasilanie 5V. Mozemy podpiąć łądowarkę na micro USB (Wemos na port microUSB), lub dołożyć mały transformatorek AC-DC 230V na 5V.
Sprzęt mamy ogarnięty, to teraz soft. Wgrywamy kablem przez micro USB soft z https://powiedz.co/ota/ Gniazdo. Aby zaczął rozgłaszać sieć zwieramy na jakies 5s do masy wyjście D3(GPIO0). Po dodaniu do bramki wchodzimy na moduł po jego nr IP i dalej w konfiguracja -konfiguracja modułu, wybieramy modył Generic (18), klikamy zapisz, wchodzimy jeszcze raz i wybieramy dla D6 i D7 Licznik
Zapisujemy i na głownym menu mamy już widoczne liczniki
Wchodzimy teraz w konsolę i wpisujemy:
CounterType 0 będzie zliczał ilość impulsów, a nie czas trwania impulsu. Tak naprawdę jest to domyślnie ustawione.
Ważne polecenie to CounterDebounce które niweluje nam odbicia, czyli gdy impuls trwa za długo może go policzyć kilka razy. Ustawiamy jak długo może trwać nasz impuls. Z racji, że to ustawienie jest globalne dla wszystkich liczników na urządzeniu to musimy iść na kompromis. Mój impuls od licznika wody trwa jakies 100ms, ale od podajnika ekogroszku około 2s. Nie ustawimy na 2s, bo mogą nam się nie zliczać wszystkie impulsy od licznika wody, więc ja wpisałem CounterDebounce 300 przez co woda liczy się dobrze, ale każde podanie ekogroszku liczy się jako 2 impulsy (wciśnięcie krańcówki i odpuszczenie). Załatwimy ten problem już w samej bramce.
Jeżeli chcemy ustawić stan licznika np. wody to służy do tego polecenie Counter Counter 75284 ustawi nam taki stan licznika. Jeżeli chcemy zrezetować to poprostu wpisujemy Counter 0.
Na module mamy już wszystko.
Przechodzimy do bramki Aj-Speaker. Liczniki nam wykryło i wszystko pięknie, ale co nam po samych odczytach. Co mi po ilości podań podajnika i to liczonych podwójnie albo stanu licznika wody. Bardziej mnie interesuje ile kg ekogroszku poszło mi w tym tygodniu, albo ile wody w danym miesiącu lub nawet dniu (napełnianie basenu). No to do dzieła.
Najpierw zajmijmy się przerobieniem impulsów od podajnika ekogroszku na kg. W moim przypadku 4 podania to 1 kg ekogroszku. Licznik impulsy liczy 2 na jedno podanie, więc 1kg to 8 impulsów. Wchodzimy w plik sensor.yaml i dodajemy wpis:
- platform: mqtt
name: “Ekogroszek”
state_topic: “Liczniki_DC0AF2/tele/SENSOR”
value_template: “{{value_json[‘COUNTER’].C1 |float / 8 }}”
unit_of_measurement: “kg”
state_topic bierzemy z konsoli
szukamy wiersza z topic/tele/SENSOR
Po ponownym uruchomieniu bramki mamy coś takiego
Z wodą nic nie mieszamy, bo liczy prawidłowo.
Teraz zrobimy podziały na dni, tygodnie, miesiące i lata.
w pliku configuration.yaml dodajemy wpis
utility_meter:
dzienny_licznik_ekogroszku:
source: sensor.ekogroszek
cycle: daily
tygodniowy_licznik_ekogroszku:
source: sensor.ekogroszek
cycle: weekly
miesieczny_licznik_ekogroszku:
source: sensor.ekogroszek
cycle: monthly
roczny_licznik_ekogroszku:
source: sensor.ekogroszek
cycle: yearly
dzienny_licznik_wody:
source: sensor.liczniki_counter_c2
cycle: daily
tygodniowy_licznik_wody:
source: sensor.liczniki_counter_c2
cycle: weekly
miesieczny_licznik_wody:
source: sensor.liczniki_counter_c2
cycle: monthly
roczny_licznik_wody:
source: sensor.liczniki_counter_c2
cycle: yearly
domyślne sensory jakie nam powstały to sensor.liczniki_counter_c1 i sensor.liczniki_counter_c2. Dla ekogroszku zmieniliśmy sensor na sensor.ekogroszek i tego używamy. Dla wody nic nie ruszaliśmy więc używamy domyślnego.
Efekt końcowy
Ja dla ekogroszku zmieniłem jeszcze żeby rok zaczynał mi się od września, a nie od stycznia, tak aby cały sezon grzewczy się łapał jako rok. robimy to w konfiguracja - dostosowywanie, szukamy roczny_licznik_ekogroszku i ustawiamy tak
Co do gazu to w liczniku to w tej wystającej części od dołu jest klapka, którą można otworzyć i zamontować tam mały kontaktron.
Ja osobiście nie mam gazu, ale widziałem kiedyś jak ktoś wydrukował sobie taki kwadracik i w środku umieścił taki mały kontaktron.
Jeżeli chodzi o licznik energii to możęmy przy liczniku założyć fotodiodę lub fotorezystor, który zlicza ilość mignięć diody licznikowej.