
- •Разработка измерительных систем с применением контроллеров Arduino
- •1 Цель работы
- •2 Программа работы
- •3 Варианты заданий
- •4 Содержание отчета по лабораторной работе
- •5 Указания к выполнению работы
- •6 Вопросы для защиты лабораторной работы
- •1 Цель работы
- •2 Программа работы
- •3 Краткие теоретические сведения
- •4 Варианты заданий
- •5 Содержание отчета по лабораторной работе
- •6 Вопросы для защиты лабораторной работы
- •1 Цель работы
- •2 Программа работы
- •3 Краткие теоретические сведения
- •3.1 Ультразвуковой дальномер hc-sr04
- •3.2 Подключение датчика с помощью макетной платы
- •3.3 Подключение датчика к микроконтроллеру
- •4 Задание на лабораторную работу
- •5 Содержание отчета по лабораторной работе
- •6 Вопросы для защиты лабораторной работы
- •1 Цель работы
- •2 Программа работы
- •3 Краткие теоретические сведения
- •4 Задание на лабораторную работу
- •5 Содержание отчета
- •6 Вопросы для защиты лабораторной работы
- •1 Цель работы
- •2 Программа работы
- •3 Краткие теоретические сведения
- •4 Описание лабораторной установки
- •5 Указания к выполнению работы
- •Int result; // объявление переменной целого типа
- •6 Содержание отчета
- •7 Вопросы для защиты лабораторной работы
- •1 Цель работы
- •2 Программа работы
- •3 Описание лабораторной установки
- •4 Указания к выполнению работы
- •5 Вопросы для защиты лабораторной работы
- •Макетирование измерительных систем с применением контроллеров arduino
- •445667, Г. Тольятти, ул. Белорусская, 14
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);