Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Ультразвуковой датчик HC-SR04 и Arduino — полное руководство

<основной класс="главный сайт" id="главный">

В этом руководстве мы узнаем, как HC-SR04 ультразвуковой датчик работает и как использовать его с Arduino . Это самый популярный датчик для измерения расстояния и создания роботов, избегающих препятствий с помощью Arduino.

Я уже использовал ультразвуковой датчик HC-SR04 для создания нескольких интересных проектов Arduino, и вы можете ознакомиться с ними здесь:

Вы можете посмотреть следующее видео или прочитать письменный учебник ниже. Он содержит дополнительную информацию и примеры для датчика, включая технические характеристики, выводы, схемы подключения, коды и многое другое.

Обзор оборудования HC-SR04

HC-SR04 — это недорогой и простой в использовании датчик для измерения расстояния с диапазоном от 2 до 400 см (примерно от дюймов до 13 футов).

Датчик состоит из двух ультразвуковых преобразователей. Один является передатчиком, который выводит ультразвуковые звуковые импульсы, а другой - приемником, который прослушивает отраженные волны. По сути, это гидролокатор, который используется на подводных лодках для обнаружения подводных объектов.

Вот его основные характеристики:

Рабочее напряжение 5 В постоянного тока
Рабочий ток 15 мА
Рабочая частота 40 кГц
Минимальный диапазон 2 см / 1 дюйм
Максимальный диапазон 400 см / 13 футов
Точность 3 мм
Измерение угла <15°
Размер 45 x 20 x 15 мм

Распиновка ультразвукового датчика HC-SR04

Вот распиновка датчика:

Датчик имеет 4 контакта. ВКК и Земля перейти к 5V и Земля контакты на Arduino и Trig и Эхо перейти к любому цифровому выводу Arduino. Использование триггера контакт мы посылаем ультразвуковую волну от передатчика, и с Эхо pin мы слушаем отраженный сигнал.

Как работает ультразвуковой датчик расстояния HC-SR04?

Он излучает ультразвук с частотой 40 000 Гц, который распространяется по воздуху и, если на его пути есть объект или препятствие, он отражается обратно в модуль. Учитывая время в пути и скорость звука, вы можете рассчитать расстояние.

Чтобы генерировать ультразвук, нам нужно установить вывод Trig в высокое состояние на 10 мкс. Это пошлет 8-кратный ультразвуковой импульс, который будет двигаться со скоростью звука. Контакты Echo становятся высокими сразу после отправки этого 8-циклового ультразвукового импульса, и он начинает прослушивать или ждать, пока эта волна будет отражена от объекта.

Если нет объекта или отраженного импульса, вывод Echo истечет через 38 мс и вернется в состояние низкого уровня.

Если мы получим отраженный импульс, вывод Echo выйдет из строя раньше, чем эти 38 мс. В зависимости от времени, в течение которого булавка Echo была ВЫСОКОЙ, мы можем определить расстояние, пройденное звуковой волной, то есть расстояние от датчика до объекта.

Для этой цели мы используем следующую основную формулу для расчета расстояния:

Расстояние =скорость x время

На самом деле мы знаем как скорость, так и значения времени. Время — это количество времени, в течение которого контакт Echo был ВЫСОКИМ, а скорость — это скорость звука, которая составляет 340 м/с. Нам нужно сделать еще один шаг, а именно разделить конечный результат на 2. Это потому, что мы измеряем продолжительность, необходимую звуковой волне для прохождения к объекту и отражения обратно.

Допустим, вывод Echo был ВЫСОКИМ в течение 2 мс. Если мы хотим получить результат расстояния в сантиметрах, мы можем преобразовать значение скорости звука из 340 м/с в 34 см/мс.

Расстояние =(Скорость x Время) / 2 =(34 см/мс x 1,5 мс) / 2 =25,5 см.

Итак, если вывод Echo был ВЫСОКИМ в течение 2 мс (что мы измеряем с помощью pulseIn() функция), расстояние от датчика до объекта составляет 34 см.

Как подключить ультразвуковой датчик HC-SR04 к Arduino

Вот как нам нужно подключить датчик HC-SR04 к плате Arduino.

Заземление и контакты VCC модуля должны быть подключены к заземлению и 5-вольтовым контактам на плате Arduino соответственно, а контакты триггера и эха — к любому цифровому входу/выходу на плате Arduino.

Вы можете получить эти компоненты, необходимые для этого руководства, на любом из следующих сайтов:

  • Ультразвуковой датчик HC-SR04 ………… 
  • Плата Arduino ……………………………
  • Макет и соединительные провода……… 

Код Arduino ультразвукового датчика HC-SR04

Вот код для измерения расстояния с помощью ультразвукового датчика HC-SR04 и Arduino.



/*
  Ultrasonic Sensor HC-SR04 and Arduino Tutorial

  by Dejan Nedelkovski,
  www.HowToMechatronics.com

*/
// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;
// defines variables
long duration;
int distance;
void setup() {
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
  Serial.begin(9600); // Starts the serial communication
}
void loop() {
  // Clears the trigPin
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  // Reads the echoPin, returns the sound wave travel time in microseconds
  duration = pulseIn(echoPin, HIGH);
  // Calculating the distance
  distance = duration * 0.034 / 2;
  // Prints the distance on the Serial Monitor
  Serial.print("Distance: ");
  Serial.println(distance);
}Code language: Arduino (arduino)

Пояснение кода

Сначала мы должны определить выводы Trig и Echo. В данном случае это контакты под номерами 9 и 10 на плате Arduino, которые называются trigPin и echoPin. Затем нам нужна длинная переменная с именем "duration" для времени в пути, которое мы получим от датчика, и целочисленная переменная для расстояния.

// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;

// defines variables
long duration;
int distance;Code language: Arduino (arduino)

В настройках мы должны определить trigPin как выход и echoPin как вход, а также запустить последовательную связь для отображения результатов на последовательном мониторе.

void setup() {
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
  Serial.begin(9600); // Starts the serial communication
}Code language: Arduino (arduino)

В цикле сначала мы должны убедиться, что тригпин чист, поэтому вам нужно установить этот контакт в НИЗКОЕ состояние всего на 2 мкс. Теперь для генерации ультразвуковой волны Ultra мы должны установить тригпин в ВЫСОКОЕ состояние на 10 мкс.

// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);

// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);Code language: Arduino (arduino)

Использование pulseIn() мы считываем время в пути и помещаем это значение в переменную «длительность». Эта функция имеет 2 параметра, первый — это имя вывода Echo, а второй — состояние считываемого импульса, высокий или низкий.

// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);Code language: Arduino (arduino)

В этом случае нам нужно, чтобы этот параметр был установлен на ВЫСОКИЙ уровень, так как датчики HC-SR04 устанавливают вывод Echo на высокий уровень после отправки 8-циклового ультразвукового импульса от передатчика. Это фактически запускает отсчет времени, и как только мы получим отраженную звуковую волну, вывод Echo перейдет в состояние Low, что остановит отсчет времени. В конце функция вернет длину импульса в микросекундах.

Чтобы получить расстояние, мы умножим продолжительность на 0,034 и разделим на 2, как мы объяснили это уравнение ранее.

// Calculating the distance
distance= duration*0.034/2;

// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);Code language: Arduino (arduino)

В конце мы напечатаем значение расстояния на последовательном мониторе.

Пример ультразвукового датчика Arduino и ЖК-дисплея

Вот еще один пример использования ультразвукового датчика с Arduino и отображения результатов на ЖК-дисплее.

Вы можете подключить ультразвуковой датчик и LDC следующим образом:

Код, измеряющий расстояние, почти такой же, как и в базовом примере. Здесь вместо того, чтобы печатать результаты на последовательном мониторе, мы печатаем их на ЖК-дисплее. Если вам нужна дополнительная информация о том, как использовать и подключать ЖК-дисплей к Arduino, вы можете проверить это в моем конкретном руководстве.

/*
  Ultrasonic Sensor HC-SR04 and Arduino Tutorial

  by Dejan Nedelkovski,
  www.HowToMechatronics.com

*/
#include <LiquidCrystal.h> // includes the LiquidCrystal Library
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
const int trigPin = 9;
const int echoPin = 10;
long duration;
int distanceCm, distanceInch;
void setup() {
  lcd.begin(16, 2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distanceCm = duration * 0.034 / 2;
  distanceInch = duration * 0.0133 / 2;
  lcd.setCursor(0, 0); // Sets the location at which subsequent text written to the LCD will be displayed
  lcd.print("Distance: "); // Prints string "Distance" on the LCD
  lcd.print(distanceCm); // Prints the distance value from the sensor
  lcd.print(" cm");
  delay(10);
  lcd.setCursor(0, 1);
  lcd.print("Distance: ");
  lcd.print(distanceInch);
  lcd.print(" inch");
  delay(10);
}Code language: Arduino (arduino)

Пример кода с использованием библиотеки NewPing

На самом деле есть более простой и лучший способ запрограммировать Arduino для измерения расстояния с помощью ультразвукового датчика HC-SR04, и это использование библиотеки NewPing.

В ранее объясненном коде мы вручную запускали датчик и измеряли длительность импульса полученного сигнала. Затем в соответствии с этими результатами мы рассчитали расстояние на его основе. Используя библиотеку NewPing, мы можем получить расстояние всего одной строкой кода.

Вот пример кода:

#include <NewPing.h>

#define TRIGGER_PIN  9
#define ECHO_PIN     10
#define MAX_DISTANCE 400 // Maximum distance we want to measure (in centimeters).


NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

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

void loop() {
  delay(50);                    // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.

  int distance = sonar.ping_cm(); // Send ping, get distance in cm and print result (0 = outside set distance range)

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println("cm");
}Code language: Arduino (arduino)

Это намного проще, чем предыдущий пример. Мы просто используем вызов ping_cm() на объекте сонара NewPing и получаем расстояние в сантиметрах. Если нам нужно расстояние в дюймах, мы можем использовать ping_in() вместо этого.

В библиотеке также есть несколько других полезных функций. Например, с помощью ping_median(iterations [, max_cm_distance]) метод, мы можем получить более точные результаты, так как он возвращает медиану или среднее значение из нескольких измерений. С помощью итераций мы задаем количество выборок, которые программа возьмет для расчета среднего значения. Значение по умолчанию — 5 итераций. ping_median() возвращает длительность полученного импульса в микросекундах.

Тем не менее, для получения дополнительной информации и подробностей вы можете посетить вики-страницу NewPing.

Повышение точности датчика расстояния HC-SR04 с помощью датчика температуры DHT22

Датчик HC-SR04 довольно точен, но поскольку его работа зависит от скорости звука, для получения более точных результатов следует также учитывать температуру воздуха. Скорость звука может существенно меняться при изменении температуры воздуха. Например, при 20°С скорость звука составляет около 340 м/с, а при -20°С скорость звука составляет около 315 м/с. Относительная влажность также влияет на скорость.

Итак, если мы используем этот датчик для измерения расстояний при различных температурах, мы должны реализовать температурную компенсацию, и мы можем сделать это с помощью следующей формулы:

Скорость =331,4 + 0,6 x Температура + 0,0124 x Относительная влажность

Вот пример:

Наряду с ультразвуковым датчиком HC-SR04 мы будем использовать датчик DHT11/DHT22 для измерения температуры и влажности окружающей среды и соответствующей регулировки значения скорости звука.

Код Arduino

/*
  Example made by Dejan, How To Mechatronics,
  https://howtomechatronics.com/

*/

#include <NewPing.h>  // https://bitbucket.org/teckel12/arduino-new-ping/wiki/Home
#include "dht.h"      // https://github.com/RobTillaart/DHTlib

#define TRIGGER_PIN  9
#define ECHO_PIN     10
#define MAX_DISTANCE 400
#define dht22 5 // DHT22 temperature and humidity sensor

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
dht DHT; // Creats a DHT object

int readDHT, temp, hum;
float speedOfSound, distance, duration;

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

void loop() {
  delay(100);

  // Read temperature and humidity from DHT22 sensor
  readDHT = DHT.read22(dht22); // Reads the data from the sensor
  temp = DHT.temperature; // Gets the values of the temperature
  hum = DHT.humidity; // Gets the values of the humidity


  speedOfSound = 331.4 + (0.6 * temp) + (0.0124 * hum); // Calculate speed of sound in m/s

  duration = sonar.ping_median(10); // 10 interations - returns duration in microseconds
  duration = duration/1000000; // Convert mircroseconds to seconds
  distance = (speedOfSound * duration)/2;
  distance = distance * 100; // meters to centimeters

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println("cm");

}Code language: Arduino (arduino)

Итак, сначала мы считываем значения температуры и влажности с датчика DHT22, а затем используем эти значения для расчета скорости звука. Затем мы получаем продолжительность прохождения звуковой волны в микросекундах, переводим их в секунды и вычисляем расстояние от датчика до объектов в сантиметрах.

Габариты и 3D-модель HC-SR04

Я сделал 3D-модель ультразвукового датчика HC-SR04 на случай, если она понадобится вам при создании вашего следующего проекта. Вы можете скачать его по ссылке ниже.

Вы можете найти и скачать эту 3D-модель на Thangs.

Вот размеры датчика HC-SR04:

Имейте в виду, что иногда они могут немного отличаться в зависимости от производителя.

Заключение

Итак, мы рассмотрели почти все, что нам нужно знать об использовании ультразвукового датчика HC-SR04 с Arduino. Это отличный датчик для многих проектов по созданию электроники своими руками, где нам необходимо бесконтактное измерение расстояния, обнаружение присутствия или объектов, выравнивание или позиционирование чего-либо и т. д.

Я уже упоминал проекты, которые я сделал с этим датчиком в начале поста. Вот еще несколько интересных проектов с использованием датчика HC-SR04 и Arduino:

  • Бесконтактный автоматический мусорный бак с датчиком движения.
  • Умное управление освещением жестами рук
  • Мини-акустическая левитация
  • Робот, избегающий препятствий

Надеюсь, вам понравился этот урок, и вы узнали что-то новое. Не стесняйтесь задавать любые вопросы в разделе комментариев ниже и не забудьте ознакомиться с моей полной коллекцией из 30+ проектов Arduino.


Производственный процесс

  1. Что такое ультразвуковой датчик HC-SR04:работа и его применение
  2. Датчик Arduino - типы и приложения
  3. Ультразвуковой датчик (HC-SR04) + Raspberry Pi
  4. Ультразвуковой датчик диапазона HC-SR04 на Raspberry Pi
  5. Датчик DHT11 со светодиодами и пьезо-динамиком
  6. FlickMote
  7. IOT - Smart Jar с использованием ESP8266, Arduino и ультразвукового датчика
  8. Мини-радар с Arduino
  9. Ультразвуковой дальномер с Arduino
  10. Ультразвуковой датчик с сигнализацией, ЖК-дисплеем и температурой