สารบัญ:
- เสบียง
- ขั้นตอนที่ 1: การตั้งค่าหุ่นยนต์
- ขั้นตอนที่ 2: การตั้งค่าจอยสติ๊ก
- ขั้นตอนที่ 3: ตรวจสอบค่าจอยสติ๊ก
- ขั้นตอนที่ 4: การปรับตัวแปร X และ Y
- ขั้นตอนที่ 5: แปลง X และ Y เป็นค่าสำหรับมอเตอร์ซ้ายและขวา
- ขั้นตอนที่ 6: การส่งค่าเป็นข้อความวิทยุ
- ขั้นตอนที่ 7: การรับข้อความบน Robot ของคุณ
- ขั้นตอนที่ 8: การใช้ข้อความขาเข้าเพื่อควบคุมมอเตอร์ของหุ่นยนต์
- ขั้นตอนที่ 9: การใช้ปุ่ม -- การรับข้อความเพิ่มเติม
- ขั้นตอนที่ 10: การส่งข้อความเพิ่มเติมโดยใช้ปุ่มของคอนโทรลเลอร์
- ขั้นตอนที่ 11: ขั้นตอนต่อไป
วีดีโอ: การเขียนโปรแกรม Micro:Bit Robot & Joystick:Bit Controller ด้วย MicroPython: 11 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
สำหรับ Robocamp 2019 ค่ายหุ่นยนต์ภาคฤดูร้อนของเรานั้น คนหนุ่มสาวอายุ 10-13 ปีกำลังบัดกรี ตั้งโปรแกรม และสร้าง 'หุ่นยนต์น้ำหนักเกิน' ของ BBC micro:bit รวมถึงการเขียนโปรแกรม micro:bit เพื่อใช้เป็นรีโมทคอนโทรล
หากคุณกำลังอยู่ที่ Robocamp ให้ข้ามไปที่ขั้นตอนที่ 3 เนื่องจากเราได้ทำสองขั้นตอนแรกเป็นกลุ่มแล้ว
นี่คือคำแนะนำทีละขั้นตอนเพื่อให้หุ่นยนต์ micro:bit สื่อสารกับตัวควบคุมจอยสติ๊ก:บิต
ไม่ใช้เส้นทางที่เร็วที่สุดเพื่อให้ทุกอย่างทำงานได้ แต่พยายามทำสิ่งต่างๆ เป็นส่วนเล็กๆ เพื่อให้คุณสามารถทดสอบโค้ดได้ในขณะทำงาน ใส่ตราประทับของคุณเองลงไป และเข้าใจว่าทำไมเราถึงทำในสิ่งที่เรากำลังทำอยู่ !
สำหรับกิจกรรมนี้ เราใช้หุ่นยนต์แบบกำหนดเอง แต่จะทำงานร่วมกับหุ่นยนต์ทุกตัวที่ใช้ไดรเวอร์มอเตอร์ที่คล้ายกัน เช่น L9110
ไฟล์การออกแบบสำหรับหุ่นยนต์ของเราสามารถพบได้ที่นี่:
คู่มือนี้เขียนขึ้นสำหรับผู้เริ่มต้น แต่ถ้าคุณไม่เคยใช้ micro:bit กับ MicroPython มาก่อน เราขอแนะนำให้คุณลองใช้โปรแกรมที่ง่ายกว่านี้ก่อน เช่น ป้ายชื่อของเรา คำแนะนำ: https://www.instructables.com/id/Felt -ไมโครบิต-น้ำ…
เสบียง
2x BBC micro:บิต
หุ่นยนต์ที่ทำงานร่วมกับ BBC micro:bit (ดูคำอธิบายด้านบน)
joystick:bit controller (เราได้มาจาก Cool Components)
ขั้นตอนที่ 1: การตั้งค่าหุ่นยนต์
คุณมีตัวเลือกสองสามอย่างในการเขียนโค้ด MicroPython สำหรับ micro:bit ของคุณ:
- Mu ซึ่งคุณสามารถดาวน์โหลดและติดตั้งได้จากที่นี่:
- ตัวแก้ไขออนไลน์ที่คุณสามารถพบได้ที่นี่:
คำแนะนำเหล่านี้ถือว่าคุณกำลังใช้ Mu
เปิด Mu แล้วเสียบ micro:bit เข้ากับคอมพิวเตอร์ Mu ควรตระหนักว่าคุณกำลังใช้ micro:bit และเลือก micro:bit 'Mode' แต่หากไม่เป็นเช่นนั้น ให้เปลี่ยนด้วยตนเอง
รับสำเนารหัสทดสอบมอเตอร์หุ่นยนต์จากที่นี่:
หากคุณไม่คุ้นเคยกับ Github อาจทำให้คุณใช้งานไม่ได้! สองวิธีง่าย ๆ ในการรับรหัสนี้คือ:
- บันทึกไฟล์ Raw ลงในคอมพิวเตอร์ของคุณแล้วโหลดลงใน Mu:
- คัดลอกและวางรหัสที่กำหนดทั้งหมดลงในไฟล์ใหม่ใน Mu
ตอนนี้ให้คลิกปุ่ม 'Flash' จากแถบเครื่องมือของ Mu เพื่อส่งรหัสใหม่ของคุณไปยัง micro:bit
สิ่งนี้จะไม่ทำงานเว้นแต่จะเสียบ micro:bit
ไฟสีเหลืองที่ด้านหลังของ micro:bit จะเริ่มกะพริบ เมื่อเสร็จแล้ว รหัสของคุณได้ถูกโอนแล้ว
การตั้งค่าทิศทางมอเตอร์
โปรแกรมนี้จะเปิดมอเตอร์ในทิศทางต่างๆ เมื่อคุณกดปุ่ม 'A' บน micro:bit
สิ่งที่คุณต้องการเกิดขึ้นคือ:
- เมื่อ 'A' ปรากฏขึ้น ให้มอเตอร์ไปข้างหน้า
- เมื่อ 'B' ปรากฏขึ้น ให้มอเตอร์ถอยหลัง
- เมื่อ 'C' ปรากฏขึ้น มอเตอร์ด้านขวาจะเดินหน้า
- เมื่อ 'D' ปรากฏขึ้น มอเตอร์ขวาจะถอยหลัง
อาจจะไม่เป็นเช่นนั้นเพราะมันขึ้นอยู่กับว่าคุณเชื่อมต่อหุ่นยนต์ของคุณอย่างไร!
ที่ด้านบนของโค้ด คุณจะพบรายการของตัวแปร ซึ่งจะกำหนดพินที่ micro:bit ควบคุมทิศทางของมอเตอร์
หากคุณกำลังใช้หนึ่งในโรบ็อตของเรา (ไฟล์) ให้สลับชื่อตัวแปรไปรอบๆ เพื่อให้หุ่นยนต์เคลื่อนที่ไปในทิศทางที่ถูกต้อง:
หากคุณกำลังใช้หุ่นยนต์ของคุณเอง ให้ตรวจสอบว่าพินใดที่ไดรเวอร์มอเตอร์เชื่อมต่ออยู่ก่อนที่จะแก้ไขโค้ด
ทดลองขับ
ตอนนี้ตรวจสอบว่าหุ่นยนต์ของคุณขับเคลื่อนอย่างไรโดยแทนที่รหัสทดสอบในลูปหลักด้วยรหัสของคุณเอง
คุณบอกให้หุ่นยนต์ขับรถโดยเรียกใช้ฟังก์ชัน drive() ต้องใช้สองอาร์กิวเมนต์ - ค่าสำหรับมอเตอร์ด้านซ้ายและค่าสำหรับมอเตอร์ด้านขวา ระหว่าง 0 (ปิด) และ 1023 (ความเร็วสูงสุด)
โดยการเรียกไดรฟ์ (500, 500) ตัวอย่างเช่น คุณกำลังบอกให้มอเตอร์ทั้งสองเปิด ในทิศทางไปข้างหน้า ที่ความเร็วประมาณครึ่งหนึ่ง
ลองใช้ตัวเลือก 2-3 อย่างเพื่อดูว่ามันขับตรงแค่ไหนและเลี้ยวได้ดีแค่ไหน
คำแนะนำ: การทดสอบมอเตอร์อยู่ภายในทั้ง True loop และ if statement - มอเตอร์จะไม่หมุนจนกว่าคุณจะกดปุ่ม A บน micro:bit และจะเป็นการตรวจสอบตลอดไปว่าคุณได้กดปุ่ม A หรือไม่
คำแนะนำ: มอเตอร์จะไม่ปิดจนกว่าคุณจะบอกให้ทำ! พวกเขาจะทำตามคำแนะนำสุดท้ายต่อไปเสมอ
ไม่บังคับ: ปรับปรุงการขับขี่ในแนวตรง
หากหุ่นยนต์ของคุณไม่ขับเป็นเส้นตรง มอเตอร์ตัวใดตัวหนึ่งของคุณอาจหมุนเร็วกว่าอีกตัวหนึ่ง
หลังจากตรวจสอบแล้วว่าไม่มีอะไรหยุดล้อไม่ให้หมุนได้อย่างอิสระ คุณสามารถแก้ไขโค้ดในฟังก์ชันขับเคลื่อนเพื่อลดความเร็วของมอเตอร์ที่เร็วขึ้นได้
เลื่อนขึ้นเพื่อค้นหาคำจำกัดความของฟังก์ชันไดรฟ์ และดูคำแนะนำสองข้อด้านบน:
def ไดรฟ์ (L, R):
# ด้านล่างนี้เป็นการปรับแก้ความคลาดเคลื่อนของความเร็วมอเตอร์ L = int(L*1) R = int(R*1)
สองบรรทัดนี้ในปัจจุบันใช้ค่าของ L และ R คูณด้วย 1 จากนั้นตรวจสอบให้แน่ใจว่ายังคงเป็นจำนวนเต็ม (int)
ตัวอย่างเช่น หากมอเตอร์ด้านซ้ายของคุณเร็วขึ้น ให้เปลี่ยน *1 ในบรรทัดเป็น *0.9 และดูว่าจะช่วยปรับปรุงสิ่งต่างๆ ได้หรือไม่
คุณจะไม่สามารถทำให้มันสมบูรณ์แบบได้ แต่คุณสามารถปรับตัวต่อไปได้จนกว่ามันจะขับตรงขึ้น
การตั้งค่าวิทยุ
ตอนนี้ตั้งค่าวิทยุโดยเพิ่มบรรทัดต่อไปนี้ที่ด้านบนของรหัสของคุณ:
นำเข้าวิทยุ
radio.config(channel=7, group=0, queue=1) radio.on()
ซึ่งจะทำให้หุ่นยนต์ของคุณได้รับคำสั่งจาก micro:bit อื่น แต่ในขณะนี้ หุ่นยนต์จะได้รับคำแนะนำจาก micro:bit อื่นๆ
เนื่องจากช่อง 7 และกลุ่ม 0 เป็นช่องเริ่มต้น
เปลี่ยนตัวเลขเหล่านี้โดยเลือกช่องสัญญาณระหว่าง 0-82 และกลุ่มระหว่าง 0-255 ตอนนี้ micro:bit ของคุณจะได้รับคำแนะนำจากผู้อื่นที่มีข้อมูลการกำหนดค่าเดียวกันเท่านั้น
Queue=1 หมายถึง micro:bit จะเก็บข้อความขาเข้าครั้งละหนึ่งข้อความเท่านั้น ซึ่งให้เวลาตอบสนองเร็วกว่าค่าเริ่มต้นเล็กน้อย ซึ่งก็คือ 3
ตอนนี้ คุณต้องแก้ไขรหัสลูปหลักของคุณ แทนที่จะรันคำแนะนำเมื่อคุณกดปุ่ม ให้รอข้อความวิทยุที่เข้ามาและตอบกลับอย่างเหมาะสม
ลองใช้รหัสต่อไปนี้เพื่อทดสอบ (จะไม่ดำเนินการใดๆ จนกว่าคุณจะตั้งค่าจอยสติ๊กในขั้นตอนที่ 2):
ในขณะที่จริง:
message = radio.receive() ถ้าข้อความ == 'forward': ไดรฟ์ (500, 500)
ขั้นตอนที่ 2: การตั้งค่าจอยสติ๊ก
ถอดปลั๊ก micro:bit ของหุ่นยนต์แล้วเสียบ micro:bit ของจอยสติ๊กแทน
รับสำเนาของรหัสตั้งค่าจอยสติ๊กจากที่นี่:
ตั้งค่าวิทยุโดยใช้การกำหนดค่าเดียวกัน (ช่องและหมายเลขกลุ่ม) เหมือนกับที่คุณทำกับหุ่นยนต์ - ซึ่งจะทำให้ทั้งสองสามารถสื่อสารกันได้
เมื่อสิ้นสุดโปรแกรม ให้เริ่มลูปหลักของคุณ:
ในขณะที่จริง:
ถ้า button_a.was_pressed(): radio.send('forward')
รหัสนี้ยังไม่ได้ใช้จอยสติ๊ก:บิต ใช้ปุ่ม A บน micro:bit เพื่อส่งข้อความ
ตรวจสอบให้แน่ใจว่าทั้งหุ่นยนต์และไมโครคอนโทรลเลอร์ของคุณมีกำลังงาน จากนั้นกดปุ่มเพื่อส่งข้อความของคุณ
หากได้รับข้อความสำเร็จ และหุ่นยนต์ของคุณเคลื่อนที่… ทำได้ดีมาก! คุณทำตามคำแนะนำในการตั้งค่าเสร็จแล้ว
เคล็ดลับการแก้ปัญหา
หากคุณได้รับข้อความแสดงข้อผิดพลาดบนไมโครคอนโทรลเลอร์ของคุณ: บิต… ดีบักโค้ดคอนโทรลเลอร์ของคุณ
หากคุณได้รับข้อความแสดงข้อผิดพลาดบนหุ่นยนต์ micro:bit… ข้อความวิทยุของคุณถูกส่งเรียบร้อยแล้ว! แต่หุ่นยนต์ไม่สามารถเข้าใจมันได้ ดังนั้นโปรดตรวจสอบว่าข้อความที่คุณส่งและข้อความที่คุณบอกให้หุ่นยนต์ฟังการจับคู่
ถ้าไม่มีอะไรเกิดขึ้นเลย
- ตรวจสอบให้แน่ใจว่าคุณได้แฟลชโค้ดที่ถูกต้องในแต่ละ micro:bit - ง่ายต่อการแฟลชผิดอันโดยไม่ได้ตั้งใจ!
- ตรวจสอบให้แน่ใจว่าหมายเลขช่องและกลุ่มของคุณตรงกันในแต่ละ micro:bit
ขั้นตอนที่ 3: ตรวจสอบค่าจอยสติ๊ก
ขั้นตอนต่อไปคือการใช้รหัสควบคุมทั้งหมด
ก่อนที่คุณจะใช้จอยสติ๊กบนคอนโทรลเลอร์ได้ คุณจำเป็นต้องรู้ว่าค่าใดบ้างที่คุณได้รับเมื่อกดก้าน
แทนที่ลูปหลักของคุณด้วยรหัสต่อไปนี้:
ในขณะที่จริง:
จอยสติ๊ก = joystick_push() พิมพ์ (จอยสติ๊ก) สลีป (500)
แฟลชโค้ดนี้ไปที่ micro:bit จากนั้นคลิกปุ่ม REPL บนแถบเครื่องมือของ Mu การดำเนินการนี้จะเปิดเทอร์มินัลที่ด้านล่างของตัวแก้ไข ซึ่งจะให้ลิงก์แบบเรียลไทม์ไปยัง micro:bit
สิ่งนี้จะไม่ทำงานเว้นแต่จะเสียบ micro:bit
เมื่อ REPL เปิดอยู่ ให้กดปุ่มรีเซ็ตที่ด้านหลังของ micro:bit
คุณควรเห็นค่าบางค่าที่นำ 'พิมพ์' มาที่หน้าจอของคุณ:
ดันก้านของจอยสติ๊กและดูว่าเกิดอะไรขึ้นกับตัวเลข
จดค่าที่กำหนดเมื่อจอยสติ๊กอยู่ในตำแหน่งกึ่งกลาง - ในกรณีของฉัน (518, 523)
คลิกปุ่ม REPL บนแถบเครื่องมือของ Mu อีกครั้งเพื่อปิด คุณจะไม่สามารถแฟลชโค้ดใหม่ไปที่ micro:bit ได้ในขณะที่เปิดอยู่
ขั้นตอนที่ 4: การปรับตัวแปร X และ Y
คุณต้องการเปลี่ยนค่าที่กำหนดโดยฟังก์ชันจอยสติ๊ก เพื่อที่:
- ตรงกลางเป็นศูนย์
- ขึ้นเป็นบวก
- ลงเป็นลบ
ซึ่งตรงกับคำสั่งที่หุ่นยนต์ต้องการ - ตัวเลขบวกเพื่อขับไปข้างหน้า และจำนวนลบเพื่อขับถอยหลัง
ดูตัวเลขที่คุณได้รับในขั้นตอนสุดท้าย ตัวเลขแรกคือ x และตัวเลขที่สองคือ y
แก้ไขนิยาม joystick_push() ที่มีอยู่แล้วในโปรแกรม เพื่อลบค่าของคุณจากต้นฉบับ:
def joystick_push():
x = pin0.read_analog() - 518 y = pin1.read_analog() - 523 ส่งคืน x, y
ใช้หมายเลขของคุณเอง ตัวเลขอาจแตกต่างจากของฉัน
แฟลชโค้ดใหม่ของคุณ เปิด REPL กดปุ่มรีเซ็ตของ micro:bit และตรวจสอบค่าของคุณ
คุณได้รับ (0, 0)?
ขั้นตอนที่ 5: แปลง X และ Y เป็นค่าสำหรับมอเตอร์ซ้ายและขวา
ในขณะนี้ จอยสติ๊กนี้ไม่ค่อยมีประโยชน์ในการขับหุ่นยนต์ด้วย ผลักไปข้างหน้าจนสุด คุณจะได้รับค่าเช่น (0, 500)
หากคุณให้ตัวเลขเหล่านี้กับหุ่นยนต์ มันจะเปิดมอเตอร์ด้านขวา แต่ไม่ใช่มอเตอร์ด้านซ้าย ซึ่งไม่ใช่สิ่งที่คุณต้องการให้เกิดขึ้น!
แผนภาพนี้แสดงให้เห็นว่าเกิดอะไรขึ้นกับค่า x และ y เมื่อคุณขยับจอยสติ๊ก และสิ่งที่เราต้องการให้หุ่นยนต์ทำเมื่อคุณขยับจอยสติ๊ก
คุณต้องใช้คณิตศาสตร์ในการผสมค่า x และ y เพื่อให้มีประโยชน์มากขึ้น
NS
คณิตศาสตร์
เริ่มต้นด้วยการดันจอยสติ๊กไปข้างหน้าจนสุด
ตัวอย่างของค่าที่คุณอาจได้รับคือ:
x = 0
y = 500
เพื่อให้เป็นประโยชน์กับหุ่นยนต์ คุณต้องการรับค่าเหล่านี้:
ซ้าย = 500
ขวา = 500
ลองบวก x และ y ด้วยวิธีต่างๆ เพื่อดูว่าเราได้ตัวเลขอะไรบ้าง:
x + y = 0 + 500 = 500
x - y = 0 - 500 = -500 y + x = 500 + 0 = 500 y - x = 500 - 0 = 500
ทีนี้มาดูกันว่าจะเกิดอะไรขึ้นถ้าเราดันจอยสติ๊กไปทางขวาจนสุด
ตัวอย่างของค่าที่คุณอาจได้รับคือ:
x = 500
y = 0
ในการทำให้หุ่นยนต์เลี้ยวขวา คุณต้องการให้มอเตอร์ด้านซ้ายขับเคลื่อนไปข้างหน้า และมอเตอร์ด้านขวาขับถอยหลัง:
ซ้าย = 500
ขวา = -500
ลองใช้สูตรของเราอีกครั้ง:
x + y = 500 + 0 = 500
x - y = 500 - 0 = 500 y + x = 0 + 500 = 500 y - x = 0 - 500 = -500
เปรียบเทียบสูตรทั้งสองชุดเพื่อหาว่าตัวเลือกใดจะให้ค่าที่ถูกต้องทางซ้าย และตัวเลือกใดจะให้ค่าที่ถูกต้องแก่คุณ
ลองใช้ค่าบางอย่างที่คุณได้รับจากจอยสติกของคุณเอง เพื่อให้แน่ใจว่าสูตรที่คุณเลือกใช้ได้ผลตลอดเวลา
NS
การขยายฟังก์ชันจอยสติ๊ก
ขยายและแก้ไขฟังก์ชันจอยสติ๊กเพื่อสร้างตัวแปรใหม่สองตัวสำหรับด้านซ้ายและขวา และเพื่อคืนค่าเหล่านั้นแทน x และ y:
def joystick_push():
x = pin0.read_analog() - 518 y = pin1.read_analog() - 523 ซ้าย = ขวา = กลับซ้าย ขวา
แฟลชโค้ดใหม่ของคุณ เปิด REPL กดปุ่มรีเซ็ตของ micro:bit และตรวจสอบค่าของคุณ
คุณได้รับค่าที่คุณคาดหวังหรือไม่?
หากคุณต้องการความช่วยเหลือเพิ่มเติม โปรดดูโค้ดตัวอย่างของเราที่นี่:
ขั้นตอนที่ 6: การส่งค่าเป็นข้อความวิทยุ
ตอนนี้คุณมีค่าบางอย่างพร้อมที่จะส่งไปยังหุ่นยนต์ของคุณ
แก้ไขลูปหลักของคุณ เพื่อให้มันตรวจสอบค่าของจอยสติ๊ก แต่แทนที่จะพิมพ์ค่า มันจะทำให้พร้อมที่จะส่งเป็นข้อความวิทยุ
ในขณะที่จริง:
จอยสติ๊ก = joystick_push() ข้อความ = str(จอยสติ๊ก[0]) + " " + str(จอยสติ๊ก[1])
นี่จะไม่ส่งข้อความจริง ๆ !
เกิดอะไรขึ้นในโค้ดบรรทัดใหม่นี้
- จอยสติ๊ก[0] หมายถึงข้อมูลบิตแรกที่ออกมาจากฟังก์ชันจอยสติ๊ก (ซ้าย)
- จอยสติ๊ก [1] เป็นบิตถัดไปของข้อมูล (ขวา)
- str() แปลงตัวเลขทั้งสองนี้เป็นรูปแบบสตริง (ข้อความแทนตัวเลข) - นี่เป็นสิ่งจำเป็นเพื่อให้สามารถส่งข้อมูลทางวิทยุได้
คุณจะคุ้นเคยกับการเห็น + หมายถึงการบวก - สามารถเพิ่มตัวเลขเข้าด้วยกันและเชื่อมสตริงเข้าด้วยกัน ซึ่งหมายความว่าจะรวมข้อมูลสองบิตเข้าด้วยกัน
ตัวอย่าง:
150 + 100 = 250
str(150) + str(100) = 150100
ดังนั้นการต่อกันจะยึดค่าซ้ายและขวาของคุณไว้ด้วยกัน
ในการบังคับให้แยกข้อมูลสองบิต (เพื่อให้หุ่นยนต์รู้ว่าเป็นข้อมูลสองบิต) ให้เชื่อมสตริงพิเศษระหว่างข้อมูลทั้งสองเข้าด้วยกันโดยใช้ " " เครื่องหมายคำพูดรอบๆ ช่องว่างหมายความว่าเป็นสตริงอยู่แล้ว
สุดท้าย ขยายรหัสของคุณเพื่อส่งข้อความที่สร้างขึ้นใหม่ทางวิทยุ:
radio.send (ข้อความ)
นอนหลับ(10)
การสลีปทำให้การส่งข้อความช้าลง ดังนั้นไมโครบิตที่ได้รับจะไม่ได้รับข้อมูลมากเกินไป!
แฟลชโค้ดนี้ไปที่ไมโครคอนโทรลเลอร์ของคุณ: บิตและแก้ไขข้อผิดพลาดก่อนที่จะไปยังขั้นตอนถัดไป
ขั้นตอนที่ 7: การรับข้อความบน Robot ของคุณ
กลับไปที่โค้ดหุ่นยนต์ของคุณตั้งแต่เริ่มต้น - อย่าลืมถอดปลั๊กคอนโทรลเลอร์ micro:bit ออก คุณจะได้ไม่เผลอแฟลชโค้ดหุ่นยนต์ไปโดยไม่ได้ตั้งใจ
เลื่อนลงไปที่ลูปหลักของคุณ - ลบโค้ดทดสอบและเพิ่มสิ่งนี้แทน:
ในขณะที่จริง:
ข้อความ = radio.receive() พิมพ์ (ข้อความ) นอนหลับ (100)
สิ่งนี้ตั้งค่าตัวแปรให้เท่ากับข้อความขาเข้า และพิมพ์ข้อความไปยัง REPL - เพื่อตรวจสอบว่าข้อความถูกส่งผ่านตามที่คาดไว้
แฟลชรหัสใหม่ของคุณ เชื่อมต่อกับ REPL จากนั้นกดจอยสติ๊ก
คุณควรได้รับสิ่งนี้:
เคล็ดลับการแก้ปัญหา
หากคุณได้รับข้อความแสดงข้อผิดพลาดบนไมโครคอนโทรลเลอร์ของคุณ: บิต… ดีบักโค้ดคอนโทรลเลอร์ของคุณ
หากคุณได้รับข้อความแสดงข้อผิดพลาดบนหุ่นยนต์ micro:bit… ข้อความวิทยุของคุณถูกส่งเรียบร้อยแล้ว! แต่หุ่นยนต์ไม่สามารถเข้าใจมันได้ ดังนั้นโปรดตรวจสอบว่าข้อความที่คุณส่งและข้อความที่คุณบอกให้หุ่นยนต์ฟังการจับคู่
ถ้าไม่มีอะไรเกิดขึ้นเลย
- ตรวจสอบให้แน่ใจว่าคุณได้แฟลชโค้ดที่ถูกต้องในแต่ละ micro:bit - ง่ายต่อการแฟลชผิดอันโดยไม่ได้ตั้งใจ!
- ตรวจสอบให้แน่ใจว่าหมายเลขช่องและกลุ่มของคุณตรงกันในแต่ละ micro:bit
ขั้นตอนที่ 8: การใช้ข้อความขาเข้าเพื่อควบคุมมอเตอร์ของหุ่นยนต์
ขณะนี้คุณได้รับหมายเลขสองหมายเลขที่ส่งทางวิทยุเป็นสตริง
คุณต้องแยกข้อความนี้เป็นสองสตริง จากนั้นแปลงสตริงกลับเป็นตัวเลขอีกครั้ง และส่งผ่านไปยังฟังก์ชันของไดรฟ์ หลายอย่างเกิดขึ้นพร้อมกัน!
ก่อนดำเนินการนี้ คุณต้องตรวจสอบว่าข้อความที่คุณได้รับอยู่ในรูปแบบที่ถูกต้องหรือไม่
หากไม่มีการส่งข้อความ คุณจะได้รับ 'ไม่มี' แทน หากคุณลองแยกสิ่งนี้ คุณจะได้รับข้อความแสดงข้อผิดพลาด
ในขณะที่จริง:
message = radio.receive() ถ้าข้อความไม่ใช่ None: message = message.split() drive(int(message[0]), int(message[1]))
เกิดอะไรขึ้นที่นี่?
- รหัสใหม่จะทำงานหากข้อความเป็นอย่างอื่นที่ไม่ใช่ "ไม่มี"
- message.split() ตรวจสอบช่องว่างในข้อความ (ซึ่งเราเพิ่มในขั้นตอนที่แล้ว) และใช้สิ่งนี้เพื่อแยกข้อความออกเป็นสองส่วน
- int(message[0]), int(message[1]) ทำสิ่งที่ตรงกันข้ามกับสิ่งที่เราทำในขั้นตอนก่อนหน้านี้ - รับข้อมูลแต่ละส่วนแยกกันและแปลงเป็นจำนวนเต็ม (จำนวนเต็ม)
- int(message[0]) ถูกใช้เป็นค่าสำหรับมอเตอร์ด้านซ้ายในฟังก์ชันการขับเคลื่อน และใช้ int(message[1]) เป็นค่าสำหรับมอเตอร์ด้านขวา
ตรวจสอบว่าใช้งานได้ - มอเตอร์หมุนเมื่อคุณกดจอยสติ๊กหรือไม่
ถ้าไม่ - ถึงเวลาแก้จุดบกพร่อง!
ถ้าใช่ สุดยอด! คุณมีหุ่นยนต์ควบคุมระยะไกลที่ใช้งานได้!
ใช้เวลาฝึกฝนกับหุ่นยนต์ของคุณก่อนที่จะไปยังขั้นตอนต่อไป มันขับเคลื่อนอย่างที่คุณคาดหวังหรือไม่?
ขั้นตอนต่อไปจะแสดงให้คุณเห็นถึงวิธีการใช้ปุ่มต่างๆ บนจอยสติ๊กเพื่อเพิ่มฟังก์ชันพิเศษให้กับหุ่นยนต์ของคุณ
หากคุณต้องการดูเวอร์ชันของรหัสนี้จนถึงตอนนี้:
- หุ่นยนต์:
- ตัวควบคุม:
ขั้นตอนที่ 9: การใช้ปุ่ม -- การรับข้อความเพิ่มเติม
ในขณะนี้ รหัสของคุณจะพยายามแยกข้อความที่ไม่ใช่ไม่มี ซึ่งหมายความว่าหากได้รับ เช่น 'สวัสดี' คุณจะได้รับข้อความแสดงข้อผิดพลาด
เพื่อให้ micro:bit ของคุณตีความข้อความอื่นๆ ได้ จะต้องตรวจสอบแต่ละข้อความที่คาดไว้ก่อน จากนั้นจึงแยกข้อความเฉพาะในกรณีที่ไม่ได้รับคำสั่งให้ทำอย่างอื่นกับข้อความนั้น
ขยายรหัสของคุณดังนี้:
ถ้าข้อความไม่ใช่ไม่มี:
if message == 'hello': display.show(Image. HAPPY) elif message == 'duck': display.show(Image. DUCK) else: message = message.split() ไดรฟ์ (int(message[0])), int(ข้อความ[1]))
ก่อนอื่นจะตรวจสอบว่าได้รับข้อความ 'สวัสดี' หรือไม่ หากมี จะแสดงรูปภาพที่มีความสุข จากนั้นกลับไปที่ด้านบนสุดของลูปแล้วตรวจสอบข้อความถัดไป
หากข้อความไม่ใช่สวัสดี ระบบจะตรวจสอบว่าข้อความเป็น "เป็ด" หรือไม่
หากข้อความไม่ใช่ 'สวัสดี' หรือ 'เป็ด' ข้อความนั้นจะทำสิ่งสุดท้ายในรายการ ซึ่งจะแยกข้อความและเปิดมอเตอร์ จะไม่พยายามแยกข้อความหากได้รับ "สวัสดี" หรือ "เป็ด" ซึ่งหมายความว่าคุณจะไม่ได้รับข้อความแสดงข้อผิดพลาดจากข้อความทั้งสองนี้
เครื่องหมายเท่ากับคู่มีความสำคัญ - มันหมายถึง 'เท่ากับ' เมื่อเทียบกับเครื่องหมายเท่ากับเดียวซึ่งกำลังตั้งค่าบางอย่าง (ข้อความ = 'สวัสดี' หมายความว่าเรากำลังตั้งค่าตัวแปรเป็น 'สวัสดี' ข้อความ == 'สวัสดี' หมายความว่าเรากำลังถามว่าข้อความเท่ากับ 'สวัสดี' หรือไม่)
ลองใช้เพียงสองตัวเลือกในตอนนี้ เพื่อทดสอบ - คุณสามารถเพิ่มข้อความอื่นๆ ได้มากเท่าที่ต้องการในภายหลัง
ลิงก์ไปยังรหัสการทำงาน:
ขั้นตอนที่ 10: การส่งข้อความเพิ่มเติมโดยใช้ปุ่มของคอนโทรลเลอร์
ถอดปลั๊ก micro:bit ของหุ่นยนต์แล้วเสียบ micro:bit ของจอยสติ๊กแทน
กลับไปที่โค้ดคอนโทรลเลอร์ของคุณเพื่อแก้ไข
เช่นเดียวกับรหัสหุ่นยนต์ เราต้องการให้ผู้ควบคุมตรวจสอบว่าคุณกำลังพยายามส่งข้อความอื่นๆ หรือไม่ ก่อนที่จะส่งค่าจอยสติ๊ก
ที่ด้านบนของลูป เรายังต้องการให้ตรวจสอบค่าปัจจุบันของจอยสติ๊ก แต่เราต้องการให้ตรวจสอบด้วยว่ามีการกดปุ่มอยู่หรือไม่:
ในขณะที่จริง:
จอยสติ๊ก = joystick_push () ปุ่ม = button_press ()
button_press() ส่งคืนค่า A, B, C, D, E หรือ F ขึ้นอยู่กับว่ากำลังกดปุ่มใดอยู่ (ถ้าไม่มีการกดปุ่มใด ๆ มันจะคืนค่า None)
ตอนนี้เราสามารถสร้างคำสั่ง if-elif-else ได้ เช่นเดียวกับที่เราทำกับโค้ดหุ่นยนต์ โดยใช้สองปุ่ม และส่งค่าจอยสติ๊กหากไม่มีการกดปุ่มใดๆ
ถ้าปุ่ม == 'A':
radio.send('hello') sleep(500) ปุ่ม elif == 'B': radio.send('duck') sleep(500) อื่น: message = str(joystick[0]) + " " + str(joystick [1]) radio.send(ข้อความ) นอนหลับ(10)
เมื่อกดปุ่ม ให้ส่งข้อความที่คุณบอกให้หุ่นยนต์ระวังในขั้นตอนก่อนหน้า
ข้อความจะถูกส่งทุกครั้งที่กดปุ่ม และคอมพิวเตอร์จะเร็วกว่าคนมาก! ดังนั้นมันอาจส่งข้อความหลายครั้งก่อนที่คุณจะเอานิ้วออกจากปุ่ม
การสลีปหลังจากส่งข้อความช้าลงเพื่อไม่ให้ตรวจสอบปุ่มอีกครั้งอย่างรวดเร็ว - ลองใช้ตัวเลขสองสามตัวในนี้เพื่อรับระยะเวลาที่เหมาะสมที่สุดสำหรับคุณ - ช้าเกินไปและจะไม่ตอบสนองเช่นกัน อย่างรวดเร็วและหุ่นยนต์ของคุณจะได้รับข้อความปุ่มมากมายจนอาจหยุดตอบสนองต่อจอยสติ๊ก!
มันทำงาน?
หากคุณได้รับข้อความแสดงข้อผิดพลาด ให้คิดให้รอบคอบเกี่ยวกับสิ่งที่คุณเพิ่งเปลี่ยนแปลง และสิ่งที่เกิดขึ้น
หากคุณได้รับข้อผิดพลาดเกี่ยวกับหุ่นยนต์เมื่อคุณกดปุ่มบนตัวควบคุมของคุณ - คุณรู้ว่าข้อความกำลังข้ามผ่าน แต่ทำให้หุ่นยนต์สับสน ตรวจสอบว่าข้อความที่คุณส่งและข้อความที่คุณบอกให้หุ่นยนต์ค้นหาเหมือนกัน
ลิงก์ไปยังรหัสการทำงาน:
ขั้นตอนที่ 11: ขั้นตอนต่อไป
ตอนนี้คุณมีความรู้ที่จำเป็นในการทำงานกับมอเตอร์ของหุ่นยนต์ และด้วยตัวควบคุมจอยสติ๊ก:บิต
ใช้ความรู้นี้เพื่อปรับปรุงทั้งสองโปรแกรมและทำให้เป็นของคุณเอง แนวคิดบางอย่างด้านล่าง!
คุณมีหกปุ่มบนคอนโทรลเลอร์ของคุณ! คุณต้องการให้พวกเขาทำอะไร?
- แล้วการเขียนโปรแกรมรูทีนการเต้นให้หุ่นยนต์ของคุณทำตามคำสั่งล่ะ เขียนอัลกอริทึมของคำสั่ง drive() คั่นด้วยคำสั่ง sleep()!
- คุณต้องการเปลี่ยนทิศทางที่หุ่นยนต์เคลื่อนที่เข้าไปเพื่อให้สามารถขับกลับหัวได้ง่ายหรือไม่? คิดถึงค่า x และ y ของจอยสติกของคุณ สิ่งเหล่านี้แสดงถึงอะไรและคุณจะจัดการกับพวกเขาอย่างไร?
- หุ่นยนต์ของคุณมีคุณสมบัติพิเศษ (หรือคุณสามารถเพิ่มได้) เช่น LED, ลำโพง หรือเซ็นเซอร์หรือไม่?
แนวคิดในการปรับปรุงโค้ด
- คุณช่วยหุ่นยนต์ของคุณจัดการกับข้อความที่ไม่รู้จักโดยใช้รหัสลอง/ยกเว้นได้หรือไม่?
- คณิตศาสตร์ที่ใช้ในการคำนวณค่าซ้ายและขวาจากจอยสติ๊กไม่ได้ให้ค่าที่ครบถ้วนแก่เรา (ไดรฟ์ของหุ่นยนต์สามารถรับตัวเลขได้มากถึง 1023) คุณแก้ไขโค้ดนี้เพื่อให้ได้ช่วงที่ดีขึ้นได้ไหม
- มีวิธีอื่นในการผสมค่าจอยสติ๊ก - คุณมีวิธีที่ดีกว่านี้ไหม
แนะนำ:
การเขียนโปรแกรม ATmega328 ด้วย Arduino IDE โดยใช้คริสตัล 8MHz: 4 ขั้นตอน
การเขียนโปรแกรม ATmega328 ด้วย Arduino IDE โดยใช้ 8MHz Crystal: ใน Instuctable นี้ ฉันจะอธิบายคำแนะนำทีละขั้นตอนของการเขียนโปรแกรม ATmega328P IC (ไมโครคอนโทรลเลอร์ตัวเดียวกันกับ Arudino UNO) โดยใช้ Arduino IDE และ Arduino UNO เป็นโปรแกรมเมอร์เพื่อสร้างตัวคุณเอง Arduino แบบกำหนดเองเพื่อสร้างโครงการของคุณ
วิธีเรียกใช้เซอร์โวมอเตอร์โดยใช้ Moto:bit ด้วย Micro:bit: 7 ขั้นตอน (พร้อมรูปภาพ)
วิธีเรียกใช้เซอร์โวมอเตอร์โดยใช้ Moto:bit ด้วย Micro:bit: วิธีหนึ่งในการขยายฟังก์ชันการทำงานของ micro:bit คือการใช้บอร์ดชื่อ moto:bit โดย SparkFun Electronics (ประมาณ 15-20 เหรียญสหรัฐ) มันดูซับซ้อนและมีคุณสมบัติมากมาย แต่ก็ไม่ยากที่จะเรียกใช้เซอร์โวมอเตอร์จากมัน Moto:bit ช่วยให้คุณ
การเขียนโปรแกรม Arduino ด้วย Sphero RVR: 4 ขั้นตอน
การเขียนโปรแกรม Arduino ด้วย Sphero RVR: ปีที่แล้วในเดือนตุลาคม Sphero RVR ออกมา นี่เป็นหุ่นยนต์ที่ไม่เหมือนใคร ก่อนอื่น คุณสามารถตั้งโปรแกรมด้วย Micro: bit, Raspberry PI และ Arduino คุณยังสามารถทำให้มันทำหน้าที่ต่างๆ ได้หลายอย่าง ไฟ LED เปลี่ยนสีได้
การเขียนโปรแกรม Arduino ด้วย Python: 8 ขั้นตอน
การเขียนโปรแกรม Arduino ด้วย Python: ในบทความนี้ เราจะมาควบคุม Arduino ด้วย GUI python การทำงานกับ python นั้นง่ายมาก ฉันจะแบ่งปันรายละเอียดทุกขั้นตอนตั้งแต่เริ่มต้น
การเขียนโปรแกรม ESP/NODEMCU ด้วย ARDUINO IDE: 3 ขั้นตอน
การเขียนโปรแกรม ESP/NODEMCU ด้วย ARDUINO IDE: สวัสดีทุกคน วันนี้ผมจะมาแสดงวิธีเพิ่มแพ็คเกจการสนับสนุน ESP8266 ให้กับ Arduino IDE และโปรแกรมเดียวกันโดยใช้ Ardunio IDE