Гюнтер Спаннер - MicroPython для микроконтроллеров
Название: | MicroPython для микроконтроллеров | |
Автор: | Гюнтер Спаннер | |
Жанр: | Учебники и самоучители по компьютеру | |
Изадано в серии: | неизвестно | |
Издательство: | неизвестно | |
Год издания: | - | |
ISBN: | неизвестно | |
Отзывы: | Комментировать | |
Рейтинг: | ||
Поделись книгой с друзьями! Помощь сайту: донат на оплату сервера |
Краткое содержание книги "MicroPython для микроконтроллеров"
Читаем онлайн "MicroPython для микроконтроллеров". [Страница - 29]
м/с
На основе этого значения следующая программа обеспечивает значения измерения
расстояния в сантиметрах:
# HCSR04_US_distance_demo.py
# измерение расстояния с помощью ультразвука
from hcsr04 import HCSR04
from time import sleep
sensor = HCSR04(trigger_pin=2, echo_pin=4)
while True:
distance = sensor.distance_cm()
output="Distance: {:6.1f} cm"
print(output.format(distance))
sleep(.1)
Библиотека «HCSR04» генерирует импульс запуска, который запускает
соответствующий импульс передачи в ультразвуковом модуле. После этого система
ожидает прихода эхо-сигнала. Информация о расстоянии передается по ширине
принимаемого импульса. На осциллографе можно увидеть два сигнала:
● 118
Chapter 9 • Using Sensors
Рис.9.21: Импульс передачи ультразвука (верхняя кривая) и импульс
приема (нижняя кривая).
ESP32 нужно только определить ширину эхо-импульса. Это делается библиотечной
функцией. Функция
sensor.distance_cm()
непосредственно возвращает измеренное расстояние в сантиметрах. Затем
измеренное значение может быть выведено на оболочку через
output="Distance: {:6.1f} cm" print(output.format(distance))
и форматируется с одним десятичным знаком.
При разнице температур в 20 °С уже возникает погрешность в 3,4 %. Поэтому для
использования вне помещений и измерения больших расстояний полезна
температурная компенсация. Для простых приложений, таких как помощь при
парковке, температурная компенсация не требуется, как показывает пример
приложения в следующем разделе.
9.16 Больше никаких вмятин и царапин: дальномер для гаражей
Современные гаражи обычно очень компактны с точки зрения затрат. В частности,
подземные парковочные места становятся все более узкими. Здесь повреждения
автомобиля могут быстро произойти при парковке. Устройство предупреждения о
расстоянии очень полезно в таких ситуациях.
Ультразвуковой дальномер может быть легко модернизирован до такого устройства.
Для этого требуется только пороговое значение. Если расстояние между
автомобилем и стеной меньше этого значения, должен прозвучать
предупредительный сигнал. Если ультразвуковой модуль установить в подходящем
месте, можно избежать поломки собственного автомобиля.
● 119
Функцию ШИМ можно использовать для вывода предупредительного звукового
сигнала. В следующей строке отчетливо слышен сигнал частотой 1 кГц:
PWM(Pin(14), freq=1000, duty=512)
Чтобы предупреждающий сигнал был слышен, пассивный пьезо-зуммер должен
быть подключен к контакту D14 платы ESP. На следующем рисунке показан
подходящий зуммер:
Рис.9.22: Пьезо-зуммер.
Это дополнит программу из предыдущей главы:
# HCSR04_anti_colission.py
from machine import Pin, PWM
from hcsr04 import HCSR04
from time import sleep
sensor = HCSR04(trigger_pin=2, echo_pin=4)
beeper = PWM(Pin(14), freq=1000, duty=512)
beeper.deinit()
minDist=10
while True:
distance = sensor.distance_cm()
output="Distance: {:6.1f} cm"
print(output.format(distance))
if (distance --">
На основе этого значения следующая программа обеспечивает значения измерения
расстояния в сантиметрах:
# HCSR04_US_distance_demo.py
# измерение расстояния с помощью ультразвука
from hcsr04 import HCSR04
from time import sleep
sensor = HCSR04(trigger_pin=2, echo_pin=4)
while True:
distance = sensor.distance_cm()
output="Distance: {:6.1f} cm"
print(output.format(distance))
sleep(.1)
Библиотека «HCSR04» генерирует импульс запуска, который запускает
соответствующий импульс передачи в ультразвуковом модуле. После этого система
ожидает прихода эхо-сигнала. Информация о расстоянии передается по ширине
принимаемого импульса. На осциллографе можно увидеть два сигнала:
● 118
Chapter 9 • Using Sensors
Рис.9.21: Импульс передачи ультразвука (верхняя кривая) и импульс
приема (нижняя кривая).
ESP32 нужно только определить ширину эхо-импульса. Это делается библиотечной
функцией. Функция
sensor.distance_cm()
непосредственно возвращает измеренное расстояние в сантиметрах. Затем
измеренное значение может быть выведено на оболочку через
output="Distance: {:6.1f} cm" print(output.format(distance))
и форматируется с одним десятичным знаком.
При разнице температур в 20 °С уже возникает погрешность в 3,4 %. Поэтому для
использования вне помещений и измерения больших расстояний полезна
температурная компенсация. Для простых приложений, таких как помощь при
парковке, температурная компенсация не требуется, как показывает пример
приложения в следующем разделе.
9.16 Больше никаких вмятин и царапин: дальномер для гаражей
Современные гаражи обычно очень компактны с точки зрения затрат. В частности,
подземные парковочные места становятся все более узкими. Здесь повреждения
автомобиля могут быстро произойти при парковке. Устройство предупреждения о
расстоянии очень полезно в таких ситуациях.
Ультразвуковой дальномер может быть легко модернизирован до такого устройства.
Для этого требуется только пороговое значение. Если расстояние между
автомобилем и стеной меньше этого значения, должен прозвучать
предупредительный сигнал. Если ультразвуковой модуль установить в подходящем
месте, можно избежать поломки собственного автомобиля.
● 119
Функцию ШИМ можно использовать для вывода предупредительного звукового
сигнала. В следующей строке отчетливо слышен сигнал частотой 1 кГц:
PWM(Pin(14), freq=1000, duty=512)
Чтобы предупреждающий сигнал был слышен, пассивный пьезо-зуммер должен
быть подключен к контакту D14 платы ESP. На следующем рисунке показан
подходящий зуммер:
Рис.9.22: Пьезо-зуммер.
Это дополнит программу из предыдущей главы:
# HCSR04_anti_colission.py
from machine import Pin, PWM
from hcsr04 import HCSR04
from time import sleep
sensor = HCSR04(trigger_pin=2, echo_pin=4)
beeper = PWM(Pin(14), freq=1000, duty=512)
beeper.deinit()
minDist=10
while True:
distance = sensor.distance_cm()
output="Distance: {:6.1f} cm"
print(output.format(distance))
if (distance --">