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

Мастер-класс по ультразвуковому датчику HC-SR04 с Arduino

Обзор HC-SR04

HC-SR04 — дешёвый и популярный ультразвуковой датчик дальности (2 см – 4 м). Состоит из излучателя и приёмника на 40 кГц. Работает как сонар: излучает пакет волн, засекает время отражения.

Мастер-класс по ультразвуковому датчику HC-SR04 с Arduino

Характеристики

Напряжение5V DC
Ток15 мА
Частота40 кГц
Диапазон2 см – 400 см
Точность3 мм
Угол измерения<15°
Размеры45×20×15 мм

Распиновка

Мастер-класс по ультразвуковому датчику HC-SR04 с Arduino

Принцип работы

  1. На Trig подаём HIGH 10 мкс — излучается 8 циклов ультразвука.
  2. Echo сразу становится HIGH и ждёт отражённый сигнал.
  3. При получении отражения Echo переходит в LOW.
  4. Длительность HIGH на Echo = время туда-обратно.
  5. Если объекта нет — таймаут 38 мс, Echo становится LOW.
Мастер-класс по ультразвуковому датчику HC-SR04 с Arduino

Формула расстояния

Расстояние = (Скорость_звука × Время) / 2

Скорость звука ≈ 340 м/с = 0.034 см/мкс. Делим на 2, так как волна проходит путь туда и обратно.

Пример: Echo HIGH 2000 мкс → (0.034 × 2000) / 2 = 34 см.

Подключение к Arduino

Мастер-класс по ультразвуковому датчику HC-SR04 с Arduino

Базовый код (без библиотек)

const int trigPin = 9;
const int echoPin = 10;
long duration;
int distance;

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  Serial.begin(9600);
}

void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  duration = pulseIn(echoPin, HIGH); // мкс
  distance = duration * 0.034 / 2;   // см

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

Разбор кода

Вывод на LCD дисплей

Мастер-класс по ультразвуковому датчику HC-SR04 с Arduino
#include <LiquidCrystal.h>
LiquidCrystal lcd(1, 2, 4, 5, 6, 7);
const int trigPin = 9, echoPin = 10;
long duration;
int distanceCm, distanceInch;

void setup() {
  lcd.begin(16, 2);
  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);
  lcd.print("Distance: ");
  lcd.print(distanceCm); lcd.print(" cm");
  lcd.setCursor(0, 1);
  lcd.print("Distance: ");
  lcd.print(distanceInch); lcd.print(" inch");
  delay(10);
}

Использование библиотеки NewPing (проще и точнее)

#include <NewPing.h>
#define TRIGGER_PIN 9
#define ECHO_PIN 10
#define MAX_DISTANCE 400

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

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

void loop() {
  delay(50);
  int distance = sonar.ping_cm(); // см
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println("cm");
}

Методы: ping_cm(), ping_in(), ping_median(iterations) — медиана из нескольких замеров для точности.

Компенсация температуры (DHT22) для высокой точности

Скорость звука зависит от температуры и влажности:

V = 331.4 + 0.6×T + 0.0124×H (м/с)

Пример с DHT22 и NewPing:

#include <NewPing.h>
#include "dht.h"
#define TRIGGER_PIN 9
#define ECHO_PIN 10
#define MAX_DISTANCE 400
#define DHT22_PIN 5

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
dht DHT;

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

void loop() {
  delay(100);
  DHT.read22(DHT22_PIN);
  float temp = DHT.temperature;
  float hum = DHT.humidity;
  float vSound = 331.4 + 0.6*temp + 0.0124*hum; // м/с
  unsigned int duration = sonar.ping_median(10); // мкс
  float dist = (vSound * (duration/1000000.0)) / 2 * 100; // см
  Serial.print("Distance: "); Serial.print(dist); Serial.println("cm");
}
Мастер-класс по ультразвуковому датчику HC-SR04 с Arduino

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

Мастер-класс по ультразвуковому датчику HC-SR04 с Arduino

3D-модель доступна на Thangs. Размеры могут незначительно варьироваться у разных производителей.

Заключение

HC-SR04 — отличный датчик для бесконтактного измерения расстояния, обнаружения препятствий, уровня жидкости и т.д. Базовый код прост, NewPing упрощает жизнь, а добавление DHT22 даёт лабораторную точность. Примеры проектов: радар, уровень, робот-искатель препятствий, бесконтактное ведро и др.

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

  1. Ультразвуковой датчик HC-SR04: принцип работы и ключевые применения
  2. Arduino-датчики: типы, применения и реальные проекты
  3. Подключение ультразвукового датчика HC‑SR04 к Raspberry Pi 3 — полное руководство
  4. Подключение ультразвукового датчика HC-SR04 к Raspberry Pi — практическое руководство
  5. Проект с датчиком DHT11: индикация температуры светодиодами и пьезо-динамиком на Arduino
  6. FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
  7. Умная банка на ESP8266 + Arduino: мониторинг наполненности в реальном времени
  8. Компактный радар на Arduino Nano с HC-SR04 и дисплеем 1.8"
  9. Создание ультразвукового дальномера на Arduino UNO и датчике SR04
  10. Монитор уровня и температуры воды на Arduino: ультразвук, LCD и тревога