Рассмотрим датчик измерения расстояния HC-SR04 (Ultrasonic ranging module HC-SR04).
Особенности
Напряжение питания: 5V DC
Ток покоя: <2mA
Эффективный угол: <15°
Диапазон измерения расстояния: 2–500 cm
Разрешение: 0.3 cm
Разъём сенсора — 4 обычных пина (2.54), что позволяет просто воткнуть его в беспаечную плату, припаять к макетной плате или использовать для подключения обычные пины (типа мама).
Размеры
Диаграмма направленности
Принцип работы
Сенсор излучает короткий ультразвуковой импульс (в момент времени 0), который отражается от объекта и принимается сенсором. Расстояние рассчитывается исходя из времени до получения эха и скорости звука в воздухе.
Т.о., сенсор получает сигнал эха, и выдаёт расстояние, которое кодируется длительностью электрического сигнал на выходе датчика (Echo).
Следующий импульс может быть излучён, только после исчезновения эха от предыдущего. Это время называется периодом цикла (cycle period). Рекомендованный период между импульсами должен быть не менее 50 мс.
Если на сигнальный пин (Trig) подаётся импульс длительностью 10 мкс, то ультразвуковой модуль будет излучать восемь пачек ультразвукового сигнала с частотой 40кГц и обнаруживать их эхо. Измеренное расстояние до объекта пропорционально ширине эха (Echo) и может быть рассчитано по формуле, приведённой на графике выше.
Документация на сенсор, так же указывает, что если никаких препятствий не обнаружено, то на выходе будет сигнал с длительностью 38ms.
Arduino и HC-SR04
Подключить дачик очень просто
— можно удобно воткнуть его в беспаечную макетную плату, подключить +5V и GND от контроллера Arduino/ и подключить выводы датчика Trig и Echo к цифровым пинам контроллера.
Для работы с датчиком, уже есть готовая библиотека — Ultrasonic.
Я её немного подредактировал, для Arduino IDE версии и добавил ещё один пример использования.
Скачать можно здесь:
или в репозитории:
Библиотека проста в использовании и написана с использованием функций .
Конструктор Ultrasonic принимает два параметра — номера пинов к которым подключены выводы Trig и Echo, соответственно:
Ultrasonic ultrasonic(12, 13);
— здесь вывод датчика Trig подключён к 12-му пину Arduino, а Echo к 13-му.
Остаётся вызвать метод Ranging в качестве параметра которому задаётся во что пересчитывать расстояние до объекта — сантиметры или дюймы:
#define CM 1
#define INC 0
т.о. строчка
ultrasonic.Ranging(CM);
— вернёт расстояние до объекта (типа long) в сантиметрах.
— вызывается внутренний метод Timing(), который считывает длительность импульса сигнала на выходе Echo сенсора, и переводится в требуемую систему счисления.
— на пин Trig сенсора подаётся импульс длительностью 10 мкс, а затем используется -метод , который cчитывает высокий импульс c цифрового порта Arduino/CraftDuino и возвращает продолжительность импульса в микросекундах.
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout);
pulseIn(порт, значение);
— cчитывает импульс (высокий или низкий) c цифрового порта и возвращает продолжительность импульса в микросекундах.
подробнее:
Пример использования, с выдачей расстояния до объекта в (в сантиметрах) — Ultrasonic2serial:
//
// Ultrasonic HR-SC04 sensor test
//
// http://robocraft.ru
//
#include "Ultrasonic.h"
// sensor connected to:
// Trig - 12, Echo - 13
Ultrasonic ultrasonic(12, 13);
void setup()
{
Serial.begin(9600); // start the serial port
}
void loop()
{
float dist_cm = ultrasonic.Ranging(CM); // get distance
Serial.println(dist_cm); // print the distance
delay(100); // arbitary wait time.
}
будет ли такой датчик эффективен для измерения расстояния впереди едущего автомобиля?
хочу сделать простую систему, вроде парктроника — только вперед. Например в пробке, если приближаешься ближе чем 30-50 сантиметров к препятствию — выдать сигнал.
Вроде ультразвуковой сенсор плохо реагирует на шероховатые поверхности, а оптический — на зеркальные. Или технологии уже шагнули вперед?
Пойдёт, мне кажется.
У него с человеками не очень гладко, да и то на больших расстояниях (больше 2м) с объектами по-крупнее нормально должен себя вести.
На шероховатости реагирует адекватно — пузо в свитере уверенно видит от притыка до 2м.
Только исполнение открытое слишком — явно не для автомобильных применений.
Комментарии (5)
RSS свернуть / развернутьхочу сделать простую систему, вроде парктроника — только вперед. Например в пробке, если приближаешься ближе чем 30-50 сантиметров к препятствию — выдать сигнал.
Вроде ультразвуковой сенсор плохо реагирует на шероховатые поверхности, а оптический — на зеркальные. Или технологии уже шагнули вперед?
lehha
У него с человеками не очень гладко, да и то на больших расстояниях (больше 2м) с объектами по-крупнее нормально должен себя вести.
На шероховатости реагирует адекватно — пузо в свитере уверенно видит от притыка до 2м.
Только исполнение открытое слишком — явно не для автомобильных применений.
Zoltberg
А как например ультрахвуковых датчиков парковки? Они стандартные, купить можно пачкой. Только вот пример работы бы…
lehha
arduinofan
BLoOd1k
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.