สารบัญ:

สร้างหุ่นยนต์สตรีมมิ่งวิดีโอที่ควบคุมทางอินเทอร์เน็ตของคุณด้วย Arduino และ Raspberry Pi: 15 ขั้นตอน (พร้อมรูปภาพ)
สร้างหุ่นยนต์สตรีมมิ่งวิดีโอที่ควบคุมทางอินเทอร์เน็ตของคุณด้วย Arduino และ Raspberry Pi: 15 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: สร้างหุ่นยนต์สตรีมมิ่งวิดีโอที่ควบคุมทางอินเทอร์เน็ตของคุณด้วย Arduino และ Raspberry Pi: 15 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: สร้างหุ่นยนต์สตรีมมิ่งวิดีโอที่ควบคุมทางอินเทอร์เน็ตของคุณด้วย Arduino และ Raspberry Pi: 15 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: มาลองสตรีมภาพจากกล้องของ Raspberry Pi ขึ้นสู่แอพพลิเคชัน Blynk กันเถอะ! 2024, กรกฎาคม
Anonim
สร้างหุ่นยนต์สตรีมมิ่งวิดีโอที่ควบคุมทางอินเทอร์เน็ตของคุณด้วย Arduino และ Raspberry Pi
สร้างหุ่นยนต์สตรีมมิ่งวิดีโอที่ควบคุมทางอินเทอร์เน็ตของคุณด้วย Arduino และ Raspberry Pi
สร้างหุ่นยนต์สตรีมมิ่งวิดีโอที่ควบคุมทางอินเทอร์เน็ตของคุณด้วย Arduino และ Raspberry Pi
สร้างหุ่นยนต์สตรีมมิ่งวิดีโอที่ควบคุมทางอินเทอร์เน็ตของคุณด้วย Arduino และ Raspberry Pi
สร้างหุ่นยนต์สตรีมมิ่งวิดีโอที่ควบคุมทางอินเทอร์เน็ตของคุณด้วย Arduino และ Raspberry Pi
สร้างหุ่นยนต์สตรีมมิ่งวิดีโอที่ควบคุมทางอินเทอร์เน็ตของคุณด้วย Arduino และ Raspberry Pi

ฉันชื่อ @RedPhantom (หรือที่รู้จักว่า LiquidCrystalDisplay / Itay) นักเรียนอายุ 14 ปีจากอิสราเอลที่กำลังเรียนอยู่ที่ Max Shein Junior High School for Advanced Science and Mathematics ฉันทำโครงการนี้ให้ทุกคนได้เรียนรู้และแบ่งปัน!

คุณอาจเคยคิดกับตัวเองว่า อืม… ฉันเป็นคนเก่ง… และลูกๆ ของฉันต้องการให้ฉันทำโครงการกับพวกเขา…เขาต้องการสร้างหุ่นยนต์ เธอต้องการแต่งตัวให้เหมือนลูกสุนัขตัวเล็กๆ เป็นโครงการวันหยุดสุดสัปดาห์ที่ดี!

Raspberry Pi สมบูรณ์แบบสำหรับทุกการใช้งาน: วันนี้เราจะมาอธิบายความสามารถของไมโครคอมพิวเตอร์เครื่องนี้ในการสร้างหุ่นยนต์ หุ่นยนต์นี้สามารถ:

  • ขับไปรอบๆ และควบคุมผ่าน LAN (WiFi) โดยใช้คอมพิวเตอร์เครื่องใดก็ได้ที่เชื่อมต่อกับเครือข่าย WiFi เดียวกันกับ Raspberry Pi
  • สตรีมวิดีโอสดโดยใช้โมดูลกล้อง Raspberry Pi
  • ส่งข้อมูลเซ็นเซอร์โดยใช้ Arduino

หากต้องการดูสิ่งที่คุณต้องการสำหรับโปรเจ็กต์ไฟที่สวยงามนี้ เพียงอ่านขั้นตอนถัดไป (คำเตือน) และหลังจากนั้นขั้นตอน Wanted: Components

นี่คือ GitHub repo: GITHUB REPO BY ME

นี่คือไซต์โครงการ: PROJECT SITE BY ME

ขั้นตอนที่ 1: คำเตือน: โปรดใช้ความระมัดระวังที่บ้าน

คำเตือน:

ผู้เขียนบทแนะนำนี้ถือว่าคุณมีความรู้เพียงพอเกี่ยวกับไฟฟ้าและการทำงานพื้นฐานของอุปกรณ์ไฟฟ้า หากคุณไม่ระมัดระวังและไม่ปฏิบัติตามคำแนะนำในบทช่วยสอนนี้ คุณอาจ: สร้างความเสียหายให้กับอุปกรณ์อิเล็กทรอนิกส์ เผาตัวเอง หรือทำให้เกิดไฟไหม้ โปรดใช้ความระมัดระวังและใช้สามัญสำนึก หากคุณไม่มีความรู้ที่จำเป็นสำหรับบทช่วยสอนนี้ (การบัดกรี พื้นฐานของอุปกรณ์อิเล็กทรอนิกส์) โปรดดำเนินการกับบุคคลที่มีความรู้ ขอขอบคุณ.

ผู้เขียนคำแนะนำนี้จะลบความรับผิดชอบใด ๆ จากตัวเขาเองสำหรับความเสียหายที่เกิดขึ้นหรือสูญหายทรัพย์สินหรือความเสียหายทางกายภาพ ใช้สามัญสำนึก

ขั้นตอนที่ 2: ส่วนประกอบ

การเชื่อมต่อ
การเชื่อมต่อ
การเชื่อมต่อ
การเชื่อมต่อ
การเชื่อมต่อ
การเชื่อมต่อ
การเชื่อมต่อ
การเชื่อมต่อ

ก่อนที่เราจะอุ่นหัวแร้งเราต้องพิจารณาว่าควรเชื่อมต่อกับอะไร ฉันสร้างแผนภูมิง่ายๆ นี้ (MS Paint ไม่เคยทำให้ฉันผิดหวัง) ซึ่งอธิบายว่าส่วนใดส่วนหนึ่งอยู่ภายในหุ่นยนต์

รูปภาพนี้สร้างขึ้นเพื่อให้คุณสามารถซูมเข้าและดูในความละเอียดเต็มและอ่านข้อความได้

ขั้นตอนที่ 6: ที่อยู่สำหรับ Pi

Arduino พูดคุยกับ Pi ตามแผน และ Pi คุยกับคอมพิวเตอร์ ทั้งหมดนี้ทำงานอย่างไร

มาดูลำดับการเริ่มต้นการเชื่อมต่อของเรา:

  1. ราสเบอร์รี่ Pi เริ่ม
  2. Arduino เริ่ม
  3. Raspberry Pi เริ่มไคลเอนต์ TCP มันยิงออกที่อยู่ IP ของมันผ่าน LED
  4. Raspberry Pi เริ่มบริการ Serial Communications และเชื่อมต่อกับ Arduino

ดังนั้นเราจึงได้สร้างการสื่อสารบางอย่างขึ้น:

คอมพิวเตอร์ Raspberry Pi Arduino

ฉันเคยใช้ Visual Basic. NET (ชุมชน Microsoft Visual Studio 2013) เพื่อเขียนโปรแกรมที่พูดคุยกับ Raspberry Pi และ Python เพื่อเขียนโปรโตคอล Arduino/Raspberry Pi

สิ่งที่คุณต้องทำเพื่อทราบที่อยู่ IP ของ Pi คือเชื่อมต่อกับหน้าจอ HDMI ลงชื่อเข้าใช้ Shell แล้วพิมพ์คำสั่ง:

ชื่อโฮสต์ -I

ขั้นตอนที่ 7: แผน

ตอนนี้เรามีที่อยู่ IP ของ Pi แล้ว เราจะใส่ SSH ลงไป (SSH คือ Secure Shell - เราเชื่อมต่อกับ Linux shell จากระยะไกล) และเขียนไฟล์ที่แสดงที่อยู่ IP ของเซิร์ฟเวอร์ Pi เมื่อเริ่มต้นจะทำเช่นเดียวกันและเขียนพอร์ตที่ฟังอยู่ ที่นี่ฉันจะให้ตัวอย่างบางส่วนจากโค้ดเท่านั้น แต่สามารถดาวน์โหลดได้จากขั้นตอนนี้และจากสาขา GitHub ที่ฉันสร้างขึ้น รายละเอียดในภายหลัง

มันทำงานดังนี้:

  1. RPi เริ่มทำงาน
  2. RPi เริ่มโปรแกรม Tcp บน IP ในพื้นที่และพอร์ตที่กำหนด
  3. RPI เริ่มสตรีมวิดีโอ
  4. RPI ปิดตัวลง

ขั้นตอนที่ 8: ไปทางกายภาพ

ตอนนี้เราพร้อมที่จะเริ่มสร้างสิ่งทั้งหมดแล้ว หากคุณยังไม่ได้อ่านขั้นตอนที่ 1 (ข้อความเตือนและใบอนุญาต) โปรดอ่านก่อนดำเนินการต่อ ฉันไม่รับผิดชอบต่อความเสียหายใด ๆ ที่เกิดขึ้น และในกรณีที่มีข้อสงสัย หุ่นยนต์ตัวนี้จะต้องไม่ถูกใช้เพื่อวัตถุประสงค์ทางการทหาร เว้นแต่จะเป็นการเปิดเผยของซอมบี้ แล้วก็ใช้สามัญสำนึก

ขอแนะนำให้คุณอ่านคำแนะนำในการฟังในรายการเรื่องรออ่าน

ดาวน์โหลดรูปแบบการเชื่อมต่อจากขั้นตอน "การเชื่อมต่อ"

มอเตอร์

มอเตอร์ที่คุณซื้ออาจมีลักษณะเช่นนี้ และไม่เป็นไรถ้าไม่มี หากมีเพียงสองสาย (ในกรณีส่วนใหญ่สีดำและสีแดง) ก็ควรใช้งานได้ ค้นหาแผ่นข้อมูลออนไลน์เพื่อดูแรงดันไฟและกระแสไฟที่ใช้งาน อย่าลังเลที่จะถามคำถามในส่วนความคิดเห็น ฉันมักจะอ่านพวกเขา

H-BRIDGE

ฉันไม่เคยทำงานกับ H-Bridge มาก่อน ฉัน googled เล็กน้อยและพบว่ามีคำแนะนำที่ดีในการอธิบายหลักการของ HB คุณสามารถดูที่นั่นได้เช่นกัน (ดูขั้นตอนรายการเรื่องรออ่าน) และขอคุณด้วย ฉันจะไม่อธิบายมาก คุณสามารถอ่านและรู้ทุกสิ่งที่คุณควรทราบเกี่ยวกับวงจรนี้

นำ

หลอดไฟขนาดเล็กนี้สามารถเรียกใช้จากแรงดันลอจิคัลเพียงเพราะแทบไม่ต้องการกระแสไฟ และแรงดันไฟ 3V-5V 4mA-18mA ไม่จำเป็น.

ARDUINO

Arduino จะรับสัญญาณและคำสั่งผ่านการเชื่อมต่อแบบอนุกรมจาก Raspberry Pi เราใช้ Arduino เพื่อควบคุมมอเตอร์ของเราเนื่องจาก Raspberry Pi ไม่สามารถส่งออกค่าอะนาล็อกผ่าน GPIO

ขั้นตอนที่ 9: เริ่มต้นอัตโนมัติ Raspberry Pi

ทุกครั้งที่คุณเปิดเครื่อง Raspberry Pi คุณจะต้องพิมพ์ชื่อผู้ใช้และรหัสผ่าน เราไม่ต้องการทำเช่นนั้นเพราะบางครั้งเราไม่สามารถเชื่อมต่อแป้นพิมพ์กับ Pi ได้ ดังนั้นเราจะทำตามขั้นตอนเหล่านี้จากบทช่วยสอนนี้เพื่อเริ่มต้นโปรแกรมที่เตรียม Pi โดยอัตโนมัติ ถ้ามันติดอยู่ในลูป เราสามารถกด Ctrl+C เพื่อขัดจังหวะมันได้เสมอ

  • sudo crontab -e
  • จากนั้นเราจะป้อนคำสั่งที่เพิ่มไฟล์นั้นไปยัง auto-stratup ในตัวจัดการ cron

เราจะเรียกไฟล์ pibot.sh ซึ่งจะให้คำสั่งในการเริ่มสคริปต์ python ทุกประเภทเพื่อใช้งานหุ่นยนต์ ผ่านมันไปกันเถอะ: (เรา sudo ด้วยโปรแกรม Curtain Python เพื่อให้โปรแกรมเข้าถึง GPIO)

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

รหัสที่ทำงานด้านข้างของ pi ทั้งหมดจะถูกเรียก upon_startup.sh

เป็นเชลล์สคริปต์อย่างง่ายที่รันทุกอย่าง

ขั้นตอนที่ 10: Houeston เราเคยมีปัญหา… DC Motor ไม่ใช่รุ่นเดียวกัน

ฉันได้ทดสอบ H-Bridge แล้วและมันใช้งานได้ดี แต่เมื่อฉันขอเกี่ยวมอเตอร์ ฉันได้มาจากแพลตฟอร์มหุ่นยนต์ ฉันสั่งออนไลน์มอเตอร์สองตัวนั้นหมุนด้วยความเร็วต่างกันและทำให้เกิดเสียงต่างกัน ฉันเปลี่ยนคันเร่งเป็น 100% บนมอเตอร์ ทั้งคู่ไม่สามารถวิ่งได้อย่างเต็มประสิทธิภาพ

ดูเหมือนว่านี่เป็นมอเตอร์สองตัวที่แตกต่างกัน ตัวหนึ่งมีแรงบิดที่ใหญ่กว่าซึ่งดีมากสำหรับหุ่นยนต์ประเภทนี้ แต่อีกตัวไม่สามารถขยับหุ่นยนต์ได้ มันจึงหมุนเป็นวงกลม

ณ จุดนี้สิ่งที่ฉันมีคือโปรแกรมอนุกรมบน Arduino ทำงานได้ดี แต่เซิร์ฟเวอร์ Tcp บนพีซีและไคลเอนต์ Tcp บน Pi ยังไม่ได้เข้ารหัส ที่ ฉันต้องกรอกรายการนี้สำหรับการแข่งขัน ฉันจะทำอย่างไร?

  1. ก่อนอื่นฉันเพิ่มแรงดันไฟฟ้าสามเท่าสำหรับมอเตอร์ แผ่นข้อมูลระบุว่า 3V, 6V ไม่ได้เคลื่อนย้าย มันคือ 9V แล้ว ฉันเชื่อมต่อแบตเตอรีทีโอแบบขนานเพื่อเพิ่มกระแสไฟเป็นสองเท่าและแรงดันไฟยังคงเท่าเดิม
  2. ฉันมีมอเตอร์อื่นๆ ที่พอดีกับแท่นยึดบนแท่นหรือไม่? บางทีฉันอาจเห็นได้ว่าพวกเขาเป็นรุ่นที่คล้ายกันหรือไม่
  3. ฉันสามารถแทนที่เซอร์โวได้ถ้าช็อกโกแลตโดนพัดลมจริงๆ

โรงเรียนเริ่ม. ฉันจะต้องดูว่าจะทำอย่างไร

หมายเหตุ: เหตุใดฉันจึงเขียนปัญหาที่ฉันพบที่นี่ ดังนั้นหากคุณมีประสบการณ์น้อยและมีปัญหาเดียวกันด้วย คุณจะรู้ว่าต้องทำอย่างไร

การแก้ไขปัญหา:

ดังนั้นฉันจึงได้ทำการทดสอบอีกครั้ง ฉันได้ปรับความแตกต่างของความเร็วในโค้ด Arduino แล้ว

หมายเหตุ: มอเตอร์อาจหมุนด้วยความเร็วต่างกันสำหรับคุณ! เปลี่ยนค่าในร่าง Arduino

ขั้นตอนที่ 11: [TCP]: ทำไม Tcp และไม่ Secure Shell TCP คืออะไร?

ฉันมีคำอธิบายสองข้อว่าทำไมจึงใช้ Tcp และไม่ใช่ SSH สำหรับพีซี - การสื่อสารปี่

  1. ประการแรก SSH (Secure Shell ดูคำอธิบาย) มีขึ้นเพื่อเรียกใช้คำสั่งจากคอมพิวเตอร์ระยะไกล การทำให้ Pi ตอบสนองด้วยข้อมูลที่เราต้องการนั้นยากขึ้น เนื่องจากตัวเลือกเดียวของเราในการวิเคราะห์ข้อมูลคือผ่านการประมวลผลสตริงที่ยากและน่าเบื่อ
  2. ประการที่สอง เรารู้วิธีใช้ SSH แล้ว และต้องการเรียนรู้วิธีการสื่อสารระหว่างอุปกรณ์เพิ่มเติมในบทช่วยสอนนี้

TCP หรือ Transmission Control Protocol เป็นโปรโตคอลหลักของ Internet Protocol Suite มีต้นกำเนิดมาจากการใช้งานเครือข่ายเริ่มต้นซึ่งเสริม Internet Protocol (IP) ดังนั้น ชุดทั้งหมดจึงมักเรียกว่า TCP/IP TCP ให้การส่งกระแสข้อมูลของ octets ที่เชื่อถือได้ ได้รับคำสั่ง และตรวจสอบข้อผิดพลาดระหว่างแอปพลิเคชันที่ทำงานบนโฮสต์ที่สื่อสารผ่านเครือข่าย IP

(จากวิกิพีเดีย)

ดังนั้นข้อดีของ TCP คือ:

  • ปลอดภัย
  • เร็ว
  • ทำงานได้ทุกที่บนเครือข่าย
  • มีวิธีการตรวจสอบการส่งข้อมูลที่ถูกต้อง
  • Flow Control: มีการป้องกันในกรณีที่ผู้ส่งข้อมูลส่งข้อมูลเร็วเกินไปสำหรับลูกค้าในการลงทะเบียนและประมวลผล

และข้อเสียคือ:

  • ใน 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) แต่จะเป็นจำนวนอักขระที่เรากำหนดด้วยการกัดเปล่า เราสามารถใช้อินเตอร์รัปต์ได้หรือไม่? คำถามอื่น: บัฟเฟอร์จะว่างเปล่าหรือจะรอให้เซิร์ฟเวอร์ส่งข้อมูลเพิ่ม ซึ่งในกรณีนี้เซิร์ฟเวอร์/ไคลเอ็นต์จะส่งข้อยกเว้นการหมดเวลาหรือไม่

ให้จัดการทีละอย่าง ก่อนที่เราจะทำเช่นนั้น ฉันได้ค้นหาบทความ Wikipedia นี้ซึ่งแสดงรายการพอร์ต TCP และ UDP ที่ใช้ หลังจากดูอย่างรวดเร็ว ฉันตัดสินใจว่าโปรเจ็กต์นี้จะสื่อสารบนพอร์ต 12298 เพราะไม่ได้ใช้โดยระบบปฏิบัติการและบริการในพื้นที่

ขั้นตอนที่ 13: ลองใช้ Tcp Comms. ของเรา

เพื่อดูว่าเราสามารถใช้อินเตอร์รัปต์ได้หรือไม่ ให้สร้างไคลเอนต์และเซิร์ฟเวอร์อย่างง่ายโดยใช้ Python Command Line ฉันจะทำตามขั้นตอนต่อไปนี้:

  1. เริ่มโปรแกรมที่ส่งข้อความผ่าน Tcp แบบวนซ้ำผ่านม่านพอร์ต
  2. เริ่มโปรแกรมอื่น (แบบขนาน) ที่อ่านข้อความทั้งหมดในลูปและพิมพ์ไปที่หน้าจอ

จะแสดงเฉพาะส่วนของโปรแกรม โปรแกรมทั้งหมดทำงานด้วย Python 3 โปรแกรมทั้งหมดเหล่านี้ทำคือส่งคำสั่งซีเรียลจากแป้นพิมพ์ของผู้ใช้พีซีไปยัง Arduino ผ่าน Pi

  • SBcontrolPC.py - เพื่อใช้งานบนพีซี เริ่มการเชื่อมต่อ TCP บนที่อยู่ภายในเครื่องและบนพอร์ตที่ระบุ (ฉันใช้พอร์ต 12298 ดูขั้นตอนก่อนหน้าว่าทำไม)
  • SBcontrolPi.py - เพื่อใช้งานบน Pi อ่านบัฟเฟอร์ทุกครึ่งวินาที (0.5 วินาที) เริ่มเชลล์สคริปต์ที่จัดการสิ่งต่างๆ เช่น การสตรีมวิดีโอ ฯลฯ

แนะนำ: