Ультразвуковой сенсор GH-311

Coordinator
Sep 2, 2010 at 12:15 PM

Общеизвестно, что принцип ультразвукового обнаружения объектов входит в состав летучей мыши ;) Несчастное животное посылает короткие импульсы на частоте ~40 КГц и прислушивается к тому, насколько быстро появляется эхо - чем быстрее, тем ближе объект, от которого отразился звук.
С точки зрения робототехники, ультразвуковые датчики довольно энергетически прожорливы, но имеют неоспоримое преимущество перед парами инфракрасных светодиодов ифотодиодов: они будут работать стабильно независимо от того, как меняется окружающее освещение.
Модель GH-311 обладает следующими характеристиками (наткнулся на них в крайне лаконичном даташите):

  1. Power Voltage: DC 6-12V
  2. Quiescent current : Less than 2mA
  3. output Level: High 5V
  4. output Level: Low 0V
  5. Sensing Angle: no greater than 15°
  6. Sensing distance: 2mm-3m

Увы, GH-311 не умеет определять расстояние до объекта, а только сообщать: обнаружено что-то или нет - в зависимости от этого меняется состояние выхода OUT (5В/0В). В интернете можно найти однотипные вопли несчастных людей, натыкающихся на одни и те же грабли - они хотят измерять расстояние, а им говорят - нельзя. Нашел я и просьбу одного "студента", который просил исходный код микроконтроллера с тем, чтобы его усовершенствовать (конечно же, безответную). Это заставило меня присмотреться повнимательнее к схеме:
Модуль собран на кусочке двустороннего гетинакса размером 46 х 19 мм. Внешний слой - полностью "земляной", поэтому схему можно рассмотреть довольно подробно. "Сердцем" поделки является восьмибитный RISC-микроконтроллер HT48R05A, разработанный фирмойHoltek.
Некоторые просто обожают HT48xx и HT46xx, хотя, конечно же, возможности этих серий более чем скромные. Гарвардская архитектура включает 0,5К памяти программ (14 битная), 32 байта памяти программ и целых две (!) ячейки стека вызовов - это означает что третий вызов вложенной подпрограммы окажется волшебным (читаем - последним ;). Система команд очень урезана - нет даже умножения. Зато есть источники прерываний, watchdog и даже один таймер.
Память программ может быть либо масочным ROM (программируется на заводе), либо OTP (именно такой МК установлен в модуле), то есть - однократно программируемая. Это вам не Arduino, когда можно заливать программу во время отладки хоть по десять раз в минуту. После этого совершенно логичным выглядит наличие бесплатной IDE, в которой можно писать и отлаживаться на ассемблере и C, а также программно эмулироватьмикроконтроллеры в реальном времени и даже некоторые периферийные устройства, типа LCD.
Ну и напоследок - вопрос цены. Нашел в розничной продаже HT48RC06A за 26 рублей, а ведь в нем в два раза больше памяти программ и ОЗУ ;)
Весьма непонятным мне показалось решение с питанием - чтобы подключить GH-311 к Arduino, надо запитать последний от внешнего источника, соединить VIN с "+"-ом на модуле,GND - с "-", а OUT к любому цифровому входу, например к 12-му. Фокус в том, что от 5В модуль просто не заработает, потому что на нем использован стабилизатор HT7550-1разработки все той же Holtek:



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



Но вернемся к Arduino. Подключив модуль вышеописанным методом, пишем скетч, зажигающий светодиод L:

int led = 13;       // Arduino led
int sensorPin = 12; // Digital Pin In
int sensorValue;    // Value for sensor output
int d = 250;        // Delay

void setup() {
}

void loop() {
  sensorValue = digitalRead(sensorPin);
  digitalWrite(led,sensorValue);
  delay(d);  
}

Как видите, как всегда - проще некуда.

Резюме: GH-311 можно использовать в охранных системах или датчиках присутствия, когда необходимо просто обнаружить объект.