สารบัญ:

Web Controlled Rover: 14 ขั้นตอน (พร้อมรูปภาพ)
Web Controlled Rover: 14 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Web Controlled Rover: 14 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Web Controlled Rover: 14 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: เมืองหุ่นยนต์ (Robot Land) ตอนที่ 14 หุ่นยนต์มองเห็นได้อย่างไร ตอน 2 2024, พฤศจิกายน
Anonim
เว็บควบคุมโรเวอร์
เว็บควบคุมโรเวอร์
เว็บควบคุมโรเวอร์
เว็บควบคุมโรเวอร์

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

ในคำแนะนำนี้ เราจะดูสิ่งที่ต้องใช้เพื่อสร้างรถแลนด์โรเวอร์ที่ควบคุมด้วย Wifi/เว็บ ที่เรียบง่ายแต่แข็งแกร่ง แชสซีที่ใช้คือ Actobotics Gooseneck ฉันเลือกมันเพราะขนาด ความสามารถในการขยาย และราคา แต่คุณสามารถใช้แชสซีอื่นๆ ที่คุณเลือกเองได้

สำหรับโครงการเช่นนี้ เราจะต้องมีคอมพิวเตอร์บอร์ดเดี่ยวที่ดีและสำหรับบอทนี้ ฉันเลือกใช้ Raspberry Pi (RPI) ซึ่งเป็นคอมพิวเตอร์ที่ใช้ Linux RPI (และ Linux) ให้ตัวเลือกการเข้ารหัสมากมายแก่เรา และ Python จะถูกใช้สำหรับด้านการเข้ารหัส สำหรับเว็บอินเตอร์เฟส ฉันใช้ Flask ซึ่งเป็นเฟรมเวิร์กเว็บที่มีน้ำหนักเบาสำหรับ Python

ในการขับเคลื่อนมอเตอร์ ฉันเลือก RoboClaw 2x5a ช่วยให้มีการสื่อสารแบบอนุกรมอย่างง่ายสำหรับการสั่งการและทำงานได้ดีกับ RPI และมอเตอร์บน Gooseneck

ในที่สุดก็มีเว็บแคมสำหรับการตอบสนองวิดีโอประเภท POV สำหรับการขับรถจากระยะไกล ฉันจะครอบคลุมแต่ละหัวข้อในรายละเอียดเพิ่มเติมในภายหลัง

ขั้นตอนที่ 1: ฮาร์ดแวร์ที่จำเป็น

ฮาร์ดแวร์ที่จำเป็น
ฮาร์ดแวร์ที่จำเป็น
ฮาร์ดแวร์ที่จำเป็น
ฮาร์ดแวร์ที่จำเป็น
ฮาร์ดแวร์ที่จำเป็น
ฮาร์ดแวร์ที่จำเป็น
ฮาร์ดแวร์ที่จำเป็น
ฮาร์ดแวร์ที่จำเป็น
  • Actobotics Gooesneck chassis หรือทดแทนที่คุณเลือกได้อย่างเหมาะสม
  • Raspberry Pi ที่คุณเลือก (หรือโคลน) - ใช้ RPI รุ่น B กับบอทนี้ แต่พอร์ตใด ๆ ที่มีพอร์ต USB อย่างน้อยสองพอร์ตจะใช้งานได้
  • แผ่นเซอร์โวมาตรฐาน B x1
  • ฉากยึดช่องมุมเดี่ยว 90° x1
  • ตัวขับมอเตอร์ RoboClaw 2x5a
  • S3003 หรือเซอร์โวขนาดมาตรฐานใกล้เคียงกัน
  • เขียงหั่นขนมขนาดเล็กหรือเขียงหั่นขนมขนาดเล็ก
  • สายจัมเปอร์หญิงกับหญิง
  • สายจัมเปอร์ชาย-หญิง
  • เว็บแคม (อุปกรณ์เสริม) - ฉันใช้ Logitech C110 และนี่คือรายการกล้องที่รองรับสำหรับ RPI
  • แหล่งพลังงาน 5v-6v สำหรับกำลังเซอร์โว
  • แบตเตอรี่ 7.2v-11.1v สำหรับการขับเคลื่อนมอเตอร์ไฟฟ้า
  • 5v 2600mah (หรือสูงกว่า) USB power bank สำหรับ RPI
  • อะแดปเตอร์ USB Wifi

บนบ็อตของฉัน ฉันใช้ล้อขนาด 4 นิ้วเพื่อทำให้เป็น All-Terrain-Indoor เพิ่มขึ้นเล็กน้อย สำหรับตัวเลือกนี้ คุณจะต้อง:

  • ล้อสำหรับงานหนัก 4" x2
  • ดุมสกรูชุดโบล 4 มม. (0.770 นิ้ว) x2

ขั้นตอนที่ 2: การประกอบแชสซี

การประกอบแชสซี
การประกอบแชสซี
การประกอบแชสซี
การประกอบแชสซี
การประกอบแชสซี
การประกอบแชสซี

ขั้นแรกให้ประกอบแชสซีตามคำแนะนำที่มาพร้อมกับแชสซีหรือวิดีโอ หลังจากเสร็จสิ้นคุณควรมีบางอย่างเช่นภาพ หมายเหตุ: เมื่อประกอบส่วนคอ ให้ถอดโครงยึดออก

ในบอทของฉัน ฉันเลือกที่จะเปลี่ยนล้อที่แชสซีมาพร้อมกับล้อสำหรับงานหนักขนาด 4 นิ้ว ซึ่งเป็นทางเลือกและไม่จำเป็น เว้นแต่คุณต้องการทำเช่นเดียวกัน

ขั้นตอนที่ 3: ติดตั้งอุปกรณ์อิเล็กทรอนิกส์

การติดตั้งอุปกรณ์อิเล็กทรอนิกส์
การติดตั้งอุปกรณ์อิเล็กทรอนิกส์
การติดตั้งอุปกรณ์อิเล็กทรอนิกส์
การติดตั้งอุปกรณ์อิเล็กทรอนิกส์
การติดตั้งอุปกรณ์อิเล็กทรอนิกส์
การติดตั้งอุปกรณ์อิเล็กทรอนิกส์

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

ขั้นตอนที่ 4: การเพิ่มเว็บแคม

การเพิ่มเว็บแคม
การเพิ่มเว็บแคม
การเพิ่มเว็บแคม
การเพิ่มเว็บแคม
การเพิ่มเว็บแคม
การเพิ่มเว็บแคม

ใช้ตัวยึด 90 องศา ฮับเซอร์โวน้ำหนักเบา และสกรู.3125 สี่ (4) ตัว สำหรับขั้นตอนนี้:

  • นำฮับเซอร์โวไปวางไว้ที่ด้านหนึ่งของโครงยึดแล้วยึดให้แน่นด้วยสกรู.2125" ตามภาพ
  • ถัดไป ติดตั้งเซอร์โวเข้ากับโครงยึดเซอร์โว
  • ติดขายึด 90 องศากับฮอร์นเซอร์โวเข้ากับสันเซอร์โวและใช้สกรูแตรที่มาพร้อมกับเซอร์โวเพื่อเชื่อมต่อเข้าด้วยกัน
  • ตอนนี้ติดเซอร์โวในโครงยึดที่ด้านบนของคอห่านด้วยสกรูที่เหลือ
  • ติดตั้งกล้องด้วยซิปหรือเทปกาวสองหน้าเข้ากับโครงยึด 90 องศา

ใช้รูปภาพเพื่อเป็นแนวทางหากจำเป็น

ขั้นตอนที่ 5: การเดินสายไฟทั้งหมด

การเดินสายไฟทั้งหมด
การเดินสายไฟทั้งหมด
การเดินสายไฟทั้งหมด
การเดินสายไฟทั้งหมด
การเดินสายไฟทั้งหมด
การเดินสายไฟทั้งหมด
การเดินสายไฟทั้งหมด
การเดินสายไฟทั้งหมด

การเดินสายค่อนข้างคับแคบสำหรับหุ่นยนต์ตัวนี้

มอเตอร์:

บัดกรีนำไปสู่มอเตอร์ทั้งสองถ้าคุณยังไม่ได้ทำ

โดยให้หุ่นยนต์ด้านหน้า (ส่วนท้ายที่มีคอห่าน) หันออกจากคุณ:

  • ต่อสายมอเตอร์ที่มอเตอร์ด้านซ้ายเข้ากับช่อง M1A และ M1B
  • ต่อสายมอเตอร์ที่มอเตอร์ด้านขวาเข้ากับช่อง M2A และ M2B

การเชื่อมต่อภาคพื้นดิน (GND):

  • ต่อหมุดกราวด์หนึ่งอันบน RoboClaw เข้ากับบอร์ดจัมเปอร์กราวด์ สายพินกราวด์บน RoboClaw อยู่ใกล้กับศูนย์กลางมากที่สุด (ดูรูป)
  • เชื่อมต่อ PIN 6 บน RPI กับบอร์ดจัมเปอร์ ดูรูปส่วนหัว RPI สำหรับการกำหนดพิน
  • เชื่อมต่อ GND จากชุดแบตเตอรี่เซอร์โวเข้ากับหมุดตัวใดตัวหนึ่งบนบอร์ดจัมเปอร์
  • เรียกใช้สายจัมเปอร์จากบอร์ดจัมเปอร์ไปยังสายเซอร์โว GND

RPI ถึง RoboClaw:

เชื่อมต่อพิน RPI GPIO14 TXD กับ RoboClaw S1 pin

พลัง:

  • เชื่อมต่อสาย POS จากแบตเตอรี่เซอร์โวเข้ากับสาย POS ของเซอร์โว
  • เชื่อมต่อสาย POS จากแบตเตอรี่มอเตอร์เข้ากับ POS (+) ของขั้วอินพุตกำลังมอเตอร์ RoboClaw เราจะปล่อยให้เทอร์มินัล GND ถูกตัดการเชื่อมต่อในตอนนี้

ขั้นตอนที่ 6: การตั้งค่า RPI

การตั้งค่า RPI
การตั้งค่า RPI

ฉันถือว่าผู้ใช้ที่นี่รู้บางอย่างเกี่ยวกับ Linux และ RPI ฉันไม่ครอบคลุมถึงวิธีการตั้งค่าหรือเชื่อมต่อ หากคุณต้องการความช่วยเหลือให้ใช้หน้าด้านล่าง

ในการตั้งค่า RPI ให้ดูที่หน้าต่อไปนี้:

  • ตั้งค่าพื้นฐาน RPI
  • RPI คู่มือเริ่มต้นอย่างย่อ
  • NOOBS กิลด์การติดตั้ง

สำหรับหน้ากระโดดข้ามทั่วไป หน้าหลัก RPI และหน้า eLinux เป็นจุดเริ่มต้นที่ดี

ดูลิงค์นี้สำหรับการตั้งค่า Wifi ทั่วไปของ RPI

หากคุณวางแผนที่จะใช้กล้องหรือเว็บแคมบนบอท ให้ดูที่หน้าเหล่านี้เพื่อรับไฟล์พื้นฐานที่จำเป็น

  • ตั้งค่ากล้อง RPI
  • การตั้งค่ากล้อง eLinix RPI

สตรีมมิ่งวิดีโอ:

มีสองสามวิธีในการทำให้การสตรีมวิดีโอทำงานบน RPI ได้ แต่วิธีที่ฉันชอบคือการใช้ Motion

ในการติดตั้งบน RPI ของคุณให้รันสิ่งนี้: sudo apt-get install motion

คำแนะนำนี้จะมากกว่าการตั้งค่าสำหรับการสตรีมเช่นกัน

ขั้นตอนที่ 7: การกำหนดค่าพอร์ตอนุกรม RPI

เราจะต้องปิดการใช้งานโหมดคอนโซล Linux เพื่อใช้ RX และ TX เนื่องจากเราต้องการพูดคุยกับตัวควบคุมมอเตอร์ RoboClaw จากพอร์ตนี้ เมื่อต้องการทำเช่นนี้ คุณสามารถใช้วิธีนี้หรือเครื่องมือนี้ ทางเลือกเป็นของคุณเกี่ยวกับวิธีการที่พวกเขาทั้งคู่ทำสิ่งเดียวกันในท้ายที่สุด

ขั้นตอนที่ 8: การติดตั้งโมดูล Python

คุณจะต้องติดตั้ง python บน RPI เช่นเดียวกับ pip ตัวติดตั้งแพ็คเกจ python

ในการติดตั้ง pip ทำ:

  1. sudo apt-get ติดตั้ง python-setuptools
  2. sudo easy_install pip

แล้ว:

  1. sudo pip ติดตั้งขวด
  2. sudo pip ติดตั้ง pyserial
  3. sudo pip ติดตั้ง RPIO

นี่จะเป็นโมดูลทั้งหมดที่จำเป็นสำหรับการรันโค้ด

ขั้นตอนที่ 9: การตั้งค่า RoboClaw

ฉันมีรหัสหุ่นยนต์คุยกับ RoboClaw ในโหมดซีเรียลมาตรฐานที่ 19200 บอด

ในการตั้งค่า RoboClaw สำหรับสิ่งนี้ให้ทำ:

  1. กดปุ่ม "MODE" บน RoboClaw
  2. กดปุ่มตั้งค่าจนกว่าไฟ LED จะกะพริบ 5 (ห้า) ครั้งระหว่างการหน่วงเวลา
  3. กดปุ่ม "LIPO" เพื่อจัดเก็บ
  4. จากนั้นให้กดปุ่ม "SET" จนกระทั่งไฟ LED กะพริบ 3 (สาม) ครั้งระหว่างการหน่วงเวลา
  5. กดปุ่ม LIPO เพื่อจัดเก็บ

นั่นคือการตั้งค่าตัวควบคุมมอเตอร์ ดู pdf ที่ลิงก์ด้านบนสำหรับข้อมูลเพิ่มเติมหากจำเป็น

ขั้นตอนที่ 10: การติดตั้งโปรแกรม/ไฟล์ Rover

ดาวน์โหลดและคัดลอกไฟล์ rover.zip ไปยัง RPI ของคุณในไดเร็กทอรีผู้ใช้ pi ของคุณ

หากคุณใช้ Linux หรือ Mac คุณสามารถใช้ 'scp' เพื่อทำสิ่งนี้:

scp ~/location/of/the/file/rover.zip pi@your_rpi_ip:/~

สำหรับ Windows คุณสามารถดาวน์โหลดและใช้ pscp จากนั้นทำดังนี้

pscp /location/of/the/file/rover.zip pi@your_rpi_ip:/~

เมื่อไฟล์ zip ถูกคัดลอกไปยัง RPI แล้ว ให้เข้าสู่ระบบในฐานะผู้ใช้ pi

ตอนนี้เรียกใช้:

เปิดเครื่องรูด rover.zip

การดำเนินการนี้จะแตกไฟล์ไปยังโฟลเดอร์ชื่อ 'rover' และมีสิ่งต่อไปนี้ภายใต้โฟลเดอร์นั้น:

  • restrover.py (รหัสหลามสำหรับหุ่นยนต์)
  • คงที่ (เก็บไฟล์รูปภาพสำหรับปุ่มบนหน้าควบคุม)
  • เทมเพลต (เก็บไฟล์ index.htlm เว็บเพจการควบคุม)

หากคุณกำลังใช้เว็บแคม ให้แก้ไขบรรทัดใกล้กับด้านล่างของไฟล์ index.html ในโฟลเดอร์เทมเพลต เปลี่ยน URL ในบรรทัด IFRAME เพื่อให้ตรงกับ src URL สำหรับสตรีมวิดีโอของคุณ

ขั้นตอนที่ 11: การเริ่มต้น Bot Up

การเริ่มต้น Bot Up
การเริ่มต้น Bot Up

ต่อไฟ USB เข้ากับ RPI

ในการเริ่มต้นรหัสบอท ให้เข้าสู่ระบบในฐานะผู้ใช้ pi และเรียกใช้:

  • cd rover
  • sudo python restrover.py

หากทุกอย่างเรียบร้อย คุณจะเห็นหน้าจอคล้ายกับรูปภาพในขั้นตอนนี้

หากคุณพบข้อผิดพลาดหรือปัญหาใดๆ คุณจะต้องแก้ไขก่อนดำเนินการต่อ

ตอนนี้ เชื่อมต่อสาย GND (-) กับขั้ว NEG (-) บนอินพุตกำลังมอเตอร์ RoboClaw

ขั้นตอนที่ 12: การเข้าถึงหน้าการควบคุมบอท

การเข้าถึงหน้าการควบคุมบอท
การเข้าถึงหน้าการควบคุมบอท
การเข้าถึงหน้าการควบคุมบอท
การเข้าถึงหน้าการควบคุมบอท

หลังจากที่สคริปต์ python ของหุ่นยนต์ทำงาน ให้เพิ่มพลังให้กับ RoboClaw จากนั้นไปที่ IP ของ RPI เช่น:

your_rpi_ip

คุณควรเห็นหน้าการควบคุมเว็บปรากฏขึ้นเหมือนในภาพ หากไม่เป็นเช่นนั้น ให้ตรวจสอบเทอร์มินัลเอาต์พุต RPI ของคุณและค้นหาข้อผิดพลาดและแก้ไข

เมื่ออยู่บนเพจ คุณก็พร้อมที่จะควบคุมบอทแล้ว

หุ่นยนต์จะเริ่มในการตั้งค่า "Med run" และที่ความเร็วปานกลาง

บอทสามารถควบคุมได้โดยใช้ปุ่มบนหน้าหรือด้วยปุ่มบนแป้นพิมพ์

กุญแจคือ:

  • w - ไปข้างหน้า
  • z - ถอยหลัง/ถอยหลัง
  • a - เลี้ยวซ้ายยาว
  • s - เลี้ยวขวายาว
  • q - เลี้ยวซ้ายสั้น
  • e - สั้นเลี้ยวขวา
  • 1 - แพนกล้องไปทางซ้าย
  • 2 - เลื่อนกล้องไปทางขวา
  • 3 - แพนเต็มซ้าย
  • 4 - แพนเต็มขวา
  • / - กล้องโฮม/เซ็นเตอร์
  • h - หยุด/หยุดหุ่นยนต์

มีบัฟเฟอร์หน่วงเวลาครึ่งวินาทีระหว่างคำสั่งที่ส่ง ฉันทำสิ่งนี้เพื่อกำจัดคำสั่งซ้ำที่ไม่ต้องการ คุณสามารถลบสิ่งนี้ออกจากโค้ดได้หากต้องการ (ใน index.html)

การควบคุมและการควบคุมที่เหลือควรอธิบายได้ด้วยตนเอง

ขั้นตอนที่ 13: รหัส Python/Flask

บอทนี้ใช้ Python และเฟรมเวิร์กเว็บ Flask คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ Flask ได้ที่นี่ หากคุณสนใจ

ความแตกต่างอย่างมากจากแอป Flask และสคริปต์ Python ปกติคือ @app.route class/method ที่ใช้ในการจัดการ URI นอกจากนั้น ส่วนใหญ่เป็น Python ปกติส่วนใหญ่

#!/usr/bin/env python

# # Wifi / Web driven Rover # # เขียนโดย Scott Beasley - 2015 # # ใช้ RPIO, pyserial และ Flask # นำเข้าเวลานำเข้าซีเรียลจาก RPIO นำเข้า PWM จาก Flask นำเข้า Flask, render_template, ขอแอป = Flask (_name_, static_url_path = '') # เชื่อมต่อกับพอร์ตการสื่อสารเพื่อพูดคุยกับตัวควบคุมมอเตอร์ Roboclaw ลอง: # เปลี่ยนอัตราบอดที่นี่หากแตกต่างจาก 19200 roboclaw = serial. Serial ('/dev/ttyAMA0', 19200) ยกเว้น IOError: พิมพ์ ("Comm port not พบ") sys.exit (0) # ตัวแปรควบคุมความเร็วและไดรฟ์ last_direction = -1 speed_offset = 84 turn_tm_offset = 0.166 run_time = 0.750 # ตำแหน่งที่เป็นกลางของเซอร์โว (บ้าน) servo_pos = 1250 เซอร์โว = PWM. Servo () servo.set_servo (18), servo_pos) # พักเล็กน้อยเพื่อตั้งเวลา time.sleep (3) # # ตัวจัดการ URI - การดำเนินการของหน้าบอททั้งหมดเสร็จสิ้นที่นี่ # # ส่งหน้าการควบคุมบอท (โฮมเพจ) @app.route ("/") def index (): ส่งคืน render_template ('index.html', name = None) @app.route ("/forward") def forward (): global last_direction, run_ti ฉันพิมพ์ "ไปข้างหน้า" go_forward () last_direction = 0 # sleep 100ms + run_time time.sleep (0.100 + run_time) # ถ้าไม่ต่อเนื่องให้หยุดหลังจากดีเลย์ถ้า run_time > 0: last_direction = -1 halt () ส่งคืน "ok" @ app.route ("/backward") def reverse (): global last_direction, run_time print "Backward" go_backward () last_direction = 1 # sleep 100ms + run_time time.sleep (0.100 + run_time) # ถ้าไม่ต่อเนื่อง ให้หยุดหลังจากดีเลย์ ถ้า run_time > 0: last_direction = -1 halt () return "ok" @app.route ("/left") def left (): global last_direction, turn_tm_offset พิมพ์ "ซ้าย" go_left () last_direction = -1 # sleep @1 /2 วินาที time.sleep (0.500 - turn_tm_offset) # stop halt () time.sleep (0.100) return "ok" @app.route ("/right") def right (): global last_direction, turn_tm_offset พิมพ์ "ขวา" go_right () # sleep @1/2 วินาที time.sleep (0.500 - turn_tm_offset) last_direction = -1 # stop halt () time.sleep (0.100) ส่งคืน "ok" @app.route ("/ltforward") def ltforward (): global Last_direction, turn_t m_offset พิมพ์ "เลี้ยวซ้ายไปข้างหน้า" go_left () # sleep @1/8 วินาที time.sleep (0.250 - (turn_tm_offset / 2)) last_direction = -1 # stop halt () time.sleep (0.100) กลับ "ok" @app.route ("/rtforward") def rtforward (): global last_direction, turn_tm_offset print "Right forward turn" go_right () # sleep @1/8 second time.sleep (0.250 - (turn_tm_offset / 2)) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @app.route ("/stop") def stop (): global last_direction พิมพ์ "หยุด" หยุด () last_direction = -1 # sleep 100ms time.sleep (0.100) ส่งคืน "ตกลง" @app.route ("/ panlt") def panlf (): global servo_pos พิมพ์ "Panlt" servo_pos -= 100 ถ้า servo_pos 2500: servo_pos = 2500 servo.set_servo (18, servo_pos) # sleep 150ms เวลา sleep (0.150) ส่งคืน "ok" @app.route ("/home") def home (): global servo_pos พิมพ์ "Home" servo_pos = 1250 servo.set_servo (18, servo_pos) # sleep 150ms time.sleep (0.150) กลับ "ตกลง" @app.route ("/panfull_lt") def panfull_lt (): global servo_pos พิมพ์ "แพนเต็ม l eft" servo_pos = 500 servo.set_servo (18, servo_pos) # sleep 150ms time.sleep (0.150) ส่งคืน "ok" @app.route ("/panfull_rt") def panfull_rt (): global servo_pos พิมพ์ "Pan full right" servo_pos = 2500 servo.set_servo (18, servo_pos) # sleep 150ms time.sleep (0.150) ส่งคืน "ok" @app.route ("/speed_low") def speed_low (): global speed_offset, last_direction, turn_tm_offset speed_offset = 42 turn_tm_offset = 0.001 # อัปเดตทิศทางปัจจุบันเพื่อรับความเร็วใหม่หากlast_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) ส่งคืน "ok" @app.route ("/speed_mid") def speed_mid (): global speed_offset, last_direction, turn_tm_offset speed_offset = 84 turn_tm_offset = 0.166 # อัปเดตทิศทางปัจจุบันเพื่อรับความเร็วใหม่หากlast_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) ส่งคืน "ตกลง" @app.route ("/speed_hi") def speed_hi (): global speed_offset, last_direction, turn_tm_offset speed_offset = 126 tur n_tm_offset = 0.332 # อัปเดตทิศทางปัจจุบันเพื่อรับความเร็วใหม่หากlast_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) ส่งคืน "ok" @app.route ("/continuous ") def ต่อเนื่อง (): global run_time print "Continuous run" run_time = 0 # sleep 100ms time.sleep (0.100) ส่งคืน "ok" @app.route ("/mid_run") def mid_run (): global run_time print "Mid run" run_time = 0.750 halt () # sleep 100ms time.sleep (0.100) ส่งคืน "ok" @app.route ("/short_time") def short_time (): global run_time พิมพ์ "Short run" run_time = 0.300 halt () # sleep 100ms time.sleep (0.100) ส่งคืน "ok" # # ฟังก์ชั่นการขับมอเตอร์ # def go_forward (): global speed_offset ถ้า speed_offset != 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) อื่นๆ: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_backward (): global speed_offset ถ้า speed_offset != 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.wri te (chr (255 - speed_offset)) อื่น: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) def go_left (): global speed_offset ถ้า speed_offset != 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) อื่น: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_right (): global speed_offset if speed_offset != 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) อื่น: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) def halt (): roboclaw.write (chr (0)) if _name_ == "_main_": app.run (host = '0.0.0.0', port = 80, debug = True)

หากคุณไม่ต้องการหรือต้องการข้อมูลการดีบักจาก Flask ให้ตั้งค่าการดีบักเป็น 'เท็จ' บนบรรทัด app.run

ถ้า _name_ == "_main_":

app.run (โฮสต์ = '0.0.0.0', พอร์ต = 80, ดีบัก = เท็จ)

คุณยังสามารถเปลี่ยนพอร์ตที่เซิร์ฟเวอร์ Flask http รับฟังได้ที่นี่เช่นกัน

ขั้นตอนที่ 14: การใช้ฮาร์ดแวร์อื่น

หากคุณต้องการใช้ฮาร์ดแวร์อื่น เช่น SBC (Single Board Computer) ประเภทอื่น คุณควรมีปัญหาเล็กน้อยในการทำให้ Python และ Flask ทำงานบนบอร์ดอื่นๆ เช่น Beagle Bone, PCDuino เป็นต้น… คุณจะต้องเปลี่ยนรหัสเพื่อให้ตรงกับ GPIO เค้าโครงและใช้ความสามารถในการขับเซอร์โวของบอร์ดใหม่

ในการใช้ไดรเวอร์มอเตอร์ประเภทอื่น คุณเพียงแค่ปรับเปลี่ยนฟังก์ชัน go_forward, go_backward, go_left, go_right และ halt เพื่อทำสิ่งที่ไดรเวอร์มอเตอร์ทดแทนต้องการเพื่อให้มอเตอร์ทำหน้าที่นั้น ๆ

แนะนำ: