środa, 10 sierpnia 2011

Czujnik ultradźwiękowy odległości HC-SR04





Ultradźwiękowy czujnik odległości to kolejny element przydatny do zbudowania robota. Sklep: ALLEGRO - Smart Elektronic

Jak już się nauczyłem przy zakupie tego rodzaju rzeczy, dostaje się element a potem "radź sobie sam" czyli szukaj w sieci...

Tu znajdziemy wstępne informacje na stronie ARDUINO SOLUTIONS, w dolnej cześci znajdziemy link do danych technicznych i do przykładu.

Co zrobić z przykładem też nie do końca znalazłem. ale po kilku nieudanych próbach... gdzie przy kodzie pojawiały się ciągle błędy... odkryłem, że podobnie zapisane pliki znajdują się w katalogu LIBRARIES w oprogramowaniu ARDUINO... skopiowałem cały przykład do tego katalogu i wszystko zaczęło działać prawidłowo :)

Niemniej jednak przykład jest przeznaczony dla osób posiadających wyświetlacz LCD. A ja go jeszcze nie posiadam :)... więc trzeba było szukać dalej. szukaj a znajdziesz...


Poniższy kod umożliwia czytanie odległości w centymetrach. A zmierzoną odległość można zaobserwować na SERIAL MONITOR.

int impuls = 13;
int sonar = 12;
long czas, cm;

void setup() {
  pinMode(impuls, OUTPUT);
  pinMode(sonar, INPUT);
  Serial.begin(9600);
}

void loop()
{
  digitalWrite(impuls, LOW);
  delayMicroseconds(2);
  digitalWrite(impuls, HIGH);
  delayMicroseconds(10);
  digitalWrite(impuls, LOW);
  czas = pulseIn(sonar, HIGH);
  cm = microsecondsToCentimeters(czas);
  Serial.print("Distance: [");
  Serial.print(cm);
  Serial.print("]cm\n");
  delay(100);
}

long microsecondsToCentimeters(long microseconds)
{return microseconds / 29 / 2;}

centymetry liczy się przez czas jaki podróżuje dźwięk 340 m/s czyli 29 mikrosekund na każdy centymetr.

Pierwsze testy poszły pomyślnie :) Cieszę się że udało się go uruchomić.

kolejny działający kod... jest krótszy... przez co może bardziej skuteczny...

#include "Ultrasonic.h"
Ultrasonic ultrasonic( 6, 5 );

void setup()
{
  Serial.begin( 9600 );
}

void loop()
{
  Serial.print( ultrasonic.Ranging(CM) );
  Serial.println( "cm" );
   
  delay(500);
}


...

7 komentarzy:

  1. cześć,
    bardzo fajny projekcik. Właśnie go skleciłem. Wrzuciłem ten dłuższy programik. Ten tego.. a coby tu zrobić żeby wyświetlało odwrotnie?: tzn. np. kiedy odległość jest 0-5cm -świecą się wszystkie diody, gasną w miarę zwiększania odległości, aż do zera na ustalonych np. 35-40cm.

    OdpowiedzUsuń
  2. Wydaje mi się że wystarczy zamienić wartości HIGH i LOW przy IFach... trzeba popróbować :) bez próbowania nie ma zabawy :)

    OdpowiedzUsuń
  3. dałem się nabrać na: "jeżeli ktoś ma jakiś lepszy pomysł to proszę o sugestię". :)
    Na szczęście próby dały pozytywny rezultat: zamieniłem LOW na HIGH i nazad (low dioda zgaszona, high zaświecona). Działa tak jak po mojemu powinno. Dzięki. Świerzbi mnie natomiast posiadanie większej ilości wyjść DIGITAL (np. 5x więcej). Jak się do tego zabrać? Podejrzewam że bez modyfikacyj elektronicznych się nie obejdzie..

    OdpowiedzUsuń
  4. Witaj
    Jest coś takiego jak Arduino Mega ma 54 wejścia wyjścia cyfrowe... i 16 analogowych... gdybym wiedział wcześniej ;)... ale to i tak nie jest proste... robię robocika...i i tak utknąłem :)

    OdpowiedzUsuń
  5. Dzięki za podpowiedź z tym Mega. Miałem na podorędziu. Ja jestem z tych co najpierw kompletują różne dewajsy, a później szukają zastosowań :) W tym wypadku zaowocowało działającą linijką na 20 LEDów (2 wyświetlacze segmentowe 10tki). Były chwile grozy bo okazało się że PINy 14-21 nie chcą współpracować ze mną więc je wyeliminowałem i komunikację przeniosłem od 22 w górę. Po modyfikacjach w prg., działa tak jak powinno. Co prawda linijka lekko głupieje momentami(tak jak wcześniej ta krótsza), ale to kwestia podejrzewam już fizyki, czyli problemów z odbiciem i powrotem wysłanej wiązki ultradźwięków. Kiedy przeszkoda jest stabilna i prostopadła do wiązki, problemów nie ma. Niemniej przydałoby się coś wykombinować w/s głupienia, bo przeszkody jakoś tak mają do siebie że niewiele wiedzą o fizyce i ustawiają się do sensora losowo, chaotycznie. Nie przychodzi mi tu nic do głowy oprócz modyfikacji częstotliwości badania przeszkody przez sensor (jeszcze nie próbowałem), no bo uruchomienie więcej sensorów i wyciągnięcie średniej to i tak wynik nie będzie prawdziwy.
    Nic to, trza próbować, modyfikować :) -to mój pierwszy pająk!
    Fajnie byłoby jeszcze zaprząc do tego jakieś ustrojstowo z foto* w nazwie. Tzn. żeby linijka świeciła z różną mocą w zależności od panującego oświetlenia. Zresztą i tak oporniki dałem z marszu 470 Ohm. Przydałoby się jeszcze coś całościowo sterującego jasnością świecenia linijki.

    Potrzebowałeś w swoim projekcie więcej wyjść cyfrowych niż daje Mega?

    OdpowiedzUsuń
  6. hej mam pytanie jak kalibrować to urządzenie bo podłączyłem i cały czas pokazuje 0cm.

    OdpowiedzUsuń
  7. Witaj Zakładam że problem już rozwiązany :) problem zazwyczaj pojawia się przy złym podłączeniu kabelków. lub jak coś nie styka... jak na razie nie spotkałem się z kalibracją.

    OdpowiedzUsuń