МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ
КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
(МТУСИ)
Кафедра «Интеллектуальные системы в управлении и автоматизации»
(ИСУиА)
ПРАКТИЧЕСКАЯ РАБОТА №4
По дисциплине
Технологии промышленного интернета вещей
Выполнили:
Студенты 4-го курса
Группы БАП2201
Ли Самен
Мягков А.К.
Проверил:
к.т.н., доцент
Воронов В.И.
Москва 2026
СОДЕРЖАНИЕ
ВЫПОЛНЕНИЕ 7
ВЫВОДЫ 9
Ультразвуковой датчик расстояния (УЗД)
Рисунок 1 – Ультразвуковой датчик расстояния
Ультразвуковой датчик определяет расстояние до объекта так же, как это делают летучие мыши или дельфины. Датчик HC-SR04 генерирует узконаправленный сигнал на частоте 40 кГц и ловит отраженный сигнал (эхо). По времени распространения звука до объекта и обратно можно достаточно точно определить расстояние до него.
Рисунок 2 – Принцип работы
Поэтому же принципу работает множество приборов для исследования пространства – эхолот, сонар, радиолокатор и даже полицейский радар для определения скорости автомобиля. Все эти приборы излучают узконаправленный ультразвуковой сигнал и получают обратно отраженный сигнал. В отличие от инфракрасных дальномеров, на показания ультразвукового датчика не влияет цвет объекта или засветки от солнца.
Подключение к Arduino
– VCC – вывод питания.
– GND – вывод земли.
– Trig – вывод запуска процедуры получения информации о расстоянии до объекта. Этот вывод необходимо соединить с одним из цифровых выводов Arduino.
– Echo – вывод сигнала, определяющего расстояние до объекта. Этот вывод также следует подключить к одному из цифровых выводов.
Схема подключения указана на рисунке 3. Отметим, что ультразвуковой дальномер HC-SR04 имеет диапазон измерения от 2 см до 400 см, работает при температурах от 0° до 60° С. Точность измерения составляет ± 1 см, рабочее напряжение датчика до 5,5 В.
Рисунок 3 – Подключение датчика к плате Arduino UNO
Пример опроса датчика представлен в листинге 1.
Листинг 1 – Программирование датчика расстояния |
int trigPin = 9; // назначаем имя для Pin8 int echoPin = 8; // назначаем имя для Pin9
void setup() // процедура setup { Serial.begin(9600); // подключаем монитор порта pinMode(trigPin, OUTPUT); // назначаем trigPin (Pin8), как выход pinMode(echoPin, INPUT); // назначаем echoPin (Pin9), как вход }
void loop() // процедура loop { int duration, cm; // назначаем переменную "cm" и "duration" для показаний датчика
digitalWrite(trigPin, LOW); // изначально датчик не посылает сигнал delayMicroseconds(2); // ставим задержку в 2 микросекунды
digitalWrite(trigPin, HIGH); // посылаем сигнал delayMicroseconds(10); // ставим задержку в 10 микросекунд digitalWrite(trigPin, LOW); // выключаем сигнал
duration = pulseIn(echoPin, HIGH); // включаем прием сигнала
cm = duration / 58; // вычисляем расстояние в сантиметрах
Serial.print(cm); // выводим расстояние в сантиметрах Serial.println(" cm");
delay(1000); // ставим паузу в 1 секунду } |
Пояснения к коду
1. Для подключения выходов Trig и Echo на датчике можно использовать любые цифровые входы на Arduino.
2. Команда delayMicroseconds() останавливает выполнение программы на заданное количество микросекунд (в 1 секунде 1 000 000 микросекунд).
3. На что обратить внимание: Чтобы получить значение датчика в миллиметрах следует использовать следующую формулу для расчета: cm = duration / 5,8.
Датчик температуры почвы
DS18B20 – это цифровой датчик температуры. Датчик очень прост в использовании. Во-первых, он цифровой, а во-вторых, у него всего лишь один контакт, с которого мы получаем полезный сигнал. То есть, вы можете подключить к одному Arduino одновременно огромное количество этих сенсоров.
Температурный датчик DS18B20 имеет разнообразные виды корпуса. Можно выбрать один из трех – 8-Pin SO, 8-Pin µSOP и 3-Pin TO-92. Последний является наиболее распространенным и изготавливается в специальном влагозащитном корпусе, так что его смело можно использовать под водой. У каждого датчика есть 3 контакта. Для корпуса TO-92 нужно смотреть на цвет проводов: черный – земля, красный – питание и белый/желтый/синий – сигнал.
Рисунок 4 – Датчик DS18B20
Особенности
– Погрешность измерения не больше 0,5 С (для температур от -10С до +85С), что позволяет точно определить значение температуры. Не требуется дополнительная калибровка.
– Температурный диапазон измерений лежит в пределах от -55 С до +125 С.
– Датчик питается напряжением от 3,3В до 5В.
– Присутствует функция тревожного сигнала.
– Каждое устройство обладает своим уникальным серийным кодом.
– Можно подключить сразу до 127 датчиков к одной линии связи.
– Информация передается по протоколу 1-Wire.
– Для присоединения к микроконтроллеру нужны только 3 провода.
Память датчика состоит из двух видов: оперативной и энергонезависимой. SRAM и EEPROM. В последнюю записываются регистры конфигурации и регистры общего назначения.
Информация об измеренной температуре хранится в оперативной памяти датчика, которая состоит из 9 байт.
– 1 и 2 байты хранят информацию о температуре.
– 3 и 4 байты хранят соответственно верхний и нижний пределы температуры.
– 5 и 6 байты зарезервированы.
– 7 и 8 байты используются для сверхточного измерения температуры.
– 9 байт хранит помехоустойчивый CRC код предыдущих 8 байт.
Основной задачей DS18B20 является определение температуры и преобразование полученного результата в цифровой вид.
Подключение к Arduino
Если у вас датчик без дополнительного модуля, который присутствовал на видео, то необходимо подключать по следующей схеме (рисунок 5).
Рисунок 5 – Подключение датчика к плате Arduino UNO
Иначе говоря, между цифровым контактом и питанием необходимо подсоединить резистор в 4,7 КОм.
Если модуль уже имеется, тогда просто подсоедините соответствующий вывод к цифровому контакту.
Пример опроса датчика приведён в листинге 2.
Листинг 2 – Программирование датчика температуры почвы |
#include <OneWire.h> #include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS); DallasTemperature ds_sensors(&oneWire);
void setup() { Serial.begin(9600); ds_sensors.begin(); }
void loop() { ds_sensors.requestTemperatures(); float t = ds_sensors.getTempCByIndex(0);
Serial.println("Temperature: " + String(t, 1) + "*C");
delay(1000); } |
ВЫПОЛНЕНИЕ
На рисунке 6 представлена реализация ультразвукового датчика из теории, описанной выше, на плате ESP32.
Рисунок 6 – Подключение ультразвукового датчика расстояния к плате ESP32
Для программирования датчика расстояния на ESP32 воспользуемася листингом 1, заменив пины 8 и 9 на пины 5 и 4 соответственно. Результат работы программы по определению расстояния представлен на рисунках 7, 8 и 9.
Рисунок 7 – Приближенное отображение в Serial Monitor
измеренного расстояния с платы
Рисунок 8 – Изменение расстояния в serial monitor при приближении объекта к ультразвуковому датчику расстояния
Рисунок 9 – Изменение расстояния в serial monitor при отдалении объекта к ультразвуковому датчику расстояния
Датчик температуры почвы для проведения опытов отсутствует в элементной базе.
ВЫВОДЫ
Реализовано подключение ультразвукового датчика расстояния к микроконтроллеру ESP32. Для обработки сигналов был адаптирован и загружен программный код, пересчитывающий длительность импульса в значение расстояния. Результаты измерений были успешно проверены через монитор последовательного порта при перемещении объекта относительно датчика. Датчик температуры почвы задействован не был.
