Ультразвуковой дальномер
Датчик JSN-SR04T представляет собой водонепроницаемый ультразвуковой дальномер, широко используемый в различных проектах, связанных с измерением расстояний в условиях повышенной влажности или прямого контакта с водой. Это делает его идеальным для таких решений, как уровнемеры для воды, робототехника и автомобильные системы помощи при парковке.
Основные характеристики JSN-SR04T:
Диапазон измерения: от 20 см до 600 см, что обеспечивает достаточную гибкость для большинства приложений.
Водонепроницаемость: Модуль способен функционировать во влажной среде, что расширяет возможности его применения.
Точность измерения: Высокая точность измерений благодаря ультразвуковой технологии, которая позволяет избежать ошибок, связанных с изменением температуры и других условий окружающей среды.
Рабочее напряжение: 5 В, что делает его совместимым с большинством микроконтроллеров, включая Arduino и Raspberry Pi.
Простота интеграции: Использует стандартные цифровые сигналы для связи, что упрощает подключение к большинству систем управления.
Принцип работы:
JSN-SR04T работает по принципу эхолокации — излучает ультразвуковой сигнал и измеряет время, за которое эхо сигнала возвращается от препятствия. Это время пропорционально расстоянию до объекта, позволяя точно определять его положение.
Применение:
Датчик JSN-SR04T часто используется в таких проектах, как:
Автоматизация и контроль уровня жидкости: Измерение уровня воды в баках, резервуарах и других емкостях.
Робототехника: Навигация и избегание препятствий для подводных или влажных сред.
Автомобильные приложения: Ультразвуковая парковочная система, которая помогает водителю оценивать расстояние до ближайших объектов при парковке.
Пример кода
Этот код представляет собой программу для измерения расстояния с использованием ультразвукового датчика с использованием библиотеки OPi.GPIO. Программа отправляет звуковой импульс с триггерного пина датчика, измеряет время, за которое импульс отражается обратно, и рассчитывает расстояние до объекта, основываясь на времени прохождения звукового сигнала. Далее я поясню код по частям.
Описание кода:
Импорт библиотек:
OPi.GPIO — это библиотека для работы с GPIO-пинами (ввод/вывод общего назначения) на микрокомпьютерах Orange Pi. Она схожа с библиотекой RPi.GPIO для Raspberry Pi.
time — стандартная библиотека Python для работы со временем. В коде она используется для задержек и измерения времени.
Настройка пинов:
Здесь определяются два пина, к которым подключены триггер и эхо-вывод ультразвукового датчика. Пин TRIG_PIN будет выводить сигнал, а пин ECHO_PIN будет его считывать.
Функция setup()
:
setup()
:GPIO.setboard(GPIO.PC) — указывает модель платы Orange Pi, которую вы используете.
GPIO.setmode(GPIO.BCM) — устанавливает режим нумерации пинов в соответствии с их физическим расположением на плате (Broadcom SOC channel).
GPIO.setup(TRIG_PIN, GPIO.OUT) — устанавливает пин TRIG_PIN как вывод (output).
GPIO.setup(ECHO_PIN, GPIO.IN) — устанавливает пин ECHO_PIN как ввод (input).
GPIO.output(TRIG_PIN, GPIO.LOW) — задаёт низкий сигнал на триггерный пин (готовит датчик к отправке импульса).
time.sleep(2) — даёт две секунды на инициализацию системы.
Функция get_distance()
:
get_distance()
:Генерация импульса:
GPIO.output(TRIG_PIN, True) — отправляет короткий импульс длительностью 10 микросекунд на триггерный пин для генерации ультразвукового сигнала.
time.sleep(0.00001) — задержка на 10 микросекунд, после чего триггер выключается.
Измерение времени прохождения сигнала:
while GPIO.input(ECHO_PIN) == 0 — цикл ожидает, пока на эхо-пине не появится высокий сигнал (начало приема эхо-сигнала), фиксируя момент начала измерения времени в переменной
start_time
.while GPIO.input(ECHO_PIN) == 1 — этот цикл фиксирует момент окончания эхо-сигнала в переменной
end_time
.
Расчёт расстояния:
duration = end_time - start_time — вычисляет время, которое прошло от отправки сигнала до получения эхо.
distance = (duration * 34300) / 2 — рассчитывает расстояние до объекта по формуле. 34300 см/с — это скорость звука в воздухе. Деление на 2 необходимо, так как сигнал проходит расстояние дважды (туда и обратно).
В результате функция возвращает расстояние до объекта в сантиметрах.
Функция loop()
:
loop()
:while True — бесконечный цикл, в котором происходит измерение расстояния каждую секунду.
get_distance() — вызов функции для получения текущего расстояния до объекта.
print(f"Distance: {distance:.2f} cm") — вывод расстояния с точностью до двух знаков после запятой.
time.sleep(1) — задержка в 1 секунду между измерениями.
try/except KeyboardInterrupt — программа продолжает работу в цикле, пока пользователь не прервёт её (например, нажатием Ctrl+C). Когда происходит прерывание, выполняется блок
except
, который выводит сообщение и очищает настройки GPIO с помощью GPIO.cleanup().
Основной блок программы:
setup() — выполняется начальная настройка GPIO и датчика.
loop() — запускается основной цикл для постоянного измерения расстояния.
Last updated