Articles

Jak korzystać z ultradźwiękowego czujnika odległości HC-SR04 z Arduino

HC-SR04 to niedrogi, łatwy w użyciu ultradźwiękowy czujnik odległości, o zakresie od 2 do 400 cm. Jest powszechnie stosowany w robotach unikających przeszkód i projektach automatyzacji. W tym samouczku dowiesz się, jak działa czujnik i jak go używać z Arduino.

umieściłem 5 przykładów ze schematem okablowania i kodem, abyś mógł zacząć eksperymentować z czujnikiem., Najpierw przyjrzymy się przykładowi, który nie używa biblioteki Arduino. Następnie pokażę Ci, jak możesz użyć biblioteki NewPing do stworzenia bardziej kompaktowego kodu.

Tanie ultradźwiękowe czujniki odległości/zbliżeniowe są świetne, ale w niektórych projektach możesz potrzebować wodoodpornego czujnika, takiego jak JSN-SR04T lub czujnika podczerwieni, na który nie wpływają zmiany temperatury.,on

20×4 character I2C LCD (optional) × 1 Amazon
AliExpress DHT11 sensor (optional) × 1 Amazon

Software

Arduino IDE

Makerguides.,com jest uczestnikiem programu partnerskiego Amazon Services LLC Associates, programu reklamowego zaprojektowanego w celu zapewnienia witrynom możliwości zarabiania opłat za reklamę poprzez reklamę i linkowanie do produktów na Amazon.com.

jak działa ultradźwiękowy czujnik odległości?

czujniki ultradźwiękowe emitują fale dźwiękowe o częstotliwości zbyt wysokiej, aby człowiek mógł je usłyszeć. Te fale dźwiękowe poruszają się w powietrzu z prędkością dźwięku, około 343 m/s., Jeśli przed czujnikiem znajduje się obiekt, fale dźwiękowe odbijają się z powrotem, A odbiornik czujnika ultradźwiękowego je wykrywa. Mierząc czas pomiędzy wysyłaniem i odbieraniem fal dźwiękowych, można obliczyć odległość między czujnikiem a obiektem.

ultradźwiękowe czujniki odległości zasada działania. Źródło: https://www.maxbotix.com/

w temperaturze 20°C Prędkość dźwięku wynosi około 343 m/s lub 0,034 cm/µs., Załóżmy, że czas pomiędzy wysyłaniem i odbieraniem fal dźwiękowych wynosi 2000 mikrosekund. Jeśli pomnożysz prędkość dźwięku przez czas przebywania fal dźwiękowych, otrzymasz odległość, jaką pokonały fale dźwiękowe.

dystans = prędkość x czas

ale to nie jest wynik, którego szukamy. Odległość między czujnikiem a obiektem wynosi w rzeczywistości tylko połowę tej odległości, ponieważ fale dźwiękowe przemieszczały się od czujnika do obiektu iz powrotem od obiektu do czujnika. Więc musisz podzielić wynik przez dwa.,

odległość (cm) = Prędkość dźwięku (cm / µs) × czas (µs)/2

i tak dla przykładu wygląda to:

odległość (cm) = 0.0343 (cm / µs) × 2000 (µs)/2 = 34.3 cm

zależność temperatury od prędkości dźwięku

prędkość dźwięku w rzeczywistości zależy silnie od temperatury i w znacznie mniejszym stopniu na wilgotność powietrza. Wikipedia podaje, że prędkość dźwięku wzrasta z około 0,6 m / s na stopień Celsjusza., W większości przypadków w temperaturze 20°C można po prostu użyć 343 m/s, ale jeśli chcesz uzyskać dokładniejsze odczyty, możesz obliczyć prędkość dźwięku za pomocą następującego wzoru:

V (m/s) = 331,3 + (0,606 × T)

V = Prędkość dźwięku (m/s)
T = Temperatura powietrza (°c)

ta formuła nie uwzględnia wilgotności, ponieważ jej wpływ na prędkość dźwięku jest bardzo mały.

poniżej znajdziesz samouczek, Jak używać czujnika Temperatury i Wilgotności DHT11 do kalibracji prędkości dźwięku i dokładniejszego odczytu odległości za pomocą HC-SR04.,

Jak działa HC-SR04

Z Przodu Czujnika HC-SR04 znajdują się dwa srebrne cylindry (przetworniki ultradźwiękowe), jeden jest nadajnikiem fal dźwiękowych, a drugi odbiornikiem. Aby umożliwić sensorowi wygenerowanie impulsu Sonicznego, musisz ustawić sworzeń Tryg na co najmniej 10 µs. Czujnik następnie tworzy serię 8 cyklu ultradźwięków przy 40 kHz.ta seria Sonic burst porusza się z prędkością dźwięku i odbija się i jest odbierana przez odbiornik czujnika. Następnie pin Echo wyprowadza czas, w którym fale dźwiękowe podróżowały w mikrosekundach.,

możesz użyć funkcjipulseIn() w kodzie Arduino, aby odczytać długość impulsu z Pinu Echo. Następnie możesz użyć powyższej formuły, aby obliczyć odległość między czujnikiem a obiektem.,ncy

40 kHz zakres pomiarowy 2 – 400 cm rozdzielczość 3 mm kąt pomiaru 15 stopni wyzwalaj sygnał wejściowy 10 µs wysoki impuls koszt Sprawdź cenę

aby uzyskać więcej informacji, sprawdź arkusz danych poniżej:

okablowanie – podłączenie HC-SR04 do Arduino UNO

poniższy schemat okablowania pokazuje, jak podłączyć czujnik HC-SR04 do Arduino.,

HC-SR04 ze schematem okablowania Arduino

poniższe przykłady kodu używają pinów cyfrowych 2 i 3 odpowiednio dla pinów wyzwalacza i echo, ale oczywiście możesz zmienić go na dowolny cyfrowy kod pin.,C-SR04 Connections

HC-SR04 Arduino
VCC 5 V
Trig Pin 2
Echo Pin 3
GND GND

Example code for HC-SR04 with Arduino

Now that you have wired up the sensor it is time to connect the Arduino to the computer and upload some code., Możesz przesłać poniższy przykładowy kod do swojego Arduino za pomocą Arduino IDE. Następnie wyjaśnię Ci, jak działa kod.

Jak działa kod

najpierw zdefiniowano pin wyzwalający i PIN echo. Nazywam je trigPin I EchoPin. Pin wyzwalacza jest podłączony do cyfrowego pin 2 i Echo pin do cyfrowego pin 3 Na Arduino.

Instrukcja#define jest używana do nadania nazwy stałej wartości., Kompilator zastąpi wszelkie odniesienia do tej stałej zdefiniowaną wartością podczas kompilacji programu. Więc wszędzie, gdzie wspomnisz trigPin, kompilator zastąpi go wartością 2 podczas kompilacji programu.

// Define Trig and Echo pin:#define trigPin 2#define echoPin 3

następnie zdefiniowałem dwie zmienne:duration Idistance. Czas trwania przechowuje czas między wysyłaniem i odbieraniem fal dźwiękowych. Zmienna odległość służy do przechowywania obliczonej odległości.,

// Define variables:long duration;int distance;

w setup(), zaczynasz od ustawienia trigPin jako wyjścia i echoPin jako wejścia. Następnie inicjujesz komunikację szeregową z prędkością transmisji 9600. Później wyświetli się zmierzona odległość w monitorze szeregowym, do którego można uzyskać dostęp za pomocą Ctrl + Shift + M lub narzędzi> Monitor szeregowy. Upewnij się, że szybkość transmisji jest również ustawiona na 9600 w monitorze szeregowym.

wloop() wyzwalasz czujnik ustawiając wysoki trigPin na 10 µs., Zauważ, że aby uzyskać czysty sygnał, zacznij od wyczyszczenia trigPin, ustawiając go nisko na 5 mikrosekund.

następnie musisz odczytać długość impulsu wysyłanego przez echoPin. W tym celu używam funkcji pulseIn(). Ta funkcja czeka, aż pin przejdzie z Niskiego na wysoki, rozpoczyna timing, a następnie czeka, aż pin zejdzie z niskiego i zatrzymuje timing.

następnie możesz obliczyć odległość za pomocą wzoru wymienionego we wstępie tego samouczka.

wreszcie obliczona odległość jest drukowana w monitorze szeregowym.,

przykładowy kod HC-SR04 z Arduino i biblioteką NewPing

Biblioteka NewPing napisana przez Tima Eckela może być używana z wieloma ultradźwiękowymi czujnikami odległości. Najnowszą wersję tej biblioteki można pobrać tutaj na bitbucket.org. możesz zauważyć, że poniższy kod, który korzysta z biblioteki NewPing, jest o wiele krótszy niż kod, którego użyliśmy wcześniej. Poza tym nowa biblioteka zawiera kilka innych fajnych funkcji. Pozwala ustawić maksymalną odległość do odczytu, nie opóźni się przez pełną sekundę, gdy nie zostanie odebrane echo i ma wbudowany filtr mediany.,

możesz zainstalować bibliotekę, przechodząc do Sketch >Dołącz bibliotekę> Dodaj .Biblioteka ZIP w Arduino IDE.

biblioteka zawiera kilka przykładów, których możesz użyć, ale będziesz musiał je zmodyfikować, aby pasowały do twojej konfiguracji sprzętowej. Poniżej umieściłem zmodyfikowany przykładowy kod, który może być używany z tą samą konfiguracją okablowania, co wcześniej.

można również użyć distance = sonar.ping_cm()lub distance = sonar.ping_in(), który zwraca zmierzoną odległość w całych centymetrach lub calach., Dzięki tej funkcji nie musisz wykonywać pomiaru czasu i obliczać odległości.

Podłączanie czujników ultradźwiękowych w trybie 3-pinowym

Nowa biblioteka umożliwia również łatwe Połączenie z czujnikami ultradźwiękowymi przy użyciu tylko 1 pinu We/Wy. Może to być przydatne, jeśli masz bardzo mało dostępnych pinów We / Wy lub jeśli chcesz użyć 3-pinowego czujnika ultradźwiękowego, takiego jak Paralaksa Ping.

aby utworzyć konfigurację 3 pin (GND, 5V i SIG), musisz podłączyć zarówno pin wyzwalacza, jak i pin echo do tego samego Pina cyfrowego na Arduino., W kodzie, jedyne co musisz zmienić to linia 6-7 i zdefiniować ten sam pin zarówno dla trigPin i echoPin. Na przykład pin cyfrowy 2.

//Define Trig and Echo pin#define trigPin 2#define echoPin 2

Jak używać filtra cyfrowego ping_median ()

główną rzeczą, którą lubię w nowej bibliotece jest to, że ma wbudowany filtr mediana. Filtr ten może znacznie poprawić dokładność odczytów HC-SR04. Funkcjaping_median() pobiera wiele pomiarów czasu trwania z rzędu, odrzuca odczyty spoza zakresu, a następnie uśrednia Pozostałe., Domyślnie zajmie to 5 odczytów, ale możesz określić, ile powinno zająć. Zastąp linię 19 poniższymi liniami.

int iterations = 5;duration = sonar.ping_median(iterations);

przykładowy kod HC-SR04 z I2C LCD i Arduino

aby wyświetlić zmierzoną odległość na 2004 lub 1602 LCD I2C, wystarczy wykonać następujące połączenia i przesłać poniższy kod. Czujnik HC-SR04 jest podłączony w taki sam sposób jak poprzednio.

HC-SR04 ze schematem okablowania Arduino i I2C LCD.,

I2C LCD Connections

I2C LCD Arduino
GND GND
VCC 5 V
SDA A4
SCL A5

If you are not using an Arduino Uno, the SDA and SCL pins can be at a different location., Arduino UNO z układem R3 (pinout 1.0), ma również nagłówki pinów SDA (linia danych) i SCL (linia zegara) blisko pinu AREF. Sprawdź poniższą tabelę, aby uzyskać więcej informacji.,f43445″>

Arduino Uno A4 A5 Arduino Nano A4 A5 Arduino Micro 2 3 Arduino Mega 2560 20 21 Arduino Leonardo 2 3 Arduino Due 20 21
I2C pin locations for different Arduino boards

The code uses the LiquidCrystal_I2C library, which you can download here on GitHub., Upewnij się, że masz zainstalowaną tę bibliotekę! Zawiera również przewód.biblioteka h, która umożliwia komunikację z urządzeniami I2C. Ta biblioteka powinna być preinstalowana z Arduino IDE.

Jeśli chcesz dowiedzieć się więcej o sterowaniu LCD I2C za pomocą Arduino, możesz sprawdzić pełny samouczek tutaj.

  • jak sterować znakiem I2C LCD za pomocą Arduino

zauważ, że użyłem wyświetlacza LCD 20 x 4. Jeśli masz inny rozmiar LCD (16 x 2 jest również powszechne) musisz zmienić linię 20 do LiquidCrystal_I2C lcd(0x27,16,2);., Jeśli twój LCD nie ma domyślnego adresu I2C, 0x27, sprawdź kompletny samouczek I2C, w którym wyjaśnię, jak możesz dowiedzieć się, jaki jest adres.

przykładowy kod HC-SR04 z czujnikiem temperatury DHT11 i Arduino

jak wspomniano wcześniej, prędkość dźwięku silnie zależy od temperatury powietrza. Jeśli chcesz mierzyć duże odległości (3-4 m), dobrym pomysłem może być dodanie czujnika Temperatury i Wilgotności DHT11 lub DHT22 do konfiguracji. Pozwoli to skalibrować prędkość dźwięku w czasie rzeczywistym, a tym samym zwiększyć dokładność pomiarów.,

dodanie czujnika DHT11 jest naprawdę proste. Poniższy schemat okablowania pokazuje, które połączenia należy wykonać. Zauważ, że używam DHT11 z płytą breakout, więc muszę tylko podłączyć 3 piny. Pamiętaj, aby sprawdzić etykietę czujnika, kolejność pinów może być różna w zależności od producenta. Czujnik HC-SR04 jest podłączony w taki sam sposób jak poprzednio.

HC-SR04 ze schematem okablowania Arduino i DHT11.,

DHT11 Connections

DHT11 Arduino
VCC (+) 5 V
Signal (s) Pin 4
GND (-) GND

The code below uses the Adafruit DHT Humidity & Temperature Sensor library which you can download here on GitHub., Ta biblioteka działa tylko wtedy, gdy masz zainstalowaną bibliotekę Adafruit_Sensor, która jest również dostępna na GitHub. Możesz również pobrać dwie biblioteki, klikając poniższe przyciski:

możesz kliknąć przycisk w prawym górnym rogu pola kodu, aby skopiować kod.

przykładowy kod HC-SR04 z DHT11 i I2C LCD

HC-SR04 ze schematem okablowania Arduino, DHT11 i I2C LCD.

poniższy kod może być użyty do połączenia wszystkich 3 powyższych przykładów., Na wyświetlaczu LCD wyświetlana jest zarówno temperatura, prędkość dźwięku, jak i zmierzona odległość.

wymiary HC-SR04

poniżej znajdziesz wymiary czujnika ultradźwiękowego HC-SR04. Zauważyłem, że istnieją pewne niewielkie różnice między producentami, więc zalecam podwójne sprawdzenie przed własnym czujnikiem.

wymiary HC-SR04

HC-SR04 CAD

stworzyłem podstawowe rysunki CAD czujnika ultradźwiękowego HC-SR04, które można pobierz poniżej.,

wnioski

w tym artykule pokazałem, jak działa ultradźwiękowy czujnik odległości HC-SR04 i jak można go używać z Arduino. Mam nadzieję, że uznałeś to za przydatne i pouczające. Jeśli tak, podziel się nim z przyjacielem, który również lubi elektronikę!

osobisty projekt: kilka miesięcy temu zbudowałem z przyjaciółmi interaktywną instalację ścienną. Użyliśmy około 30 ultradźwiękowych czujników odległości do wykrywania osób idących przed ścianą. Ściana zawierała światła i efekty dźwiękowe, które zmieniały się w zależności od tego, jak daleko ludzie stali.,

Zdjęcie: Guus Schoonewille

chciałbym wiedzieć, jakie projekty planujesz zbudować (lub już zbudowałeś) z czujnikiem odległości HC-SR04. Jeśli masz jakieś pytania, sugestie lub jeśli uważasz, że czegoś brakuje w tym samouczku, zostaw komentarz poniżej.