สารบัญ:
- ขั้นตอนที่ 1: ฮาร์ดแวร์ที่จำเป็น
- ขั้นตอนที่ 2: การประกอบแชสซี
- ขั้นตอนที่ 3: ติดตั้งอุปกรณ์อิเล็กทรอนิกส์
- ขั้นตอนที่ 4: การเพิ่มเว็บแคม
- ขั้นตอนที่ 5: การเดินสายไฟทั้งหมด
- ขั้นตอนที่ 6: การตั้งค่า RPI
- ขั้นตอนที่ 7: การกำหนดค่าพอร์ตอนุกรม RPI
- ขั้นตอนที่ 8: การติดตั้งโมดูล Python
- ขั้นตอนที่ 9: การตั้งค่า RoboClaw
- ขั้นตอนที่ 10: การติดตั้งโปรแกรม/ไฟล์ Rover
- ขั้นตอนที่ 11: การเริ่มต้น Bot Up
- ขั้นตอนที่ 12: การเข้าถึงหน้าการควบคุมบอท
- ขั้นตอนที่ 13: รหัส Python/Flask
- ขั้นตอนที่ 14: การใช้ฮาร์ดแวร์อื่น
วีดีโอ: Web Controlled Rover: 14 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
การสร้างและเล่นกับหุ่นยนต์คือความสุขในชีวิตของฉัน คนอื่นเล่นกอล์ฟหรือสกี แต่ฉันสร้างหุ่นยนต์ (เนื่องจากฉันเล่นกอล์ฟหรือสกีไม่ได้:-) ฉันคิดว่ามันผ่อนคลายและสนุก! เพื่อให้ได้ประโยชน์สูงสุดจากบอทของฉัน ฉันใช้ชุดแชสซี การใช้ชุดอุปกรณ์ช่วยให้ฉันทำสิ่งที่ชอบทำมากขึ้น ทั้งซอฟต์แวร์และอุปกรณ์อิเล็กทรอนิกส์ และยังทำให้แชสซีส์ดีขึ้นสำหรับตัวฉันเอง
ในคำแนะนำนี้ เราจะดูสิ่งที่ต้องใช้เพื่อสร้างรถแลนด์โรเวอร์ที่ควบคุมด้วย 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
ฉันถือว่าผู้ใช้ที่นี่รู้บางอย่างเกี่ยวกับ 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 ทำ:
- sudo apt-get ติดตั้ง python-setuptools
- sudo easy_install pip
แล้ว:
- sudo pip ติดตั้งขวด
- sudo pip ติดตั้ง pyserial
- sudo pip ติดตั้ง RPIO
นี่จะเป็นโมดูลทั้งหมดที่จำเป็นสำหรับการรันโค้ด
ขั้นตอนที่ 9: การตั้งค่า RoboClaw
ฉันมีรหัสหุ่นยนต์คุยกับ RoboClaw ในโหมดซีเรียลมาตรฐานที่ 19200 บอด
ในการตั้งค่า RoboClaw สำหรับสิ่งนี้ให้ทำ:
- กดปุ่ม "MODE" บน RoboClaw
- กดปุ่มตั้งค่าจนกว่าไฟ LED จะกะพริบ 5 (ห้า) ครั้งระหว่างการหน่วงเวลา
- กดปุ่ม "LIPO" เพื่อจัดเก็บ
- จากนั้นให้กดปุ่ม "SET" จนกระทั่งไฟ LED กะพริบ 3 (สาม) ครั้งระหว่างการหน่วงเวลา
- กดปุ่ม 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
ต่อไฟ 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 เพื่อทำสิ่งที่ไดรเวอร์มอเตอร์ทดแทนต้องการเพื่อให้มอเตอร์ทำหน้าที่นั้น ๆ
แนะนำ:
DIY INTERNET CONTROLLED SMART LED MATRIX (ADAFRUIT + ESP8266 + WS2812): 8 ขั้นตอน (พร้อมรูปภาพ)
DIY INTERNET CONTROLLED SMART LED MATRIX (ADAFRUIT + ESP8266 + WS2812): นี่คือความก้าวหน้าครั้งที่ 2 ของฉันสำหรับโครงการที่ฉันตื่นเต้นมากที่จะแสดงให้คุณเห็น เกี่ยวกับเมทริกซ์ LED อัจฉริยะ DIY ที่จะให้คุณแสดงบนนั้นได้ ข้อมูล เช่น สถิติของ YouTube สถิติบ้านอัจฉริยะของคุณ เช่น อุณหภูมิ ความชื้น อาจเป็นนาฬิกาง่ายๆ หรือเพียงแค่แสดง
3d Printed RC Controlled Tank!!: 8 ขั้นตอน (พร้อมรูปภาพ)
รถถังบังคับด้วย RC พิมพ์ลาย 3 มิติ!!: คุณเคยต้องการที่จะมียานพาหนะที่ควบคุมจากระยะไกลที่สามารถออกนอกถนนและคุณยังสามารถมองเห็นได้จากกล้องมองคนแรกหรือไม่ รถถังคันนี้ยอดเยี่ยมสำหรับคุณ รางบนถังน้ำมันช่วยให้ยึดเกาะได้ดีเมื่อขับขี่บนภูมิประเทศเช่นดินและ
Arduino + Bluetooth Controlled Tank: 10 ขั้นตอน (พร้อมรูปภาพ)
Arduino + Bluetooth Controlled Tank: ฉันสร้างแท็งก์นี้เพื่อเรียนรู้วิธีการเขียนโปรแกรม มอเตอร์ เซอร์โว บลูทูธ และ Arduino ทำงานอย่างไร และฉันสร้างด้วยการวิจัยจากอินเทอร์เน็ต ตอนนี้ฉันตัดสินใจสร้าง Instructables ของตัวเอง สำหรับผู้ที่ต้องการช่วยสร้างรถถัง Arduino ที่นี่ฉัน
Wireless Arduino Controlled Tank (nRF24L01): 6 ขั้นตอน (พร้อมรูปภาพ)
Wireless Arduino Controlled Tank (nRF24L01): สวัสดี! วันนี้ฉันจะแสดงวิธีสร้างถังควบคุม Arduino และรีโมท ชิ้นส่วนที่พิมพ์ 3 มิติของถัง (ยกเว้นตัวควบคุม รางนำทาง และฝาครอบถัง) ออกแบบโดย timmiclark และสามารถพบได้ที่นี่
Alexa Controlled Dog Feeder: 6 ขั้นตอน (พร้อมรูปภาพ)
Alexa Controlled Dog Feeder: นี่คือสุนัขของเรา Bailey เธอเป็นส่วนหนึ่งของ Border Collie และ Australian Cattle Dog ดังนั้นบางครั้งเธอก็ฉลาดกว่าความดีของตัวเอง โดยเฉพาะอย่างยิ่งเมื่อพูดถึงการบอกเวลาและรู้ว่าเมื่อใดที่เธอควรรับประทานอาหารเย็น ปกติเราจะพยายามให้อาหารมันประมาณ 6 โมงเย็น