Elektroda.pl
Elektroda.pl
X

Search our partners

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

Sterownik LED 12V z czujnikiem odbiciowym - Tiny13 EasyTouch

bobeer 08 Dec 2021 15:15 1569 2
e-mierniki
  • Sterownik LED 12V z czujnikiem odbiciowym - Tiny13 EasyTouch

    Chciałem przedstawić opis projektu prostego sterownika led, w którym do sterowania jasnością użyto transoptora odbiciowego oraz mikrokontrolera attiny13. Scalak został przylutowany do pcb po sterowniku dotykowym, oraz zapakowany do obudowy fabrycznego zasilacza 12V/2A w którym pozostało nieco miejsca do zagospodarowania.
    Sterownik LED 12V z czujnikiem odbiciowym - Tiny13 EasyTouch Sterownik LED 12V z czujnikiem odbiciowym - Tiny13 EasyTouch

    Zaczęło się od małego zgrabnego zasilacza i płytki włącznika dotykowego. Niestety okazało się, że czujnik tego typu w połączeniu z zasilaczem impulsowym oraz sterowaniem pwm, nie działa najlepiej :) tzn działałby dobrze gdyby długość jego 'anteny' była odpowiednio mała, niestety z powodów mechanicznych, nie udało się tego zrealizować w praktyce (kupiona płytka była przystosowana do montowania w listwach oświetleniowych nie zasilaczach, pole dotykowe występowało w postaci sprężynki o 1cm wysokości, w przypadku wypusczonego kilkucentymetrowego kabelka, sterownik wyłączał się „sam z siebie”, i nie była to jego przypadłość, bo wsadzony w jego miejsce tiny13 z programem detekcji dotykowej zachowywał się tak samo).
    Pomyślałem, że z optycznym systemem rozpoznawania ciała nie będzie takiego problemu. Rzeczywiście, pojawiło się więcej innych problemów :) . Założenie wymagało użycia pcb z czujnika dotykowego z podmienionym sterownikiem (taka sama obudowa podobny pinout). W wyniku adaptacji, optoelementy znajdowały się na kilkucentymetrowym przewodzie.W efekcie końcowym parametry całości zostały mocno ograniczone. Należało się przez to posiłkować uśrednianiem i jitteringiem jeżeli układ miał mieć rację praktycznego bytu.
    Umieszczenie fotodiody odbiorczej na kilkucentymetrowych kabelkach, przy stosunkowo wysokiej impedancji adc to nie jest dobry pomysł, ale takie warunki pracy wymusiły założenia i mechaniczna konstrukcja adaptowanej pcb ;) (na krawędzi bocznej znajduje się mosfet kluczujący prąd, a na nim leżą kabelki od transoptora wmontowanego w plastykową boczną zaślepkę zasilacza). Dioda nadawcza również nie pracuje tu z odpowiednio wysokimi prądami, gdyż sterowana jest bezpośrednio z pinu procesora. W efekcie odległość wykrywania ograniczyła się do 1-2cm. Dodatkowe obniżenie czułości następowało podczas podniesionej temperatury lub ilości zakłóceń z sygnału pwm. W przypadku równoczesnej pracy kanału PWM na sąsiadującym pinie, wejście adc jest zaśmiecane bardzo wysokim poziomem zakłóceń. Jak widać na oscylogramach, bez odpowiedniego przetwarzania cyfrowego sygnałów, nie było by łatwo użyć napięcia z fotodiody do uzyskania sensownego sygnału logicznego. Warunkowanie sygnału wymagało ustawienia dodatkowego offsetu i odpowiedniej histerezy oraz jitteringu próbkowania adc w celu zdekorelowania zakłócającego sygnału pwm.

    (kanał niebieski - napięcie diody IR, żółty - napięcie z fotodiody)
    napięcie adc mocne oświetlenie tła
    Sterownik LED 12V z czujnikiem odbiciowym - Tiny13 EasyTouch
    napięcie adc brak oświetlenia
    Sterownik LED 12V z czujnikiem odbiciowym - Tiny13 EasyTouch

    interferencje adc (szpilki pochodzą z sygnału pwm sterującego oświetlenie led 12V 1A)
    Sterownik LED 12V z czujnikiem odbiciowym - Tiny13 EasyTouch Sterownik LED 12V z czujnikiem odbiciowym - Tiny13 EasyTouch

    Zasada działania wykrywacza użytego w projekcie polega na pomiarze napięcia adc proporcjonalnego do ilości światła padająćego na fotoelement. Ponieważ padające światło może pochodzić nie tylko od fotodiody IR, pomiar dokonywany jest dwukrotnie. Podczas świecenia led oraz podczas jej wygaszenia. Następnie wartości zmierzone są odejmowane, co w dużym stopniu uodparnia na zmiany poziomu oświetlenia tła, oraz automatycznie kompensuje prąd powodowany zmianami temperatury fotodiody.
    W kolejnym etapie ta wartość sygnału jest poddawana uśrednianiu z zebranych 64 lub 128 próbek.
    Uśredniona wartość następnie trafia na histerezę – górny próg załączenia i dolny próg wyłączenia (uznanie że wirtualny „przycisk” został naciśnięty lub zwolniony). Efektem końcowym biblioteki obsługi czujnika odbiciowego jest 01 stan który trafia do logiki odpowiedzialnej za „interpretowanie gestów” :) . Koniec końców najwygodniejszym okazało się użycie 3 pamięci jasności oraz możliwości dowolnej zmiany jasności każdego z nich. Zmiana jasności to odbijanie światła dłużej jak sekunda, a zmiana programu to krótsze odbicie. Jeżeli jednak krótkie odbicia nie następują po sobie zmieniając numer programu, to krótkie odbicie powoduje przejście na program 0 – wyłączenie oświetlenia. Kolejne krótkie odbicie włącza światło na ostatnim programie. Umożliwia to zapamiętanie ostatnio używanego programu, bez 3 krotnego machania łapą.
    Wracając do walki z zakłóceniami od sygnału pwm, należy zauważyć, że wyzwalanie pomiarów następowało synchronicznie (sterowanie tym samym timerem). Co było głównym powodem problemów z sumowaniem się sygnałów. Aby temu zapobiec, próbkowanie adc następuje nadal w stałych odstępach czasu, ale z nałożonym pseudolosowym jego odchyleniem.

    Układ działa bezproblemowo kilka miesięcy, ale podczas pracy na jasnych trybach ewidentnie daje się odczuć spadek czułości detektora, po części związany z wzrostem temperatury, po części ilości zakłóceń od pwm.

    Podczas testów detektora zbudowałem też wersję turbo, która dzięki dwom tranzystorom pozbawiona jest ograniczenia prądu nadajnika oraz posiada większy prąd fotodiody. W przypadku tej poprawionej konstrukcji testy wykazały wykrywanie łapy z odległości 10cm w temperaturze pokojowej. (Wszystkie opisy i testy dotyczą użytego w opisywanej konstrukcji optoelementu HDSL9100)

    wersja ze wzmacniaczami prądu diod
    Sterownik LED 12V z czujnikiem odbiciowym - Tiny13 EasyTouch

    W załącznikach źródło i pomoce naukowe ;)
    Sterownik LED 12V z czujnikiem odbiciowym - Tiny13 EasyTouch

    Cool? Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    bobeer
    Level 28  
    Offline 
    Has specialization in: elektronika
    bobeer wrote 1427 posts with rating 485, helped 56 times. Been with us since 2001 year.
  • e-mierniki
  • #2
    rb401
    Level 38  
    Bardzo fajny kawałek porządnej pracy projektowej. Gratuluję też przyjętego wyzwania robienia tego w asemblerze. Też byłem kiedyś taki assemblerowy, ale już mi przeszło.
    I nie żałuję.

    Co do projektu to ładnie że zrobiłeś porządną detekcję synchroniczną, jako że to metoda świetna do takich celów. Bo niestety nie jest to regułą, nawet w komercyjnych wyrobach.
    Kupiłem z ciekawości od Chińczyka kiedyś taki wyłącznik i sprawdziłem czy robi detekcję synchroniczną bo siedział na płytce mikrokontroler. No i... gdzie tam. Detekcja na zasadzie "lata coś na nodze to ok, przełączam". Efekt uboczny że wyłącznik reagował na byle pilota gdzieś blisko. Jedyny sekret że to dziadowskie rozwiązanie jakoś działało sensownie, to mała czułość odbiornika a spory prąd na migający LED.

    Trochę szkoda że tym razem wykasowałeś hexa z paczki bo współcześnie może dla niektórych kompilacja źródeł w assemblerze może stanowić trudność.
  • #3
    bobeer
    Level 28  
    Robienie tego w asemblerze to czysta przyjemność. Wyzwaniem było by robienie tego w C na 1kB kodu ;)
    Nie wydaje mi się aby ta detekcja, była taka porządna. Można uzyskiwać dużo lepsze czułości, ale tak małym nakładem środków i energii to efekt całkiem zadowalający. Faktem, uśrednianie z 'szumowym próbkowaniem' robi porządną robotę ;).
    Hexa wykasowałem z prostego powodu.
    Parametry w kodzie są zoptymalizowane pod pracę w naprawdę kiepskich warunkach, co skutkuje niską czułością detekcji. Zainstalowanie starego Atmel Studio 4, zmiana kilku stałych w configu i kompilacja tego, to jest 5 minut roboty, ale jak ktoś potrzebuje to może napisać. Wygeneruję dlań hexa z sensownymi parametrami.