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

Posty: 125 Pomógł: 2 razy Piwa: 11/6 Skąd: z PCB
Programuję w: C
|
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 185 raz(y) 63,54 KB |
Sonar 3.rar
|
Pobierz Plik ściągnięto 973 raz(y) 41,39 KB |
|
|
|
|
|
|
 |
Więcej szczegółów
|
Wystawiono 3 piw(a): Nawyk, Special11, Deimos |
 |
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 

Posty: 125 Pomógł: 2 razy Piwa: 11/6 Skąd: z PCB
Programuję w: C
|
|
|
|
 |
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 


Posty: 397 Pomógł: 11 razy Piwa: 42/13 Skąd: Sanok(okolica)
|
Wysłany: 17 Cze 08 12:24
|
|
|
| Robiłeś jakieś porównania sonarów 10 i 16mm? |
|
|
|
|
|
 |
drukarz 

Posty: 125 Pomógł: 2 razy Piwa: 11/6 Skąd: z PCB
Programuję w: C
|
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 


Posty: 397 Pomógł: 11 razy Piwa: 42/13 Skąd: Sanok(okolica)
|
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 

Posty: 125 Pomógł: 2 razy Piwa: 11/6 Skąd: z PCB
Programuję w: C
|
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: 2 Postawił 1 piw(a) Skąd: kuxnia raciborska
|
|
|
|
 |
Treker 


Posty: 924 Pomógł: 22 razy Piwa: 72/56 Skąd: Gdynia
Programuję w: Bascom
|
|
|
|
 |
Sabre 
Elektronika i mechanika


Posty: 716 Pomógł: 38 razy Piwa: 190/1 Skąd: Warszawa
Programuję w: Bascom AVR
|
|
|
|
 |
bb5 

Posty: 30 Pomógł: 1 raz Piwa: 1/2 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 


Posty: 213 Pomógł: 4 razy Piwa: 18/3 Skąd: z Sędziszowa
Programuję w: asm, C
|
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 


Posty: 213 Pomógł: 4 razy Piwa: 18/3 Skąd: z Sędziszowa
Programuję w: asm, C
|
Wysłany: 31 Gru 08 05:22
|
|
|
| Mam tylko jendno pytanie: czy ~((xyz)(xzy)(zyx)) jest równe (~(xyz)~(xzy)~(zyx)):?: |
|
|
|
|
|
 |
Kuncfot 

Posty: 5 Skąd: Warszawa
|
|
|
|
 |
drukarz 

Posty: 125 Pomógł: 2 razy Piwa: 11/6 Skąd: z PCB
Programuję w: C
|
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ę. |
|
|
|
|
|
 |
misiek1994 


Posty: 213 Pomógł: 4 razy Piwa: 18/3 Skąd: z Sędziszowa
Programuję w: asm, C
|
Wysłany: 18 Sty 09 09:02
|
|
|
No to idealnie trafiłem, jak mówimy o poprawkach Jest tego typu problem, że zrobiłem sobie ten układzik i wyświetlacz działa, ale nie wyświetla tego, co trzeba. Jak zerknąłem przez oscyloskop na wyjście nadajnika to sygnał był super słaby, ledwie zauważalny. Ma ktoś jakieś pmysły?? Przetworniki z laro, atmega8l zasilana przez stabilizator 5V. |
|
|
|
|
|
 |
drukarz 

Posty: 125 Pomógł: 2 razy Piwa: 11/6 Skąd: z PCB
Programuję w: C
|
Wysłany: 18 Sty 09 12:21
|
|
|
Tzn nie wyświetlał takich odległości jakie były tak?
Możesz spróbować zamienić rezystor na wejściu odbiornika na większy. Poza tym można zmienić w kodzie programu wyświetlaną wartość. |
|
|
 |
|
|
|
 |
misiek1994 


Posty: 213 Pomógł: 4 razy Piwa: 18/3 Skąd: z Sędziszowa
Programuję w: asm, C
|
Wysłany: 18 Sty 09 08:08
|
|
|
W zasadzie to wyświetla , gdy zaraz zetkne przetworniki 1 lub 2. Gdy oddale na coś koło 5cm wyświetla już 30 lub 50. Wg. mnie może to nie być nawet zależne od tych ultradźwiękow, lecz od zakłóceń różnego rodzaju. Teraz zbudowałem nadajnik na max232 to tak, jakby ciut lepiej działało.
[ Dodano: 18 Sty 09 08:14 ]
COś mi się wydaje, że ta prostota nie przemawia za funkcjonalnością. Chyba lepiej wezme zrobie sonar stereo z konaru. |
|
|
|
|
|
 |
drukarz 

Posty: 125 Pomógł: 2 razy Piwa: 11/6 Skąd: z PCB
Programuję w: C
|
Wysłany: 19 Sty 09 07:16
|
|
|
A może nadajnik i odbiornik są za blisko siebie?
Ten z konaru jest lepszy to oczywiste. Ale mi ten działa dobrze i problemów z nim nie miałem jak na razie.
A co do max232 to dorzuciłeś do tego układu maxa czy jakiś inny zrobiłeś? |
|
|
 |
|
|
|
 |
misiek1994 


Posty: 213 Pomógł: 4 razy Piwa: 18/3 Skąd: z Sędziszowa
Programuję w: asm, C
|
Wysłany: 19 Sty 09 07:44
|
|
|
| Normalnie jak nie chciało na początku działac to dałem maxa. Nadajnik i dbiornik są blisko siebie, ale odgrodzone radiatorem aluminiowym 4mm. |
|
|
|
|
|
 |
Kofel 

Posty: 7 Otrzymał 1 piw(a) Skąd: Wyszków
|
Wysłany: 20 Sty 09 07:27
|
|
|
Mam pytanie, gdzie można taki układ dostać? |
|
|
|
|
|
 |
drukarz 

Posty: 125 Pomógł: 2 razy Piwa: 11/6 Skąd: z PCB
Programuję w: C
|
Wysłany: 20 Sty 09 07:49
|
|
|
| Jaki? MAX 232?? W każdym sklepie elektronicznym. |
|
|
 |
|
|
|
 |
misiek1994 


Posty: 213 Pomógł: 4 razy Piwa: 18/3 Skąd: z Sędziszowa
Programuję w: asm, C
|
Wysłany: 21 Sty 09 01:42
|
|
|
| Wszystko dostępne pod tme.pl Gorsze wersje przetworników na laro. Jak narazie to ruszać tego nie będe, bo mi sie nie chce. nie wiem, czy wogóle tego nie rzucić. Mógłbyś mi powiedzieć jeszcze, jakim napięciem to zasilasz (ja stabilizowanym 5V), gdzie kupowałeś przetworniki oraz czy dałeś zewnętrzny kwarc? |
|
|
|
|
|
 |
|
|