Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Датчики.doc
Скачиваний:
119
Добавлен:
19.11.2016
Размер:
4.94 Mб
Скачать

3.2 Подключение датчика с помощью макетной платы

Изображение ультразвукового датчика расстояния приведено на рисунке 3.1. Датчик имеет 4 вывода, расположенных в один ряд – земля «GND», +5В «Vcc», Trig и Echo (выводы подписаны на корпусе датчика!). Первые два необходимо подключить к GND и Vcc контроллера, последние два к любым цифровым пинам. Сделать это без дополнительных приспособлений вроде проводов не получится. Удобным способом подключения является применение макетных плат, широко применяемых в электронике. Плата имеет гнезда для подключения электронных компонентов и проводов. Гнезда соединены между собой в особой последовательности (рисунок 3.2). На рисунках 3.3 и 3.4 приведены примеры правильного и неправильного подключения датчика. Во втором случае все выводы датчика соединены между собой и никак не соединены с проводами, а все провода (+5В, 0В, пины) также соединены между собой. Это приведет к короткому замыканию при включении контроллера! Другие концы проводов подключаются к разъемам контроллера.

Рисунок 3.2 – Макетная плата (желтым цветом показаны внутренние соединения)

Рисунок 3.3 – Правильное подключение датчика с помощью макетной платы

Рисунок 3.4 – НЕПРАВИЛЬНОЕ подключение датчика

3.3 Подключение датчика к микроконтроллеру

Соедините вывод Trig датчика с 10 пином контроллера, а Echo с 11. Загрузите программу, представленную ниже.

int Trig_pin = 10;

int Echo_pin = 11;

void setup()

{

pinMode(Trig_pin, OUTPUT);

pinMode(Echo_pin, INPUT);

Serial.begin(9600); }

void loop()

{

long duration;

digitalWrite(Trig_pin, LOW);

delayMicroseconds(2);

digitalWrite(Trig_pin, HIGH);

delayMicroseconds(10);

digitalWrite(Trig_pin, LOW);

duration = pulseIn(Echo_pin, HIGH);

Serial.println(duration);

delay(1000);

}

Количество функций, в которые передаются номера пинов увеличилось, поэтому стоит объявить переменные (в будущем лучше использовать константы, см. литературу) в начале программы, обозначающие номера. Таким образом, если датчик подключить к другим разъемам, достаточно будет изменить только две эти строчки. В функции setup() устанавливаются режимы соответствующих пинов и инициализируется интерфейс связи с компьютером. В функции loop() сначала формируется импульс на вход Trig датчика, что заставляет излучатель создать звуковую волну:

digitalWrite(Trig_pin, LOW); ← 1

delayMicroseconds(2); ← 2

digitalWrite(Trig_pin, HIGH); ← 3

delayMicroseconds(10); ← 4

digitalWrite(Trig_pin, LOW); ← 5

Задаем низкий логический уровень (1), ждем 2 микросекунды (2), чтобы завершились переходные процессы, и действительно установилось требуемое напряжение. Устанавливаем высокий логический уровень (3), ждем 10 мкс согласно документации на датчик (4). Задаем низкий уровень (5). Датчик установил высокий уровень на Echo в момент излучения звуковой волны. Как только волна отражается от объекта и обнаруживается приемником, на выходе Echo датчика устанавливается низкий уровень. Таким образом, длительность высокого уровня на Echo после формирования импульса на Trig равна длительности движения ультразвуковой волны до объекта и обратно. Можно непрерывно отслеживать в цикле состояние входа №11 микроконтроллера или даже установить прерывание в будущем, но пока воспользуемся встроенной функцией pulseIn():

duration = pulseIn(Echo_pin, HIGH);

Данная функция ожидает появления на пине №11 ( = Echo_pin) высокого логического уровня, запускает отсчет времени, ожидает появления низкого уровня и останавливает отсчет. Измеренное время в микросекундах возвращается и присваивается переменной duration типа long. В работе функции существует таймаут по умолчанию в 1 секунду на случай, если звуковая волна не вернулась обратно.

И, наконец, выводим длительность прохождения звуковой волной расстояния до объекта и обратно в монитор последовательного порта компьютера с задержкой в 1 секунду для удобства чтения результата:

Serial.println(duration);

delay(1000);