Skocz do zawartości
Treker

Teoretyzowanie przed praktyką #1 - podczerwień w robotyce amatorskiej

Pomocna odpowiedź

Nie zrozumiałeś tego o modulatorze w mega128 czy gdzieś wcześniej?

Otwórz katalog tego procka i popatrz na odpowiedni rysunek. Dwa wyjścia z dwóch timerów podpięte do bramki AND. Gdy jeden generuje "powolne" impulsy a drugi np. falę nośną 36kHz to na wyjściu dostajesz tę nośną, sprzętowo poszatkowaną już na paczki dokłądnie takie, jak te powolne impulsy.

Jeśli w Bascomie masz gotowe funkcje nadawania i odbioru np. RC5 to OK, tylko że takie biblioteki oddzielają Cię od najciekawszych zjawisk. Nie możesz regulować długości kodu. Jeśli nie przyjdzie prawidłowy kod to czy znaczy, że czujnik nic nie widzi, czy że widzi coś słabo? Musi być wszystko idealnie, żebyś został poinformowany o odbiorze kodu.

Naprawdę tak trudno zaprogramować dwa timery i wypuścić kilka impulsów a w międzyczasie zliczyć ile przyszło z powrotem? Bez przesady.

Udostępnij ten post


Link to post
Share on other sites

Zaintrygowany pomysłem Oldskulla zanurzyłem rękę w szufladzie i ku mojemu zaskoczeniu wyciągnąłem prawie pełną szynę procesorów tiny13. A co będą się marnować, zostały z jakiegoś projektu więc może niech chociaż jeden trochę popracuje. Szybko dospawałem mu driver diody LED na tranzystorze pnp, podłączyłem TSOP34838 z jakimś filtrem na zasilaniu i kilka pinów do programowania ISP. Acha, dwa potencjometry analogowe podłączone do wolnych wejść przetwornika A/C umożliwiły mi regulację prądu diody IR (poprzez wypełnienie PWM) oraz regulację czułości samego odbiornika, ale o tym za chwilę.

Prosty programik właściwie nie ma nic do roboty. Programuje piny protu B, kilka rejestrów timera 0, przetwornik A/C i tyle.

Ponieważ tiny13 ma tylko jeden timer, wykorzystałem go do generacji fali nośnej o zadanej częstotliwości w trybie fast-PWM. Za okres fali odpowiada rejestr OCR0A a liczba tam wpisywana jest obliczana w czasie kompilacji wprost z częstotliwości. U mnie jest to 38kHz:

#define IR_FREQUENCY	38000
#define TIMER0_PERIOD	(F_CPU/IR_FREQUENCY)

Potrzebowałem jeszcze jakiejś podstawy czasu do produkowania paczek i przerw a ponieważ jedyny timer już został zużyty (jedyny pożytek z niego to byłyby przerwania 38kHz, ale uznałem, że to przesada) to mogłem wykorzystać albo watchdoga albo ADC. Z watchdoga zrezygnowałem, bo to osobny generator i jego przerwania byłyby niesynchroniczne w stosunku do fali IR. Tak więc padło na ADC. Puściłem go w trybie autorun z podzielnikiem 1/128 co daje przerwania z częstotliwością ok. 2.9kHz (4.8MHz/128/13). Całość roboty odwala obsługa przerwania od przetwornika: odlicza czas paczek i przerw a także oblicza na bieżąco (na podstawie pomiarów ADC) wypełnienie PWM dla diody IR oraz czułość odbiornika.

Zarówno długość grupy jak i odstęp między grupami są parametrami z którymi można samodzielnie eksperymentować kompilując program z innymi ustawieniami:

#define GROUP_SPACE	30
#define GROUP_LENGTH	8

Każda paczka IR ma długość jednego przerwania od ADC (ok. 360us). Przerwy między paczkami są takie same.

Czułość reguluję w ten sposób, że liczę ile paczek w danej grupie dostało z TSOPa aktywną odpowiedź. Np, jeżeli w grupie mam 8 paczek, to mogę regulować czułość w 8 poziomach:

- na najwyższej czułości wystarczy, by tylko jedna paczka z grupy wygenerowała impuls na wyjściu TSOPa

- na kolejnych podwyższam limit koniecznych odpowiedzi TSOPa

- najniższa czułość jest wtedy gdy potencjometr podkręcimy aż do Vcc co ustawia limit równy długości grupy, czyli w tym przypadku 8 co oznacza, że każda paczka musi dostać odpowiedź z TSOPa.

Zakres potencjometru jest automatycznie skalowany i zawsze jako minimum czułości (maksymalne napięcie z potencjometru) przyjmowana jest aktualnie skompilowana długość grupy. Najwyższa czułość zawsze wynosi jeden. Wyjście jest uaktualniane po każdym liczeniu odpowiedzi całej grupy, czyli w moim przypadku co ok. 25ms.

Oczywiście w docelowej konstrukcji, zamiast każdego z potencjometrów można wmontować dzielnik z dwóch oporników lub nawet zewrzeć odpowiednie wejście do plusa lub do masy - jeśli chcemy mieć skrajne napięcie i odpowiednią do tego czułość i/lub wypełnienie.

Na średnim poziomie czułości (ok. 4-5) i wypełnieniu diody IR rzędu 10% (można je regulować od wąskiej szpilki do 50% okresu fali IR) mój czujnik wykrywa mnie w białej koszulce z odległości ponad 3m. Prąd diody w impulsie nie przekracza 35mA, ale dzięki usypianiu procesora w IDLE i małemu wypełnieniu prąd zasilania jest < 10mA 🙂

Niestety taka czułość wymaga już obudowania diody IR metalową rurką z dokładnie zatkanym tyłem (od strony wyprowadzeń diody) bo tamtędy też świeci oraz zbudowania małego domku wokół TSOPa.

EDIT: Mała poprawka: dioda dostała dłuższą rurkę (ok. 80mm, fi 10mm) a TSOP domek otaczający go z każdej strony + rurka z czarnego kartonu i zasięg wykrywania białego Tshirta wzrósł do ponad 4m przy PWM podkręconym do ok 25%. Tym samym skończył mi się pokój. Zasięg ograniczony jest głównie bezpośrednim wpływem diody nadawczej na TSOPa. Przy podkręcaniu czułości odbiornika albo zwiększaniu wypełnienia PWMa promieniowanie diody przełązi wprost do TSOPa i wyzwala go. Nie jestem w stanie zrobić metodami domowo-garażowymi lepszej separacji i na tej odległości kończę zabawę. Prąd diody w impulsie to wciąż 35mA 🙂

Na koniec schemat:

oraz program (źródło i hex):

tiny13sens1.zip

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Witam pozwolę sobie odświeżyć temat może nie jestem odkrywczy ale postaram się podzielić się tym co zrobiłem ponieważ nie widziałem aby ktoś coś takiego zrobił. A więc każdy kto bawi się w Minisumo marzy o tym aby zrobić robota niewidzialnego dla podczerwieni więc część konstruktorów maluje swoje roboty na czarno ale umówmy się to wiele nie pomaga a ja pomyślałem sobie żeby zrobić to tak zamiast pomalować robota na czarno to lepiej zrobić pancerz z ... luster. Lustro jak wiemy odbija promieniowanie świetlne więc jeśli pochylimy takie lusterko pod kątem to odbijemy większość promieniowania które nie wróci do odbiornika i czujnik niczego nie zobaczy. Podniecony taką perspektywą zrobiłem prosty test efekty są niesamowite ! co widać na zdjęciu czujnik nie widzi lusterka nawet z odległości kilku centymetrów pomimo tego że lusterko nie jest nachylone pod jakimś dużym kątem maks 20 stopni a gdyby tak zwiększyć nachylenie do 30-40 stopni to stajemy się zupełnie niewidoczni ! Zresztą zobaczcie sami :

I co myślicie ?

Udostępnij ten post


Link to post
Share on other sites

No tak tak, ale i tak Twój robot świeci jakąś wiązką którą wykryje Twój przeciwnik... Szczególnie jeśli ktoś stosuje sharpy, które są w większości robotów to one wzajemnei bardzo dobrze się widzą tak samo jak tsopy + ir . A ultradźwięki nie wiem czy by zdały egzamin przy dzisiejszych prędkościach minisumo. Był na robomaticonie robot z lusterek, i jakoś nie zajął miejsca na podiumi był widzialny przez przeciwników.

Udostępnij ten post


Link to post
Share on other sites

Z tego co pamiętam była już podobna propozycja i wszystko jest pięknie do pierwszego zderzenia z przeciwnikiem. Lustro potłucze się, chyba, że masz jakiś pomysł na jego ochronę? Był też pomysł, a nawet chyba taki robot, żeby użyć blachy polerowanej, mniej odbija światło, ale wytrzymalsza, ale tu również przy uderzeniu w przeciwnika blacha rysowała się i robot był bardziej widoczny dla przeciwnika. Poza tym, jeśli chcemy wiedzieć gdzie jest przeciwnik też musimy działać czujnikami i po pierwsze nasze czujniki będą świeciły w czujniki przeciwnika, po drugie, nawet gdy zastosujemy inne długości fali diody to i tak pozostają miejsca, gdzie czujniki wystają i przeciwnik może nas tam złapać, choć szanse są już mniejsze. Możemy ewentualnie miotać się po ringu tak, żeby nie wypaść, i mieć nadzieję, że trafimy w przeciwnika.

Udostępnij ten post


Link to post
Share on other sites

szczerze wydaje mi się że wszystkie problemy o których piszecie są łatwe do rozwiązania

1. Wzajemne widzenie się czujników można łatwo zniwelować stosując dwie metody

Pierwsza umieścić czujniki w nietypowych miejscach a więc np bardzo nisko tuż przy ringu ponieważ większość robotów ma czujniki znacznie wyżej więc zmniejszymy strumień światła padającego na czujniki przeciwnika zresztą jak próbowałem świecić w czujnik wiązką niemodulowaną to w zasadzie wykrywał diodę z odległości 4-5 cm i nie miało znaczenia czy dioda się świeci czy nie podejrzewam że z modulacja niczego nie zmieni... ale to się okaże kluczem do sukcesu jest moim zdaniem staranne wykonanie pancerza bez nierówności i wystających elementów.

Po drugie możemy zastosować nietypową modulacje a co do tłukących się luster to można zastosować samoprzylepną okleinę i nawet zmieniać ją po każdej walce

Udostępnij ten post


Link to post
Share on other sites

Ta za chwilę dojdziemy do generatora pola plazmowego.

Skoro tak się obawiacie że wasz czujnik, da znać swoją wiązką, gdzie jest robot, to zbudujcie może czujnik pasywny, który będzie tylko nasłuchiwał eter szukając, odpowiednich częstotliwości.

Co do niewidzialności robota, napisano tu jak to zrobić.

Udostępnij ten post


Link to post
Share on other sites

Faktycznie przeczytałem poprzednie posty i pomysł z frezowaną piramidką nie jest zły ale nieco trudny do wykonania co to nasłuchiwania to w sumie może być wyjście może trochę kłopotliwe ale jeśli udało by się coś takiego zrobić to... na pewno było by ciekawie 🙂

Udostępnij ten post


Link to post
Share on other sites

Ostatnie wypowiedzi w temacie teoretyzowania dawno już ucichły. Macie propozycje na kolejne tematy?

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...