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ć.