Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Solved] Odróżnienie wiązki podczerwieni od wiązki światła białego przez fotodiodę IR

matej1410 17 Mar 2020 13:56 882 31
Tespol
  • #1
    matej1410
    Level 25  
    Witam.

    Borykam się z pewnym problemem.
    Otóż mam układ mikroprocesorowy w którym wykorzystuję ADC.
    Do tegoż ADC podpięty jest układ z fotodiodą IR.
    Wysyłam impulsy IR z diody nadawczej do fotodiody IR. Przetwornikiem sobie to wychwytuje. I wszystko jest fajnie, ale obok mam źródło światła w postaci ledów białych świecących światłem widocznym dla oka (barwa 5000K). Wiązka światła białego ma również składową czerwoną, którą fotodioda wychwytuje. Da się to jakoś odfiltrować, oddzielić?
  • Tespol
  • Helpful post
    #2
    Freddy
    Level 43  
    Tak - założyć filtr podczerwieni.
  • Tespol
  • #3
    matej1410
    Level 25  
    A istnieje taki filtr w postaci czegoś, co nakłada się na fotodiodę fi=3mm?
    Odróżnienie wiązki podczerwieni od wiązki światła białego przez fotodiodę IR
    Coś takiego mniej więcej.
  • Helpful post
    #4
    Freddy
    Level 43  
    Najczęściej jest to folia - w formie nakładki nie widziałem.
    Na niektórych pilotach było coś takiego - ma być bardzo ciemne.
  • #5
    matej1410
    Level 25  
    A może by temat ugryźć inaczej tzn. spróbować załatwić to programowo. Zdefiniuję problem. Mamy diodę IR nadawczą oraz fotodiodę odbiorczą. Obok siebie. Układ wykorzystuje efekt odbicia wiązki podczerwieni od obiektu i powrotu. Co jakiś czas pewien obiekt przesłania lub odsłania wiązkę podczerwieni, co przekłada się na to, że na wejściu ADC mikrokontrolera mamy albo 0V albo wartość różną od 0V. Jeśli na przetworniku mamy 0V czyli obiekt nie przesłania to mikrokontroler załącza źródło światła białego, które oprócz porządanego oświetlania pewnego obiektu, dodatkowo rzuca promienie światła na fotodiodę IR co powoduje, że na ADC pojawia się wartość różna od 0V a to z kolei wyłącza źródło światła białego. Tym sposobem mamy sprzężenie zwrotne oraz niepożądany efekt naprzemiennego włączania się oraz wyłączania źródła światła. Próbowałem różnych sposobów, aby rozprawić się z tym efektem, ale bezskutecznie. Może szanowni Koledzy mają jakiś pomysł rozwiązania takiego problemu?
  • Helpful post
    #6
    Freddy
    Level 43  
    Zrób coś takiego jak w pilotach do urządzeń - nośna i na nią naniesiona informacja.
  • Helpful post
    #8
    Marian B
    Level 37  
    Freddy wrote:
    Zrób coś takiego jak w pilotach do urządzeń - nośna i na nią naniesiona informacja.

    I to jest prawidłowe rozwiązanie problemu.
    Koledze po prostu jest potrzebna bariera optyczna nie wrażliwa na wpływ obcego światła, i to bez różnicy czy to "obce" światło jest widzialne, czy nie widzialne.
    Taką właściwość można uzyskać tylko stosując modulację fali nośnej (podczerwieni) sygnałem użytkowym w nadajniku, oraz specjalizowany scalony odbiornik podczerwieni np. typu TSOP..., reagujący w odpowiedni sposób na ten zmodulowany sygnał.
    Taki odbiornik (TSOP...) jest nie wrażliwy np. na pełne światło słoneczne, lub inne nie zmodulowane światło, a poprawnie odbiera falę nośną zmodulowaną sygnałem użytkowym.
    Tu przykład takiej bariery całkowicie nie wrażliwej na światło obce (słoneczne):
    https://www.elektroda.pl/rtvforum/viewtopic.php?p=10606592#10606592

    Po odrzuceniu wszystkiego co "nie potrzebne" można ją zastosować do własnych celów. W tym przykładzie chodzi mnie o pokazanie w jaki sposób można prosto zrobić modulacje fali nośnej. Zastosowanie odbiornika TSOP... też nie stanowi problemu, bo to są tylko trzy końcówki, podobnie jak w tranzystorze.
    Po za tym w opisie są dość dokładnie opisane wszystkie problemy związane z taką barierą.
  • Helpful post
    #9
    _jta_
    Electronics specialist
    Marian B wrote:
    modulację fali nośnej (podczerwieni) sygnałem użytkowym w nadajniku, oraz specjalizowany scalony odbiornik podczerwieni np. typu TSOP

    A to by było gorsze rozwiązanie, jeśli dioda nadawcza może być podłączona do tego samego uC, do którego trafia sygnał z odbiorczej - przypuszczam, że tak jest. Wyspecjalizowany odbiornik wykryje sygnał o odpowiedniej częstotliwości; uC może sprawdzać zgodność fazy zmian sygnału odbieranego z nadawanym, a to pozwoli uzyskać wielokrotnie mniejsze zakłócenia.
  • Helpful post
    #10
    rb401
    Level 38  
    matej1410 wrote:
    Tym sposobem mamy sprzężenie zwrotne oraz niepożądany efekt naprzemiennego włączania się oraz wyłączania źródła światła. Próbowałem różnych sposobów, aby rozprawić się z tym efektem, ale bezskutecznie.


    Jest bardzo dobra metoda wykrywania nadawanego sygnału nawet w obecności dużych zakłóceń zarówno stałych jak i zmiennych. To detekcja synchroniczna, którą można zrealizować sprzętowo lub programowo.
    W skrócie, przykładowa realizacja programowa wygląda mniej więcej tak. Zaświecasz i gasisz LED cyklicznie z wypełnieniem 50%, im szybciej tym lepiej i robisz każdorazowo pomiar ADC sygnału z czujnika dla zaświeconej i zgaszonej. Wyniki przy LED zgaszonej mnożysz razy -1 a przy zaświeconej pozostawiasz bez zmian.
    Sumujesz te wyniki w postaci tzw. średniej ruchomej z jakieś wybranej liczby ostatnich pomiarów (czyli najlepiej jakiś bufor kołowy).
    I teraz okazuje się że jeśli nie masz odbicia to wartości tej średniej będą bliskie zeru. A jeśli w sygnale będą ślady sygnału który nadajesz do LED to wartość średnia wyraźnie stanie się dodatnia i proporcjonalna do amplitudy sygnały odbitego.
    Metoda ta jest bardzo czuła i przy odpowiednim doborze parametrów (częstotliwość migania, długość bufora uśrednień) pozwala wykryć sygnał nadawany nawet jeśli jest sporo mniejszy niż zakłócenia i szumy i też w sytuacji gdy sygnał odbity ma amplitudę niższą niż rozdzielczość użytego ADC.
    Na marginesie, taką metodą w astronomii obserwuje się niektóre błyskające okresowo gwiazdy, z których sygnał do teleskopu dociera w postaci pojedynczych fotonów.
    Tyle że podstawowymi warunkami powodzenia tej metody jest to, by częstotliwość migania LED nie była synchroniczna ze składowymi zakłóceń, oraz by czujnik pracował cały czas w zakresie liniowości (nie nasycał się).
  • Helpful post
    #11
    Marian B
    Level 37  
    Za odbiornikiem TSOP... powinien jeszcze być odpowiedni układ detekcyjny przetwarzający wykrytą falę modulującą na stany zero/jeden, to znaczy np. "1" gdy jest modulacja, "0" gdy brak. Lub odwrotnie w zależności od potrzeby.

    Widzę że kolega rb401 już mnie trochę wyprzedził.
  • Helpful post
    #12
    rb401
    Level 38  
    Marian B wrote:
    Widzę że kolega rb401 już mnie trochę wyprzedził.


    Ale mówimy o dwóch zupełnie innych rzeczach. W detekcji synchronicznej obróbka przez algorytm dotyczy sygnału proporcjonalnego do oświetlenia i pisząc czujnik mam na myśli fotodiodę lub inny równoważny element przetwarzający natężenie światła na napięcie.
    Ale możliwe że metoda użycia TSOP jako gotowca, już wystarczy jak na wymagania konstrukcji autora wątku. Moim zdaniem warto spróbować.
  • Helpful post
    #13
    _jta_
    Electronics specialist
    rb401 wrote:
    Tyle że podstawowymi warunkami powodzenia tej metody jest to, by częstotliwość migania LED nie była synchroniczna ze składowymi zakłóceń, oraz by czujnik pracował cały czas w zakresie liniowości (nie nasycał się).

    Co do pierwszego, to można by zastosować technikę "spread spectrum" (z gwiazdami trudniej ;)); drugie wyklucza TSOP.
    rb401 wrote:
    Sumujesz te wyniki w postaci tzw. średniej ruchomej z jakieś wybranej liczby ostatnich pomiarów (czyli najlepiej jakiś bufor kołowy).

    Coś w tym stylu. Może do bufora pakować różnice (najnowszy-poprzedni przed zgaszeniem LED nadawczej, poprzedni-najnowszy przed zaświeceniem), i liczbę wkładaną do bufora dodawać do sumy1, usuwaną z bufora (żeby na jej miejsce wpisać kolejną) odejmować od sumy1 - w ten sposób suma1 będzie zawierać sumę wszystkiego, co jest w buforze. I proponowałbym zrobić kolejny poziom - do drugiego bufora wpisywać kolejne wartości sumy1 i dodawać je do / odejmować je od sumy2. Suma2 podzielona przez iloczyn długości buforów da średnią sygnału z LED.
  • Helpful post
    #14
    rb401
    Level 38  
    _jta_ wrote:
    drugie wyklucza TSOP.


    Ale propozycją detekcji synchronicznej nawiązałem wyłącznie do testów autora pomiaru przez ADC natężenia światła.
    Z ogólnie mówiąc tematem TSOP, który tu występuje, nie ma nic wspólnego i zupełnie niepotrzebnie skleiły się nam te tematy w tym wątku.
    Czyli, albo klasyczna detekcja synchroniczna z analogowego sygnału albo TSOP, ale nie naraz bo to bez sensu.
  • #16
    _jta_
    Electronics specialist
    Justyniunia wrote:
    Zsynchronozuj światło z nadawczej z odbiorczą ( programowo).

    Zaproponowałem to już w #7.

    TSOP to pewnie też jakaś detekcja synchroniczna, tylko ze "zgadywaniem" fazy (i korekcją częstotliwości) przez odbiornik.

    Aha: w wersji z synchronizacją robioną przez uC można _mierzyć_ współczynnik transmisji. TSOP chyba daje sygnał 0/1.
  • #17
    Freddy
    Level 43  
    Ja w #6 proponowałem to samo :)

    Możesz zrobić tak jak jest opisane TUTAJ, albo TUTAJ.
    Możesz sobie uprościć/ułatwić zadanie wykorzystując fabryczne układy scalone obsługi np. RC5.
  • #18
    matej1410
    Level 25  
    Trochę ogólnie napisałem pierwszy post. Opisze dokałdniej organizację całości.
    Żeby było łatwiej przyjmijmy, że nadajnik i odbiornik skierowany jest w drzwiczki, które mogą być otwarte lub zamknięte. Gdy otwarte sygnał z diody nadawczej się nie odbija natomiast gdy zamknięte powraca do diody odbiorczej i trafia na ADC.
    Całość powinna działać tak, że jak drzwiczki otwarte to lampka świeci a gdy zamknięte gaśnie.


    Całość jest zorganizowana w ten sposób, że:
    1. uC kluczuje diodą nadawczą 50 x (250us stan wysoki po czym 10ms stan niski)
    2. Sumuję więc 50x wartość z ADC i dzielę przez 50 licząc średnią arytmetyczną z wszystkich pomiarów. To pozwala mi uniknąć załączenia lampki w sytuacji gdy na ADC pojawi się przez krótki czas sygnał niepożądany trwający kilka pomiarów z tych 50. Coś na kształt prostego programowego filtru.
    Jeżeli wartość średnia z ADC jest większa od 20 (drzwiczki zamknięte) to wyłącz lampkę
    Jeżeli wartość średnia z ADC jest mniejsza od 10 (drzwi otwarte) to załącz lampkę

    I teraz jest jedyny niepożądany skutek przypadku, że drzwiczki są otwarte i lampka świeci. Co się dzieje teoretycznie.
    Dioda nadawcza wypuszcza światło podczerwone przed siebie. Światło to nie odbija się od drzwiczek. Jedynie dociera światło z lampki.
    Światło z lampki daje wartość na ADC = 15. Tak więc nie powinno się dziać nic a mikrokontroler nie zmienia stanu zaświecenia lampki.
    A teraz co się dzieje praktycznie: Mam do czynienia niestety z przesłuchem ponieważ diody są obok siebie i choć nie skierowane ku sobie to "bokiem" część światła z nadawczej się "przedziera" do odbiorczej. Przesłuch jest mały, ale (i tu jest przyczyna problemu) gdy doda się on do strumienia światła z lampki to mamy do czynienia z sytuacją w której na ADC trafia wartość z diody IR + strumień z ledów. Na ADC pojawia się wartość większa od 20 co powoduje wyłączenie lampki (tak jakby drzwiczki były zamknięte, co jest nieprawdą ponieważ są przecież otwarte). Lampka wówczas gaśnie. Gdy lampka jest zgaszona a drzwi wciąż otwarte na ADC pojawia się wartość bliska 0 co dla uC jest sygnałem aby załączyć lampkę. Tak się dzieje. Tym sposobem robi się generator z cyklicznie migającą lampką.

    Mam nadzieję, że jasno wyjaśniłem.
    Teoretycznie można by rozsunąć diody i uniknąć przesłuchu, ale chciałbym nie modyfikować PCB tylko załatwić to jakoś bezinwazyjnie czyli programowo.
    ps. uprzejmie dziękuję wszystkim za uwagi i proszę o kolejne o ile to możliwe.
  • Helpful post
    #19
    Marian B
    Level 37  
    A może po prostu zastosować jakieś osłony. Szczególnie na diodę odbiorczą, na przykład umieścić ją w "czarnej" rurce o długości kilku, np. 4÷5 centymetrów. Oczywiście jeżeli miejsce pozwala. Wtedy można dość precyzyjnie wycelować na diodę nadawczą, obce światło będzie jeżeli nie odcięte, to bardzo mocno stłumione.
  • #20
    rb401
    Level 38  
    matej1410 wrote:
    Przesłuch jest mały, ale (i tu jest przyczyna problemu) gdy doda się on do strumienia światła z lampki to mamy do czynienia z sytuacją w której na ADC trafia wartość z diody IR + strumień z ledów. Na ADC pojawia się wartość większa od 20 co powoduje wyłączenie lampki (tak jakby drzwiczki były zamknięte, co jest nieprawdą ponieważ są przecież otwarte).


    Czyli jak rozumiem, jedyny problem jest w eliminacji z wartości wyliczonej światła, którego źródłem nie jest LED IR.
    Pierwsze co przychodzi mi do głowy to po prostu gasić lampkę na czas pomiaru. Jeśli pomiary będą robione w odstępie dużo dłuższym niż sam czas pomiaru, to strata jasności nie będzie zauważalna. Oczywiście jeśli to LED, niepowikłany jakimś driverem.

    Ale tutaj bardzo niewiele brakuje Ci do wprowadzenia algorytmu detekcji synchronicznej i rozprawienie się definitywne z postronnym światłem nie tylko lampki. Bez żadnej ingerencji w sprzęt jaki masz.
    Czyli tak jak już wcześniej zarysowałem temat. Zmieniasz tylko zasadę sterowania LED IR, tak że przy co drugim pomiarze ADC masz ją zaświeconą. A równocześnie co drugiej próbce przed uśrednieniem, zmieniasz znak liczby na ujemny.
    I zauważ że jaki nie byłby sygnał dodatkowy ze światła lampki (lub innego źródła zakłócającego z zewnątrz) to tą metodą każdy taki sygnał poboczny się wyzeruje przy uśrednianiu, byle by tylko liczyć średnią z parzystej liczby próbek.
    Tu nawet możesz pójść na uproszczenie i nie bawić się w średnią ruchomą, bufory, tylko założyć jakiś cykl pomiarowy i mieć tylko jedną zmienną, w której będziesz te próbki sumować w każdym cyklu. Oczywiście po uprzednie zmianie znaku liczby co drugiej próbki.

    Powiedzmy że cykl pomiarowy to 50 próbek z włączonym IR i 50 z wyłączonym. Tym sposobem po cyklu będziesz miał w tej zmiennej sumę: 50xsygnał z odbicia IR + 50xsygnał z lampki - 50xsygnał z lampki. Czyli sygnał od lampki całkowicie zniknie i w zmiennej zostanie wartość wyłącznie zależna od odbicia i przesłuchu IR. Z tym że przesłuch traktujesz jako stałą konstrukcyjną i Ci on nie przeszkadza, bo interesuje Cię tylko próg rozpoznania faktu otwarcia drzwiczek.
  • #21
    _jta_
    Electronics specialist
    Freddy wrote:
    Ja w #6 proponowałem to samo

    Nie to samo - nie napisałeś, że ma być synchronizacja. A to jest kluczowe.
    Freddy wrote:
    Możesz zrobić tak jak jest opisane TUTAJ, albo TUTAJ.

    To jest o pilotach IR. Mają nieco inne wymagania, inne właściwości, więc te rozwiązania tu będą kiepskie.

    matej1410 wrote:
    1. uC kluczuje diodą nadawczą 50 x (250us stan wysoki po czym 10ms stan niski)

    Domyślam się, że przez 250us dioda nadawcza świeci, przez 10ms (40x dłużej) ma przerwę. Dla oszczędności energii?

    250us to trochę długo - fotodioda reaguje w ułamku mikrosekundy, fototranzystor w ciągu niewielu (kilku, kilkunastu) mikrosekund. ADC, które jest w Arduino, przetwarza w ciągu kilkunastu mikrosekund.

    matej1410 wrote:
    Mam do czynienia niestety z przesłuchem ponieważ diody są obok siebie i choć nie skierowane ku sobie to "bokiem" część światła z nadawczej się "przedziera" do odbiorczej

    Ale to powinna być stała ilość. Pożądana jest liniowość diody odbiorczej - po to, żeby pomiar sygnału przechodzącego od nadawczej do odbiorczej dawał wynik niezależny od oświetlenia - jako wartość sygnału trzeba przyjmować _różnicę_ tego, co odbierasz, gdy świeci dioda nadawcza, i tego, co odbierasz, gdy nie świeci - wtedy obce światło nie wpływa na wynik, bo ono w obu sytuacjach daje taki sam wkład, więc przy odejmowaniu się skasuje.

    Skoro robisz tak, że zaświecasz diodę nadawczą na czas dużo krótszy od przerw w jej świeceniu, to rób tak: ze 3 odczyty ADC przed zaświeceniem diody nadawczej, jeśli są wyraźnie różne, to jej nie zaświecasz, odczytujesz dalej (może stopniowo zwiększając tolerancję na różnice), aż złapiesz kolejne 3 z małymi różnicami; następnie zaświecasz diodę nadawczą, robisz może też ze 3 odczyty, i ją gasisz; i wtedy kolejne 3 odczyty (potem po zaświeceniu/zgaszeniu diody nadawczej do 50us odczekać, jeśli masz fototranzystor, bo fotodiody są szybkie; jeszcze kwestia, jak z diodą nadawczą, i jej sterowaniem); jako wynik przyjmujesz średnią z 3 w czasie, gdy dioda nadawcza świeciła, minus średnią z 6 (3 przed i 3 po) z czasów, gdy nie świeciła; dane do każdej z tych średnich mają być zbliżone, jak jest duży rozrzut, to odrzucasz ten pomiar.

    W ten sposób wyeliminujesz nie tylko wpływ oświetlenia, które jest w miarę stałe, ale i szybkie błyski, bo one na ogół spowodują duży rozrzut danych, które będziesz uśredniał - będziesz przez te błyski tracić część pomiarów, ale dzięki ich odrzuceniu z pozostałych uzyskasz dokładniejszy wynik.

    Można zrobić jeszcze coś, co polepszy rozpoznawanie, aczkolwiek nie od razu - program będzie musiał się nauczyć, jaki największy sygnał dostaje (to będzie wtedy, gdy drzwiczki będą zamknięte) przy jakim oświetleniu ogólnym (średnia z tła, gdy dioda nadawcza jest wyłączona), zapisać to sobie, i jeśli dostaje wyraźnie mniejszy sygnał, to alarmować. W ten sposób wyeliminujesz wpływ nieliniowości fotodiody (czy fototranzystora - fotodiody są w miarę liniowe, fototranzystory mają sporą nieliniowość). Ale może się zdarzyć, że drzwiczki się pobrudzą, będą gorzej odbijać światło, a układ będzie alarmował, że są otwarte - bo kiedyś odbijało się więcej...

    Marian B wrote:
    Wtedy można dość precyzyjnie wycelować na diodę nadawczą, obce światło będzie jeżeli nie odcięte, to bardzo mocno stłumione.

    To by było możliwe, gdyby na drzwiczkach było lusterko. A najlepiej zwierciadło wklęsłe o promieniu krzywizny równym odległości od diody nadawczej i odbiorczej. Może być i płaskie, ale wtedy przy obu diodach przydałyby się soczewki, żeby uzyskać wiązkę równoległą. I to mogłoby być dobre do wykrywania niedokładnego domknięcia drzwiczek - wystarczy, że będą pod nieco innym kątem, i odbita wiązka przestanie trafiać.
  • #22
    matej1410
    Level 25  
    rb401 wrote:

    Ale tutaj bardzo niewiele brakuje Ci do wprowadzenia algorytmu detekcji synchronicznej i rozprawienie się definitywne z postronnym światłem nie tylko lampki. Bez żadnej ingerencji w sprzęt jaki masz.
    Czyli tak jak już wcześniej zarysowałem temat. Zmieniasz tylko zasadę sterowania LED IR, tak że przy co drugim pomiarze ADC masz ją zaświeconą. A równocześnie co drugiej próbce przed uśrednieniem, zmieniasz znak liczby na ujemny.
    I zauważ że jaki nie byłby sygnał dodatkowy ze światła lampki (lub innego źródła zakłócającego z zewnątrz) to tą metodą każdy taki sygnał poboczny się wyzeruje przy uśrednianiu, byle by tylko liczyć średnią z parzystej liczby próbek.
    Tu nawet możesz pójść na uproszczenie i nie bawić się w średnią ruchomą, bufory, tylko założyć jakiś cykl pomiarowy i mieć tylko jedną zmienną, w której będziesz te próbki sumować w każdym cyklu. Oczywiście po uprzednie zmianie znaku liczby co drugiej próbki.

    Powiedzmy że cykl pomiarowy to 50 próbek z włączonym IR i 50 z wyłączonym. Tym sposobem po cyklu będziesz miał w tej zmiennej sumę: 50xsygnał z odbicia IR + 50xsygnał z lampki - 50xsygnał z lampki. Czyli sygnał od lampki całkowicie zniknie i w zmiennej zostanie wartość wyłącznie zależna od odbicia i przesłuchu IR. Z tym że przesłuch traktujesz jako stałą konstrukcyjną i Ci on nie przeszkadza, bo interesuje Cię tylko próg rozpoznania faktu otwarcia drzwiczek.


    Cały dzień nad tym dziś siedzę i chyba nie rozumiem do końca o co chodzi w tej zacytowanej wyżej metodzie Panowie.
    Załóżmy, że mam takie próbki:
    tablica[20]={10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3}; 10 to wartosć z ADC gdy dioda nadaje a 3 gdy nie nadaje.
    Gdy lampka jest blisko fotodiody IR to wtedy wartość z lampki dodaje się do
    próbki gdy IR nadaje i do próbki kolejnej gdy nie nadaje i mam wówczas taką tablice:
    tablica[20]={20, 13, 20, 13, 20, 13, 20, 13, 20, 13, 20, 13, 20, 13, 20, 13, 20, 13, 20, 13}
    Nie bardzo rozumiem które próbki mam wymnażać przez -1
    i z czego liczyć średnią?

    Dodano po 2 [minuty]:

    _jta_ wrote:
    Dla oszczędności energii?

    250us to trochę długo - fotodioda reaguje w ułamku mikrosekundy, fototranzystor w ciągu niewielu (kilku, kilkunastu) mikrosekund. ADC, które jest w Arduino, przetwarza w ciągu kilkunastu mikrosekund.


    Dioda jest szeregowo z rezystorem 47R. Napięcie 12V. Jak zwiększe wypełnienie to rezystor mi się grzeje bardzo.

    Dodano po 37 [minuty]:

    Załączam przebiegi z oscyloskopu:

    przypadek 1:
    Odróżnienie wiązki podczerwieni od wiązki światła białego przez fotodiodę IR
    przypadek 2:
    Odróżnienie wiązki podczerwieni od wiązki światła białego przez fotodiodę IR
    przypadek 3:
    Odróżnienie wiązki podczerwieni od wiązki światła białego przez fotodiodę IR

    Przypadek 1 to gdy dioda nadawcza jest wstanie naprzemiennie 1 i 0. Drzwiczki są otwarte. Lampka świeci, ale jest daleko od układu i nie wpływa na niego.
    Przypadek 2 to gdy przymykają się drzwiczki i otwierają odrazu. Lampka się zapala na chwile i gaśnie. Lampka jest oddalona tu od fotodiody również.
    Przypadek 3 to drzwiczki są otwarte, lampka świeci i jest zbliżona i wycelowana w fotodiodę. Widać że układ zapala i gasi naprzemiennie lampkę.

    Chciałem w ten sposób przedstawić problem na oscylogramie. Mam nadzieję, że go widać dobrze. Nie zbyt rozumiem jak to światło z lampy odejmować od wszystkiego co "wpada" na obszar detekcyjny fotodiody.

    Z punktu widzenia fotodiody to moim zdaniem bez różnicy, czy drzwiczki się zamkną, czy też zbliży się lampka, bo na fotodiodzie poziom i tak wzrośnie.
  • #23
    _jta_
    Electronics specialist
    Wygląda na to, że to nie jest fotodioda, a fototranzystor, i ma opornik baza-emiter. To powoduje, że sygnał nie jest liniowy od 0 oświetlenia, tylko jest jakiś próg oświetlenia, poniżej którego sygnał jest zerowy. Światło lampki daje sygnał tuż powyżej progu, a zarówno sygnał rozproszony pochodzący od diody nadawczej, jak i sygnał z odbicia od zamkniętych drzwiczek chyba ze 2x większy (każdy z nich). I pewnie jakiekolwiek źródło światła może dać podobny rezultat, jak światło lampki.

    To, że światło lampki daje sygnał powyżej progu, ma pewną zaletę: kiedy lampka świeci, fototranzystor jest w zakresie z grubsza liniowym, i łatwo można zmierzyć, jaki sygnał świetlny do niego dochodzi - trzeba zmierzyć sygnał (różnicę między impulsami i tłem, to jest około 700mV) przy zaświeconej lampce i otwartych drzwiczkach, i przyjąć, że taki sygnał nie wskazuje na zamknięcie drzwiczek. Rozumiem, że na drugim oscylogramie lampka był zgaszona, a sygnał przy zamkniętych drzwiczkach był większy (około 1100mV nie licząc tego, co zostało obcięte, bo było poniżej progu zadziałania), przy otwartych bez lampki dużo mniejszy (około 300mV - czyli ze 400mV jest obcinane).

    Można by zrobić tak: jeśli sygnał (różnica impulsy-tło) jest ponad 1000mV, to uznajemy, że drzwiczki są zamknięte; jeśli poniżej 800mV, że otwarte; przy napięciach pośrednich na ułamek sekundy zaświecamy lampkę i sprawdzamy, czy sygnał przekroczy np. 1200mV - jeśli tak, drzwiczki są zamknięte (jakkolwiek to powinno dać chyba 1500mV), jeśli nie, to są otwarte, i lampka pozostaje zaświecona. I dopóki sygnał nie zmieni się co najmniej o 100mV, to uznajemy, że z drzwiczkami nic nowego się nie dzieje.

    Może być problem, jeśli pojawi się oświetlenie zewnętrzne znacznie silniejsze od światła lampki, i przesteruje układ. Może trzeba zmniejszyć opornik, żeby układ mógł działać przy silniejszym oświetleniu.
  • #24
    matej1410
    Level 25  
    To jest fotodioda. A dokładnie taka:
    https://www.tme.eu/pl/details/sfh203/fotodiody/osram/sfh-203/
    Ale wiem o czym mówisz. Układ działa tak, że napięcie z rezystora szeregowo podłączonego z diodą trafia na bazę tranzystora który jest wtórnikiem emiterowym z rezytorem w emiterze. Z kolei to napięcie z rezystora emiterowego trafia na ADC.
  • #25
    rb401
    Level 38  
    matej1410 wrote:
    Załóżmy, że mam takie próbki:
    tablica[20]={10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3}; 10 to wartosć z ADC gdy dioda nadaje a 3 gdy nie nadaje.


    Po prostu próbki zebrane przy zgaszonej IR (czyli druga, czwarta, itd.) mnożysz razy -1 w którymś momencie obliczeń.
    Powiedzmy że mnożysz zaraz po pomiarze ADC czyli dostałbyś taką tablicę:
    tablica[20]={10, -3, 10, -3, 10, -3, 10, -3, 10, -3, 10, -3, 10, -3, 10, -3, 10, -3, 10, -3};
    Oczywiście jeśli mnożysz przez -1 przed wpisem do tablicy to musisz mieć tablice typu liczb ze znakiem (np. signed short int, signed int).
    Wynikiem pomiaru jest suma wszystkich tych próbek w tablicy, czyli tu w tym przykładzie będzie to 70. Nie musisz tu nawet wyliczać średniej, czyli dzielić przez 10, bo sobie przyjmujesz arbitralnie próg liczbowy, a próbek masz zawsze tyle samo.
    I właśnie ten wynik zawiera wyłącznie składową pochodzącą od diody IR bo składowa od lampki się wyzerowała.

    Samo liczenie oczywiście można zrobić inaczej, na wiele sposobów. Na przykład zbierać jak robisz teraz, czyli prosto z ADC do tablicy a dopiero na końcu licząc sumę, po prostu na przemian, raz dodawać a raz odejmować kolejne próbki. Można też uprościć sprawę jak proponowałem wyżej i nie zbierać do bufora tylko od razu dodawać albo odejmować do wstępnie wyzerowanej zmiennej.

    matej1410 wrote:
    Z punktu widzenia fotodiody to moim zdaniem bez różnicy, czy drzwiczki się zamkną, czy też zbliży się lampka, bo na fotodiodzie poziom i tak wzrośnie.


    Zgoda, ale zauważ że w tej metodzie, jeśli ją całkiem uprościmy do tylko dwóch próbek (jedna z IR, jedna bez), to mamy klasyczny pomiar jak np. w przypadku pomiaru wagi czegoś w opakowaniu. Ważymy brutto (czyli u Ciebie to IR plus tło) i mierzymy tarę, czyli samo tło (tło bez IR) i odejmując dostajemy netto czyli to co tak właściwie nas interesuje (samo IR). Dlatego zupełnie nie jest ważne ile dostajemy na ADC w danym pomiarze, jak ta lampka wpływa na pomiary, bo liczy się tylko różnica sąsiednich próbek wynikająca z faktu zaświecenia IR.

    matej1410 wrote:
    Dioda jest szeregowo z rezystorem 47R. Napięcie 12V. Jak zwiększe wypełnienie to rezystor mi się grzeje bardzo.


    Masz nie bardzo optymalny układ, bo zauważ że ta dioda ma mała maksymalną moc 100mW. A jeśli się opornik grzeje to ta dioda też dostaje w kość. Może by warto też temu się przyjrzeć. Ale na razie na tym etapie ważne że jakoś działa i możesz przynajmniej doprowadzić algorytm do sprawności.
  • #26
    matej1410
    Level 25  
    Opiszę jeszcze dla jasności ten oscylogram:
    Odróżnienie wiązki podczerwieni od wiązki światła białego przez fotodiodę IR

    Dodano po 17 [minuty]:

    rb401 wrote:

    Po prostu próbki zebrane przy zgaszonej IR (czyli druga, czwarta, itd.) mnożysz razy -1 w którymś momencie obliczeń.
    Powiedzmy że mnożysz zaraz po pomiarze ADC czyli dostałbyś taką tablicę:
    tablica[20]={10, -3, 10, -3, 10, -3, 10, -3, 10, -3, 10, -3, 10, -3, 10, -3, 10, -3, 10, -3};
    Oczywiście jeśli mnożysz przez -1 przed wpisem do tablicy to musisz mieć tablice typu liczb ze znakiem (np. signed short int, signed int).
    Wynikiem pomiaru jest suma wszystkich tych próbek w tablicy, czyli tu w tym przykładzie będzie to 70. Nie musisz tu nawet wyliczać średniej, czyli dzielić przez 10, bo sobie przyjmujesz arbitralnie próg liczbowy, a próbek masz zawsze tyle samo.
    I właśnie ten wynik zawiera wyłącznie składową pochodzącą od diody IR bo składowa od lampki się wyzerowała.


    Teraz zrozumiałem. Spróbuje to zaimplementować. Robiłem wcześniej błąd, ponieważ odwracałem znak w co drugiej parzystej próbce czyli miałem:
    tablica[20]={10, -3, 10, 3, 10, -3, 10, 3, 10, -3, 10, 3, 10, -3, 10, 3, 10, -3, 10, 3};
    Co dawało mi tak naprawdę wyzerowanie tych wartości i niczego nie wnosiło.
    Źle zrozumiałem przekaz Kolegi rb401. Już naprawiam błąd.
  • #27
    _jta_
    Electronics specialist
    matej1410 wrote:
    Układ działa tak, że napięcie z rezystora szeregowo podłączonego z diodą trafia na bazę tranzystora który jest wtórnikiem emiterowym z rezytorem w emiterze. Z kolei to napięcie z rezystora emiterowego trafia na ADC.

    Możesz podać schemat i wartości elementów? Czy możesz coś zmienić w tym układzie? Tak, żeby choć zmniejszyć to obcinanie części zakresu pomiarowego? Chyba idealne byłoby zrobienie tego wtórnika na jakimś LM358; jakąś poprawę może dać dodanie prądu od +zasilania do tego opornika (tak, żeby uzyskać na nim około 0,5..0,6V), albo (chyba lepiej) włączenie diody (jakiejś 1N4148) szeregowo z tym opornikiem. Może się okazać potrzebne zmniejszenie czułości układu - a może dałoby się zrobić tak, żeby sterować nie tylko włączeniem/wyłączeniem diody nadawczej, ale i natężeniem prądu?

    Sygnał, który dostajesz, liczy się w setkach miliwoltów; ADC w Arduino jest chyba 10-bitowe, więc powinno rozpoznać zmianę o kilka miliwoltów - 10x mniejsza czułość wystarczyłaby z dużym zapasem, a mniejsze byłoby wtedy ryzyko przesterowania układu przez obce oświetlenie. Ta fotodioda raczej nie ma filtru IR (przepuszczającego IR, pochłaniającego światło widzialne), ale i taki filtr nie zapewni izolacji od wpływu światła - sprawdzałem, fotodioda (czy może fototranzystor) z takim filtrem (sprzedawany jako "czujnik płomienia") "widzi" światło zwykłej żarówki, trochę świetlówki, najmniej "żarówki LED", słabiutko płomień zapalniczki gazowej, pewnie nieźle płomień świecy (nie miałem pod ręką, a poza tym testowałem w warunkach, w których byłoby to mało bezpieczne, już z zapalniczką wolałem uważać, bo obok miałem sporo porozkładanych papierów).
  • #28
    matej1410
    Level 25  
    Odróżnienie wiązki podczerwieni od wiązki światła białego przez fotodiodę IR
    uC to Attiny10 (ADC na 8 bitach). Chciałbym nie modyfikować płytki na ile to możliwe. Kosmetyczny dodatek typu zmiana wartości rezystora nie stanowiłby problemu.
    Dioda IR nadawcza jest kluczowana przez tranzystor. Bezpośrednia zmiana natężenia prądu takiej diody w tym układzie chyba możliwa nie jest ale można próbować zmieniać wypełnienie i dostać podobny efekt (jeśli dobrze rozumiem Twoją intencję).

    Dodano po 18 [minuty]:

    rb401 wrote:

    Masz nie bardzo optymalny układ, bo zauważ że ta dioda ma mała maksymalną moc 100mW. A jeśli się opornik grzeje to ta dioda też dostaje w kość. Może by warto też temu się przyjrzeć. Ale na razie na tym etapie ważne że jakoś działa i możesz przynajmniej doprowadzić algorytm do sprawności.


    Grzał mi się rezystor kiedy wypełnienie miałem zbyt duże.
    Prąd diody nadawczej IR może mieć wartość w szczycie do 1A. Wcześniej kluczowałem ze zbyt dużym wypełnieniem co przekładało się na zbyt dużą moc traconą na rezystorze. Gdy zmniejszyłem wypełnienie rezystor się przestał grzać i zarazem impuls prądu jest na tyle duży, że do fotodiody odbiorczej dociera sygnał z odbicia.
  • #29
    _jta_
    Electronics specialist
    A może bez tranzystora, tylko opornik R1 np. 47k i ADC wprost do niego? Wprawdzie to ADC najlepiej działa przy oporności źródła poniżej 10k, ale przy 47k powinno już być znośnie.

    Niestety ADC w ATtiny10 nie jest za dobry - 8 bitów, czas konwersji 65us - przez 250us zdąży zrobić trzy konwersje i rozpocząć czwartą (kończąc już po zgaszeniu diody nadawczej).
  • #30
    rb401
    Level 38  
    matej1410 wrote:
    Grzał mi się rezystor kiedy wypełnienie miałem zbyt duże.
    Prąd diody nadawczej IR może mieć wartość w szczycie do 1A.


    Tu zaszło nieporozumienie bo mylnie zrozumiałem że grzeje ci się opornik szeregowy z diodą odbiorczą.
    Teraz jak widzę schemat, to jedynie mogę się przyłączyć do tego co pisze kolega _jta_, że użycie wtórnika niepotrzebnie obcina zakres pomiaru od dołu i dodanie diody szeregowej do R1 od strony masy, spolaryzowanej w kierunku przewodzenia bardzo poprawiło by tą sytuację.
    Eliminacja wtórnika (czyli metoda bez ingerencji w druk) jak proponuje kolega _jta_, też wydaje mi się dość obiecująca (tym bardziej że nie ingeruje w druk), ale wymagała by praktycznych testów co do wartości otrzymanych z ADC na niskich poziomach oświetlenia (samo IR, bez lampki), bo czułość toru odbiorczego nieco siądzie. Jeśli w tej sytuacji sygnał IR będzie widoczny (kilka jednostek ADC), to może być bardzo dobry kierunek, bo detekcja synchroniczna ładnie go wyciągnie z zakłóceń.

    Ale nawet jeśli już nic nie robić sprzętowo, to i tak moim zdaniem masz w miarę dobre warunki pomiarów i ładne wartości Ci wchodzą do wyliczeń.
    Tak że masz zapas i nawet można by nawet np. zmniejszyć prąd diody IR a wciąż wynik detekcji będzie odpowiedni do niezawodnej interpretacji.