Ultrasoniczna linijka

NOTE

Jesteś w serii Lab. Prezentuję w niej moje eksperymenty, niekoniecznie w skończonej albo uporządkowanej formie.

Przykład wykorzystania sensora HC-SR04.

Zabawa z mikrokontrolerami nie musi być nudna. Tym razem na tapetę biorę czujnik ultradźwiękowy HC-SR04. To niedrogi czujnik (~7 PLN netto na dzień dziesiejszy), działający w zakresie od 2 cm do 400 cm. Nie wchodząc w szczegóły, idealnie nadaje się do projektów hobbystycznych oraz edukacyjnych.

Cały kod znajduje się w repozytorium.

Narzędziownik
Express
Komunikacja z Arduino Uno poprzez Johnny-Five, obsługa socketów
JavaScript
Aktualizacja widoku po otrzymaniu odczytu poprzez Socket.io
Johnny-Five
Wysokopoziomowa obsługa mikrokontrolera
Arduino UNO
Mikrokontroler
HR-SR04
Ultradźwiękowy czujnik

Po wykonaniu node example.js Johnny-Five łączy się z Arduino UNO i następuje pierwszy odczyt. Jeżeli przybliżymy coś do czujnika albo oddalimy, również wykona się event change.

function onReady() {
  const proximity = new Five.Proximity({
    controller: "HCSR04",
    pin: "A0",
    freq: 500,
  });

  proximity.on("change", () => {
    const { cm } = proximity;
    io.sockets.emit("lengthChanged", {
      length: cm,
    });
  });

  io.on("connection", function (socket) {
    console.log(`Client connected: ${socket.id}`);

    socket.on("disconnect", function (reason) {
      console.log(`Client disconnected with reason: ${reason}`);
    });
  });
}

Na poniższym nagraniu oddalam przedmiot od czujnika. Czujnik nie należy do najdokładniejszych. Nie do końca wiem, dlaczego czasem są duże różnice w odczycie w sytuacji, kiedy sensor „celuje” w to samo miejsce. Wydaje mi się, że powierzchnia przedmiotu może działać jak lustro albo tak to jest z prototypowaniem (płytka prototypowa). Dla celów edukacyjnych nie ma to większego znaczenia. Prędzej czy później się dowiem.

Mierzymy odległość przy pomocy dźwięku

Trochę teorii

Moduł HR-SR04 dokonuje pomiaru odległości przy pomocy fali dźwiękowej, a to pozwala na bardziej „namacalne” doświadczenie czym jest fala dźwiękowa i jak za jej pomocą zmierzyć odległość.

HC-SR04 wysyła falę dźwiękową, która odbija się od obiektu i powraca jako echo. Moduł proximity w Johnny-Five mierzy odległość w centrymetrach według wzoru:

(value / 29.1 / 2).toFixed(1);

Kontekst:

    toCm: {
      value(value) {
        // https://www.sparkfun.com/products/13959
        //
        //
        // From `Product features` paragraph at page 1
        // 'Ultrasonic ranging module HC - SR04 provides 2cm - 400cm non-contact
        // measurement function, the ranging accuracy can reach to 3mm'
        return toFixed(value / 29.1 / 2, 1);
      }
    }
  },

value:
To czas trwania w mikrosekundach (µs).

/ 29.1
Średnio fala dźwiękowa przebywa drogę 1 cm w ciągu 29.1 µs, co odpowiada prędkości 343 m/s (w temperaturze 20°C).

/ 2:
Dzielimy przez dwa, bo liczymy tam i z powrotem (odbicie się fali).

I tak odległości podane w tabeli możemy wyliczyć na podstawie przebytego czasu (value / 29.1 / 2), gdzie value to nasze mikrosekundy.

Odległość (cm)Czas (µs)
10582
201164
502910
1005820
40023280

Połączenie

Przykładowe podłączenie czujnika do Arduino UNO
Przykładowe podłączenie czujnika do Arduino UNO
Przykładowe podłączenie czujnika do Arduino UNO. Widok z góry
Przykładowe podłączenie czujnika do Arduino UNO. Widok z góry
Diagram
Diagram
Wskazówka

Zwróć uwagę na to, że piny TRIG i ECHO są połączone przez opornik 2,2 kΩ do jednego pinu A0. Więcej informacji

Cześć! Jestem otwarty na nowe wyzwania zawodowe.

Brzmi interesująco? Skontaktuj się ze mną poprzez poprzez LinkedIn

Jak jeszcze wykorzystać czujnik?