There are no translations available.
Світлодіоди, зумери і перемикачі є найбільш поширеними предметами, які люди намагаються заставити взаємодіяти зі своїм Raspberry Pi. Автор знайшов в Інтернеті щось трохи інше - це ультразвуковий вимірювальний модуль.
Автор знайшов в Інтернеті щось трохи інше - це ультразвуковий вимірювальний модуль. Він дозволяє виміряти відстань до найближчої стіни або твердого предмета. Модуль легко купити, він дешевий і відносно прямо узгоджується з інтерфейсом роз’єму GPIO.
Модуль HC-SR04 коштує близько $5 і розміром з коробку сірників. Два перетворювачі надають йому характерний зовнішній вигляд. Він призначений для живлення від 5В, має один вхідний і один вихідний контакти. Модуль працює, посилаючи ультразвуковий імпульс в повітря і вимірюючи час, який потрібен, щоб повернутися назад. Це значення потім може використовуватися для обчислення відстані, пройденої імпульсом.
Підключення до Pi
Підключити модуль легко. Просто підключіть виводи +5В (VCC) і землі (GND), відповідно, до виводів 2 і 6 на роз’ємі GPIO Pi.
Вхідний контакт на модулі називається "Trig" (trigger), бо він використовується, щоб викликати відправку ультразвукового імпульсу. В ідеалі він розрахований на сигнал 5В, але чудово працює з сигналом 3,3В від GPIO. Тому автор підключив вхідний контакт модуля безпосередньо до контакту 16 (GPIO23) на своєму роз’ємі GPIO.
Ви можете використовувати будь-які виводи GPIO, які Вам подобається на Вашому Rpi, але тоді буде потрібно відкорегувати посилання і змінити відповідно сценарій Python.
Вихід модуля називається "Echo" і потребує трохи більшої нашої уваги. На вихідному контакті низький рівень (0В), поки модуль не виконує вимір відстані. Потім він перемикає цей вивід у високий стан (+5В) на той же проміжок часу, поки імпульс не повернеться. Таким чином, наш сценарій повинен виміряти цей час, поки стан виводу залишається високим. Модуль використовує рівень +5В для "високого", але це занадто висока напруга для входів роз’єму GPIO, які розраховані лише на 3,3В. З метою забезпечення подачі на Pi напруги лише 3,3В, ми використаємо базовий подільник напруги, виконаний на двох резисторах.
2Якщо значення R1 і R2 однакові, то напруга поділиться на дві частини. Це дало б нам 2.5В. Якщо R2 вдвічі перевищує значення R1, то отримаємо 3.33В, що чудово. Так в ідеалі бажано, щоб значення R2 було між R1 і R1 х 2. У розглянутому прикладі схеми автор використав резистори 330 Ом і 470 Ом. Як альтернативу, можна використати значення 1 кОм і 1,5 кОм.
Нижче наведена схема остаточного кола. Автор вибрав GPIO23 і GPIO24, але можете використовувати будь-який з 17-ти доступних контактів GPIO на роз’ємі GPIO. Тільки не забудьте відредагувати сценарій.
Коло ультразвукового модуля
Сценарій на Python
У цьому прикладі сценарій виконує три виміри і обчислює середнє. Результат відображається і через секунду він робить ще одне усереднення. Це дозволяє використовувати сценарій для постійного вимірювання відстані і її друку в командному рядку.
Ось цей сценарій:
#!/usr/bin/python
#+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
#|R|a|s|p|b|e|r|r|y|P|i|-|S|p|y|.|c|o|.|u|k|
#+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
#
# ultrasonic_2.py
# Вимірювання відстані з використанням ультразвукового модуля
# в циклі.
#
# Автор : Matt Hawkins
# Дата : 28/01/2013
# -----------------------
# Імпорт необхідних бібліотек Python
# -----------------------
import time
import RPi.GPIO as GPIO
# -----------------------
# Визначення деяких функцій
# -----------------------
def measure():
# Ця функція вимірює відстань
GPIO.output(GPIO_TRIGGER, True)
time.sleep(0.00001)
GPIO.output(GPIO_TRIGGER, False)
start = time.time()
while GPIO.input(GPIO_ECHO)==0:
start = time.time()
while GPIO.input(GPIO_ECHO)==1:
stop = time.time()
elapsed = stop-start
distance = (elapsed * 34300)/2
return distance
def measure_average():
# Ця функція робить 3 вимірювання і
# повертає середнє значення.
distance1=measure()
time.sleep(0.1)
distance2=measure()
time.sleep(0.1)
distance3=measure()
distance = distance1 + distance2 + distance3
distance = distance / 3
return distance
# -----------------------
# Основний сценарій
# -----------------------
# Використання параметрів BCM GPIO
# замість фізичного номера виводу
GPIO.setmode(GPIO.BCM)
# Визначення GPIO для використання на Pi
GPIO_TRIGGER = 23
GPIO_ECHO = 24
print "Ultrasonic Measurement"
# Встановлення виводів як вихідний і вхідний
GPIO.setup(GPIO_TRIGGER,GPIO.OUT) # Trigger
GPIO.setup(GPIO_ECHO,GPIO.IN) # Echo
# Встановлення trigger в хибне (Низький рівень)
GPIO.output(GPIO_TRIGGER, False)
# Запис основного змісту в блок перевірки, щоб ми могли
# спімати натиснення користувачем CTRL-C і запустити
# фукцію скидання GPIO. Це також допоможе уникнути
# отримання користувачем багатьох повідомлень
# про незначні помилки.
try:
while True:
distance = measure_average()
print "Distance : %.1f" % distance
time.sleep(1)
except KeyboardInterrupt:
# Користувач натиснув CTRL-C
# Скидання налаштувань GPIO
GPIO.cleanup()
Цей сценарій також можна завантажити на безпосередньо свій Pi, використовуючи такий командний рядок:
wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/ultrasonic_2.py
Потім сценарій можна запустити за допомогою:
sudo python ultrasonic_2.py
Результатом буде командний рядок, який виглядає приблизно так:
Очевидно, що Ваші вимірювання залежатимуть від того, на що Ви вказуєте своїм датчиком!
Точність вимірювання
Ось деякі моменти, які впливають на точність:
-
Точність вимірювання відстані залежить від часу. Python під Linux не є ідеальним для точної синхронізації, але загальні вимірювання на ньому будуть працювати добре. Для підвищення точності Вам потрібно придивитися на використання C замість нього.
-
Коли GPIO налаштований, то модулю потрібен якийсь час, перш ніж він готовий прийняти перше читання, тому автор додав затримку 0,5 с на початку сценарію.
-
Датчики мають широкий кут чутливості. У метушливому навколишньому середовищі Ви можете отримати більш короткі читання через об'єкти з боків модуля.
-
Вимірювання працює приблизно до 2 см. Нижче цієї межі вимірювання може дати дивні результати.
-
Якщо торкнутися ультразвукового перетворювача де-небудь, то результати непередбачувані.
Якщо хтось хоче поекспериментувати з цим пристроєм на C, то відвідайте сторінку http://rasathus.blogspot.co.uk/2012/09/ultra-cheap-ultrasonics-with-hy-srf05_27.html
Також є порівняння реалізацій на Python і C: http://www.raspberrypi-spy.co.uk/2012/12/ultrasonic-distance-measurement-using-python-part-1/
|