суббота, 17 мая 2014 г.

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

Имеющихся в наличии датчиков все меньше и меньше и выбора особого уже не остается. :о) Сегодня подключаем датчик HC-SR04 - ультразвуковой датчик измерения расстояния.

Дополнительных библиотек к нему не надо, что существенно упрощает нам жизнь. ;о) Немного дополнительной информации можно почерпнуть отсюда или отсюда.

Схема подключения самая простая.

Скетч для работы с датчиком
#define Trig 9
#define Echo 8

void setup()
{
pinMode(Trig, OUTPUT); //инициируем как выход
pinMode(Echo, INPUT); //инициируем как вход
Serial.begin(9600);
/* задаем скорость общения. В нашем случае с компьютером */
}
unsigned int impulseTime=0;
unsigned int distance_sm=0;

void loop()
{
digitalWrite(Trig, HIGH);
/* Подаем импульс на вход trig дальномера */
delayMicroseconds(10); // равный 10 микросекундам
digitalWrite(Trig, LOW); // Отключаем
impulseTime=pulseIn(Echo, HIGH); // Замеряем длину импульса
distance_sm=impulseTime/58; // Пересчитываем в сантиметры
Serial.println(distance_sm); // Выводим на порт
delay(100);
/* ждем 0.1 секунды, Следующий импульс может быть излучён, только после исчезновения эха от предыдущего. Это время называется периодом цикла (cycle period).
Рекомендованный период между импульсами должен быть не менее 50 мс. */
}

Думаю, как подключить дальномер к УСТРОЙСТВУ и как изменить скетч - понятно. Только стоит обратить внимание на то, что Digital 8 у нас занят датчиком HC-SR501. Поэтому предлагаю Echo подключить к Digital 7, и внести необходимые изменения в блоке определения пинов.

На этом имеющиеся в наличии датчики закончились - остались только два двигателя и контроллер к ним. И еще нашел динамик 8 Ом-ный. Так что впереди борьба с колесами и музыка. :о)

При тестировании выявился такой неприятный момент - на дистанции более 2 метров расстояние фиксируется не стабильно. Т.е. и 201 покажет и 203, но может и 820 показать или 930. Причем чем дальше от приемника, тем реже на экране возникают правильные цифры. До двух метров меня дальномер "ловил" хорошо. Как вариант может попробовать сделать трубку из бумаги на излучатель, чтобы сузить сектор? Должно быть меньше помех и проще будет определять, куда излучение "полетело". Хотя, если все так просто, почему производители изначально не делают трубки более длинными? Непонятно...

Трубка не помогла. На расстоянии до 150 см фиксация четкая. Выше - начинают выскакивать 875 и другие "неправильные" числа. Вывод - датчик стабильно работает на полтора метра. Дальше - сложно будет отсеять достоверные результаты от помех.


Комментариев нет:

Отправить комментарий