Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Sonar - problem

23 Gru 2005 17:42 6632 27
  • Poziom 10  
    W necie na stronce http://www.patron.net.pl/konstruktorzy/AVR_tutorial.htm zlalazlem taki schemacik sonaru ultradzwiekowego, i wszystki bylo by ok gdzyby nie to, ze troszeczke inaczej on dziela niz powinien ,a mianowicie piszczy jak oszalaly gdy nie ma w jego zasiegu zadnego przedmiotu a gdzy juz jest to tez piszczy:D a powonien podobno zmieniac czestotliwosc dzwieku z zaleznosci od oleglosci. Jesli ktos byl by w stanie mi pomoc to byl bym wdzieczny. Ponizej umieszczam programik w oparciu o ktory dziala tem sonar:

    #include <avr/io.h>

    #include "sonar.h"

    #include "poprzednie.c"

    int ping(void)

    {

    // procedura wysyłająca paczkę ultradźwięków

    int echo=0; // tutaj zanotujemy opóźnienie powrotu echa

    sinus_40_khz();

    sinus_40_khz();

    sinus_40_khz();

    sinus_40_khz();

    sinus_40_khz();

    sinus_40_khz();

    sinus_40_khz();

    sinus_40_khz();

    sinus_40_khz();

    sinus_40_khz();

    // po wysłaniu paczki ultradźwięków wytłumiamy drgania

    // przetwornika zwierając je do masy

    cbi(ultrasonic_pinA_port,ultrasonic_pinA_pin);

    cbi(ultrasonic_pinB_port,ultrasonic_pinB_pin);

    delay(8);



    //rozładowujemy pojemność przetwornika wejściowego

    //poprzez zwarcie do masy

    sbi(DDRD,PD6);

    cbi(PORTD,PD6);

    delay(8);

    // włączamy wejście

    cbi(DDRD,PD6);

    // teraz czekamy na powrót echa

    for(echo=0;echo<201;echo++)

    {

    if(bit_is_set(ACSR,ACO))

    {

    break;

    }

    }

    return echo;

    }

    void sinus_40_khz(void)

    {

    sbi(ultrasonic_pinA_DDR,ultrasonic_pinA_pin);sbi(ultrasonic_pinA_port,ultrasonic_pinA_pin);

    sbi(ultrasonic_pinB_DDR,ultrasonic_pinB_pin);cbi(ultrasonic_pinB_port,ultrasonic_pinB_pin);

    // teraz czekamy połowę okresu sinosoidy

    asm volatile (

    "WDR"::);

    asm volatile (

    "WDR"::);

    asm volatile (

    "WDR"::);

    asm volatile (

    "WDR"::);



    cbi(ultrasonic_pinA_port,ultrasonic_pinA_pin);

    sbi(ultrasonic_pinB_port,ultrasonic_pinB_pin);

    // teraz czekamy nieco krócej jak okres połowy sinusoidy

    // bo procesor potrzebuje nieco czasu na powrót z tej procedury

    // i ponowne do niej wejście - dopiero wtedy rozpocznie kolejną

    // sinusoidę



    asm volatile (

    "WDR"::);

    asm volatile (

    "WDR"::);



    }



    int main (void)

    {

    int odleglosc=0;

    int dzwiek=0;

    LED_ON;

    beep(2,150);

    beep(3,70);

    LED_OFF;



    // zwieramy nieodwracające wejście komparatora do masy

    sbi(DDRD,PD7);

    cbi(PORTD,PD7);



    for (;;)

    {

    LED_ON;

    delayms(10);

    LED_OFF;

    delayms(100);

    odleglosc=ping();

    if(odleglosc<10)

    {

    beep(2,50);

    beep(3,50);

    }

    if(odleglosc<200)

    {

    dzwiek=odleglosc;

    beep(1,dzwiek);

    }



    }

    return (0);

    }
  • Poziom 14  
    Zakladam że ATmega masz na 1MHz ustawiony i że nie zmieniałeś fusów? Jeśli nie to proponuje sprawdzic jakimś miernikiem połączenia na płytce (no chyba ze robisz na pajączku a wtedy to szerokiej drogi). Prawdopodobnie masz zwarcie gdzies przy komperatorze bo z tego co pamietam to pipczeć ma jak komperator podnosi flage.
    Program działał u mnie bez zarzutu
    Wesołych świąt :]
  • Poziom 10  
    Dzieki, sprawdzic zawsze mozna ale nie wydaje mi sie zeby bylo jakies zwarcie, po podlanczam to raz jeszcze moze wtedy bedzie ok.

    *******Wesołych Świąt*******
  • Poziom 14  
    A kompilator nie wyrzuca ci zadnych bledow?
  • Poziom 10  
    Kompiluje sie wszystko i żadnych błędów nie widać, na tygodniu zbuduje jakąś płyteczke może to pomoże.
  • Poziom 10  
    Zrobiłem wszystko ładnie na płytce żadnych zwarć ani nic takiego i nic tak jak było wcześniej tak i jest teraz czyli źle, może ma ktoś już gotowy programik i mógł by przesłać byłbym bardzo wdzięczny.
  • Poziom 12  
    Właśnie walczę z tym samym urządzeniem :)
    Mój też jeszcze nieźle wariuje, ale pracuję nad tym.
    Po pierwsze miałem problem z (jak mi się wydaje) nie do końca wytłumionymi drganiami nadajnika. Spróbuj odgrodzić czymś od siebie nadajnik i odbiornik. U mnie kawałek gąbki świetnie zdaje egzamin :)

    Powodzenia!
  • Poziom 10  
    Myslałem żeby tak zrobić ale ostatnio trochę czasu nie miałem sesja i te sprawy, ale teraz juz będe miał wiecej czasu to się trochę tym pobawię, a program sam sobie napisałeś czy ten ze stronki??
  • Poziom 12  
    Ten ze stronki, dostosowałem go tylko do potrzeb ATtiny2313.
  • Poziom 10  
    W takim razie program jest dobry, musze to wszystko ładnie połączyć to może będzie działać.
  • Użytkownik usunął konto  
  • Poziom 9  
    tez tam wisze:) mam pytanie czy te nad/odb ultradzwiekow mają konkretnie plus i minus? czy to obojętne? troche uproscilem programik - jest tylko dioda bez brzeczka.
  • Poziom 35  
    1.Obojętnie jak podłączysz, tam nie ma plusa/minusa

    2.Jak dla mnie to ten program jest troche zły.

    W funkcji "sinus" przerwa to odpowiednio 4 wdr + 2 operacje (sbi/cbi), razem 6 cykli zegara *2 = 12cykli.

    Jeżeli chcemy mieć fale 40khz to powinniśmy zmieniać (z plusa na minus/minusa na plus) sygnał z częstotliwością 80khz, co nam daje 12cykli na zmiane(1MHz/80kHz), a 12*2=24 cykle (dokładnie powinno być 25) do użyskania fali 40kHz.

    3.Przerobiłem to na działanie z diodą (głośniczka nie miałem) i 8MHz zegarem (oczywiście odpowiednio wszystkie przerwy wydłużyłem) i wszystko działa ok, spokojnie działa w zakresie ca. 5-100cm, dalej nie próbowałem bo nie mam zbytnio warunków (narazie to "wisi" tylko na płytce stykowej)

    4.Ogólnie to ten sonar działa badziewnie z tego co widze.. będę miał troche czasu to się pobawie nim, głównie w obudowanie nadajnika/odbiornika rurką z pianki w celu lepszego ukierunkowania sygnału.
    Ja preferuje czujniki IR typu gp2d12, bo nie sieją sygnałem dookoła tylko dokładnie wiadomo gdzie jest obiekt w momencie wykrycia.
  • Poziom 9  
    a mi to w ogole niby cos wykrywa jak nawet nadajnik odpiąlem:/
  • Poziom 15  
    Robiliśmy robota na Sumo Robotów w Poznaniu i nasze sonarki w porywach miały zasięg ponad 1,5m. Dokładnie ten sam program i schemat. Co ciekawe, najlepsze wyniki uzyskalismy gdy zamiast odbiornika dalismy drugi nadajnik. (Jednak były wtedy troszkę wieksze zakłócenia). Polecam ten układ bo jest prosty tani i całkiem niezły.
  • Poziom 9  
    no dobra ja juz nie wiem co jest grane - mam diode podlączoną PB1. juz nawet wywaliłem odbiornik czyli wejscia do komparatora atmegi są niepodłączone. jak porusze odpowiednio płytką , położę ją na czymś np to dioda swieci

    for(;;)

    if(bit_is_set(ACSR,ACO))
    LED_ON;
    delayms(2000);
    LED_OFF;


    ktos wie czym to jest spowodowane? ?
  • Poziom 14  
    Hej!
    Jeśli chodzi o program oraz schemat to mogę wam powiedzieć że na 100%
    jest ok. Razem z pyt_comem i jeszcze jednym kumplem budowaliśmy robota
    na zawody - ja zajmowałem się oprogramowaniem oraz układem z sonarami.
    Proponuję pobawić się trochę delayami oraz pętlą:
    for(echo=0;echo<201;echo++)

    {

    if(bit_is_set(ACSR,ACO))

    {

    break;

    }

    U mnie "echo" zwiększałem nawet do 600 i też wychwytywał mi odbity
    sygnał. Nie zmieniajcie funkcji sinus, bo nie ma sensu. Możecie też
    spróbować zmienić rezystor, który jest przypięty równolegle do obu nóżek odbiornika fal ultradźwiękowych. Zamiast 470k, który
    proponują na stronie, zastosowałem 100k, co poprawiło osiągi urządzenia.

    Pozdrowienia.
    KoTu.

    Moderowany przez Bartek_Wosik:

    Kolego nie przekręcaj nick'ów innych użytkowników, ponieważ mogą czuć się urażeni.

  • Poziom 14  
    Czesc wszystkim!
    Ja w podobnej sprawie a mianowicie chodzi mi o schemat ukladu wykorzystujacego transceiver (nadajnik/odbiornik) pod jedna postacia. Chcialem zrobic czujnik parkowania do auta (chyba jak wszyscy lub wiekszosc) ale wszystko co znajduje w necie to schematy dla "otwartych" nadajnikow z odbiornikami osobno. A ten zastosowany w aucie /jak zakladaja rowniez firmy/ sklada sie zazwyczaj z czterech transceiverow zamontowanych na zderzaku.
    Znalazlem notke aplikacyjna do takiego elementu UTEC4018F (patrz zalacznik) ale schemacik umieszczony na ostatniej stronie niestety nic nie mowi....i jeszcze jakis dziwny "pulse transformer". To jest konkretny element do takiego zastosowania: odporny na temperatury, wilgoc, wodoszczelny.

    Pytanie: czy ktos ma schemat ukladu wykorzystujacego taki jeden czujnik (moze byc oczywiscie pod mikrokontroler jesli jest rowniez soft ;) bo nie jestem zbyt biegly w pisaniu) lub wie jak to mozna wykorzystac :?:

    :idea: Generalna zasade znam: wysyla sie paczke impulsow 40kHz i czeka na odpowiedz.. Czyli rozumujac ze schemaciku wysylam paczke impulsow i po ich zakonczeniu odczytuje z czujnika odpowiedz? I wszystko z okresem 25ms? A czy ten czujnik moze tak szybko odpowiadac?

    Prosze o konkretne odpowiedzi, dzieki!
  • Poziom 14  
    Hej grzeniua!

    Jeśli chodzi o zbudowanie czujnika parkowania opartego na jednym komplecie nadajnik/odbiornik 40kHz to na stronie patron.net.pl (w tutorialu o programowaniu mikrokontrolerów) jest przedstawiony cały schemat budowy urządzenia opartego na mikrokontrolerze AVR Atmega8 włącznie z programem. Po niewielkich przeróbkach spokojnie może posłużyć jako czujnik w samochodzie. Nie wiem, dlaczego chcesz to robić na jednym czujniku nadawczo-odbiorczym. W sumie nie spotkałem się z tego typu rozwiązaniem i nigdy nie korzystałem z takiego. Powiem tak: da się to zrobić na jednym module nadawczym, gdyż nadajnik może służyć również jako odbiornik. Gorzej jest natomiast z przełączaniem jego funkcji. Poza tym może to ograniczyć jego zasięg, chociaż gdy budowałem urządzenie nadawczo-odbiorcze złożone z dwóch nadajników, to przy zastosowaniu niskiego oporu uzyskiwałem zasięg prawie dwukrotnie większy niż przy użyciu nadajnika i odbiornika. Nigdy nie pokusiłem sie natomiast o użycie jednego modułu do obu rzeczy, jednak jest to możliwe. Problemy, które zajdą to przede wszystkim to, że po wysłaniu sygnału trzeba wytłumić drgania nadajnika, a potem dopiero zacząć odczyt. Przy odległościach mniejszych niż 10-15 cm może się nie wyrobić i będą zakłócenia... Chociaż zwieranie na kilka mikrosekund nadajnika do masy po wysłaniu paczki ultradźwięków powinno rozwiązać kłopot.
    Mimo wszystko radzę zastosować osobno nadajnik i odbiornik. Dodatkowo można zastosować w czujniku parkowania jeden mocny nadajnik na środku zderzaka i sprząc ze sobą 2 odbiorniki, umieszczając je na jego krawędziach i kierując je lekko do środka, przez co będą wyłapywać dźwięk odbity nawet od krzywych powierzchni, takich jak słupki.
    Życzę więc inwencji twórczej i jak najmniej spalonego sprzętu w trakcie testów (chociaż wydatek nie jest spory; Atmega8 : 8-15 zł, mały nadajnik-odbiornik działający do metra na 5V : 5 zł [duży : 10 zł], oporniki kabelki itp. to koszt wręcz do pominięcia. Aha! I stabilizator do podpięcia do akumulatora samochodowego, by robił nam 5V z 12 - ok. 2zł ;-) ).

    Pozdrowienia!
    KoTu.
  • Poziom 15  
    troche odswieze temat bo widze ze pare problemow tu zostalo bez odpowiedzi:
    1. program i sposob podlaczenia 100% dziala
    2. jesli z glosniczka wydobywaja sie dzwiek w sposob ciagly i zanika jak jest blisko przeszkody lub odwrotnie to mozecie byc pewni ze program jest nie dopasowany do zegara jaki macie ustawiony w atmedze, ten program jest wyliczony z tego co pamietam pod 4mhz i jesli zmieniacie na inna to nie wystarczy zmienic w programie i atmedze wartosci zegara.
    3. u mnie na czujniku T i R zasieg byl od 5cm do 2m. powyzej byl malo stabilny ale zmieniajac program mozna bylo osiagnac wieksza odleglosc tracac bliskie pomiary
    4 jesli chcecie miec lepszy zasieg konieczne jest zasilanie wyzszym napieciem, z portu atmega mozna uzyskac zmieniajac wyjscia portow 10V
    5 dosc fajne rozwiazanie jest tu http://wartburg353.webpark.pl/
    6 do wiekszych zastosowan warto napisac wlasny program ;)

    dosc latwo sie przerabia go na sprzet ktory nie tylko "pipczy" ale i wyswietla wartosc na lcd
  • Poziom 14  
    snicek dzieki za wkład!

    ale czy nikt naprawde nie ma pomysłu jak od początku do końca zrobić urządzenie na transceiverze?

    pzdr[/quote]
  • Poziom 15  
    przeczytalem inny post w ktorym pisales i jeszcze raz ten i wole sie upewnic:
    czy cel masz taki aby jednym nadajnikiem ultradzwiekowym nadawac i odbierac jednoczesnie?
  • Poziom 14  
    Czesc,
    nie nadajnikiem tylko transceiverem (nadajnik/odbiornik w jednym) - patrz wyżej :arrow: UTEC4018F.pdf
  • Poziom 15  
    pdf-a czytalem tylko chodzilo mi o ilosc elementow i ktore co maja robic
    jesli chodzi o nadawanie i odbieranie jednym to robilem podobne testy jak w opisie teodora otulaka (http://www.patron.net.pl/konstruktorzy/AVR_tutorial.htm) i podobne wnioski wyciagnalem z tego typu konstrukcji, problem jest z wytluminiem drgan i dosc szybkim przejsciem na odbieranie. jak napisalem wlasne funkcje nadawania i odbierania pod 16mhz to bylo troche lepiej ale nadal widac bylo ze czesto odbiera za wczesnie niektore wyslane paczki.

    z pojedynczym sprawdzalo sie jedynie powyzej 1m i z wyzszym napieciem, wydaje mi sie ze czas potrzebny do wytlumienia jak nie patrzec jest potrzebny.

    wstawiajac pojedynczy zyskujesz to ze masz ich mniej ale mocno stracisz na jakosci dzialania.
    nadajnik lub odbiornik to koszt okolo 4 zl, widze ze chcesz to miec jako wodoszczelne a takie sa drozsze i czesto wymagaja wyzszego napiecia (nawet 100v)

    nadal nie jestem pewien tego co chcesz osiagnac wiec jesli bylo nie na temat to musisz dokladniej to opisac.
  • Poziom 27  
    Mam pewne pytania:
    -co jest lepsze: 2 nadajniki, czy nadajnik i odbiornik? Chodzi mi o zastosowanie dla zasięgu 1-1.5m i aby nie podawało błędnych odczytów, bo coś w "tle" widać.
    -jaki jest minimalny czas załączania czujnika do ATmegi aby działał prawidłowo?
    -czy ATmega8 i ATmega8L różnią się czymkolwiek poza napięciem zasilającym? czy tak samo się je programuje i mają ten sam układ nóżek?
  • VIP Zasłużony dla elektroda
    -nadajnik i odbiornik
    -nie wiem za bardzo o co Ci chodzi
    -maksymalnymi prędkościami taktowania, mają identyczny układ wyprowadzeń i przez programator są widziane jako te same procesory (programy też identyczne).
  • Poziom 27  
    -ok, w miarę logiczne tak w sumie
    -dajmy na to, że mam 2 pary nadajnik-odbiornik załączane tranzystorami do wejść analogowych. Z jaką maksymalną (bezpieczną i stabilną) częstotliwością mogę przełączać między nimi. Czy mogę załączać je 50 razy na sekundę, czy rzadziej?
    -czyli ATmegi 8L nie przetaktuję kwarcem na 16M, tylko muszę siedzieć na max 8, czy też nawet do 8 potrzebuję kwarcu?