Skocz do zawartości

Problem z tcrt5000, prośba o pomoc


Pomocna odpowiedź

Napisano

Cześć, popełniłem taki czujnik na wodomierzu:

Podłączyłem do mojego starego arduino mega.

Wszystko działa ok, prawie...

Raz na promil zatrzymań kółeczka wodomierza, zatrzymuje się w takim miejscu, na granicy odczytu, że czujnik nabija impulsy z częstotliwością deboucingu. 

Pytanie jak to obejść? Dołożyć drugi czujnik i porównywać odczyty jak w enkoderze? Czyli flaga od pierwszego czujnika, czekamy na flagę od drugiego, dajemy impuls i resetujemy flagi?

Czy może jeszcze inaczej?

Wszelkie dziwne pomysły mile widziane. 

 

1 minutę temu, Harnas napisał:

Najprostsza opcja jaka mi przychodzi do głowy to dodanie histerezy. Ten czujnik ma w sobie Op Amp jako komparator, więc wystarczy dołożyć jeden rezystor między wyjściem a wejściem nieodwracającym.

Przybliż pomysł bo nie łapię, nadmieniam, że teraz sygnał czerpię z pinu z wyjściem cyfrowym nie analogowym.

  • Lubię! 1
3 minuty temu, Harnas napisał:

Najprostsza opcja jaka mi przychodzi do głowy to dodanie histerezy. Ten czujnik ma w sobie Op Amp jako komparator, więc wystarczy dołożyć jeden rezystor między wyjściem a wejściem nieodwracającym.

Chodzi o to, żeby różnica między Low i High była powyżej pewnej ustawionej granicy, wtedy nie będzie wyłapywać małych przeskoków między stanami?

  • Lubię! 1
9 godzin temu, farmaceuta napisał:

Ja bym odkręcił że trzy krany, odczytał max odstępy czasu między stanami i tak napisał kod żeby nic co ma większą częstotliwość nie nabijało impulsu...

No to wyobraź sobie, że ten odstęp czasu to np. 10s, zakładając, że zmieniam kółeczko na to nie liczące litrów tylko np.10l. Jest noc, wieczorem kółko zatrzymało się w "złym" miejscu, przez całą noc nie ma poboru i kółko stoi. Zadanie matematyczne ile litrów naliczy czujnik, pamiętając, że impuls to 10L.

Odpada.

A w tym przypadku nie pomoże zwyczajne zmniejszenie czułości czujnika - tak, aby sygnalizował, gdy ma przed sobą 100% czarnego pola?

14 godzin temu, Harnas napisał:

Najprostsza opcja jaka mi przychodzi do głowy to dodanie histerezy. Ten czujnik ma w sobie Op Amp jako komparator, więc wystarczy dołożyć jeden rezystor między wyjściem a wejściem nieodwracającym.

Zgadzam się, szersza pętla histerezy powinna pomóc (trzeba równolegle dolutować rezystor w dodatnim sprżeżeniu zwrotnym opamp'a lub komparatora).

Pozdrawiam

1 godzinę temu, Treker napisał:

A w tym przypadku nie pomoże zwyczajne zmniejszenie czułości czujnika - tak, aby sygnalizował, gdy ma przed sobą 100% czarnego pola?

Ustawiłem na minimalnym poziomie na którym wyłapuje "lusterko". Bez efektu.

14 minut temu, FlyingDutch napisał:

Zgadzam się, szersza pętla histerezy powinna pomóc (trzeba równolegle dolutować rezystor w dodatnim sprżeżeniu zwrotnym opamp'a lub komparatora).

Pozdrawiam

Elektronik ze mnie taki jak programista, ale postaram się dolutować. Sprawdzę jaki tam jest kompatator( nie jest czasem tam podwójny?)i do których nóżek go przylutować.

1MOm?

 

5 godzin temu, SOYER napisał:

Odpada.

A mi się podoba, tylko program trzeba napisać porządnie. Coś w stylu:

static time_t ostatni_impuls;
if (przyszedł_impuls) {
  if (millis() - ostatni_impuls > MIN_MILLIS) {
    dodaj_impuls();
  }
  ostatni_impuls = millis();
}

czy jakoś tak...

Pomysł z dwoma transoptorami też mi się podoba. Używałem tych transoptorków bez żadnej elektroniki (dwóch rezystorów nie liczę) i zwykłym wejściem analogowym w Arduino czy ESP8266 mierzyłem różnicę między odczytem przy zapalonej i zgaszonej diodzie. Działa całkiem dobrze (zarówno czujniki w robocie, jak i np. wyłącznik do lampki reagujący na zbliżenie dłoni). 

  • Pomogłeś! 1
50 minut temu, ethanak napisał:

Coś w stylu

Jeśli przyszedł impuls i czas od ostatniego impulsu jest większy od minimalnego ustawionego czasu(?), to wtedy inkrementuj zmienną.

Nie łapię jak to ma działać, bo to mi wygląda na zwykły debouncing, a to nie eliminuje problemu naliczania imulsów kiedy woda nie leci, a kółeczko zatrzymało się w "najgorszym" miejscu.

 

(edytowany)

Patrzyłeś na linkowany wpis? Niema znaczenia jaki komparator tam siedzi, może być nawet LM358, dajesz rezystor pomiędzy wyjście a wejście dodatnie, możesz zacząć od 1MΩ.

21 minut temu, SOYER napisał:

Nie łapię jak to ma działać, bo to mi wygląda na zwykły debouncing

Bo @ethanak podał przykład który można dopracować tak aby działało to z twoim licznikiem (czyli podał wędkę nie rybę), poza tym jest tutaj spory artykuł o maszynie stanów, również napisany przez @ethanaka. No i jest (chyba) w arduino biblioteka debouncing, dlaczego nie skorzystasz? 

Edytowano przez _LM_
  • Lubię! 1
19 minut temu, SOYER napisał:

to nie eliminuje problemu naliczania imulsów kiedy woda nie leci, a kółeczko zatrzymało się w "najgorszym" miejscu.

Jak nie eliminuje? Liczony jest czas od ostatniego impulsu, czyli jak przyjdzie za wcześnie to co prawda inkrementacji licznika nie będzie, ale czas zostanie zapamiętany.

 

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...