Სარჩევი:

შექმენით თქვენი ინტერნეტით კონტროლირებადი ვიდეო სტრიმინგის რობოტი Arduino და Raspberry Pi– ით: 15 ნაბიჯი (სურათებით)
შექმენით თქვენი ინტერნეტით კონტროლირებადი ვიდეო სტრიმინგის რობოტი Arduino და Raspberry Pi– ით: 15 ნაბიჯი (სურათებით)

ვიდეო: შექმენით თქვენი ინტერნეტით კონტროლირებადი ვიდეო სტრიმინგის რობოტი Arduino და Raspberry Pi– ით: 15 ნაბიჯი (სურათებით)

ვიდეო: შექმენით თქვენი ინტერნეტით კონტროლირებადი ვიდეო სტრიმინგის რობოტი Arduino და Raspberry Pi– ით: 15 ნაბიჯი (სურათებით)
ვიდეო: როგორ უნდა მოვაწყოთ მთავარი გვერდი? 2024, ივლისი
Anonim
შექმენით თქვენი ინტერნეტით კონტროლირებადი ვიდეო ნაკადის რობოტი არდუინოსა და ჟოლოს პიით
შექმენით თქვენი ინტერნეტით კონტროლირებადი ვიდეო ნაკადის რობოტი არდუინოსა და ჟოლოს პიით
შექმენით თქვენი ინტერნეტით კონტროლირებადი ვიდეო ნაკადის რობოტი არდუინოსა და ჟოლოს პიით
შექმენით თქვენი ინტერნეტით კონტროლირებადი ვიდეო ნაკადის რობოტი არდუინოსა და ჟოლოს პიით
შექმენით თქვენი ინტერნეტით კონტროლირებადი ვიდეო ნაკადის რობოტი არდუინოსა და ჟოლოს პიით
შექმენით თქვენი ინტერნეტით კონტროლირებადი ვიდეო ნაკადის რობოტი არდუინოსა და ჟოლოს პიით

მე ვარ @RedPhantom (aka LiquidCrystalDisplay / Itay), 14 წლის სტუდენტი ისრაელიდან, რომელიც სწავლობს მაქს შინის უმცროს საშუალო სკოლაში მეცნიერებისა და მათემატიკის შემსწავლელ მეცნიერებებში. მე ვაკეთებ ამ პროექტს, რომ ყველამ ისწავლოს და გააზიაროს!

თქვენ ალბათ გიფიქრიათ საკუთარ თავზე: ჰმ … მე გიკი ვარ … და ჩემს შვილებს სურთ, რომ მათთან ერთად გავაკეთო პროექტი … მას სურდა რობოტის აშენება. მას სურდა მისი ჩაცმა პატარა ლეკვის მსგავსად. შაბათ -კვირის კარგი პროექტია!

Raspberry Pi შესანიშნავია ყველა გამოყენებისთვის: დღეს ჩვენ გამოვავლენთ ამ მიკრო კომპიუტერის რობოტის შექმნის შესაძლებლობებს. ამ რობოტს შეუძლია:

  • იმოძრავეთ და გაკონტროლდით LAN (WiFi) საშუალებით ნებისმიერი კომპიუტერის გამოყენებით, რომელიც დაკავშირებულია იმავე WiFi ქსელთან, როგორც ეს არის Raspberry Pi.
  • გაუშვით ვიდეო პირდაპირ ეთერში Raspberry Pi კამერის მოდულის გამოყენებით
  • გაგზავნეთ სენსორული მონაცემები Arduino– ს გამოყენებით

იმის სანახავად, თუ რა გჭირდებათ ამ ლამაზი სინათლის პროექტისთვის, უბრალოდ წაიკითხეთ შემდეგი ნაბიჯი (გაფრთხილებები) და ამის შემდეგ Wanted: Components ნაბიჯი.

აქ არის GitHub რეპო: GITHUB REPO BY ME

აქ არის პროექტის საიტი: PROJECT SITE BY ME

ნაბიჯი 1: გაფრთხილება: ფრთხილად სცადეთ ეს სახლში

ᲡᲘᲤᲠᲗᲮᲘᲚᲘᲗ:

ამ სახელმძღვანელოს ავტორი ვარაუდობს, რომ თქვენ გაქვთ საკმარისი ცოდნა ელექტროენერგიისა და ელექტრო მოწყობილობების ძირითადი მუშაობის შესახებ. თუ არ ხართ ფრთხილად და არ მიჰყევით ინსტრუქციებს ამ სახელმძღვანელოში, თქვენ შეიძლება: დაზიანდეს ელექტრო ტექნიკა, დაწვათ საკუთარი თავი ან გამოიწვიოთ ცეცხლი. გთხოვთ იყავით ფრთხილად და გამოიყენეთ საღი აზრი. თუ თქვენ არ გაქვთ ცოდნა, რომელიც საჭიროა ამ გაკვეთილისთვის (შედუღება, ელექტრონიკის საფუძვლები), გთხოვთ შეასრულოთ ის, ვინც ამას აკეთებს. Გმადლობთ.

ამ ინსტრუქციის ავტორი ამოიღებს ნებისმიერ პასუხისმგებლობას საკუთარი თავისგან ზიანის მიყენებისათვის გამოწვეული ან დაკარგული საკუთრების ან ფიზიკური დაზიანებისათვის. გამოიყენეთ საერთო აზრი

ნაბიჯი 2: კომპონენტები

კავშირები
კავშირები
კავშირები
კავშირები
კავშირები
კავშირები
კავშირები
კავშირები

სანამ გამაცხელებელ რკინას გავაცხელებთ, უნდა გავიაროთ რა უნდა იყოს დაკავშირებული რა. მე შევადგინე ეს მარტივი სქემა (MS Paint არასოდეს მაძლევს ნებას), რომელიც აღწერს სად მდებარეობს რობოტის შიგნით.

სურათი აგებულია ისე, რომ შეძლოთ მასშტაბირება და სრული რეზოლუციის ნახვა და ტექსტის წაკითხვა.

ნაბიჯი 6: მისამართი Pi

Arduino ესაუბრება Pi– ს გეგმის მიხედვით. და Pi საუბრობს კომპიუტერთან, როგორ მუშაობს ეს ყველაფერი?

მოდით შევხედოთ ჩვენი კავშირის დაწყების თანმიმდევრობას:

  1. ჟოლო Pi იწყება
  2. არდუინო იწყებს
  3. ჟოლო Pi იწყებს TCP კლიენტს. ის გამოაქვს თავისი IP მისამართი LED- ის საშუალებით.
  4. ჟოლო Pi იწყებს სერიული კომუნიკაციების სერვისს და აკავშირებს არდუინოსთან

ამიტომ ჩვენ შევქმენით ერთგვარი კომუნიკაცია:

კომპიუტერი Raspberry Pi Arduino

მე გამოვიყენე Visual Basic. NET (Microsoft Visual Studio 2013 Community), რომ დავწერო პროგრამა, რომელიც ესაუბრება Raspberry Pi– ს და Python– ს Arduino/Raspberry Pi პროტოკოლის დასაწერად.

ყველაფერი რაც თქვენ გჭირდებათ რომ იცოდეთ თქვენი Pi IP მისამართი, არის დააკავშიროთ იგი HDMI ეკრანზე, შეხვიდეთ Shell– ში და ჩაწეროთ ბრძანება:

მასპინძლის სახელი -მე

ნაბიჯი 7: გეგმა

ახლა, როდესაც მივიღეთ Pi- ს IP მისამართი, ჩვენ მასში შევიყვანთ SSH (SSH არის უსაფრთხო შელი - ჩვენ დისტანციურად ვუკავშირდებით Linux- ის გარსს) და დავწერთ ფაილს, რომელიც აჩვენებს სერვერის IP მისამართს. Pi, გაშვებისას ასევე გააკეთებს ამას და დაწერს პორტს, რომელსაც უსმენს. აქ მე მხოლოდ რამდენიმე მაგალითს მოვიყვან კოდისგან, მაგრამ მისი გადმოწერა შესაძლებელია ამ საფეხურიდან და ჩემს მიერ შექმნილი GitHub ფილიალიდან. დეტალები ამის შესახებ მოგვიანებით.

ის მუშაობს ასე:

  1. RPi იწყება.
  2. RPi იწყებს Tcp პროგრამას ადგილობრივ IP- ზე და დანიშნულ პორტზე.
  3. RPI იწყებს ვიდეოს სტრიმინგს
  4. RPI ითიშება.

ნაბიჯი 8: გადადით ფიზიკურად

ახლა ჩვენ მზად ვართ დავიწყოთ ფიზიკურად ყველაფერი. თუ თქვენ არ წაგიკითხავთ ნაბიჯი 1 (გამაფრთხილებელი ტექსტი და ლიცენზირება) გთხოვთ გააგრძელოთ სანამ გააგრძელებთ. მე არ ვარ პასუხისმგებელი მიყენებულ ზარალზე. და ეჭვის შემთხვევაში, ეს რობოტი არ უნდა იქნას გამოყენებული სამხედრო მიზნებისთვის, თუ ეს არ არის ზომბი აპოკალიფსი. და მაშინაც გამოიყენეთ საღი აზრი.

გირჩევთ წაიკითხოთ ინსტრუქციის მოსმენა წაკითხვის სიაში.

ჩამოტვირთეთ კავშირის სქემა "კავშირის" ნაბიჯიდან.

მოტორსი

თქვენ მიერ ნაყიდი ძრავები ალბათ ასე გამოიყურება და თუ არა, ეს ნორმალურია: თუ მათ აქვთ მხოლოდ ორი მავთული (უმეტეს შემთხვევაში შავი და წითელი), ის უნდა იმუშაოს. გადახედეთ მათ მონაცემთა ცხრილს ინტერნეტში, რომ ნახოთ მათი მოქმედი ძაბვა და დენი. მოგერიდებათ დასვათ შეკითხვები კომენტარების განყოფილებაში. მე ყოველთვის ვკითხულობ მათ.

H-BRIDGE

მე არასოდეს ვმუშაობ H-Bridge– თან ადრე. ცოტა დავგუგლე და ვიპოვე კარგი ინსტრუქტორი, რომელიც განმარტავს HB– ს პრინციპებს. თქვენც შეგიძლიათ იქ შეხედოთ (იხილეთ კითხვის სიის ნაბიჯი) და შეაერთეთ თქვენიც. ბევრს არ ავხსნი. თქვენ შეგიძლიათ წაიკითხოთ იქ და იცოდეთ ყველაფერი რაც თქვენ გჭირდებათ ამ წრის შესახებ.

LED

ამ პატარა ნათურას შეუძლია ლოგიკური ძაბვისგან გაშვება მხოლოდ იმიტომ, რომ იგი თითქმის არ საჭიროებს დენს და ძაბვას 3V-5V 4mA-18mA. სურვილისამებრ.

არდუინო

Arduino მიიღებს სიგნალებს და ბრძანებებს სერიული კავშირის საშუალებით Raspberry Pi– დან. ჩვენ ვიყენებთ Arduino– ს ჩვენი ძრავების გასაკონტროლებლად, რადგან Raspberry Pi– ს არ შეუძლია გამოუშვას ანალოგური მნიშვნელობები GPIO– ს საშუალებით.

ნაბიჯი 9: ჟოლოს პი ავტომატურად დაწყება

ყოველ ჯერზე, როდესაც Raspberry Pi- ს ჩართავთ, მოგიწევთ მომხმარებლის სახელისა და პაროლის ჩაწერა. ჩვენ არ გვინდა ამის გაკეთება, რადგან ხანდახან ჩვენ უბრალოდ ვერ ვუკავშირდებით კლავიატურას Pi- ს, ასე რომ ჩვენ მივყვებით ამ ნაბიჯებს ამ სახელმძღვანელოდან პროგრამის ავტომატურად დასაწყებად, რომელიც ამზადებს Pi- ს. თუ ის მარყუჟში მოხვდება, ჩვენ ყოველთვის შეგვიძლია შევაჩეროთ Ctrl+C.

  • sudo crontab -e
  • და შემდეგ ჩვენ შევიყვანთ ბრძანებას, რომელიც დასძენს ამ ფაილს auto-strartup– ში cron მენეჯერში.

ჩვენ მოვუწოდებთ ფაილს pibot.sh, რომელიც მოგვცემს ბრძანებებს რობოტის მუშაობისთვის ყველა სახის პითონის სკრიპტის დასაწყებად. მოდით გადავიდეთ მას: (ჩვენ sudo ერთად ფარდა 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.

ეს არის მარტივი shell სკრიპტი, რომელიც მუშაობს ყველაფერს.

ნაბიჯი 10: ჰიუსტონი, ჩვენ გვქონდა პრობლემა… DC Motors არ არის იგივე მოდელი

მე უკვე გამოვცადე H-Bridge და ის მშვენივრად მუშაობს, მაგრამ როდესაც რობოტის პლატფორმიდან მოპოვებულ ძრავებს ვუკავშირებ, ინტერნეტით შევუკვეთე, რომ ეს ორი ძრავა სხვადასხვა სიჩქარით ბრუნავს და სხვადასხვა ხმას გამოსცემს. ძრავაზე ძრავი 100% -ით შევცვალე. ორივე მათგანმა ვერ შეძლო თავისი მაქსიმალური შესაძლებლობებით სირბილი.

როგორც ჩანს, ეს ორი განსხვავებული ძრავაა. ერთს აქვს უფრო დიდი ბრუნვის მომენტი, რაც შესანიშნავია ამ ტიპის რობოტებისთვის, მაგრამ მეორე უბრალოდ რობოტს არ ამოძრავებს. ასე ბრუნავს წრეებში.

ამ ეტაპზე, რაც მე მივიღე, არის სერიული პროგრამა Arduino– ზე, რომელიც მშვენივრად მუშაობს, მაგრამ კომპიუტერზე Tcp სერვერი და Pi– ზე Tcp კლიენტი ჯერ არ არის კოდირებული. მე უნდა შეავსო ეს ჩანაწერი კონკურსისთვის. Რა გავაკეთო?

  1. პირველ რიგში, მე სამჯერ ვამძიმებ ძრავებს. მონაცემთა ცხრილში ნათქვამია 3V, 6V მათ არ გადააქვს. მაშინ არის 9 ვ. მე დავუკავშირე თეო ბატარეები პარალელურად, რომ გავაორმაგო დენი და ძაბვა იგივე რჩება.
  2. მაქვს სხვა ძრავები, რომლებიც ჯდება პლატფორმაზე მთაზე? იქნებ ვნახო მსგავსი მოდელები არიან თუ არა.
  3. შემიძლია შევცვალო სერვოში, თუ შოკოლადი ნამდვილად მოხვდა გულშემატკივარს.

სკოლა დაიწყო. უნდა ვნახო რა ვქნა.

შენიშვნა: რატომ ვწერ დედამიწაზე არსებულ პრობლემებს აქ? ასე რომ, თუ თქვენ ნაკლებად გამოცდილი ხართ და იგივე პრობლემები გაქვთ, თქვენ იცით რა უნდა გააკეთოთ.

Გადაწყვეტილება:

ასე რომ, მე კიდევ ერთი ტესტი გავაკეთე. მე ადაპტირებული ვარ სიჩქარის სხვაობა არდუინოს კოდში.

შენიშვნა: ძრავები შეიძლება სხვადასხვა სიჩქარით დატრიალდეს თქვენთვის! შეცვალეთ მნიშვნელობები არდუინოს ესკიზში.

ნაბიჯი 11: [TCP]: რატომ Tcp და არა უსაფრთხო Shell? რა არის TCP?

მე მაქვს ორი ახსნა, თუ რატომ გამოიყენება Tcp და არა SSH P. C. - პი კომუნიკაცია.

  1. პირველ რიგში, SSH (უსაფრთხო შელი, იხ. განმარტებები) იგულისხმება დისტანციური კომპიუტერიდან ბრძანებების გაშვების მიზნით. Pi- ს პასუხი ჩვენთვის სასურველი ინფორმაციის მიღებით უფრო რთულია, რადგან მონაცემთა გაანალიზების ჩვენი ერთადერთი ვარიანტი არის მკაცრი და დამღლელი სიმებიანი დამუშავება.
  2. მეორეც, ჩვენ უკვე ვიცით როგორ გამოვიყენოთ SSH და გვსურს ვისწავლოთ მოწყობილობებს შორის კომუნიკაციის მეტი გზა ამ გაკვეთილში.

TCP, ან გადაცემის კონტროლის პროტოკოლი, არის ინტერნეტ პროტოკოლის კომპლექტის ძირითადი პროტოკოლი. იგი წარმოიშვა საწყისი ქსელის დანერგვისას, რომელშიც შეავსო ინტერნეტ პროტოკოლი (IP). ამრიგად, მთელ კომპლექტს ჩვეულებრივ უწოდებენ TCP/IP. TCP უზრუნველყოფს ოკეტების ნაკადის საიმედო, მოწესრიგებულ და გადამოწმებულ მიწოდებას პროგრამებს შორის, რომლებიც მუშაობს მასპინძლებზე, რომლებიც ურთიერთობენ IP ქსელში.

(ვიკიპედიიდან)

ასე რომ, TCP დადებითია:

  • უსაფრთხო
  • Სწრაფი
  • მუშაობს სადმე ქსელში
  • გთავაზობთ მეთოდებს მონაცემთა გადაცემის სწორი შესამოწმებლად
  • ნაკადის კონტროლი: აქვს დაცვა იმ შემთხვევაში, თუ მონაცემთა გამგზავნი აგზავნის მონაცემებს ძალიან სწრაფად კლიენტისთვის რეგისტრაციისა და დამუშავებისათვის.

და მინუსებია:

  • TCP– ში თქვენ არ შეგიძლიათ მაუწყებლობა (მონაცემების გაგზავნა ქსელის ყველა მოწყობილობაზე) და მულტიკასტი (იგივე, მაგრამ ცოტა განსხვავებული- აძლევს თითოეულ მოწყობილობას სერვერის მსგავსად გადაცემის შესაძლებლობას).
  • შეცდომები თქვენი პროგრამისა და ოპერაციული სისტემის ბიბლიოთეკებში (რომლებიც მართავენ საკუთარ თავს TCP კომუნიკაციას, თქვენი როუტერი თითქმის არაფერს აკეთებს გარდა ორი [ან მეტი] მოწყობილობის შეერთებისა)

რატომ არ გამოიყენოთ UDP, შეიძლება გკითხოთ? კარგად, TCP– სგან განსხვავებით, UDP არ არის დარწმუნებული, რომ თქვენი კლიენტი მიიღებს მონაცემებს მეტის გაგზავნამდე. მოსწონს ელ.ფოსტის გაგზავნა და არ იცის, იღებს თუ არა კლიენტი მას. გარდა ამისა, UDP ნაკლებად უსაფრთხოა. დამატებითი ინფორმაციისთვის წაიკითხეთ ეს პოსტი Stack Exchange Super User– დან

ეს სტატია კარგია და რეკომენდირებულია.

ნაბიჯი 12: [TCP]: მოდით შევქმნათ კლიენტი

კლიენტი (Raspberry Pi ჩვენს შემთხვევაში), რომელიც იღებს მონაცემებს სერვერიდან (ჩვენი კომპიუტერი ჩვენს შემთხვევაში) მიიღებს მონაცემებს Pi– ზე გასაგზავნად (სერიული ბრძანებები, რომლებიც შესრულდება Arduino– ზე) და მიიღებს მონაცემებს უკან (სენსორული კითხვები და უკუკავშირი პირდაპირ არდუინოდან. თანდართული სქემა აჩვენებს სამს შორის ურთიერთობას.

პითონის ვიკი TcpCommunication სტატია გვიჩვენებს, რომ ასე მარტივია ასეთი კომუნიკაციის განხორციელება კოდის რამდენიმე სტრიქონით ჩაშენებული სოკეტის მოდულის გამოყენებით. ჩვენ გვექნება პროგრამა კომპიუტერზე და სხვა პროგრამა Pi- ზე.

ჩვენ ვიმუშავებთ შეფერხებებით. შეიტყვეთ მეტი მათ შესახებ ახსნა – განმარტების ეტაპზე. წაიკითხეთ იქაც ბუფერების შესახებ. ახლა, ჩვენ შეგვიძლია წავიკითხოთ მონაცემები, რომლებიც გვაქვს მონაცემების = s.recv (BUFFER_SIZE) გამოყენებით, მაგრამ ეს იქნება რამდენი სიმბოლო ჩვენ განვსაზღვრეთ ცარიელი ნაკბენებით. შეგვიძლია გამოვიყენოთ შეფერხებები? კიდევ ერთი შეკითხვა: იქნება ბუფერი ცარიელი თუ დაელოდება სერვერს უფრო მეტი მონაცემების გაგზავნა, ამ შემთხვევაში სერვერი/კლიენტი გამოტოვებს დროის გამონაკლისს?

მოდით გავუმკლავდეთ ამას ერთდროულად. სანამ ამას გავაკეთებდით, მე ვიპოვე ვიკიპედიის ეს სტატია, რომელშიც მოცემულია TCP და UDP პორტები. სწრაფი ნახვის შემდეგ მე გადავწყვიტე, რომ ეს პროექტი დაუკავშირდება 12298 პორტს, რადგან ის არ გამოიყენება ოპერაციული სისტემის და ადგილობრივი სერვისების მიერ.

ნაბიჯი 13: სცადეთ ჩვენი Tcp Comms

იმის გასარკვევად, შეგვიძლია გამოვიყენოთ შეფერხებები, მოდით შევქმნათ მარტივი კლიენტი და სერვერი პითონის ბრძანების ხაზის გამოყენებით. ამას გავაკეთებ შემდეგ ნაბიჯებში:

  1. დაიწყეთ პროგრამა, რომელიც აგზავნის ტექსტს Tcp მეშვეობით მარყუჟში ფარდის პორტის გავლით
  2. დაიწყეთ სხვა პროგრამა (პარალელურად), რომელიც კითხულობს მთელ ტექსტს მარყუჟში და ბეჭდავს მას ეკრანზე.

ნაჩვენები იქნება პროგრამის მხოლოდ სეგმენტები. ყველა პროგრამა მუშაობს პითონ 3 -ით. ყველა ეს პროგრამა არის სერიული ბრძანების გაგზავნა კომპიუტერის მომხმარებლის კლავიატურადან Arduino– ზე Pi– ს საშუალებით.

  • SBcontrolPC.py - კომპიუტერზე გასაშვებად. იწყებს TCP კავშირს ადგილობრივ მისამართზე და მითითებულ პორტზე (მე ვიყენებ პორტს 12298, იხილეთ წინა ნაბიჯი რატომ)
  • SBcontrolPi.py - Pi– ზე გაშვება. კითხულობს მის ბუფერს ყოველ ნახევარ წამში (0.5 წამი). იწყებს shell სკრიპტს, რომელიც მართავს ისეთ რამეს, როგორიცაა ვიდეო ნაკადი და ა.

გირჩევთ: