logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Bascom] Kod dla czujnika odbiciowego IR - ignorujące światło słoneczne

Justyniunia 07 Gru 2023 19:33 1323 57
  • #1 20851122
    Justyniunia
    Poziom 36  
    Cześć.

    Może mi ktoś wyjaśnić jak ma wyglądać kod (albo chociaż logika), dla czujnika IR, ale tak, żeby odbiornik wykrywał to co nadaje nadajnik, a nie światło słoneczne?

    1 Nadajnik = świeci, Odbiornik = nie odbiera - OK nie ma przeszkody
    2 Nadajnik = nie świeci, Odbiornik = nie odbiera - OK nie ma przeszkody
    3 Nadajnik = świeci, Odbiornik = odbiera - OK jest przeszkoda, lub (jest światło słoneczne, czyli problem)
    4 Nadajnik = nie świeci, Odbiornik = odbiera - (?) (światło słoneczne, problem)

    Wszystkim ma sterować jeden uC
    LED IR, Fototranzystor, LED (kontrolka)

    Ma ktoś jakiś pomysł?
  • #2 20851190
    Justyniunia
    Poziom 36  
    @ElektrodaBot
    Jak wygląda kod w BASCOM do bariery optycznej, lub transoptora refleksyjnego z modulowaną wiązką?
    uC Attiny13
    Portb.2 - nadajnik IR
    Portb.0 - LED - kontrolka
    Portb.3 - odbiornik IR
  • #3 20851195
    ElektrodaBot
    AI od OpenAI ChatGPT4
    Justyniunia napisał:
    Jak wygląda kod w BASCOM do bariery optycznej z modulowaną wiązką?
    Portb.2 - nadajnik IR
    Portb.0 - LED - kontrolka
    Portb.3 - odbiornik IR
    Aby stworzyć kod obsługujący barierę optyczną z modulowaną wiązką IR w BASCOM, musimy wykonać kilka kroków:

    1. Modulacja sygnału na nadajniku IR: Sygnał IR jest często modulowany, aby uniknąć zakłóceń z otoczenia. Standardową częstotliwością dla pilotów IR jest 38 kHz, więc będziemy chcieli modulować naszą wiązkę na tej częstotliwości. To wymaga użycia timera i odpowiedniego przerwania w mikrokontrolerze do wygenerowania PWM (Pulse Width Modulation).

    2. Detekcja na odbiorniku IR: Odbiornik musi być w stanie wykryć modulowaną wiązkę IR i odpowiednio zareagować, np. poprzez włączenie lub wyłączenie LED.

    3. Implementacja logiki sterowania: Na podstawie sygnału z odbiornika IR, mikrokontroler powinien sterować diodą LED w taki sposób, aby sygnalizować, czy wiązka IR jest widoczna, czy nie.

    Oto przykładowy szkic kodu realizujący powyższe założenia:

    Kod: Text
    Zaloguj się, aby zobaczyć kod


    W tym kodzie:

    - Używamy Timera1 do generowania sygnału PWM o częstotliwości 38kHz dla nadajnika IR.
    - Dioda LED kontrolna jest włączona, kiedy odbiornik IR nie wykrywa sygnału (zakładając, że sygnał jest niski, gdy wiązka jest przerwana).
    - Konfigurujemy odpowiednie piny mikrokontrolera jako wejścia i wyjścia.

    Zwróć uwagę, że ten kod to tylko przykładowy szkic i może wymagać modyfikacji, aby działał z Twoim konkretnym sprzętem i potrzebami. Jeśli masz jakiś specyficzny odbiornik IR, musisz też upewnić się, że jest on wrażliwy na częstotliwość 38 kHz i odpowiednio zaimplementować jego obsługę w kodzie.

    Mam nadzieję, że ten przykład będzie dla Ciebie dobrym punktem wyjścia. Jeśli masz dodatkowe pytania lub potrzebujesz dalszych wyjaśnień, daj znać!
    Możesz mnie wywołać w każdym temacie pisząc @ElektrodaBot. Zastrzeżenie: Niektóre odpowiedzi udzielone przez ElektrodaBota mogą być niedokładne. Elektroda nie ponosi odpowiedzialności za dokładność, rzetelność ani kompletność prezentowanych informacji. Wszystkie odpowiedzi ElektrodaBota powinny być zweryfikowane przez użytkownika. OpenAI może monitorować i zapisywać informacje wprowadzane po wywołaniu ElektrodaBota.
  • Pomocny post
    #4 20851205
    kulmar
    Poziom 31  
    Po pierwsze nie baw się w sterowanie fotodiodą IR tylko zastosuj fabryczny odbiornik scalony jaki jest stosowany w sprzecie RTV. Takie odbiorniki są ogólnie dostępne (poszukaj) i wymagają sygnału IR o określonej częstotliwości. Poczytaj sobie dokumentację takiego układu. Najprostsze sterowanie to nadawanie "paczek" impulsów o częstotliwości dostosowanej do użytego odbiornika, a po stronie odbiorczej - odczytuje się już tylko obwiednię tego sygnału - czyli impulsy o czasie trwania nadawanych "paczek". I taki system jest odporny na tło - czyli np. światło słoneczne.
  • #5 20851213
    TvWidget
    Poziom 38  
    1. Natężenie zewnętrznego oświetlenia może się zmieniać o wiele rzędów wielkości.
    2. Emisja diody IR jest bardzo mała w porównaniu do tego co emituje słońce.
    Najpierw trzeba zadbać aby sprzętowo układ odbiorczy miał szanse wykryć właściwy sygnał IR. Czyli aby jego dynamika była odpowiednio duża.
    Następnie trzeba rozróżnić niewielki sygnał z diody IR na tle tego co emituje słońce. Zwykle w tym celu moduluje się jasność diody IR. W odbiorniku wzmacnia się składową zmienną, czasem stosuje się filtr pasmowy i wykrywa się pojawienie się sygnału o określonej częstotliwości.
  • #6 20851216
    Justyniunia
    Poziom 36  
    Kolego - Gotowe scalone odbiorniki dla moich potrzeb są gigantycznych rozmiarów, a malutkich elementów IR mam pod dostatkiem.
    Poza tym ten uC będzie robił jeszcze inne rzeczy, na razie chcę ogarnąć modulację wiązki.
    Wybór jest świadomy i żadne inne rozwiązania nie wchodzą w grę i nie będą brane pod uwagę.
  • Pomocny post
    #7 20851218
    kulmar
    Poziom 31  
    Justyniunia napisał:
    Kolego - Gotowe scalone odbiorniki dla moich potrzeb są gigantycznych rozmiarów, a malutkich elementów IR mam pod dostatkiem.
    Poza tym ten uC będzie robił jeszcze inne rzeczy, na razie chcę ogarnąć modulację wiązki.
    Wybór jest świadomy i żadne inne rozwiązania nie wchodzą w grę i nie będą brane pod uwagę.

    No cóż mogę na to odpowiedzieć? OK. to Twój projekt.
  • #8 20851225
    Justyniunia
    Poziom 36  
    Przepraszam, może to źle zabrzmiało - dziękuję Ci za chęć pomocy :)
    Jeśli nie da się tego wykonać tak,żeby efekt był zadowalający - po prostu poszukam innych czujników.
    Póki co układ działa na prostej zasadzie - dioda IR świeci cały czas, a czujnik odbiera odbitą wiązkę lub nie.
    W jasny dzień robi się problem, bo odbiera też światło dzienne.

    Gdyby ta wiązka była ciągiem impulsów, a stałe światło było by ignorowane - myślę że mogło by zadziałać, tylko jak to napisać w bascomie?

    A taka suszarka do rąk z czujnikiem IR? W słoneczny dzień też działa...
    Mój czujnik nie jest wystawiony na światło słoneczne, też jest schowany, ale brak modulacji powoduje to, że reaguje na wszystko.
  • #9 20851252
    kulmar
    Poziom 31  
    Justyniunia napisał:

    Gdyby ta wiązka była ciągiem impulsów, a stałe światło było by ignorowane - myślę że mogło by zadziałać, tylko jak to napisać w bascomie?

    Nie znam bascoma. Twój procesor ma sprzętowy PWM? To "strzelaj" włączają PWM o określonej częstotliwości i wyłączając go. Zdaje się że ElektrodaBot coś Ci tam podpowiada.
  • #10 20851258
    TvWidget
    Poziom 38  
    Zwróć uwagę to co napisałem jako p.1.
    Możesz ustawić tak parametry pracy np. fototranzystora aby włączał się gdy oświetli się go światłem z diody IR. Jeśli dla tych samych warunków padnie na niego 1000 razy silniejsze światło słoneczne to fototranzystor pozostanie nasycony. Dodatkowe oświetlanie go diodą IR nic już nie zmieni. Można jednak zmodyfikować warunki pracy fotoelementu tak aby nawet przy silnym oświetlaniu się nie nasycał. Jednak w takim przypadku drastycznie maleje czułość. Czyli właściwy sygnał z diody IR będzie 1000 razy słabszy. Potrzebny jest odpowiedni wzmacniacz.
    Jeśli chodzi o proste rozwiązania to można stosować fotoelementy z filtrem optycznym na odpowiedni zakres i małym kącie widzenia. W znaczący sposób poprawi to odporność na zewnętrzne oświetlenie.
  • #11 20851287
    Justyniunia
    Poziom 36  
    Elementy to komplety, nadawczy przezroczysty, odbiorczy czarny (filtr niby jest)

    A gdyby puszczać paczki impulsów przez nadajnik i zliczać je odbiornikiem?
    Przynajmniej jak słonko zaświeci, to nie wykryje mi tego jako przeszkody... Już lepiej tak.
  • #12 20851294
    TvWidget
    Poziom 38  
    Filtr musi być na odpowiedni zakres widma a nie jakiś.
  • #14 20851327
    TvWidget
    Poziom 38  
    To jest transoptor odbiciowy ?
    Nie ma jednego prostego rozwiązania. Samym oprogramowaniem nie uda się rozwiązać problemu.
  • #16 20851340
    TvWidget
    Poziom 38  
    Jaki to konkretnie element ?
    Z jakiej odległości chcesz wykrywać przeszkodę ?
    Z jakiego materiału wykonana jest przeszkoda ?
    Jak szybko ma być wykrywana przeszkoda ?
  • #17 20851359
    Justyniunia
    Poziom 36  
    Typu elementów nie znam. Pochodzą z serwisu HP (drukarki)
    Odległość może być i kilka mm (powiedzmy max 5mm)
    Metal (ciemny, ale błyszczący)
    Chcę wykrywać koła małych pociągów.

    Męczę bułę z tymi czujnikami i ciągle do tego wracam.

    Miał być już Hallotron i magnes - wiązka pola przerywana kołami, ale okazało się, że koła wykonane są z metalu niemagnetycznego.

    Nie wiem już co wymyślić, bez ŻADNEJ ingerencji w pojazdy.
  • #18 20851431
    TvWidget
    Poziom 38  
    Stosując przypadkowe elementy zwykle uzyskuje się przypadkowe efekty.
    Czujnik odbiciowy z zasady jest najmniej odporny na zewnętrzne oświetlenie. Znacznie prościej będzie zrobić czujnik reagujący na przerwanie wiązki. Zasady są dla obu jednakowe.
    Najpierw trzeba zadbać o tor optyczny. Kąty świecenia diody IR i kąt widzenia fototranzystora (zakładam, że masz taki element) muszą być dobrane dla odległości i wielkości wykrywanego elementu.
    Tak trzeba dobrać punkt pracy fototranzystora aby nie nasycał się w przypadku zewnętrznego oświetlenia.
    Prąd diody IR powinien być modulowany. Sygnał fototranzystora można wpuścić do ADC i próbkować go okresowo. Najczulszy algorytm to aproksymacja wyników pomiarów funkcją A*sin(ωt+Φ). Gdzie ωt jest znane i wynika z częstotliwości modulacji diody IR. Obliczone A to będzie wartość odbitego od przeszkody sygnału.
  • #20 20851627
    ArturAVS
    Moderator
    Justyniunia napisał:
    Miał być już Hallotron i magnes - wiązka pola przerywana kołami, ale okazało się, że koła wykonane są z metalu niemagnetycznego.

    Może prościej będzie zastosować miniaturowy kontaktron (lub Halla) a do modelu we właściwym miejscu przykleić magnes?
  • #21 20851884
    landy13
    Poziom 31  
    Justyniunia napisał:
    Miał być już Hallotron i magnes - wiązka pola przerywana kołami, ale okazało się, że koła wykonane są z metalu niemagnetycznego.

    Jeśli metal niemagnetyczny, to może czujnik indukcyjny lub pojemnościowy? Tylko nie wiem czy istnieją aż tak miniaturowe.
  • #22 20851896
    michal.rogaczewski
    Poziom 28  
    Najbardziej prymitywna czujka odbiciowa, która będzie w miarę odporna na światło zewnętrzne polega na kluczowaniu diody IR i porównywanie odczytów z fotodiody/fototranzystora dla świecącej i zgaszonej diody IR, jeżeli różnica jest większa niż X - możemy założyć ze światło wraca do nas. Działa to tylko pod warunkiem, że ten odbity sygnał jest zauważalny w sygnale fotodiody.
  • #23 20851921
    ArturAVS
    Moderator
    landy13 napisał:
    Jeśli metal niemagnetyczny, to może czujnik indukcyjny lub pojemnościowy? Tylko nie wiem czy istnieją aż tak miniaturowe.

    Nie pamiętam już dokładnie, ale koła modeli trakcyjnych mają średnicę poniżej 2 cm. Tak małych czujników indukcyjnych nie ma. Pewnym rozwiązaniem może być umieszczenie czujnika w pionie pod torem ale to już zależy od konstrukcji mechanicznej makiety.
  • #24 20852314
    ptero
    Poziom 24  
    Sygnał diody nadawczej powinien być modulowany. A odbiorczej przepuszczony przez filtr na daną częstotliwość - np. 38kHz - są gotowe nadajniki i odbiorniki.
  • #25 20852429
    tos18
    Poziom 42  
    ArturAVS napisał:
    Tak małych czujników indukcyjnych nie ma.

    https://czujniki.com.pl/pcid1-5zpw55262m_czujnik_indukcyjny_sels_pcid1-5zpw55262m,3,178,3772
    powinien zmieścić się przy szynie od wewnętrznej strony toru.
    zerknij też na czujniki w obudowach F3 F4.

    model w skali HO ?

    A jeśli idziemy w optykę to op jednej stronie szyny dioda nadawcza sterowana paczkami impulsów 38kHz z małym wypełnieniem by impuls miał 1-2µs, paczki o długości około 100ms i 200ms przerwy.
    a po drugiej miniaturowy scalony odbiornik IR - są dość małe około 5x5mm np tsop2238
    https://www.tme.eu/pl/details/tsop2238/moduly-odbiorcze-ir/vishay/
    takie rozwiązanie jest odporne na światło widzialne i umożliwia tworzenie barier o prześwicie do kilku metrów.

    A może transoptor szczelinowy.
  • Pomocny post
    #26 20852570
    jarek_lnx
    Poziom 43  
    Żeby zrobić demodulację w uC potrzeba na wejście tego uC doprowadzić sygnał analogowy z fotodetektora i odjąć wartość odczytaną dla zgaszonej diody, od wartości dla zapalonej diody. Problemem będzie podłączanie fotodetektora do ADC tak żeby w szerokim zakresie zmian oświetlenia nie występowało nasycenie. W praktyce trzeba by dobrać rezystor na najwyższy poziom oświetlenia zewnętrznego.

    Lepszym rozwiązaniem jest dodanie nie do fotodetektora symulowanej indukcyjności (na idealnej indukcyjności spadek napięcia od prądu DC jest zerowy.
  • #27 20852646
    mpier
    Poziom 29  
    Witam,
    raczej nie ma co przesadzać z tym oślepianiem czujnika przez światło słoneczne. Czujnik od spodu zasłonięty będzie przez makietę, od góry przez pociąg a bardzo blisko z boku przez wykrywane koło. Jeśli masz transoptor podwójny w odpowiednim rozmiarze (albo zmontujesz dwa) to raczej musi zadziałać. Przy takim układzie na każdą oś masz 4 impulsy, jak z enkodera, więc fałszywe zliczenie jest mało prawdopodobne. Chyba.

    Pozdrawiam.

    Dodano po 10 [minuty]:

    Żeby nie było, że nie na temat:
    Możesz ustawić licznik na kilka kHz (nie wiem jak baskom sobie radzi) i w przerwaniu od zbocza (ryzykowne może się to okazać) odczytywać czas od ostatniego wyłączenia diody co powinno wyeliminować i tak nieprawdopodobne, fałszywe zliczenia, przy braku pociągu nad czujnikiem i przy bezpośrednim oświtleniu tego czujnika.
  • #28 20853006
    Justyniunia
    Poziom 36  
    Panowie, chyba juz wszystko zostało napisane.
    Dyskutujemy o rodzajach czujników i ich zasadach działania, a nikt nie zamieścił kawałka kodu.
    Od początku tylko o to proszę.

    Na razie chce przetestować tylko impulsowy przebieg na LED IR i jego odczyt, bez konkretnych częstotliwości, porównywania z tłem itd.

    Jest ktoś w stanie?

    Wszelkie dostępne możliwości jakie są używane na małej kolei znam.
    Łącznie z odcinkami izolowanymi i detekcją poboru prądu przez skład - mam pomysł na inne rozwiązanie, lecz nie mam pojęcia jak ma wyglądać od strony programowej.

    Jeszcze jedno małe pytanko.
    A coś na zasadzie detektora metalu?
    Czy jest opcja na wykrycie nie magnetycznego kółka poprzez np gotowy mały dławik, czy musi to być wielka okrągła cewka jak w wykrywacz?

    Dodano po 28 [minuty]:

    Dioda IR strzela impulsami detektor odbiera je, albo nie.
    Jest też licznik, który jeśli zliczy powiedzmy >10 takich impulsów zaświeca kontrolkę.
    Licznik jest zatrzymywany po przepelnieniu, ale też zerwany po upływie jakiegoś czasu.

    Na detektor świeci słońce - foto element jest nasycony, ale licznik nie zlicza. Nadjeżdża pociąg, nad detektorem robi się cień i detektor zaczyna wykrywać impulsy z led IR odbite od koła, czy podwozia i to chce sprawdzić.

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Coś takiego, chyba.
    Pozniej popróbuję...
  • Pomocny post
    #29 20853020
    TvWidget
    Poziom 38  
    1. Najważniejsze jest modulowanie świecenia diody IR. Od strony programowanej sprawa jest dość prosta. Trzeba wygenerować impulsy o częstotliwości kilku
    lub kilkudziesięciu kHz i przy ich pomocy włączać diodę IR.
    2. Jeśli elementy jakimi dysponujesz to fototranzystory to możesz zbudować taki odbiornik:
    [Bascom] Kod dla czujnika odbiciowego IR - ignorujące światło słoneczne
    Wartość R6 trzeba dobrać doświadczalnie. Przy oświetlaniu zewnętrznym zmierz napięcie na tym rezystorze. Nie powinno być większe niż 1/4 napięcia zasilania. Jak będzie większe to zmniejsz wartość rezystora.
    Dioda D3 nie jest konieczna. Zwiększa jedynie odporność na ew. zakłócenia jakie mogą pojawić się na zasilaniu.
    Tranzystor Q4 będzie okresowo zwierał nóżkę uP gdy fototranzystor oświetli się modulowanym światłem diody IR. Musisz pamiętać, że również np. żarówki LED mogą takie światło emitować.
    3. Jak coś zacznie działać to programowo można sprawdzać stan pinu wejściowego uP chwilę przed i chwilę po wygenerowanym impulsie do sterowania diodą IR.
  • #30 20853023
    Justyniunia
    Poziom 36  
    Kurcze, że też do głowy mi nie wpadło, żeby na "dzień dobry" odseparować się kondenstatorem od stałego poziomu.
    Kolego - jesteś wielki, a ja zaspana i zmęczona już tymi próbami :)

    Uwierz - wracam do tego tematu co jakiś czas od kilku lat i nigdy nie udało się usiąść, zacząć i skończyć.

Podsumowanie tematu

W dyskusji poruszono problem stworzenia kodu w BASCOM dla czujnika odbiciowego IR, który ignorowałby światło słoneczne. Użytkownik przedstawił cztery scenariusze działania nadajnika i odbiornika IR, a uczestnicy forum zaproponowali różne podejścia do rozwiązania problemu. Kluczowym rozwiązaniem jest modulacja sygnału IR na częstotliwości 38 kHz, co pozwala na odfiltrowanie zakłóceń świetlnych. Uczestnicy sugerowali użycie fabrycznych odbiorników scalonych, jednak autor preferuje wykorzystanie własnych elementów IR. Wskazano na konieczność odpowiedniego doboru komponentów, takich jak fototranzystory, oraz zastosowanie filtrów optycznych. W końcu, zaproponowano prosty kod do testowania impulsowego sygnału IR oraz metody detekcji sygnału na podstawie różnicy pomiędzy tłem a sygnałem odbitym.
Podsumowanie wygenerowane przez model językowy.
REKLAMA