• - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!
подписаться на RSS-ленту

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


Рассмотрим ультразвуковой датчик измерения расстояния 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/CraftDuino и подключить выводы датчика Trig и Echo к цифровым пинам контроллера.

Для работы Arduino с датчиком, уже есть готовая библиотека — Ultrasonic.
Я её немного подредактировал, адаптировал библиотеку для Arduino IDE версии 1.0 и добавил ещё один пример использования.
Скачать можно здесь:
ultrasonic-HC-SR04.zip
или в репозитории:
http://code.google.com/p/robocraft/

Библиотека проста в использовании и написана с использованием функций Arduino-вского фреймворка.

Конструктор Ultrasonic принимает два параметра — номера пинов к которым подключены выводы Trig и Echo, соответственно:
Ultrasonic ultrasonic(12, 13);
— здесь вывод датчика Trig подключён к 12-му пину Arduino, а Echo к 13-му.
Остаётся вызвать метод Ranging в качестве параметра которому задаётся во что пересчитывать расстояние до объекта — сантиметры или дюймы:
#define CM 1
#define INC 0

т.о. строчка
ultrasonic.Ranging(CM);
— вернёт расстояние до объекта (типа long) в сантиметрах.

исходный код метода Ranging:
long Ultrasonic::Ranging(int sys)
{
  Timing();
  distacne_cm = duration /29 / 2 ;
  distance_inc = duration / 74 / 2;
  if (sys)
    return distacne_cm;
  else
    return distance_inc;
}
— вызывается внутренний метод Timing(), который считывает длительность импульса сигнала на выходе Echo сенсора, и переводится в требуемую систему счисления.

исходный код метода Timing:
long Ultrasonic::Timing()
{
  digitalWrite(Trig_pin, LOW);
  delayMicroseconds(2);
  digitalWrite(Trig_pin, HIGH);
  delayMicroseconds(10);
  digitalWrite(Trig_pin, LOW);
  duration = pulseIn(Echo_pin, HIGH);
  return duration;
}
— на пин Trig сенсора подаётся импульс длительностью 10 мкс, а затем используется Arduino-метод pulseIn(), который cчитывает высокий импульс c цифрового порта Arduino/CraftDuino и возвращает продолжительность импульса в микросекундах.
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout);
pulseIn(порт, значение); 
— cчитывает импульс (высокий или низкий) c цифрового порта и возвращает продолжительность импульса в микросекундах.
подробнее: Программирование Arduino — дополнительные функции ввода/вывода


Пример использования, с выдачей расстояния до объекта в последовательный порт (в сантиметрах) — 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.
}




Пример выдачи:
17.00
19.00
20.00
20.00
20.00
20.00
20.00
20.00
18.00
21.00
2599.00
2599.00
2599.00
2599.00
2599.00
2599.00
2599.00
2599.00
2599.00
2599.00

— это я немного поводил рукой перед сенсором.
Последние значения показывают неспособность сенсора определить расстояние до объекта.

Ссылки:
Arduino Library For Ultrasonic Ranging Module HC-SR04
документация на HC-SR04 (PDF)

По теме:
Программирование Arduino — дополнительные функции ввода/вывода
Arduino как фреймворк
Датчик измерения расстояния SHARP-GP2Y0A710K0F — рассчёт расстояния
  • +1
  • 15 февраля 2012, 15:13
  • admin

Комментарии (5)

RSS свернуть / развернуть
+
0
будет ли такой датчик эффективен для измерения расстояния впереди едущего автомобиля?

хочу сделать простую систему, вроде парктроника — только вперед. Например в пробке, если приближаешься ближе чем 30-50 сантиметров к препятствию — выдать сигнал.

Вроде ультразвуковой сенсор плохо реагирует на шероховатые поверхности, а оптический — на зеркальные. Или технологии уже шагнули вперед?
avatar

lehha

  • 15 февраля 2012, 15:20
+
0
Пойдёт, мне кажется.
У него с человеками не очень гладко, да и то на больших расстояниях (больше 2м) с объектами по-крупнее нормально должен себя вести.
На шероховатости реагирует адекватно — пузо в свитере уверенно видит от притыка до 2м.
Только исполнение открытое слишком — явно не для автомобильных применений.
avatar

Zoltberg

  • 15 февраля 2012, 19:57
+
0
Хмм, действительно — исполнение хромает…

А как например ультрахвуковых датчиков парковки? Они стандартные, купить можно пачкой. Только вот пример работы бы…
avatar

lehha

  • 15 февраля 2012, 19:59
+
0
И когда это добро появится в магазине?
avatar

arduinofan

  • 16 февраля 2012, 08:18
+
0
на ебее полным полно) и стоит 3-4 доллара)
avatar

BLoOd1k

  • 18 марта 2012, 21:39

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.