Strona Główna
FAQFAQ  SzukajSzukaj MapaMapa  UżytkownicyUżytkownicy RegulaminRegulamin  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj
Warto zobaczyć: Konstrukcje Wiadomości Artykuły


Przyszłość jest w naszych rękach...
...bo przyszłość to robotyka.


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

Postaw piwo autorowi tego posta
 
 
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?

Postaw piwo autorowi tego posta
 
 
drukarz 



Posty: 125
Pomógł: 2 razy
Piwa: 11/6
Skąd: z PCB
Programuję w:
C

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 :-P



Postaw piwo autorowi tego posta
 
 
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ą?

Postaw piwo autorowi tego posta
 
 
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?

Postaw piwo autorowi tego posta
 
 
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ść.

Postaw piwo autorowi tego posta
 
 
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.

Postaw piwo autorowi tego posta
 
 
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.



Postaw piwo autorowi tego posta
 
 
eternal656 



Posty: 2
Postawił 1 piw(a)
Skąd: kuxnia raciborska
Wysłany: 20 Paź 08 06:39   

a jak go podłączyc do robota np Line Follower :?: :?:

Postaw piwo autorowi tego posta
 
 
 
Treker 




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

Wysłany: 20 Paź 08 06:57   

A poco Ci w Linfollowerze czujnik ultradźwiękowy, chcesz nim wykrywać linie czy co :shock: :?:

Postaw piwo autorowi tego posta
 
 
Sabre 
Elektronika i mechanika




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

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 :shock: :?:


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.


Moje roboty: Psotek, Psotek2, Psotek3

Gość jeśli byłem pomocny kliknij Pomógł, lub postaw piwo.
Postaw piwo autorowi tego posta
 
 
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?

Postaw piwo autorowi tego posta
 
 
misiek1994 




Posty: 213
Pomógł: 4 razy
Piwa: 18/3
Skąd: z Sędziszowa
Programuję w:
asm, C

Ostrzeżeń:
 2/3/4
Wysłany: 20 Gru 08 10:33   

Nie powstał taki kod, ani pewnie nie powstanie. Przeczytaj kurs C, skompiluj program i wgraj do uC.

Postaw piwo autorowi tego posta
 
 
 
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  
Postaw piwo autorowi tego posta
 
 
misiek1994 




Posty: 213
Pomógł: 4 razy
Piwa: 18/3
Skąd: z Sędziszowa
Programuję w:
asm, C

Ostrzeżeń:
 2/3/4
Wysłany: 31 Gru 08 05:22   

Mam tylko jendno pytanie: czy ~((xyz)(xzy)(zyx)) jest równe (~(xyz)~(xzy)~(zyx)):?:

Postaw piwo autorowi tego posta
 
 
 
Kuncfot 



Posty: 5
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 :P to zaznacze ze od jakiegos czasu czytam sobie to forum i chciałbym się teraz oficjalnie przywitac :P

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  
Postaw piwo autorowi tego posta
 
 
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ę.

Postaw piwo autorowi tego posta
 
 
misiek1994 




Posty: 213
Pomógł: 4 razy
Piwa: 18/3
Skąd: z Sędziszowa
Programuję w:
asm, C

Ostrzeżeń:
 2/3/4
Wysłany: 18 Sty 09 09:02   

No to idealnie trafiłem, jak mówimy o poprawkach :-D 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.

Postaw piwo autorowi tego posta
 
 
 
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ść.



Postaw piwo autorowi tego posta
 
 
misiek1994 




Posty: 213
Pomógł: 4 razy
Piwa: 18/3
Skąd: z Sędziszowa
Programuję w:
asm, C

Ostrzeżeń:
 2/3/4
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.

Postaw piwo autorowi tego posta
 
 
 
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ś?



Postaw piwo autorowi tego posta
 
 
misiek1994 




Posty: 213
Pomógł: 4 razy
Piwa: 18/3
Skąd: z Sędziszowa
Programuję w:
asm, C

Ostrzeżeń:
 2/3/4
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.

Postaw piwo autorowi tego posta
 
 
 
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ć? :D

Postaw piwo autorowi tego posta
 
 
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.



Postaw piwo autorowi tego posta
 
 
misiek1994 




Posty: 213
Pomógł: 4 razy
Piwa: 18/3
Skąd: z Sędziszowa
Programuję w:
asm, C

Ostrzeżeń:
 2/3/4
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?

Postaw piwo autorowi tego posta
 
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Wersja do druku

Skocz do:  

Tagi tematu: czujnik, odleglosci, robota, ultradzwiekowy


Powered by phpBB modified by Przemo © 2003 phpBB Group
Linki: instalki nero