Book
Лабораторные работы на Raspberry PI
Лабораторные работы на Raspberry PI
6. Ультразвуковой дальномер (HC-SR04)
Задание 1. Подключение датчика HC-SR04
Результат работы: Исправление ошибки в коде и измерение расстояния до предмета.
- VCC - Pin 2 (VCC)
- GND - Pin 6 (GND)
- TRIG - Pin 12 (GPIO18)
- 330Ω resistor - ECHO - Pin 18 (GPIO24) и 470Ω resistor - Pin6 (GND).
Важно. Выходной сигнал датчика (ECHO) на HC-SR04 рассчитан на 5В. Однако входной сигнал на GPIO рассчитан на 3,3 В. Отправка сигнала 5V на этот незащищенный входной порт 3.3V может повредить контакты GPIO! Нам нужно будет использовать небольшую
цепь делителя напряжения, состоящую из двух резисторов, чтобы снизить выходное напряжение датчика до того, с которым может справиться Raspberry Pi.
Программный код
#Librariesimport RPi.GPIO as GPIOimport time#GPIO Mode (BOARD / BCM)GPIO.setmode(GPIO.BCM)#set GPIO PinsGPIO_TRIGGER = 18GPIO_ECHO = 24#set GPIO direction (IN / OUT)GPIO.setup(GPIO_TRIGGER, GPIO.OUT)GPIO.setup(GPIO_ECHO, GPIO.IN)def distance():# set Trigger to HIGHGPIO.output(GPIO_TRIGGER, True)# set Trigger after 0.01ms to LOWtime.sleep(0.00001)GPIO.output(GPIO_TRIGGER, False)StartTime = time.time()StopTime = time.time()# save StartTimewhile GPIO.input(GPIO_ECHO) == 0:StartTime = time.time()# save time of arrivalwhile GPIO.input(GPIO_ECHO) == 1:StopTime = time.time()# time difference between start and arrivalTimeElapsed = StopTime - StartTime# multiply with the sonic speed (34300 cm/s)# and divide by 2, because there and backdistance = (TimeElapsed * 34300) / 2return distanceif __name__ == '__main__':try:while True:dist = distance()print ("Measured Distance = %.1f cm" % dist)time.sleep(1)# Reset by pressing CTRL + Cexcept KeyboardInterrupt:print("Measurement stopped by User")GPIO.cleanup()