Mundarija:

Arduino va Raspberry Pi yordamida Internet orqali boshqariladigan video-oqim robotini yarating: 15 qadam (rasmlar bilan)
Arduino va Raspberry Pi yordamida Internet orqali boshqariladigan video-oqim robotini yarating: 15 qadam (rasmlar bilan)

Video: Arduino va Raspberry Pi yordamida Internet orqali boshqariladigan video-oqim robotini yarating: 15 qadam (rasmlar bilan)

Video: Arduino va Raspberry Pi yordamida Internet orqali boshqariladigan video-oqim robotini yarating: 15 qadam (rasmlar bilan)
Video: Как связать промышленные датчики 4–20 мА с ПЛК Raspberry Pi Pico | ПЛК Мицубиси FX1N 2024, Iyul
Anonim
Arduino va Raspberry Pi yordamida Internet orqali boshqariladigan video-oqim robotini yarating
Arduino va Raspberry Pi yordamida Internet orqali boshqariladigan video-oqim robotini yarating
Arduino va Raspberry Pi yordamida Internet orqali boshqariladigan video-oqim robotini yarating
Arduino va Raspberry Pi yordamida Internet orqali boshqariladigan video-oqim robotini yarating
Arduino va Raspberry Pi yordamida Internet orqali boshqariladigan video-oqim robotini yarating
Arduino va Raspberry Pi yordamida Internet orqali boshqariladigan video-oqim robotini yarating

Men @RedPhantom (aka LiquidCrystalDisplay / Itay), Isroildan kelgan 14 yoshli talaba, Maks Shein nomidagi Ilg'or fan va matematika o'rta maktabida o'qiydi. Men bu loyihani hamma o'rganishi va baham ko'rishi uchun qilyapman!

Siz o'zingizga shunday deb o'ylagan bo'lishingiz mumkin: hmm… men geekman … Va mening bolalarim ular bilan loyiha qilishimni xohlaydilar … U robot yaratmoqchi edi. U kichkina kuchukcha kabi kiyinishni xohladi. Dam olish kunlari yaxshi loyiha!

Raspberry Pi har foydalanish uchun juda mos keladi: bugun biz ushbu mikrokompyuterning robot yasash qobiliyatini ochib beramiz. Bu robot:

  • Raspberry Pi bilan bir xil Wi -Fi tarmog'iga ulangan har qanday kompyuter yordamida haydab keting va LAN (WiFi) orqali boshqaring.
  • Raspberry Pi kamera moduli yordamida videoni jonli efirga uzating
  • Sensor ma'lumotlarini Arduino yordamida yuboring

Bu chiroyli yorug'lik loyihasiga nima kerakligini ko'rish uchun keyingi bosqichni (ogohlantirishlar) o'qing va shundan so'ng kerakli: komponentlar qadamini o'qing.

Mana GitHub repo: GITHUB REPO BEN

Mana, loyiha sayti: LAYIHA SAYTI MENI

1 -qadam: Ogohlantirish: Ehtiyot bo'ling, buni uyda sinab ko'ring

DIQQAT:

MUVOFIQ TA'LIMLAR Muallifi Sizda elektr energiyasi va elektr jihozlarining asosiy ishlashi haqida etarli ma'lumotga egasiz. Agar siz ehtiyotkor bo'lmasangiz va ko'rsatmalarga rioya qilmasangiz, siz: elektr jihozlariga zarar etkazing, o'zingizni yoqing yoki yong'inni keltirib chiqaring. Ehtiyot bo'ling va aqlli bo'ling. Agar sizda bu darslik uchun zarur bilimlar bo'lmasa (lehimlash, elektronika asoslari), iltimos, buni biladigan odam bilan bajaring. Rahmat.

Bu yo'riqnomaning muallifi har qanday mas'uliyatni o'zidan olib tashlaydi yoki mol -mulkini yoki jismoniy zararini yo'qotadi. UMUMIY HISOBdan FOYDALANING

2 -qadam: komponentlar

Ulanishlar
Ulanishlar
Ulanishlar
Ulanishlar
Ulanishlar
Ulanishlar
Ulanishlar
Ulanishlar

Lehimlash temirini qizdirishdan oldin, nima bilan bog'lanish kerakligini ko'rib chiqishimiz kerak. Men robotning ma'lum bir qismi qaerda joylashganligini tasvirlaydigan oddiy jadvalni tuzdim (MS Paint meni hech qachon qo'yib yubormaydi).

Rasm qurilgan, shuning uchun siz kattalashtirishingiz va to'liq o'lchamda ko'rishingiz va matnni o'qishingiz mumkin.

6 -qadam: Pi uchun manzil

Arduino reja bo'yicha Pi bilan gaplashadi. Va Pi kompyuter bilan gaplashadi, bu qanday ishlaydi?

Keling, ulanishni boshlash tartibini ko'rib chiqaylik:

  1. Raspberry Pi boshlanadi
  2. Arduino boshlanadi
  3. Raspberry Pi TCP mijozini ishga tushiradi. U IP -manzilini LED orqali o'chirib tashlaydi.
  4. Raspberry Pi ketma -ket aloqa xizmatini ishga tushiradi va Arduino -ga ulanadi

Shuning uchun biz qandaydir aloqa o'rnatdik:

Kompyuter Raspberry Pi Arduino

Men Arduino/Raspberry Pi protokolini yozish uchun Raspberry Pi va Python bilan gaplashadigan dasturni yozish uchun Visual Basic. NET (Microsoft Visual Studio 2013 Community) dasturidan foydalandim.

Sizning IP -manzilingizni bilish uchun uni HDMI ekraniga ulash, Shell -ga kirish va buyruqni kiritish kifoya:

mezbon nomi -I.

7 -qadam: Reja

Endi bizda Pi -ning IP -manzili bo'lsa, biz unga SSH -ni kiritamiz (SSH - bu xavfsiz qobiq - biz Linux qobig'iga masofadan ulanamiz) va serverning IP -manzilini ko'rsatadigan faylni yozamiz. Pi, ishga tushganda ham shunday qiladi va tinglayotgan portni yozadi. Bu erda men koddan bir nechta misollar keltiraman, lekin uni bu bosqichdan va men yaratgan GitHub filialidan yuklab olish mumkin. Bu haqda keyinroq tafsilotlar.

Bu shunday ishlaydi:

  1. RPi ishga tushadi.
  2. RPi Tcp dasturini mahalliy IP va belgilangan portda ishga tushiradi.
  3. RPI video uzatishni boshlaydi
  4. RPI yopiladi.

8 -qadam: jismoniy mashqlar

Endi biz hamma narsani jismonan qurishni boshlashga tayyormiz. Agar siz 1 -qadamni o'qimagan bo'lsangiz (ogohlantirish matni va litsenziyalash), davom etishdan oldin buni qiling. Men etkazilgan zarar uchun javobgar emasman. Agar shubha tug'ilsa, bu robotni zombi apokalipsisi bo'lmaguncha harbiy maqsadlarda ishlatmaslik kerak. Va bundan keyin ham sog'lom fikrdan foydalaning.

O'qish ro'yxatidagi ko'rsatmalarni o'qish tavsiya etiladi.

"Ulanishlar" bosqichidan ulanish sxemasini yuklab oling.

MOTORLAR

Siz sotib olgan dvigatellar, ehtimol, shunday ko'rinishga ega va agar ular bo'lmasa, yaxshi: agar ular faqat ikkita simli bo'lsa (ko'p hollarda qora va qizil), u ishlashi kerak. Ularning ishchi kuchlanishi va tokini ko'rish uchun ularning ma'lumotlar jadvalini Internetdan qidiring. Sharhlar bo'limida savollar berishingiz mumkin. Men ularni doim o'qiyman.

H-BRIDGE

Men hech qachon H-Bridge bilan ishlamaganman. Men biroz googled va HB tamoyillarini tushuntirib beradigan yaxshi ko'rsatma topdim. Siz u erga ham qarashingiz mumkin (O'qish ro'yxati qadamiga qarang) va o'zingizni ham bog'lab qo'ying. Men ko'p narsani tushuntirmayman. Siz u erda o'qishingiz va ushbu sxema haqida hamma narsani bilishingiz mumkin.

LED

Bu kichik lampochka mantiqiy kuchlanishdan ishlaydi, chunki u deyarli hech qanday tok talab qilmaydi va 3V-5V 4mA-18mA kuchlanishni talab qiladi. Majburiy emas.

ARDUINO

Arduino Raspberry Pi -dan ketma -ket ulanish orqali signal va buyruqlarni oladi. Biz motorlarimizni boshqarish uchun Arduino -dan foydalanamiz, chunki Raspberry Pi analog qiymatlarni GPIO orqali chiqara olmaydi.

9 -qadam: Raspberry Pi -ni avtomatik ishga tushirish

Har safar Raspberry Pi -ni yoqsangiz, foydalanuvchi nomi va parolni kiritishingiz kerak bo'ladi. Biz buni qilishni xohlamaymiz, chunki ba'zida biz klaviaturani Pi-ga ulay olmaymiz, shuning uchun biz Pi-ni tayyorlaydigan dasturni avtomatik ishga tushirish uchun ushbu ko'rsatmalarni bajaramiz. Agar u loopga yopishib qolsa, biz uni to'xtatish uchun har doim Ctrl+C tugmalar birikmasini bosishimiz mumkin.

  • sudo crontab -e
  • Va keyin biz ushbu faylni cron menejeriga avtomatik ravishda o'rnatishga qo'shadigan buyruqni kiritamiz.

Biz pibot.sh faylini chaqiramiz, u robotni ishga tushirish uchun har xil python skriptlarini ishga tushirishni buyuradi. Keling, buni ko'rib chiqaylik: (Biz dasturga GPIO -ga kirishga ruxsat berish uchun Python pardalari bilan sudo qilamiz)

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

Pi tomonidagi barcha ishlarni bajaradigan kod on_startup.sh deb nomlanadi.

Bu hamma narsani boshqaradigan oddiy qobiq skriptidir.

10 -qadam: Houeston, bizda muammo bor edi … DC motorlari bir xil model emas

Men allaqachon H-Bridge-ni sinab ko'rdim va u yaxshi ishlaydi, lekin men robot platformasidan olgan dvigatellarni ulaganimda, men onlayn buyurtma berganman, bu ikkita dvigatel har xil tezlikda aylanadi va har xil tovush chiqaradi. Men gaz kelebeğini motorlarda 100% ga o'zgartirdim. Ularning ikkalasi ham maksimal darajada harakat qila olmadilar.

Aftidan, bu ikki xil motor. Birida katta tork bor, bu robot uchun juda yaxshi, lekin boshqasi robotni qimirlatmaydi. Shunday qilib, u aylanalarga aylanadi.

Bu erda menda bor narsa - Arduino -dagi ketma -ket dastur juda yaxshi ishlaydi, lekin kompyuterdagi Tcp serveri va Pi -dagi Tcp mijozi hali kodlanmagan. Men bu tanlovni tanlovga to'ldirishim kerak. Men nima qilaman?

  1. Birinchidan, men motorlar uchun kuchlanishni uch baravar oshiraman. Ma'lumotlar varag'i 3V, 6V ularni qimirlatmagan. Keyin 9V. Men teo batareyalarni oqimning ikki barobariga parallel ravishda uladim va kuchlanish o'zgarmadi.
  2. Menda platformadagi o'rnatishga mos keladigan boshqa dvigatellar bormi? Ehtimol, agar ular o'xshash modellar bo'lsa, men ko'rishim mumkin.
  3. Agar shokolad haqiqatan ham fanatga tegsa, men Servosni almashtira olaman.

Maktab boshlandi. Men nima qilishimni ko'rishim kerak.

Eslatma: Nega men bu erda duch keladigan muammolarni bu erda yozaman? Shunday qilib, agar sizda tajriba kam bo'lsa va sizda ham xuddi shunday muammolar bo'lsa, nima qilishni ham bilasiz.

Yechim:

Shunday qilib, men yana bir sinov qildim. Men tezlikni farqini Arduino kodiga moslashtirdim.

DIQQAT: motorlar siz uchun har xil tezlikda aylanishi mumkin! Arduino eskizidagi qiymatlarni o'zgartiring.

11 -qadam: [TCP]: Nima uchun Tcp va Shell himoyalanmagan? TCP nima?

Menda PC uchun SSH emas, balki nima uchun Tcp dan foydalanish kerakligi haqida ikkita tushuntirish bor. - Pi aloqasi.

  1. Birinchidan, SSH (Secure Shell, tushuntirishlarga qarang) uzoqdan kompyuterdan buyruqlarni ishga tushirishga mo'ljallangan. Pi -ga biz xohlagan ma'lumot bilan javob berish qiyinroq, chunki ma'lumotlarni tahlil qilishning yagona varianti qattiq va zerikarli satrlarni qayta ishlashdir.
  2. Ikkinchidan, biz SSH -dan qanday foydalanishni bilamiz va biz ushbu qo'llanmada qurilmalar o'rtasida ko'proq muloqot qilish usullarini o'rganmoqchimiz.

TCP yoki uzatishni boshqarish protokoli Internet -protokollar to'plamining asosiy protokoli hisoblanadi. U Internet protokoli (IP) ni to'ldirgan dastlabki tarmoqni ishga tushirishdan kelib chiqqan. Shuning uchun, butun to'plam odatda TCP/IP deb nomlanadi. TCP IP tarmog'i orqali aloqa qiladigan xostlarda ishlaydigan ilovalar o'rtasida oktetlar oqimini ishonchli, tartibli va xatolik bilan tekshirilishini ta'minlaydi.

(Vikipediyadan)

Shunday qilib, TCP afzalliklari:

  • Xavfsiz
  • Tez
  • Tarmoqning istalgan joyida ishlaydi
  • Ma'lumotlarning to'g'ri uzatilishini tekshirish usullarini taqdim etadi
  • Oqim nazorati: agar ma'lumot yuboruvchi mijozni ro'yxatdan o'tishi va qayta ishlashi uchun ma'lumotlarni juda tez yuboradigan bo'lsa, himoyaga ega.

Va kamchiliklari quyidagilardir:

  • TCP-da siz ma'lumotlarni uzata olmaysiz (tarmoqdagi barcha qurilmalarga ma'lumot yuborishingiz mumkin) va ko'p tarmoqli (bir xil, lekin bir-biridan farqli- har bir qurilmaga server kabi translyatsiya qilish imkoniyatini beradi).
  • Dastur va operatsion tizim kutubxonalaridagi xatolar (TCP aloqasini boshqaradigan, yo'riqnoma ikkita [yoki undan ko'p] qurilmani ulashdan boshqa hech narsa qilmaydi)

Nima uchun UDP dan foydalanmasligingiz mumkin? Xo'sh, TCP -dan farqli o'laroq, UDP sizning mijozingiz ko'proq ma'lumot yuborishdan oldin ma'lumotlarni olishiga ishonch hosil qilmaydi. Masalan, elektron pochta xabarini yuborish va mijoz uni qabul qilishini bilmaslik. Bundan tashqari, UDP xavfsizligi past. Qo'shimcha ma'lumot olish uchun Stack Exchange Super User -dan ushbu xabarni o'qing

Bu maqola yaxshi va tavsiya etilgan.

12 -qadam: [TCP]: Keling, mijoz yarataylik

Serverdan ma'lumotlarni oladigan mijoz (bizning holatimizda Raspberry Pi) (bizning shaxsiy kompyuterimiz) ma'lumotlarni Pi (Arduino -da bajariladigan ketma -ket buyruqlar) ga yuborish va ma'lumotlarni qaytarib olish uchun ma'lumotlarni oladi (Sensor o'qishlari) va to'g'ridan -to'g'ri Arduino -dan fikr -mulohaza. Qo'shilgan sxema bu uchlik o'rtasidagi munosabatni ko'rsatadi.

Python Wiki TcpCommunication maqolasi shuni ko'rsatadiki, o'rnatilgan rozetka moduli yordamida bir necha satrli kod bilan aloqa o'rnatish juda oson. Bizda kompyuterda dastur va Pi dasturida boshqa dastur bo'ladi.

Biz uzilishlar bilan ishlaymiz. Ular haqida tushuntirishlar bo'limida ko'proq ma'lumot oling. Buferlar haqida ham o'qing, endi biz o'zimizdagi ma'lumotlarni o'qishimiz mumkin: data = s.recv (BUFFER_SIZE), lekin biz bo'sh chaqishlar bilan qancha belgini aniqlagan bo'lamiz. Biz uzilishlardan foydalanishimiz mumkinmi? Boshqa savol: bufer bo'sh bo'ladimi yoki server ko'proq ma'lumot yuborishini kutadimi, bu holda server/mijoz tanaffusdan istisno qiladimi?

Keling, buni birma -bir hal qilaylik. Buni amalga oshirishdan oldin, men ishlatilgan TCP va UDP portlarini ro'yxatlaydigan ushbu Vikipediya maqolasini ko'rib chiqdim. Tez ko'rib chiqqandan so'ng, men ushbu loyiha 12298 portida aloqa o'rnatishga qaror qildim, chunki u operatsion tizim va mahalliy xizmatlar tomonidan ishlatilmaydi.

13 -qadam: Tcp xabarlarini sinab ko'ring

Biz uzilishlardan foydalanishimiz mumkinligini bilish uchun Python buyruq satri yordamida oddiy mijoz va server yaratishga ruxsat beramiz. Men buni quyidagi bosqichlarda qilaman:

  1. Tcp orqali matnni parda portidan pastadir orqali yuboradigan dasturni ishga tushiring
  2. Boshqa dasturni ishga tushiring (parallel ravishda), u butun matnni ketma -ket o'qiydi va uni ekranga chiqaradi.

Dasturning faqat segmentlari ko'rsatiladi. Barcha dasturlar Python 3. bilan ishlaydi, bu dasturlarning barchasi kompyuter foydalanuvchisi klaviaturasidan ketma -ket buyruqni Pi orqali Arduino -ga yuborishdir.

  • SBcontrolPC.py - Kompyuterda ishlash uchun. Mahalliy manzilda va ko'rsatilgan portda TCP ulanishini boshlaydi (men 12298 portidan foydalanaman, nima uchun oldingi qadamni ko'ring)
  • SBcontrolPi.py - Pi ustida ishlash. Har yarim soniyada (0,5 soniyada) uning buferini o'qiydi. Video oqimi va boshqalarni boshqaradigan qobiq skriptini ishga tushiradi.

Tavsiya: