- Необходими компоненти:
- Ултразвуков сензорен модул:
- Обяснение на веригата:
- Как работи:
- Обяснение на програмирането:
Роботите са машини, които намаляват човешките усилия в тежки работи, като автоматизират задачите в индустрии, фабрики, болници и др. изпълнение на някаква команда с помощта на контролер или процесор. Но днес сме тук с автоматичен робот, който се движи автономно, без никакви външни събития, избягвайки всички препятствия по пътя си, да, говорим за робот, избягващ препятствия. В този проект използвахме Raspberry Pi и драйвер за мотор за задвижване на робота и ултразвуков сензор за откриване на обекти по пътя на робота.
По-рано сме обхванали много полезни роботи, можете да ги намерите в нашия раздел за роботични проекти.
Необходими компоненти:
- Raspberry Pi
- Ултразвуков сензорен модул HC-SR04
- ROBOT Шаси в комплект с винт
- DC двигатели
- L293D IC
- Колела
- Дъска за хляб
- Резистор (1k)
- Кондензатор (100nF)
- Свързващи проводници
- Захранване или Power bank
Ултразвуков сензорен модул:
Един Пречка Avoider робот е автоматичен робот и не е необходимо да бъдат контролирани с помощта на който и да е отдалечен. Този тип автоматизирани роботи имат сензори за „шесто чувство“ като детектори на препятствия, звуков детектор, топлинен детектор или метални детектори. Тук сме направили откриване на препятствия с помощта на ултразвукови сигнали. За тази цел използвахме ултразвуков сензорен модул.
Ултразвуковите сензори обикновено се използват за откриване на обекти и определяне на разстоянието на препятствието от сензора. Това е чудесен инструмент за измерване на разстоянието без никакъв физически контакт, като например измерване на нивото на водата в резервоара, измерване на разстояние, робот за избягване на препятствия и т.н. И така, тук открихме обекта и измерихме разстоянието с помощта на ултразвуков сензор и Raspberry Pi.
Ултразвуков сензор HC-SR04 се използва за измерване на разстоянието в диапазона 2cm-400cm с точност до 3mm. Сензорният модул се състои от ултразвуков предавател, приемник и контролна верига. Ултразвуковият сензор се състои от две кръгови очи, от които едното се използва за предаване на ултразвуковата вълна, а другото за приемането му.
Можем да изчислим разстоянието на обекта въз основа на времето, необходимо на ултразвуковата вълна да се върне обратно към сензора. Тъй като времето и скоростта на звука са известни, можем да изчислим разстоянието по следните формули.
- Разстояние = (Време x Скорост на звука във въздуха (343 m / s)) / 2.
Стойността се разделя на две, тъй като вълната се движи напред и назад, покривайки едно и също разстояние. По този начин времето за достигане на препятствие е само половината от общото време.
Така че сме изчислили разстоянието (в сантиметри) от препятствието, както по-долу:
pulse_start = time.time (), докато GPIO.input (ECHO) == 1: # Проверете дали ECHO е HIGH GPIO.output (led, False) pulse_end = time.time () pulse_duration = pulse_end - pulse_start distance = pulse_duration * 17150 разстояние = кръг (разстояние, 2) avgDistance = avgDistance + distance
Където pulse_duration е времето между изпращане и получаване на ултразвуков сигнал.
Обяснение на веригата:
Веригата е много проста за този робот за избягване на препятствия с помощта на Raspberry Pi. Един модул ултразвуков датчик, който се използва за откриване на обекти, е свързан в GPIO щифт 17 и 27 от Raspberry Pi. А Motor Driver IC L293D е свързан с Raspberry Pi 3 за шофиране двигатели робота. Входните щифтове 2, 7, 10 и 15 на драйвера на двигателя са свързани съответно с pin pin Raspberry Pi GPIO номер 12, 16, 20 и 21 Тук сме използвали два постояннотокови мотора за задвижване на робота, при който единият двигател е свързан към изходните щифтове 3 и 6 на IC на драйвера на двигателя, а друг двигател е свързан към Pin 11 и 14 на IC на драйвера на двигателя.
Как работи:
Работата с този автономен робот е много лесна. Когато роботът се включи и започне да работи, Raspberry Pi измерва разстоянията на обектите пред него, като използва ултразвуков сензорен модул и съхранява в променлива. След това RPi сравнява тази стойност с предварително дефинирани стойности и съответно взема решения за преместване на робота наляво, надясно, напред или назад.
Тук в този проект ние избрахме 15 см разстояние за вземане на решение от Raspberry Pi. Сега, когато Raspberry Pi получава по-малко от 15 см разстояние от който и да е обект, Raspberry Pi спира робота и го премества обратно и след това го завърта наляво или надясно. Сега, преди да го премести отново напред, Raspberry Pi отново проверява дали има някакво препятствие в рамките на 15 см разстояние, ако да, тогава отново повтаря предишния процес, в противен случай преместете робота напред, докато той отново не открие препятствие или обект.
Обяснение на програмирането:
Тук използваме езика Python за програмата. Преди да кодира, потребителят трябва да конфигурира Raspberry Pi. Можете да проверите нашите предишни уроци за Първи стъпки с Raspberry Pi и Инсталиране и конфигуриране на Raspbian Jessie OS в Pi.
Програмиращата част на този проект играе много важна роля за извършване на всички операции. На първо място, ние включваме необходимите библиотеки, инициализираме променливи и дефинираме щифтове за ултразвуков сензор, двигател и компоненти.
импортиране RPi.GPIO като GPIO време за импортиране # Библиотека за импортиране на време GPIO.setwarnings (False) GPIO.setmode (GPIO.BCM) TRIG = 17 ECHO = 27……………..
След него създадохме някои функции def forward (), def back (), def left (), def right () за преместване на робота съответно напред, назад, наляво или надясно и def stop () за спиране на робота, проверете функциите в кода, даден по-долу.
След това в основната програма инициирахме ултразвуков сензор и прочетохме времето между предаването и приемането на сигнала и изчислихме разстоянието. Тук повторихме този процес 5 пъти за по-добра точност. Вече обяснихме процеса на изчисляване на разстоянието с помощта на ултразвуков сензор.
i = 0 avgDistance = 0 за i в обхват (5): GPIO.output (TRIG, False) time.sleep (0.1) GPIO.output (TRIG, True) time.sleep (0.00001) GPIO.output (TRIG, False) докато GPIO.input (ECHO) == 0: GPIO.output (led, False) pulse_start = time.time (), докато GPIO.input (ECHO) == 1: # Проверете дали ECHO е HIGH GPIO.output (led, False) pulse_end = time.time () pulse_duration = pulse_end - pulse_start distance = pulse_duration * 17150 distance = round (distance, 2) avgDistance = avgDistance + distance
И накрая, ако Роботът намери някакво препятствие пред него, след като получим разстояние от препятствието, ние сме програмирали Робота да поеме по различен маршрут.
if avgDistance <15: count = count + 1 stop () time.sleep (1) back () time.sleep (1.5) if (count% 3 == 1) & (flag == 0): right () flag = 1 else: left () flag = 0 time.sleep (1.5) stop () time.sleep (1) else: forward () flag = 0
Пълният код за този робот за избягване на препятствия Raspberry Pi е даден по-долу с демонстрационно видео.