Съдържание:

Изградете вашия Интернет контролиран робот за видео стрийминг с Arduino и Raspberry Pi: 15 стъпки (със снимки)
Изградете вашия Интернет контролиран робот за видео стрийминг с Arduino и Raspberry Pi: 15 стъпки (със снимки)

Видео: Изградете вашия Интернет контролиран робот за видео стрийминг с Arduino и Raspberry Pi: 15 стъпки (със снимки)

Видео: Изградете вашия Интернет контролиран робот за видео стрийминг с Arduino и Raspberry Pi: 15 стъпки (със снимки)
Видео: Leap Motion SDK 2024, Юли
Anonim
Изградете вашия Интернет контролиран робот за видео стрийминг с Arduino и Raspberry Pi
Изградете вашия Интернет контролиран робот за видео стрийминг с Arduino и Raspberry Pi
Изградете вашия Интернет контролиран робот за видео стрийминг с Arduino и Raspberry Pi
Изградете вашия Интернет контролиран робот за видео стрийминг с Arduino и Raspberry Pi
Изградете вашия Интернет контролиран робот за видео стрийминг с Arduino и Raspberry Pi
Изградете вашия Интернет контролиран робот за видео стрийминг с Arduino и Raspberry Pi

Аз съм @RedPhantom (известен още като LiquidCrystalDisplay / Itay), 14 -годишен ученик от Израел, който се учи в прогимназията за разширени науки и математика Макс Шейн. Правя този проект, от който всеки да се учи и споделя!

Може би сте си мислили: хм … аз съм отрепка … И децата ми искат да направя проект с тях … Той искаше да построи робот. Искаше да го облече като малко кученце. Това е добър проект за почивните дни!

Raspberry Pi е идеален за всяка употреба: днес ще изясним способностите на този микрокомпютър да прави робот. Този робот може:

  • Шофирайте и се контролирайте чрез LAN (WiFi), като използвате всеки компютър, свързан към същата WiFi мрежа като Raspberry Pi.
  • Предавайте поточно видео на живо с помощта на модула на камерата Raspberry Pi
  • Изпратете сензорни данни с помощта на Arduino

За да видите какво ви е необходимо за този хубав светъл проект, просто прочетете следващата стъпка (предупреждения) и след това стъпката Wanted: Components.

Ето репо GitHub: GITHUB REPO BY ME

Ето сайта на проекта: САЙТ НА ПРОЕКТА ОТ МЕН

Стъпка 1: Предупреждение: Бъдете внимателни, опитвайки това у дома

ВНИМАНИЕ:

АВТОРА НА ТОЗИ УЧЕБНИ ПРЕДПОЛОЖЕНИЯ ИМАТЕ ДОСТАТЪЧНИ ЗНАНИЯ ЗА ЕЛЕКТРИЧЕСКАТА ЕНЕРГИЯ И ОСНОВНАТА РАБОТА НА ЕЛЕКТРИЧЕСКОТО ОБОРУДВАНЕ. АКО НЕ ВНИМАВАТЕ И НЕ СЛЕДВАТЕ ИНСТРУКЦИИТЕ В ТОЗИ УЧЕБНИК, МОЖЕТЕ ДА УВРЕМЕТЕ ЕЛЕКТРОННОТО ОБОРУДВАНЕ, ИЗГОРЕТЕ СЕ ИЛИ ПРИЧИНЕТЕ ПОЖАР. Моля, бъдете внимателни и използвайте здравия разум. Ако нямате необходимите знания за този урок (запояване, основи на електрониката), моля, изпълнете това с отделно лице. Благодаря ти.

АВТОРЪТ НА ТАЗИ ИНСТРУКЦИИ ПРЕМАХВА ВСЯКАКАВА ОТГОВОРНОСТ ОТ СЕБЕ СИ ЗА УВРЕЖДАНЕ, ИЛИ ЗАГУБЕНИ ИМОТИ ИЛИ ФИЗИЧНИ УВРЕЖДАНИЯ. ИЗПОЛЗВАЙТЕ ОБЩИЯ РАЗУМ

Стъпка 2: Компоненти

Връзки
Връзки
Връзки
Връзки
Връзки
Връзки
Връзки
Връзки

Преди да загреем поялника, трябва да преминем през това, което трябва да бъде свързано с какво. Направих тази проста диаграма (MS Paint никога не ме подвежда), която описва къде се намират определени части в робота.

Изображението е изградено, така че можете да увеличите мащаба и да видите в пълна разделителна способност и да прочетете текста.

Стъпка 6: Адрес за Pi

Arduino разговаря с Pi според плана. И Pi разговаря с компютъра, така че как работи всичко това?

Нека разгледаме нашата последователност за иницииране на връзка:

  1. Raspberry Pi стартира
  2. Arduino стартира
  3. Raspberry Pi стартира TCP клиент. Той изстрелва своя IP адрес чрез светодиод.
  4. Raspberry Pi стартира услугата Serial Communications и се свързва с Arduino

Затова установихме някакъв вид комуникация:

Компютър Raspberry Pi Arduino

Използвал съм Visual Basic. NET (Microsoft Visual Studio 2013 Community), за да напиша програмата, която разговаря с Raspberry Pi и Python, за да напише протокола Arduino/Raspberry Pi.

Всичко, което трябва да направите, за да знаете вашия IP IP адрес, е да го свържете към HDMI екран, да влезете в Shell и да въведете командата:

име на хост -I

Стъпка 7: Планът

Сега, когато имаме IP адреса на Pi, ще го включим в SSH (SSH е Secure Shell - свързваме се отдалечено към обвивката на Linux) и ще напишем файл, който показва IP адреса на сървъра. Pi при стартиране също ще направи това и ще напише порта, който слуша. Тук ще дам само няколко примера от кода, но той е достъпен за изтегляне от тази стъпка и от клона на GitHub, който създадох. Подробности за това по -късно.

Работи така:

  1. RPi се стартира.
  2. RPi стартира програмата Tcp на своя локален IP и определен порт.
  3. RPI започва да стриймва видео
  4. RPI се изключва.

Стъпка 8: Станете физически

Сега сме готови да започнем физически да изграждаме цялата работа. Ако не сте прочели стъпка 1 (предупредителен текст и лицензиране), моля, направете го преди да продължите. Не нося отговорност за причинени щети. И в случай на съмнение, този робот не трябва да се използва за военни цели, освен ако не е зомби апокалипсис. И дори тогава използвайте здравия разум.

Предлага се да прочетете инструкциите за слушане в списъка за четене.

Изтеглете схемата за свързване от стъпката „Връзки“.

ДВИГАТЕЛИ

Моторите, които сте закупили, вероятно изглеждат така и е добре, ако не го правят: ако имат само два проводника (черен и червен в повечето случаи), той трябва да работи. Потърсете техния лист с данни онлайн, за да видите работното им напрежение и ток. Чувствайте се свободни да задавате въпроси в секцията за коментари. Винаги ги чета.

H-МОСТ

Никога досега не съм работил с H-Bridge. Потърсих малко в google и намерих добър инструктаж, обясняващ принципите на HB. Можете също да погледнете там (вижте стъпка Списък за четене) и да закачите и своя. Няма да обяснявам много. Можете да прочетете там и да знаете всичко, което трябва за тази схема.

LED

Тази малка светкавица може да работи от логическо напрежение само защото не изисква почти никакъв ток и напрежение 3V-5V 4mA-18mA. По избор.

ARDUINO

Arduino ще получава сигнали и команди чрез серийна връзка от Raspberry Pi. Използваме Arduino за управление на нашите двигатели, тъй като Raspberry Pi не може да извежда аналогови стойности чрез GPIO.

Стъпка 9: Автоматично стартиране на Raspberry Pi

Всеки път, когато включвате Raspberry Pi, ще трябва да въвеждате потребителското име и паролата. Не искаме да правим това, защото понякога просто не можем да свържем клавиатура с Pi, затова ще следваме тези стъпки от този урок, за да стартираме автоматично програмата, която подготвя Pi. Ако той ще се придържа в цикъл, винаги можем да го прекъснем с Ctrl+C.

  • sudo crontab -e
  • И тогава ще въведем командата, която добавя този файл към автоматичното стартиране в cron мениджъра.

Ще извикаме файла pibot.sh, който ще дава команди за стартиране на всички видове скриптове на python, за да управлява робота. Нека да преминем през това: (Ние правим това с завеси на Python програми, за да позволим на програмата да получи достъп до GPIO)

raspivid -o --t 0 -hf -w 640 -h 360 -fps 25 | cvlc -vvv поток: /// dev/stdin --sout '#rtp {sdp = rtsp: //: 8554}': demux = h264

Кодът, който върши цялата работа отстрани на pi, ще бъде извикан upon_startup.sh.

Това е прост скрипт на черупка, който изпълнява всичко.

Стъпка 10: Houeston, имахме проблем … DC двигателите не са един и същи модел

Вече тествах H-Bridge и работи добре, но когато закачих моторите, които получих от платформата на робота, поръчах онлайн тези два двигателя се въртят с различни скорости и издават различни шумове. Смених газта на 100% на моторите. И двамата не можеха да работят с максималните си възможности.

Изглежда, че това са два различни двигателя. Единият има по -голям въртящ момент, който е чудесен за този вид роботи, но другият просто не би преместил робота. Така се върти в кръг.

В този момент имам серийната програма на Arduino, която работи напълно добре, но Tcp сървърът на компютъра и Tcp клиентът на Pi все още не са кодирани. В трябва да попълня този запис за състезанието. Какво да правя?

  1. Първо утроявам напрежението на двигателите. В листа с данни се казва, че 3V, 6V не ги преместват. Тогава е 9V. Свързах тео батерии паралелно, за да удвоя тока и напрежението остава същото.
  2. Имам ли други двигатели, които отговарят на стойката на платформата? Може би мога да видя дали са подобни модели.
  3. Мога да заменя Servos, ако шоколадът наистина удари вентилатора.

Училището започна. Ще трябва да видя какво да правя.

Забележка: Защо, по дяволите, пиша проблемите, които срещам тук? Така че, ако имате по -малко опит и имате същите проблеми, ще знаете какво да правите.

Решението:

Затова направих още един тест. Адаптирах разликата в скоростта в кода на Arduino.

ЗАБЕЛЕЖКА: двигателите могат да се въртят с различни скорости за вас! Променете стойностите в скицата на Arduino.

Стъпка 11: [TCP]: Защо Tcp и не Secure Shell? Какво е TCP?

Имам две обяснения защо да използвам Tcp, а не SSH за P. C. - Pi комуникация.

  1. Първо, SSH (Secure Shell, вижте Обяснения) е предназначен за стартиране на команди от отдалечен компютър. Да накараме Pi да отговори с желаната от нас информация е по -трудно, защото единствената ни възможност да анализираме данните е чрез трудна и досадна обработка на низове.
  2. Второ, вече знаем как да използваме SSH и искаме да научим повече начини за комуникация между устройства в този урок.

TCP или Протокол за управление на предаването е основен протокол на пакета Internet Protocol Suite. Той произхожда от първоначалната мрежова реализация, в която допълва Интернет протокола (IP). Следователно целият пакет обикновено се нарича TCP/IP. TCP осигурява надеждна, подредена и проверена за грешки доставка на поток от октети между приложения, работещи на хостове, комуникиращи по IP мрежа.

(От Уикипедия)

Така че TCP плюсовете са:

  • Сигурен
  • Бърз
  • Работи навсякъде в мрежата
  • Предоставя методи за проверка на правилното предаване на данни
  • Контрол на потока: има защита в случай, че подателят на данни изпраща данни твърде бързо, за да може клиентът да го регистрира и обработи.

А минусите са:

  • В TCP не можете да излъчвате (Изпращате данни до всички устройства в мрежа) и многоадресно предаване (същото, но малко по-различно- дава възможност на всяко устройство да излъчва като сървър).
  • Грешки в библиотеките на вашата програма и операционна система (които сами управляват TCP комуникацията, вашият рутер не прави почти нищо освен свързването на двете [или повече] устройства)

Защо не използвате UDP, може да попитате? Е, за разлика от TCP, UDP не гарантира, че клиентът ви получава данните, преди да изпрати повече. Като изпращане на имейл и незнание дали клиентът го получава. Освен това UDP е по -малко защитен. За повече информация прочетете тази публикация от Stack Exchange Super User

Тази статия е добра и препоръчителна.

Стъпка 12: [TCP]: Нека направим клиент

Клиентът (Raspberry Pi в нашия случай), който получава данните от сървъра (Нашият компютър в нашия случай), ще получи данни за изпращане до Pi (Серийни команди, които ще се изпълняват на Arduino) и ще получи обратно данни (Четения на сензора и обратна връзка директно от Arduino. Приложената схема показва връзката между трите.

Статията на Python Wiki TcpCommunication показва, че е толкова лесно да се осъществи такава комуникация с няколко реда код с помощта на вградения модул на гнездо. Ще имаме програма на компютъра и друга програма на Pi.

Ще работим с прекъсвания. Научете повече в стъпките с обяснения за тях. Прочетете и там за буферите. Сега можем да прочетем данните, които имаме, използвайки data = s.recv (BUFFER_SIZE), но това ще бъде колко знака сме дефинирали с празни хапки. Можем ли да използваме прекъсвания? Друг въпрос: ще бъде ли буферът празен или ще изчака сървърът да изпрати повече данни, в който случай сървърът/клиентът ще хвърли изключение за изчакване?

Нека се справим с това едно по едно. Преди да направим това, потърсих тази статия в Уикипедия, в която са изброени използваните TCP и UDP портове. След бърз поглед реших, че този проект ще комуникира на порт 12298, защото не се използва от операционната система и местните услуги.

Стъпка 13: Изпробвайте нашите Tcp съобщения

За да видим дали можем да използваме прекъсвания, нека направим прост клиент и сървър, използвайки командния ред на Python. Ще го направя в следните стъпки:

  1. Стартирайте програма, която изпраща текст чрез Tcp в цикъл през порт за завеса
  2. Стартирайте друга програма (паралелно), която чете целия текст в цикъл и го отпечатва на екрана.

Ще се показват само сегменти от програмата. Всички програми, изпълнявани с Python 3. Всичко, което тези програми правят, е да изпращат серийната команда от клавиатурата на потребителя на компютъра до Arduino чрез Pi.

  • SBcontrolPC.py - Да се стартира на компютъра. Стартира TCP връзка на локалния адрес и на посочения порт (използвам порт 12298, вижте предишната стъпка защо)
  • SBcontrolPi.py - Да се изпълнява на Pi. Чете своя буфер на всеки половин секунда (0,5 секунди). Стартира скрипт на обвивка, който управлява неща като видео стрийминг и т.н.

Препоръчано: