สารบัญ:
- เสบียง
- ขั้นตอนที่ 1: การก่อสร้าง
- ขั้นตอนที่ 2: ทดสอบ Roboclaw, Motors และ Encoder
- ขั้นตอนที่ 3: การเพิ่มและการเขียนโปรแกรม Arduino
- ขั้นตอนที่ 4: การเพิ่มและการเขียนโปรแกรม Raspberry Pi (node.js)
- ขั้นตอนที่ 5: ขั้นตอนสุดท้าย - การเขียนโปรแกรม / การใช้ Web Page Client
- ขั้นตอนที่ 6: ตัวเลือกเสริม: ขับเคลื่อนหุ่นยนต์ด้วยการลากเมาส์และ / หรือสัมผัสเหตุการณ์
วีดีโอ: หุ่นยนต์ 4WD ขับเคลื่อนด้วยรีโมท USB Gamepad: 6 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
สำหรับโครงการหุ่นยนต์ต่อไปของฉัน ฉันถูกบังคับให้ออกแบบ/ออกแบบแพลตฟอร์มหุ่นยนต์ของตัวเองเนื่องจากสถานการณ์ที่ไม่คาดฝัน
เป้าหมายคือให้มันเป็นรถอัตโนมัติ แต่ก่อนอื่น ฉันต้องทดสอบความสามารถในการขับขี่ขั้นพื้นฐาน ดังนั้นฉันคิดว่ามันจะเป็นโครงการด้านที่สนุกที่จะมีพฤติกรรมและควบคุมราวกับว่ามันเป็นรถ RC (วิทยุบังคับ) แต่ใช้ USB Gamepad แทน
ผลลัพธ์นั้นดีหรือดีกว่าที่ฉันคาดไว้
ข้อดีของการใช้เส้นทาง USB Gamepad ด้วยการเขียนโปรแกรมจำนวนมาก คือ ฉันสามารถปรับแต่งมันและเพิ่มลงในสิ่งที่ฉันได้ทำไปแล้วได้ ฉันไม่มีประสบการณ์จริงในการสร้างรถ RC แต่ฉันคิดว่ามีรถคันหนึ่งติดอยู่กับตัวส่งสัญญาณ RC (จอยสติ๊ก/ปุ่ม ฯลฯ) และตัวรับสัญญาณ RC ที่มาพร้อม
ตัวอย่างเช่น ฉันได้เพิ่มการรับรู้ว่าหุ่นยนต์ชนกำแพง เพียงแค่ให้ซอฟต์แวร์ตรวจจับกระแสสูงและค่าความเร็วของตัวเข้ารหัสต่ำ
อีกทางเลือกหนึ่ง คุณสามารถเพิ่มเว็บแคม USB บางตัวให้กับหุ่นยนต์ได้ ขึ้นอยู่กับจำนวนและตำแหน่งของมัน คนหนึ่งสามารถขับหุ่นยนต์ไปรอบๆ พื้นที่นั่งเล่นและเข้าไปในห้องอื่น ในขณะที่นั่งอยู่หน้าคอมพิวเตอร์ที่อื่นที่มี USB Gamepad เชื่อมต่ออยู่ มัน.
คำแนะนำนี้จะไม่เป็นความจริง มีรายละเอียด รวมทุกอย่าง วิธีการทีละขั้นตอน แต่ฉันจะพยายามให้รายละเอียดมากที่สุดเท่าที่จะทำได้
เสบียง
ส่วนที่แนะนำ: ส่วนใหญ่ฉันได้รับจาก Servo City (Actobotics)
2 - 13.5 U-channels สำหรับด้านข้างของโครงฐาน มอเตอร์ถูกติดตั้งไว้บนสิ่งนี้ ฉันเลือกสิ่งที่สั้นกว่าและมอเตอร์ของฉันถูกติดตั้งที่มุมสุด และทำให้ติดตั้งได้ยาก
2 - 12 U-channels สำหรับด้านหน้าและด้านหลังของโครงฐาน
2 - 15 U-channels สำหรับกันชนหน้าและหลัง
2 - 7 (หรือ 7.5 นิ้ว?) ช่อง U สำหรับเสาด้านหน้า ไม่สำคัญเกินไป ความยาวอาจแตกต่างกันไป ขึ้นอยู่กับความสูงของเสาด้านหลัง และความสูงที่คุณเลือกทำมุม U-channel ที่เชื่อมระหว่างกัน
2 - (ความยาว?) ช่อง U สำหรับชิ้นส่วนที่ทำมุม, ด้านหน้าไปด้านหลัง, เชื่อมต่อเสาตั้งตรง อันนี้สำคัญมากเพราะ Servo City / Actobotics ขายแผงหรือวงเล็บทำมุม 45 องศาเพื่อจุดประสงค์นี้ แต่คุณจะต้องคำนวณ / ตรีโกณมิติเพื่อให้แน่ใจว่าคุณได้ความยาวที่ถูกต้อง
2 - (ยาว?) U-channels เพื่อทำหน้าที่เป็นกันชนด้านข้างระดับสูงอีกครั้งขึ้นอยู่กับสิ่งที่คุณทำกับฐาน
2 - (ยาว?) U-channels เพื่อทำหน้าที่เป็นกันชนหน้าและหลังระดับสูงขึ้นเหมือนกัน
1 - (ยาว?) U-channel เพื่อทำหน้าที่เป็นสมาชิกบนสุด ขยายข้ามคอลัมน์ด้านหลัง อันนี้อาจไม่สำคัญมากเพราะคุณสามารถติดตั้งที่ด้านบนหรือด้านหน้า / หลังเสาตั้งตรงได้
12 (ประมาณ) L-channels หรือวงเล็บ สิ่งเหล่านี้ให้บริการตามวัตถุประสงค์หลายประการ แต่โดยพื้นฐานแล้วให้ความสมบูรณ์/ความแข็งแรงของโครงสร้างที่มุมของโครงฐานและเสาตั้งตรง
4 (+?) ช่องแบน 3 รูถึง 5 รู สิ่งเหล่านี้ยังให้ความแข็งแรงของโครงสร้างแก่หุ่นยนต์
ServoCity จำหน่ายแผ่นแบนพื้นที่ขนาดใหญ่สองประเภทหลัก ซึ่งมีประโยชน์สำหรับใช้เป็นถาดรองด้านล่าง หรือด้านบนในตำแหน่งที่แบตเตอรี่และหรือตัวควบคุมของคุณจะไป หรือแม้กระทั่งสำหรับพื้นผิวที่สูงขึ้นสำหรับเซ็นเซอร์
มีแผง 4(4.5?)" X 12" และฉันคิดว่าอีกแผงคือแผง X 12 ขนาด 9 (9.5?)
นี่คือสิ่งที่น่าสนใจ และอาจสร้างความสับสนและมีราคาแพง (ส่วนเล็ก ๆ รวมกัน) ทุกช่อง ฯลฯ สามารถเชื่อมต่อกันได้ผ่านส่วนเชื่อมต่อเหล่านี้ซึ่งมีอยู่หลายช่อง นี่คือที่ที่ฉันขอโทษที่ฉันไม่มีรายการชิ้นส่วนที่ละเอียดและเจาะจง
และสิ่งนี้คือ.. คุณไม่รู้จริงๆ ว่าอันไหนที่คุณอาจต้องการ หรือมีกี่อัน.. เพราะมีหลายวิธีที่คุณสามารถประกอบชิ้นส่วนเหล่านี้เข้าด้วยกันได้
ฉันสามารถระบุสิ่งที่ฉันใช้:
www.servocity.com/90-quad-hub-mount-c
www.servocity.com/side-tapped-pattern-moun…
www.servocity.com/90-quad-hub-mount-d
สองรายการต่อไปนี้มีประโยชน์มากและฉันจะตุนสิ่งเหล่านี้:
www.servocity.com/single-screw-plate
www.servocity.com/dual-screw-plate
ถัดไปคือสกรูทั้งหมด (สลักเกลียว) ฉันเริ่มต้นด้วยแพ็คเกจขนาด EACH และฉันได้ผ่านส่วนใหญ่แล้ว ฉันใช้สกรูที่ยาวกว่าโดยที่ขนาดไม่สำคัญ และสงวนสกรูที่สั้นกว่าไว้ในส่วนที่จำเป็น เพราะความยาวอื่นๆ จะไม่สามารถใช้ได้
สุดท้ายคุณควรได้รับ 1 กระเป๋าเหล่านี้:
www.servocity.com/6-32-nylock-nuts-pack
ฉันไม่ได้ใช้มากขนาดนั้น แต่ (ฉันคิดว่า) มีความสำคัญอย่างยิ่งเพื่อให้แน่ใจว่ามอเตอร์ของคุณจะไม่สั่นสะเทือนหลุดออกจากเฟรมเมื่อเวลาผ่านไป มีเพียงสองตัวเท่านั้นที่ใช้งานได้ต่อมอเตอร์เนื่องจาก U-channel
คุณต้องมีอย่างน้อย 4 ตัว คุณอาจได้เพิ่มอีกตัวในกรณีที่คุณสร้างความเสียหายให้กับตัวหนึ่ง (เชื่อฉันเถอะ คุณอาจจะใส่/ถอดมอเตอร์สองสามครั้ง):
www.servocity.com/heavy-duty-clamping-shaf…
โดยทั่วไปแล้ว เพลามอเตอร์จะมีขนาด 6 มม. และเพลามีขนาด 1/4 นิ้ว (0.25 นิ้ว)
ฉันจะได้สกรูสีดำบางตัวซึ่งน่าจะแข็งแรงกว่านี้แล้วใช้สำหรับหนีบด้านบนและไม่ใช้สกรูที่มาพร้อมกับที่หนีบ:
(ฉันคิดว่าสิ่งเหล่านี้คือ):
ตลับลูกปืนขนาดเส้นผ่านศูนย์กลาง 4 - 1/4" (0.25")
1 - กระเป๋าสเปเซอร์สีดำ 1/4"
4 - การหนีบ D-Hubs
www.servocity.com/0-770-clamping-d-hubs
4 - เพลาตัว D (#6340621.375" (1-3/8")
4 - 6 ล้อสำหรับงานหนัก
www.servocity.com/6-heavy-duty-wheel
โปรดทราบว่าฉันชอบล้อเหล่านี้ แต่มีขอบยางแข็ง พวกมันดูเหมือนจะทำได้ดีบนพื้นแข็ง พรม และบางทีอาจเดินคอนกรีตแข็ง ทำได้ไม่ดีบนพื้นหญ้า ทราย ฯลฯ
แถมยังจะเลอะพรมคุณอีกด้วย!!!
4 - มอเตอร์:
www.servocity.com/motors-actuators/gear-mo…
ฉันใช้ 223 RPM ซึ่งเป็นความเร็วในร่มที่ดี และสามารถเคลื่อนย้ายหุ่นยนต์ของฉัน (หนักด้วยแบตเตอรี่ SLA 12V 2 ก้อน) ได้ค่อนข้างง่ายในการเคลื่อนไหวช้า
2 - เครื่องเข้ารหัสมอเตอร์สำหรับมอเตอร์ (Roboclaw ของ Servo City จัดการตัวเข้ารหัส 2 ตัวเท่านั้น)
1 - ตัวควบคุมมอเตอร์ Roboclaw 2X45A ตรวจสอบให้แน่ใจว่าคุณได้รับอันที่มีแผงขั้วต่อสีเขียวอยู่ ไม่ใช่หมุด…. อืม… แต่ละคนก็มีข้อดีของตัวเอง ย้อนหลัง.. ฉันอาจจะได้รับหมุด
ฉันคิดว่านั่นมาจาก Servo City
SparkFun ขาย Arduino Uno (นั่นคือสิ่งที่ฉันใช้) และ Redboard Artemis เป็นผู้จัดการไดรฟ์ของคุณ
คุณจะต้องการ Raspberry Pi 3 (หรือ 4?) เป็น "สมอง" ระดับสูงและเชื่อมต่อกับคุณ
คุณจะต้องมีสายไฟ สวิตช์ ฟิวส์ และไดโอด "flyback" ที่ทนทานมาก
ฉันใช้แบตเตอรี่ SLA รอบลึก Duracell 12V 14AH แต่คุณสามารถใช้อะไรก็ได้
คำเตือน! การออกแบบหุ่นยนต์ตัวนี้ (สูง และกว้าง แต่สั้น) ถือว่ามีจุดศูนย์ถ่วงหนัก เช่น แบตเตอรี่ SLA จะมีให้ อาจทำได้ไม่ดีกับชุดแบตเตอรี่เทคโนโลยีที่ใหม่กว่าประเภทอื่นๆ LiPo สิงโต ฯลฯ มันสามารถพลิกคว่ำได้อย่างง่ายดาย
จาก Pololu ฉันมีปลั๊กอะแดปเตอร์แบบบาร์เรลสองสามตัว เพื่อให้ฉันสามารถจ่ายไฟให้กับ Arduino และ/หรือ Redboard ได้อย่างอิสระ แม้ว่าพวกเขาจะเชื่อมต่อกับ Raspberry ผ่าน USB เพราะฉันไม่ต้องการพึ่งพาพลังของ Raspberry. (โดยเฉพาะการติดตั้งกล้อง เซ็นเซอร์ ฯลฯ)
คุณจะต้องมีตัวควบคุมแรงดันไฟฟ้าแบบสเต็ปดาวน์ 12 ถึง 5V ขั้นต่ำ 5A (?) สำหรับ Raspberry ส่วนอื่น ๆ สามารถจัดการกับทุกอย่างระหว่าง 7 ถึง 15V ดังนั้นโดยตรงกับแบตเตอรี่ SLA
ที่เกี่ยวกับมันสำหรับชิ้นส่วน
สิ่งที่ฉันจะไม่ทำ - เกียร์เอียง 90 องศา
อีกครั้ง มีวิดีโอมากมายในเพลย์ลิสต์ Robotics youtube ของฉันซึ่งมีรายละเอียดส่วนใหญ่ข้างต้น
ขั้นตอนที่ 1: การก่อสร้าง
บอกตามตรงว่าขั้นตอนการก่อสร้างทั้งหมดของฉันอยู่ในรูปของ YouTube แล้ว คุณสามารถดูรายการเหล่านั้นในเพลย์ลิสต์ Robotics ของฉัน เริ่มต้นที่ "Wallace Robot 4" ก่อนหน้านี้ (Wallace II, Wallace III) ก็มีวัสดุที่ดีเช่นกัน
www.youtube.com/playlist?list=PLNKa8O7lX-w…
ขั้นตอนที่ 2: ทดสอบ Roboclaw, Motors และ Encoder
ผู้ผลิต Roboclaw (BasicMicro) มีแอปพลิเคชัน Windows ที่คุณสามารถใช้เพื่อให้แน่ใจว่าคุณได้ต่อมอเตอร์และตัวเข้ารหัสเข้ากับ Roboclaw อย่างถูกต้อง คุณจะต้องต่อมอเตอร์ด้านเดียวกันขนานกับโรโบคลอว์ คุณสามารถเลือกใช้สายเอ็นโค้ดเดอร์ เฉพาะมอเตอร์ด้านหลัง หรือมอเตอร์ด้านหน้า หรืออาจจะดีกว่าก็ได้ -- ในแนวทแยง
เหตุผลที่ผมแนะนำคือ (ภายหลัง) ตรวจหาหุ่นยนต์ที่ติดอยู่ การมีสถานะเป็นแนวทแยงว่าล้อหน้า/หลัง/ไม่หมุนอาจดีกว่าแค่ล้อหน้าหรือล้อหลัง
หมายเหตุ: สิ่งที่ฉันยังไม่ได้ทำคือการใช้ Arduino เพื่อเชื่อมต่อ (ผ่านพิน GPIO) กับตัวเข้ารหัส - หากคุณทำอย่างนั้น คุณสามารถให้ Roboclaw จัดการตัวเข้ารหัส 2 ตัว จากนั้นให้ Arduino จัดการอีกสองตัวและเพียงแค่ สอบถาม Roboclaw สำหรับค่าตัวเข้ารหัสสองค่า (และความเร็ว)
หมายเหตุ: ฉันใช้แอปพลิเคชันของ BasicMicro เพื่อกำหนดค่า Roboclaw ล่วงหน้าสำหรับ Ramping Up / Ramping Down ซึ่งเป็นสิ่งที่ดีสำหรับการปกป้องฮาร์ดแวร์และอุปกรณ์อิเล็กทรอนิกส์ มีวิดีโอเกี่ยวกับเรื่องนี้ในเพลย์ลิสต์ Robotics ของฉัน
ฉันเกือบลืมไปเลยว่า ฉันยังซื้อสายหัวกระสุนที่เชื่อมระหว่างสายมอเตอร์กับโรโบคลอว์ด้วย หมายเหตุ: หากคุณทำเช่นนี้ คุณจะสังเกตเห็นว่าความยาวสายเคเบิลทั้งหมดยาวมาก แต่ฉันไม่อยากตัดเลยถ้าไม่จำเป็น ฉันทำ (สำหรับขั้นตอนต่อมา) พบปัญหาการสื่อสารกับ USB ระหว่าง Raspberry และ Arduino อาจเป็นเพราะสัญญาณรบกวน EMI.. แต่ฉันได้แก้ไขปัญหานั้นด้วยซอฟต์แวร์
หากเกิดปัญหาขึ้น คุณสามารถตัดสายไฟให้สั้นได้ - คุณยังสามารถซื้อฉนวนป้องกันโลหะ (จาก Amazon, เส้นผ่านศูนย์กลาง 1 นิ้ว)
สิ่งสุดท้าย: ฉันยังต้องทำ --- ให้ Roboclaw กำหนดค่าอัตโนมัติหรือปรับแต่งอัตโนมัติ (โดยใช้ตัวเข้ารหัส) เพื่อให้มอเตอร์ทั้งด้านซ้ายและด้านขวาเคลื่อนที่ด้วยความเร็วเท่ากันและหุ่นยนต์จะเดินตรง
ของฉันโค้งเล็กน้อยมากกว่าประมาณ 12 ฟุต แต่ไม่เพียงพอที่ฉันรู้สึกว่าจำเป็นต้องทำอะไรกับมัน
ขั้นตอนที่ 3: การเพิ่มและการเขียนโปรแกรม Arduino
คุณจะต้องใช้ปลั๊กกระบอกและสายไฟ รวมถึงสาย USB ด้วย ตรวจสอบให้แน่ใจว่าคุณได้ขั้วต่อที่ถูกต้องสำหรับขั้วต่อ Arduino
คุณจะต้องดาวน์โหลด Arduino IDE
ที่ Github เป็นภาพร่างล่าสุดที่จัดการการขับหุ่นยนต์:
github.com/elicorrales/wallace.robot.ardui…
คุณจะเชื่อมต่อ Arduino กับคอมพิวเตอร์ของคุณที่ใช้ IDE และตามวิธีเขียนแบบสเก็ตช์ คุณจะใช้หมุด 10 และ 11 บน Arduino สำหรับการสื่อสารแบบอนุกรม (Software Serial) กับ Roboclaw
ฉันพัฒนาโปรโตคอลการสื่อสารอย่างง่ายระหว่าง Raspberry Pi และ Arduino
เป็นอักขระ ASCII ซึ่งช่วยให้ดีบักและทดสอบได้ง่ายขึ้นเพียงแค่ใช้หน้าต่าง "serial monitor" ของ Arduino IDE
คำสั่งเริ่มต้นที่หมายเลข "0" (ศูนย์) และขึ้นไปตามต้องการ
คำสั่งที่เริ่มต้นใน "20" เป็นคำสั่งโดยตรงของ Roboclaw และคำสั่งที่อยู่ด้านล่างคือคำสั่งที่เกี่ยวข้องกับ Arduino อย่างเคร่งครัด
เนื่องจากสัญญาณรบกวน EMI ฉันจึงปรับปรุงสตริงคำสั่งเพื่อรวมการตรวจสอบ
ดังนั้น สตริงใดๆ จะรวมถึง:
# จำนวนโทเค็นในสตริงรวมถึงอันนี้ด้วย
เช็คซัม
ตัวอย่าง สมมติว่าคุณต้องการให้ Arduino ตอบสนองด้วยเมนูคำสั่ง:
4 0 12 16
"4" คือสี่โทเค็นในสตริง
"0" คือคำสั่ง MENU
"12" คือตัวเลขสุ่มที่ฉันเลือก
"16" คือผลรวมของ 4 + 0 + 12
คำสั่ง MENU เดียวกันนั้นอาจแตกต่างกัน:
4 0 20 24
เนื่องจากฉันเลือกหมายเลขสุ่มที่แตกต่างกัน เช็คซัมจึงต่างกัน
ตัวอย่าง สมมติว่าคุณต้องการก้าวไปข้างหน้าด้วยความเร็ว 100 %:
5 29 0 134 100
"5" ห้าโทเค็น
"29" คำสั่ง FORWARD
"0" ตัวเลขสุ่ม
"134" เช็คซัม
"100" พารามิเตอร์ 1 (ความเร็วในกรณีนี้)
หาก Arduino ไม่สามารถตรวจสอบสตริงที่เข้ามาได้ก็จะปล่อย / ละเว้นไม่ตอบสนอง
หาก Arduino ไม่ได้รับคำสั่งการเคลื่อนไหวครั้งต่อไปด้วย X มิลลิวินาที มันจะส่งมอเตอร์ STOP ไปยัง Roboclaw
Arduino เริ่มทำงานและเริ่มส่งสถานะอัตโนมัติไปยังพอร์ต USB… เว้นแต่จะได้รับคำสั่งให้หยุดทำเช่นนั้น
ณ จุดนี้คุณควรพร้อมที่จะลองควบคุม Roboclaw และดูมอเตอร์หมุน เพียงแค่ใช้ "Serial Monitor" บน IDE
ขั้นตอนที่ 4: การเพิ่มและการเขียนโปรแกรม Raspberry Pi (node.js)
อีกครั้ง ถ้าคุณดูเพลย์ลิสต์ Robotics ของฉัน ตั้งแต่เริ่มต้น ฉันก็ทำทุกอย่างเพื่อให้ Raspberry ทำงานได้
สิ่งหนึ่งที่ฉันอาจมองข้ามไปก็คือคุณจะต้องมีตัวควบคุม 5V และสร้าง ตัด/ปรับเปลี่ยนสาย USB สำหรับมัน หรือจ่ายไฟให้กับ Raspberry ด้วยวิธีอื่น
ที่ Github มีทุกสิ่งที่คุณต้องการใน Raspberry เพื่อสื่อสารกับ Arduino ผ่าน USB
github.com/elicorrales/wallace.robot.raspb…
มีแม้กระทั่งสคริปต์ทดสอบ
คุณสามารถดูรหัสเซิร์ฟเวอร์ node.js และคุณจะเห็นวิธีที่ Raspberry แปลงคำสั่งตัวเลขแบบสั้นเป็นสตริง URL ประเภท REST คุณสามารถใช้ "curl" เพื่อส่งคำสั่งทดสอบ
ตัวอย่าง:
ที่อยู่ IP RP3 ของคุณ:8084/arduino/api/forward/50
จะทำให้มอเตอร์หมุนล้อไปข้างหน้าชั่วขณะ
หากคุณใส่ไว้ในลูปสคริปต์ของเชลล์ คุณจะเห็นล้อหมุนต่อไป
รหัส node.js (server.js) มีคุณสมบัติการเชื่อมต่อใหม่ในกรณีที่การสื่อสารแบบอนุกรมหายไปกับ Arduino คุณสามารถทดสอบได้โดยเพียงแค่ถอดปลั๊ก Arduino ออกจาก Raspberry แล้วเสียบใหม่
ตรวจสอบให้แน่ใจว่าคุณจับคู่อัตราบอดแบบอนุกรมระหว่างทั้งสอง
เนื่องจาก Arduino ทิ้งแพ็กเก็ตข้อมูลที่ไม่ถูกต้อง และเนื่องจากที่ระดับ node.js และที่ระดับจาวาสคริปต์ของเบราว์เซอร์ ทุกอย่างถูกเข้ารหัสเพื่อส่งคำสั่ง "ไดรฟ์" จำนวนมาก ฉันจึงสามารถเรียกใช้ได้สูงถึง 2,000,000 บอด (2Mbps).
หากคุณได้รับสคริปต์ทดสอบและเห็นล้อหมุน แสดงว่าคุณพร้อมสำหรับขั้นตอนต่อไป
ขั้นตอนที่ 5: ขั้นตอนสุดท้าย - การเขียนโปรแกรม / การใช้ Web Page Client
รวมอยู่ในลิงค์ Github ไปยังส่วน Raspberry ของทั้งหมดนี้คือไฟล์ไคลเอนต์
ดัชนี.html ดัชนี.js p5.min.js
พวกเขาจัดการ USB Gamepad ผ่าน Gamepad API (ตามเบราว์เซอร์) และคุณควรเห็นปุ่มและตัวเลื่อนต่างๆ ที่มีอยู่ในหน้าเว็บด้วย
โค้ดจาวาสคริปต์จะค้นหา (โพล) ค่าแกน X และ Y สำหรับจอยสติ๊กตัวใดตัวหนึ่ง มันโพลอย่างรวดเร็วมากและจะปิดค่าทั้งหมดเหล่านั้นไปยังเซิร์ฟเวอร์ node.js ที่ฟังที่ 8084
ค่าดิบแกน X และ Y ของจอยสติ๊กอยู่ระหว่าง 0 ถึง 1
แต่ฟังก์ชันไลบรารีตัวควบคุมมอเตอร์ Roboclaw ที่ใช้ใน Arduino เพื่อขับเคลื่อนมอเตอร์ คาดว่าค่าระหว่าง -100 ถึง 0 (ย้อนกลับ) หรือ (0 ถึง 100) ไปข้างหน้า
ซู…. นั่นคือจุดประสงค์ในการรวม p5.min.js มันเพิ่งเกิดขึ้นที่มีฟังก์ชัน map() ที่ดีและสะดวกมากนี้ โดยที่คุณให้ค่า raw แก่มัน เป็นช่วง raw(current) และช่วงใหม่ที่ต้องการ และแปลงค่าดิบเป็นค่าในช่วงใหม่ที่แมป
อีกจุดหนึ่ง: ที่ความเร็ว 100 หุ่นยนต์สามารถหากินได้มาก ฉันมักจะวิ่งเข้าไปในบางสิ่งบางอย่าง แต่ถึงแม้คุณจะเก่งกว่านั้น มันก็ยังงอนเมื่อหมุนไปทางซ้ายหรือขวา
สิ่งที่คุณจะเพิ่มจะคล้ายกับตัวเลื่อนความเร็วสูงสุดปัจจุบันบนหน้าเว็บ ตัวเลื่อนนั้นกำหนดว่าค่าสูงสุดหรือค่าสูงสุดที่คุณจะจับคู่จอยสติ๊ก Xs และ Ys กับอะไร
ตัวอย่าง:
สมมติว่าคุณกำลังจับคู่ 0 -> 1 ถึง 0 -> 100 เมื่อคุณกดจอยสติ๊กจนสุด แสดงว่าคุณอยู่ที่ 100 Touchy อาจจะเร็วเกินไป
แต่ถ้าคุณเลื่อนแถบเลื่อน Max Speed กลับไปเล็กน้อย ตอนนี้คุณกำลังจับคู่ 0 -> 1 ถึง 0 -> 80 หรือ 70
นั่นหมายความว่าคุณมีช่องทางมากขึ้นในการเคลื่อนย้ายจอยสติ๊กของคุณโดยไม่ต้องเปลี่ยนแปลงความเร็วมากนักที่ถูกส่งไปยัง node.js (และไปยัง Arduino)
นอกจากนี้ คุณสามารถแยก Xs (หมุนไปทางซ้ายหรือขวา) ออกจาก Ys (ไปข้างหน้าหรือข้างหลัง) เป็นความเร็วสูงสุดที่พวกมันมีอยู่
ดังนั้น คุณสามารถปล่อยให้ Ys อยู่ที่ 0 ถึง 100, 0 ถึง -100 สำหรับการเคลื่อนที่เชิงเส้นอย่างรวดเร็ว แต่ลดความเร็วสูงสุด Xs เพื่อให้ควบคุมการเคลื่อนที่แบบหมุนได้มากขึ้น ดีที่สุดของทั้งสองโลก
ขั้นตอนที่ 6: ตัวเลือกเสริม: ขับเคลื่อนหุ่นยนต์ด้วยการลากเมาส์และ / หรือสัมผัสเหตุการณ์
หากคุณมาไกลถึงขนาดนี้ คุณจะรู้ว่าเลเยอร์ซอฟต์แวร์ที่เริ่มต้นจากเบราว์เซอร์และเจาะลึกผ่าน Javascript และบนเซิร์ฟเวอร์ Raspberry node.js ในที่สุดก็เป็น Arduino กำลังแปลงพิกัด X และ Y ของจอยสติ๊ก Gamepad เป็น " คำสั่ง forward" (หรือ "backward" เป็นต้น) (และค่าความเร็ว)
นอกจากนี้ คุณทราบแล้วว่าในขณะที่ Xs และ Ys ของจอยสติ๊กเป็นลบ 1 ถึงศูนย์ถึงบวก 1 จะต้องแปลงค่าเหล่านั้นระหว่างศูนย์ถึง 100 ค่าสูงสุดขึ้นอยู่กับการตั้งค่าความเร็วสูงสุดบนหน้าเว็บ
ซู… สิ่งเดียวที่ต้องทำเพื่อใช้เมาส์หรือกิจกรรมการสัมผัส (เช่นเดียวกับบนสมาร์ทโฟน) คือการจับภาพเหตุการณ์เหล่านั้น คว้า Xs และ Ys
แต่ ---- Xs และ Y เหล่านั้นไม่ได้อยู่ระหว่างลบ 1 และ 1 พวกเขาเริ่มต้น 0 และเพิ่มขึ้นในทางบวก เนื่องจากโดยพื้นฐานแล้วเป็นพิกเซลหรือพิกัดหน้าจอสัมพัทธ์ขององค์ประกอบ HTML บางอย่าง (เช่น แผงบูตสแตรป) หรือผ้าใบ
ดังนั้นอีกครั้ง ฟังก์ชัน "map()" ของไลบรารี Js ของ Js นั้นสะดวกมากในการแมปกับสิ่งที่เราต้องการอีกครั้ง
ฉันปรับโครงสร้างโค้ดใหม่ให้มีหน้าเว็บสองหน้า หน้าหนึ่งสำหรับเดสก์ท็อปโดยใช้เกมแพด อีกหน้าสำหรับมือถือโดยใช้กิจกรรมการสัมผัส
นอกจากนี้ เมื่อ Xs และ Y ถูกแมปใหม่ พวกมันจะถูกป้อนเข้าไปในสายรหัสเดียวกัน ฯลฯ เช่นเดียวกับ Xs และ Ys จาก Gamepad
แนะนำ:
"ไฮไฟว์" หุ่นยนต์ Cardboard Micro:bit: 18 ขั้นตอน (พร้อมรูปภาพ)
"ไฮไฟว์" หุ่นยนต์ Cardboard Micro:bit: ติดอยู่ที่บ้าน แต่ยังต้องการไฮไฟว์ใครสักคน? เราสร้างหุ่นยนต์ตัวน้อยที่เป็นมิตรด้วยกระดาษแข็งและ micro:bit พร้อมด้วย Crazy Circuits Bit Board และทั้งหมดที่เธอต้องการจากคุณคือการไฮไฟว์เพื่อให้ความรักที่เธอมีต่อคุณมีชีวิตอยู่ ถ้าคุณชอบ
หุ่นยนต์ ShotBot: 11 ขั้นตอน
ShotBot Robot: คำแนะนำนี้ถูกสร้างขึ้นเพื่อตอบสนองความต้องการของโครงการ Makecourse ที่มหาวิทยาลัยเซาท์ฟลอริดา (www.makecourse.com)
หุ่นยนต์ Telepresence ขนาดมนุษย์พร้อมแขนจับ: 5 ขั้นตอน (พร้อมรูปภาพ)
หุ่นยนต์ Telepresence ขนาดมนุษย์พร้อมแขนกริปเปอร์: MANIFESTOA ความคลั่งไคล้ของฉันเชิญฉันไปที่งานปาร์ตี้ฮัลโลวีน (30+ คน) ระหว่างการระบาดใหญ่ ดังนั้นฉันจึงบอกเขาว่าฉันจะเข้าร่วมและออกแบบหุ่นยนต์ telepresence เพื่อสร้างความหายนะในงานปาร์ตี้ สถานที่. หากคุณไม่คุ้นเคยกับสิ่งที่โทร
หุ่นยนต์ทรงตัว / หุ่นยนต์ 3 ล้อ / หุ่นยนต์ STEM: 8 ขั้นตอน
หุ่นยนต์ทรงตัว / หุ่นยนต์ 3 ล้อ / หุ่นยนต์ STEM: เราได้สร้างหุ่นยนต์ทรงตัวแบบผสมผสานและ 3 ล้อสำหรับใช้ในการศึกษาในโรงเรียนและโปรแกรมการศึกษาหลังเลิกเรียน หุ่นยนต์นี้ใช้ Arduino Uno, ชิลด์แบบกำหนดเอง (รายละเอียดการก่อสร้างทั้งหมดที่มีให้), ชุดแบตเตอรี่ Li Ion (ข้อจำกัดทั้งหมด
หุ่นยนต์ USB Drive ที่สอนได้: 7 ขั้นตอน (พร้อมรูปภาพ)
ไดรฟ์ USB หุ่นยนต์ที่สอนได้: ไม่มีใครเคยทำแบบนี้มาก่อน ฉันคิดว่าฉันจะทำ (ยิ้ม) นี่คือไดรฟ์หุ่นยนต์ USB (16 Gig) ที่สอนได้ ฉันคิดว่าฉันจะรวมเทคโนโลยีโปรด 2 อย่างเข้าไว้ด้วยกันในอุปกรณ์เดียว สนุก