• I






      
           

Научно-популярный образовательный ресурс для юных и начинающих радиолюбителей - Popular science educational resource for young and novice hams

Основы электричества, учебные материалы и опыт профессионалов - Basics of electricity, educational materials and professional experience

КОНКУРС
language
 
Поиск junradio

Радиодетали
ОК
Сервисы

Stock Images
Покупка - продажа
Фото и изображений


 
Выгодный обмен
электронных валют

Друзья JR



JUNIOR RADIO

 

Датчик расстояния Raspberry Pi
с использованием HC-SR04

 

 

Мы покажем вам, как подключить датчик HC-SR04 к Raspberry Pi, в том числе как подключить делитель напряжения, поскольку схема требует, чтобы выходной сигнал 5 В с датчика был понижен до 3,3 В для Raspberry Pi. Включая демонстрацию того, как подключить датчик к Raspberry Pi, мы также исследуем написание скрипта Python, который будет использовать ультразвуковой датчик HC-SR04 для расчета расстояния. Настройка оборудования датчика расстояния Raspberry Pi В этом разделе мы покажем вам, как подключить датчик расстояния HC-SR04 к Raspberry Pi. Подключение датчика - относительно простой процесс, так как большинство контактов датчика расстояния сопоставляются непосредственно с контактом на Raspberry Pi. Единственная немного сложная часть подключения устройства к Raspberry Pi - это делитель напряжения, который мы настроили для вывода эха. Причина добавления делителя напряжения , чтобы падение напряжения , поступающее на штырьки GPIO до 3.3v от 5в . В этом руководстве мы будем используя 1k Ом резистор и 2k Ом резистор для достижения этой цели. Если вы хотите понять, как мы рассчитываем значения делителя напряжения, вы можете ознакомиться с руководством, приведенным в конце этой книги. Следуйте приведенным ниже инструкциям, чтобы узнать, как подключить датчик расстояния HC-SR04 к Raspberry Pi.

VCC подключается к контакту 2 (5 В)

Триггер подключается к контакту 7 (GPIO 4)

Эхо подключается к R1 (1 кОм)

R2 (2 кОм) подключается от R1 к земле

Провод от R1 и R2 подключается к контакту 11.

GND подключается к контакту 6 (земля)

 

 

Чтобы построить схему, сделайте следующее. Не забывайте, что вы можете использовать диаграмму выше, чтобы дать себе представление о том, что вам нужно делать.

1.Проложите провод от контакта заземления ( контакт 6) к заземлению / отрицательной шине на макетной плате .

2. Проложите провод от контакта 5 В ( контакт 2 ) к контакту VCC на датчике расстояния HC-SR04 .

3.Проложите  провод от контакта 7 к контакту TRIG на датчике расстояния.

4. Запуск 1k Ом резистор от ECHO штифта на датчик расстояния до места на плате.

5. Запуск 2k Ома резистора от 1k Ом резистора на первом / отрицательные рельсы на Raspberry Pi.

6.Выполнить провод от между 1k Ом резистором и 2k Ома резистором к штифту 11 на Raspberry Pi.

 Использование датчика расстояния Raspberry Pi

1.Чтобы использовать наш датчик расстояния Raspberry Pi, нам, к счастью, нужно только запрограммировать скрипт на Python. Поскольку мы используем только контакты GPIO для взаимодействия с датчиком расстояния, нет необходимости возиться с инструментом raspi-config. Прежде чем мы начнем писать наш скрипт, давайте сначала создадим папку для его хранения. Выполните следующие две команды на своем Raspberry Pi, чтобы создать папку и сменить в ней каталог.

mkdir ~/distance_sensor/

cd ~/distance_sensor

2. Теперь, когда мы находимся в нашем новом каталоге, давайте начнем писать скрипт Python для датчика расстояния, выполнив следующую команду на Raspberry Pi.

nano distance_sensor.py

3.В этом файле напишите следующие строки кода. Мы объясним важные части каждого блока кода по мере его написания. При написании кода Python помните, что он чувствителен к пробелам, поэтому убедитесь, что вы сохранили вкладки, которые мы ввели.

#!/usr/bin/python

import RPi.GPIO as GPIO

import time

 

try:

Первая строка сообщает оболочке, что мы должны использовать для запуска нашего файла Python. Без него нет гарантии, что наш файл будет интерпретирован Python. Затем мы приступаем к импорту двух библиотек, которые нам нужны для написания нашего скрипта и взаимодействия с датчиком расстояния от нашего Raspberry Pi. Мы импортируем следующие две библиотеки: Rpi.GPIO - это пакет, который позволяет нам управлять контактами GPIO и взаимодействовать с ними, без этого пакета мы не смогли бы общаться с нашим датчиком расстояния. time - этот пакет позволяет нам управлять функциями, связанными со временем, с помощью скрипта. В основном мы просто используем это, чтобы перевести скрипт в спящий режим, а также время, необходимое для получения данных от датчика. Наконец, мы начинаем наш оператор try :, мы покрываем в нем подавляющую часть кода, чтобы гарантировать, что мы очищаем контакты GPIO при выходе.

      GPIO.setmode(GPIO.BOARD)

 

      PIN_TRIGGER = 7

      PIN_ECHO = 11

 

      GPIO.setup(PIN_TRIGGER, GPIO.OUT)

      GPIO.setup(PIN_ECHO, GPIO.IN)

В первой строке мы устанавливаем для нашего режима GPIO значение GPIO.BOARD, это означает, что мы используем физические номера контактов, а не номера BCM. Мы используем это для обеспечения совместимости с нашим скриптом, поскольку номера BCM не обязательно останутся прежними. В следующих двух строках мы создаем две переменные для хранения физических контактов, к которым у нас подключены триггер и эхо. Мы определяем их здесь, чтобы упростить их изменение без необходимости постоянно просеивать код. Затем мы настраиваем оба наших вывода на ожидание вывода или ввода. Наш триггерный контакт, очевидно, является выходным контактом, поскольку нам нужно пропинговать этот контакт, чтобы запустить датчик. Вывод Echo - это то место, откуда мы ожидаем наших данных, поэтому мы устанавливаем его для получения ввода.

      GPIO.output(PIN_TRIGGER, GPIO.LOW)

 

      print "Waiting for sensor to settle"

 

      time.sleep(2)

В первой строке мы устанавливаем наш PIN_TRIGGER GPIO Pin, чтобы он ничего не отправлял, установив для него значение «Low». Мы делаем это для того, чтобы наш датчик HC-SR04 успокоился . Это гарантирует, что мы будем получать более последовательные показания. Затем мы засыпаем скрипт на 2 секунды, чтобы дать датчику расстояния достаточно времени для установки и не запускать его немедленно.

      print "Calculating distance"

 

      GPIO.output(PIN_TRIGGER, GPIO.HIGH)

 

      time.sleep(0.00001)

 

      GPIO.output(PIN_TRIGGER, GPIO.LOW)

Наконец, мы переходим к фрагменту кода, который запускает датчик расстояния HC-SR04 . Для этого нам нужно сначала установить наш PIN_TRIGGER на высокий уровень. Затем нам нужно перевести сценарий в спящий режим на 1 наносекунду. Причина в том, что датчик расстояния HC-SR04 требует для его запуска импульс длительностью 1 наносекунду. Сразу после завершения мы снова устанавливаем низкий уровень PIN_TRIGGER .

      while GPIO.input(PIN_ECHO)==0:

            pulse_start_time = time.time()

      while GPIO.input(PIN_ECHO)==1:

            pulse_end_time = time.time()

 

      pulse_duration = pulse_end_time - pulse_start_time

 

      distance = round(pulse_duration * 17150, 2)

 

      print "Distance:",distance,"cm"

Во- первых, мы проводим некоторое время цикл постоянно проверять , если PIN_ECHO является низким ( 0 ) , если мы постоянно установить pulse_start_time к текущему времени , пока он не станет высоким ( 1 ) После того, как PIN_ECHO читает высоко , мы устанавливаем pulse_end_time к текущему времени. Мы делаем это, пока PIN_ECHO снова не станет низким. Эти две петли позволяют нам рассчитать время, которое потребовалось для отправки и приема ультразвукового импульса. Когда у нас есть оба времени, мы просто вычитаем два сохраненных времени, чтобы вычислить продолжительность. Рассчитав длительность импульса, мы можем определить пройденное расстояние, поскольку мы знаем, что приблизительная скорость ультразвукового звука составляет 34300 см / с . Поскольку длительность импульса - это время, которое потребовалось ультразвуковому звуку, чтобы поразить объект и отскочить назад, мы просто будем использовать половину скорости, чтобы вычислить расстояние, которое он прошел, прежде чем вернуться. Это более простой расчет, чем вычисление расстояния на полной скорости и последующее деление на 2. В итоге наше расстояние равно длительности импульса, умноженной на 17150 см / с .

finally:

      GPIO.cleanup()

Эти две последние строки кода очень важны, поскольку они обеспечивают конец нашей инструкции try: и гарантируют, что мы запускаем GPIO.cleanup (), когда сценарий каким-либо образом завершается. В противном случае при повторном запуске сценария или любого другого сценария, использующего контакты GPIO, будут выданы предупреждения.

4. После того, как вы закончите вводить весь код, у вас должно получиться что-то похожее на то, что показано ниже.

#!/usr/bin/python

import RPi.GPIO as GPIO

import time

 

try:

      GPIO.setmode(GPIO.BOARD)

 

      PIN_TRIGGER = 7

      PIN_ECHO = 11

 

      GPIO.setup(PIN_TRIGGER, GPIO.OUT)

      GPIO.setup(PIN_ECHO, GPIO.IN)

 

      GPIO.output(PIN_TRIGGER, GPIO.LOW)

 

      print "Waiting for sensor to settle"

 

      time.sleep(2)

 

      print "Calculating distance"

 

      GPIO.output(PIN_TRIGGER, GPIO.HIGH)

 

      time.sleep(0.00001)

 

      GPIO.output(PIN_TRIGGER, GPIO.LOW)

 

      while GPIO.input(PIN_ECHO)==0:

            pulse_start_time = time.time()

      while GPIO.input(PIN_ECHO)==1:

            pulse_end_time = time.time()

 

      pulse_duration = pulse_end_time - pulse_start_time

      distance = round(pulse_duration * 17150, 2)

      print "Distance:",distance,"cm"

 

finally:

      GPIO.cleanup()

Если код введен правильно, вы можете сохранить файл, нажав Ctrl + X, затем Y и нажав Enter .

5. Теперь, когда вы успешно написали сценарий, мы можем запустить его, выполнив следующую простую команду на своем Raspberry Pi.

python ~/distance_sensor/distance_sensor.py

6.Если все работает правильно, в вашем терминале должно появиться что-то вроде того, что показано ниже. Конечно, расстояние будет отличаться от того, что у нас получилось.

Waiting for sensor to settle

Calculating distance

Distance: 29.69 cm

Надеюсь, к настоящему времени вы успешно настроили датчик расстояния Raspberry Pi, а также написали скрипт на Python, который взаимодействует с датчиком и успешно вычисляет расстояние. Это будет идеальный способ отобразить расстояние без необходимости подключения монитора к Raspberry Pi.

 




Необходимо добавить материалы...
Результат опроса Результаты Все опросы нашего сайта Архив опросов
Всего голосовало: 373



          

Радио для всех© 2024