|
Ultradźwiękowy czujnik odległości do robota |
| Autor |
Wiadomość |
drukarz

Pomógł: 2 razy Posty: 80 Otrzymał 7 piw(a) Skąd: z PCB
|
Wysłany: 09 Maj 08 10:02 Ultradźwiękowy czujnik odległości do robota
|
|
|
Witam kolegów.
Postanowiłem zaprezentować projekt ultradźwiękowego czujnika odległości.
Pomysł zaczerpnąłem z tutoriala p. Teodora Otulaka.
http://www.patron.ehost.p...VR_tutorial.htm
I postanowiłem go jakoś poprawić.
W skrócie o co chodzi:
Przedstawiony czujnik odległości zrealizowany jest za pomocą przetworników ultradźwiękowych. Przetworniki te są łatwo dostępne ich koszt to ok. 8-10zł za komplet (nadajnik plus odbiornik). Mózgiem jest ATmega8. Odległość jest wyświetlana na dwóch wyświetlaczach 7segmentowych oraz dodatkowo za pomocą czterech pinów portu C. Całość nie doczekała się jeszcze niestety płytki PCB ze względu na brak czasu. Całość została zmontowana na nieocenionej płytce stykowej.
CZĘŚĆ ELEKTRONICZNA:
Wyświetlacze 7 segmentowe są podłączone do PORTB przez rezystory 500Om. W celu zmniejszenia poboru prądu można użyć nawet 1k. Segmenty zostały podłączone do portu B w następujący sposób:
Led A - PB2;
Led B - PB1;
Led C - PB7;
Led D - PB0;
Led E - PB5;
Led F - PB3;
Led G - PB4;
Led H - PB6;
Oznaczenia segmentów:
Oto schemat:
Jeśli nie chcemy to możemy nie montować w ogóle wyświetlaczy.
Katody wyświetlaczy zostały podłączone bezpośrednio do pinów PC0,PC1.
Przetworniki ultradźwiękowe podłączyłem sposób następujący: nadajnik (oznaczony literą T) do PD0 i PD1, a odbiornik (R) do komparatora analogowego AIN0 (PD6) i AIN1 (PD7). Do nóżek odbiornika podłączyłem rezystor w celu eliminacji zakłóceń.
Ważne jest też, żeby nadajnik i odbiornik były czymś oddzielone (u mnie jest to aluminiowy radiator). Można też nieco rozchylić przetworniki. Również możemy je umieścić w metalowych krótkich rurkach wystających kilka mm ponad przetworniki. Robimy tak ponieważ dźwięki z nadajnika od razu może słyszeć odbiornik, w związku z czym odbiera nie dźwięki odbite ale te bezpośrednio z nadajnika. U mnie działo się tak cały czas więc oddzieliłem je radiatorem. Lepszym jednak rozwiązaniem byłyby rurki bo w moim przypadku odbiornik odbierał dźwięki nawet wtedy kiedy coś było obok niego a nie bezpośrednio naprzeciwko.
Zauważyłem też, że nie wszystkie przetworniki ultradźwiękowe są takie same (to chyba normalne;). Podczas testowania używałem dwóch kompletów z zupełnie innych źródeł. Różnice polegały na tym że wyświetlały troszkę inne odległości aż o około 2cm. Inne mogą pokazywać jeszcze inaczej, dlatego jeśli chcemy mieć dokładnie tyle ile się wyświetla można zmienić troszkę program.
Układ pobiera w czasie pracy maks 35mA.
CZĘŚĆ PROGRAMOWA:
Program napisany został w języku C.
Odbiór ultradźwięków postanowiłem zrobić to za pomocą przerwania zewnętrznego. Po zmianie programu i testach stwierdziłem że to nie najlepszy pomysł. Często pojawiały się zakłócenia i układ wariował. Zmniejszył się też zasięg i układ się powiększył o kilka elementów. Poza tym obsługę wyświetlaczy zrobiłem na przerwaniach od timera0 i troszkę mi to kolidowało. Dałoby się to rozwiązać ale... Skorzystałem z komparatora analogowego.
Po kolejnych testach zmieniłem rezystor przy odbiorniku zamiast 220k dałem 100k. Dobrałem go eksperymentalnie. Za małe wartości zmniejszały zasięg, a za duże nie eliminowały wszystkich zakłóceń. Wcześniej np. przy odległości ok. 20-30cm układ czasami wariował i wyświetlał na chwilkę odległość ok. 5cm. Przy oporze 100k już się nic takiego nie działo.
Kolejnym pomysłem było dodanie jakiegoś innego sposobu informowania o zmierzonej odległości. Wyświetlacz wygodny pomysł jak chcemy mieć prosty sposób na odczyt odległości-ot taki bajer. Ale jeśli będziemy chcieli zastosować czujnik np przy robocie to beznadzieja. Pomyślałem więc że dorobię jeszcze jedną sygnalizacje odległości. I zrobiłem tak:
Wraz ze zmniejszaniem się odległości od przeszkody, na niewykorzystanych pinach portu D kolejno pojawia się stan wysoki. Tj:
15-10cm -pin PD5 stan wysoki
10-5cm - pin PD4 stan wysoki
5-3cm - pin PD3 stan wysoki
<3cm - pin PD2 stan wysoki
Jeśli chodzi o dokładność to w dużym stopniu zależy od przetworników ultradźwiękowych i ich ułożenia. Dlatego wyświetlacz wyświetla odległości w następujący sposób:
>30cm - wyświetlacz wyłączony
30-21cm - wyświetla 30;
20-16cm - wyświetla 20;
15-10cm - wyświetla 15;
10-6cm - wyświetla 10;
5-4cm - wyświetla 5;
3-0cm - wyświetla 3;
Można też dopasować program do własnych przetworników zmieniając watości w tabeli zoom.
Jeszcze na temat programu. Nie jest może idealny ani zabójczo przejrzysty ale miałem drobne problemy z tablicami. WinAVRa dopiero się uczę a składnia języka C w nim różni się nieco od innych kompilatorów także wybaczcie. Można go napisać trochę prościej. Ponad to jest to wersja druga programu. Pierwsza została bezpowrotnie utracona. Ta wersja zajmuje troszkę więcej pamięci w procesorze ale i tak zajmuje go niewiele.
Jest też wada tego sonaru. Jeśli przedmiot jest umieszczony prostopadle to wykrywa go bez problemów. Nawet monetę 2zł wykrywa z odległości 30cm. Ale jeśli jest pod kątem 45° to już jest gorzej. Ale w przypadku odległości poniżej 10cm przedmiot i tak zostaje wykryty.
To by było na tyle. Jeśli ktoś ma jakieś uwagi czy pomysły jak to poprawić lub zrobić inaczej to piszcie. Postaram się poprawić.
Przepraszam za marną jakość zdjęć. Nie posiadam aparatu więc robiłem telefonem;)
DSC00278.jpg
|
 |
| Plik ściągnięto 62 raz(y) 63,54 KB |
Sonar 3.rar
|
Pobierz Plik ściągnięto 232 raz(y) 41,39 KB |
|
|
|
|
|
 |
czeladzian

Posty: 3 Skąd: z akademika
|
Wysłany: 16 Cze 08 01:47
|
|
|
| Witam czy wyświetlacze muszą być na wspólnej anodzie czy katodzie? |
|
|
|
|
 |
drukarz

Pomógł: 2 razy Posty: 80 Otrzymał 7 piw(a) Skąd: z PCB
|
Wysłany: 16 Cze 08 07:48
|
|
|
Czyżby mi umknęło w opisie?
Wyświetlacze ze wspólną katodą. Ale łatwo jest zmienić program żeby można było używać wyświetlaczy ze wspólną anodą.
Wystarczy w pliku znaki.h po definicji znaków, przed nawiasami wstawić znak negacji ~ i w linijce 12
| Kod: | unsigned char Com[2] = {~(1<<COM1),~(1<<COM2)}; |
usunąć znak negacji czyli ma być:
| Kod: | unsigned char Com[2] = {(1<<COM1),(1<<COM2)}; |
oraz w linijce 161
| Kod: | COMPORT &= ~(1<<COM1 | 1<<COM2); |
także usunąć znak negacji czyli :
| Kod: | COMPORT &= (1<<COM1 | 1<<COM2); |
i będzie działało.
Zacząłem też robić kolejną wersję z kostką TL082 ale coś czasu ciągle brakuje.
Teraz robię regulowany generator przebiegu prostokątnego |
|
|
|
|
 |
czeladzian

Posty: 3 Skąd: z akademika
|
Wysłany: 17 Cze 08 10:53
|
|
|
| Wlanise jestem w trakcie tworzenia tego projektu:) Mam jeszcze pytanie na schemacie są zaznaczone "sygnały zj" co one oznaczają? |
|
|
|
|
 |
daniel93


Pomógł: 11 razy Posty: 390 Otrzymał 19 piw(a) Skąd: Wujskie
|
Wysłany: 17 Cze 08 12:24
|
|
|
| Robiłeś jakieś porównania sonarów 10 i 16mm? |
|
|
|
|
 |
drukarz

Pomógł: 2 razy Posty: 80 Otrzymał 7 piw(a) Skąd: z PCB
|
Wysłany: 17 Cze 08 03:51
|
|
|
Chodzi Ci o średnicę przetworników? Tak robiłem. Ale nie było jakiejś znaczącej różnicy szczerze mówiąc. Miałem też pomysł żeby upchnąć dwa sonary w jednej atmedze za pomocą komparatora analogowego LM311 ale pomysł z czasem umarł.
Sygnały Z1 są to piny do których podłączasz np diody jeśli nie chcesz mieć wyświetlaczy. Taki dodatkowy sposób informowania o odległości. Pisałem o tym:
| Cytat: | Wraz ze zmniejszaniem się odległości od przeszkody, na niewykorzystanych pinach portu D kolejno pojawia się stan wysoki. Tj:
15-10cm -pin PD5 stan wysoki
10-5cm - pin PD4 stan wysoki
5-3cm - pin PD3 stan wysoki
<3cm - pin PD2 stan wysoki |
Jeszcze chciałbym dodać że między nadajnikiem i odbiornikiem nie trzeba montować zasłonki. Te czujniki na zdjęciach były jakieś dziwne chyba bo inne się same nie wzbudzały ja się je odsunęło na jakieś 2cm od siebie.
Można też zwiększyć rezystor przy odbiorniku. Wtedy można uzyskać większą czułość i zasięg ale to już zależy od czujników. Mi się udało nawet osiągnąć zasięg 80cm ale wykrywał ścianę pod kątem prawie 90stopni. Małych przedmiotów się wykrywał na taką odległość. |
|
|
|
|
 |
daniel93


Pomógł: 11 razy Posty: 390 Otrzymał 19 piw(a) Skąd: Wujskie
|
Wysłany: 17 Cze 08 05:56
|
|
|
Na 16mm zasięg jest dużo lepszy?
Ciekaw jestem jak w praktyce wygląda właśnie kwestia różnicy zasięgu na większej średnicy przetworników. |
|
|
|
|
 |
drukarz

Pomógł: 2 razy Posty: 80 Otrzymał 7 piw(a) Skąd: z PCB
|
Wysłany: 20 Cze 08 08:05
|
|
|
No właśnie u mnie był lepszy ale nie tak zaś dużo. Nie eksperymentowałem jakoś specjalnie z tym 16mm. Tylko podłączyłem, sprawdziłem i znowu założyłem dziesiątki.
Jak nie będę miał co robić to sprawdzę to dokładniej.
Ale myślę że jakbyś dorzucił do tego wzmacniacz to nawet na 10mm osiągniesz zasięg kilku metrów. |
|
|
|
|
 |
eternal656

Posty: 3 Skąd: kuxnia raciborska
|
Wysłany: 20 Paź 08 06:39
|
|
|
a jak go podłączyc do robota np Line Follower |
|
|
|
|
 |
treker
www.dioda.com.pl


Pomógł: 13 razy Posty: 528 Otrzymał 30 piw(a) Skąd: Gdynia
|
Wysłany: 20 Paź 08 06:57
|
|
|
A poco Ci w Linfollowerze czujnik ultradźwiękowy, chcesz nim wykrywać linie czy co |
|
|
|
|
 |
Sabre


Pomógł: 12 razy Posty: 209 Otrzymał 49 piw(a) Skąd: Warszawa
|
Wysłany: 20 Paź 08 07:05
|
|
|
| treker napisał/a: | A poco Ci w Linfollowerze czujnik ultradźwiękowy, chcesz nim wykrywać linie czy co |
Raczej chodzi mu o coś takiego co zrobił Kaytec w swoim Ironie (mam nadzieję, że nie pomyliłem nazwy). Jego linefollower zatrzymywał się w określonej odległości przed przeszkodą, więc wystarczyło coś postawić na torze jazdy i lfr się zatrzymywał. To jest bardzo przydatna funkcja, szczególnie przy szybszych robotach, ale wystarczyłby do tego ten czujnik na podczerwień sharpa. |
|
_________________ Gość jeśli pomogłem, postaw piwo. |
|
|
|
 |
bb5

Posty: 8 Skąd: Poznań
|
Wysłany: 19 Gru 08 09:30
|
|
|
Witam!
Czy mógłby ktoś podać kod w bascomie do obsługi tego dalmierza? |
|
|
|
|
 |
misiek1994


Pomógł: 2 razy Posty: 191 Otrzymał 13 piw(a) Skąd: z Sędziszowa
|
Wysłany: 20 Gru 08 10:33
|
|
|
| Nie powstał taki kod, ani pewnie nie powstanie. Przeczytaj kurs C, skompiluj program i wgraj do uC. |
|
|
|
|
 |
Mikan

Posty: 1 Skąd: Poznań
|
Wysłany: 30 Gru 08 06:54
|
|
|
Witam!
Czy ktoś ze znajomością C może napisać w jaki sposób generowany jest sygnał dla nadajnika?
Od dłuższego czasu próbuję złożyć podobny układ na atmedze 88, nadajniku i odb. US 10mm, ale mam problem żeby wygenerować odpowiednia częstotliwość. Próbowałem z Timerem1 w trybie CTC i ze zmianą pinów przy przerwaniu. Na odbiorniku nie występują żadne zmiany napięcia. Napięcie na nadajniku jest dziwnie niskie (>2V). |
|
| Ostatnio zmieniony przez Mikan 30 Gru 08 06:59, w całości zmieniany 1 raz |
|
|
|
 |
misiek1994


Pomógł: 2 razy Posty: 191 Otrzymał 13 piw(a) Skąd: z Sędziszowa
|
Wysłany: 31 Gru 08 05:22
|
|
|
| Mam tylko jendno pytanie: czy ~((xyz)(xzy)(zyx)) jest równe (~(xyz)~(xzy)~(zyx)):?: |
|
|
|
|
 |
Kuncfot

Posty: 1 Skąd: Warszawa
|
Wysłany: 05 Sty 09 02:48 Re: Ultradźwiękowy czujnik odległości do robota
|
|
|
| drukarz napisał/a: |
...
To by było na tyle. Jeśli ktoś ma jakieś uwagi czy pomysły jak to poprawić lub zrobić inaczej to piszcie. Postaram się poprawić.
|
Żeby nie było ze nowy i zaraz marudzi to zaznacze ze od jakiegos czasu czytam sobie to forum i chciałbym się teraz oficjalnie przywitac
Nie mam wielkiego doswiadczenia w konstrukcji robotów ale cos tam o elektronice i Atmedze wiem...
Generalnie fajny projekcik, tymbardziej ze działa
Prosisz o uwagi to je przesyłam, generalnie spory błąd to zajmowanie czasu na wyswietlanie wynikow w procedurze obsługi timera, koniecznie przerzuc to do głównej petli!
Pozatym szczególikiem gratuluję! |
|
| Ostatnio zmieniony przez Kuncfot 05 Sty 09 03:09, w całości zmieniany 1 raz |
|
|
|
 |
drukarz

Pomógł: 2 razy Posty: 80 Otrzymał 7 piw(a) Skąd: z PCB
|
Wysłany: 05 Sty 09 09:37 Re: Ultradźwiękowy czujnik odległości do robota
|
|
|
| Kuncfot napisał/a: | Prosisz o uwagi to je przesyłam, generalnie spory błąd to zajmowanie czasu na wyswietlanie wynikow w procedurze obsługi timera, koniecznie przerzuć to do głównej pętli!
Poza tym szczególikiem gratuluję! |
Ja tylko rozwinąłem troszkę cudzy projekcik. Więc to chyba nie do mnie gratulacje
Ostatnio wpadłem na pomysł poprawienia nieco tego układu więc jak już się za to zabiorę to poprawię też to wyświetlanie.
Za uwagę dziękuję. |
|
|
|
|
 |
| Tagi: ultradźwiękowy czujnik • czujniki • sonar • dalmierz |
|
|