สารบัญ:
- ขั้นตอนที่ 1: ส่วนประกอบที่จำเป็น
- ขั้นตอนที่ 2: ตั้งค่า Tracks
- ขั้นตอนที่ 3: การตั้งค่าสภาพแวดล้อม
- ขั้นตอนที่ 4: การเขียนโปรแกรม GiggleBot
- ขั้นตอนที่ 5: ปล่อยให้มันทำงาน
วีดีโอ: GiggleBot Line Follower โดยใช้ Python: 5 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
คราวนี้ เรากำลังตั้งโปรแกรมใน MicroPython Dexter Industries GiggleBot เพื่อติดตามเส้นสีดำโดยใช้เซ็นเซอร์ติดตามบรรทัดในตัว
GiggleBot ต้องจับคู่กับ BBC micro:bit เพื่อให้ควบคุมได้อย่างเหมาะสม
หากบทช่วยสอนนี้สูงเกินไปสำหรับคุณและการเขียนโปรแกรม GiggleBot มากเกินไปสำหรับตอนนี้ คุณสามารถอ่านบทแนะนำสำหรับผู้เริ่มต้นซึ่งจะแสดงให้คุณเห็นว่าสามารถตั้งโปรแกรมหุ่นยนต์ใน MakeCode ได้อย่างไร ที่นี่ บทช่วยสอนที่เชื่อมโยงจะแนะนำคุณเกี่ยวกับพื้นฐานเบื้องต้น
ขั้นตอนที่ 1: ส่วนประกอบที่จำเป็น
ต้องใช้ส่วนประกอบฮาร์ดแวร์ต่อไปนี้:
- แบตเตอรี่ AA x3 - ในกรณีของฉัน ฉันใช้แบตเตอรี่แบบชาร์จไฟได้ซึ่งมีแรงดันไฟฟ้าโดยรวมต่ำกว่า
- หุ่นยนต์ Dexter Industries GiggleBot สำหรับ micro:bit
- BBC micro:bit.
แน่นอน คุณต้องใช้สายไมโคร USB เพื่อตั้งโปรแกรม BBC micro:bit - โดยทั่วไปแล้วสายนี้จะอยู่ในแพ็คเกจของ BBC micro:bit หรือคุณสามารถใช้สายชาร์จสำหรับสมาร์ทโฟน (Android) ได้ตลอดเวลา
รับ GiggleBot สำหรับ micro:bit ที่นี่
ขั้นตอนที่ 2: ตั้งค่า Tracks
คุณจะต้องพิมพ์ไทล์และออกแบบแทร็กของคุณเอง คุณสามารถใช้ไทล์ของเราเองได้ เพื่อให้คุณแน่ใจ 100% ว่าคุณกำลังจำลองเงื่อนไขของเรา หรือถ้าคุณรู้สึกอยากผจญภัย คุณสามารถใช้เทปสีดำแล้วทำขึ้นมาเองได้ นี่คือ PDF สำหรับไทล์ที่เราใช้
แทร็กด้านบนประกอบด้วยไทล์ต่างๆ ดังต่อไปนี้:
- 12 กระเบื้องประเภท #1
- 5 กระเบื้องประเภท #2
- 3 เทมเพลตของประเภทไทล์ #5
- เทมเพลต 3 แบบของประเภทไทล์ #6 - ที่นี่ คุณจะมีไทล์พิเศษอีกหนึ่งไทล์
ถัดไป พิมพ์และตัดออก ลองวางพวกมันเหมือนในภาพด้านบน และจำไว้ว่าที่ด้านขวาบนของแทร็ก ไทล์ 2 แผ่นต้องซ้อนทับกัน - นี่ควรเผื่อไว้ในกรณีที่คุณสงสัยว่าคุณทำอะไรผิดหรือเปล่า
ขั้นตอนที่ 3: การตั้งค่าสภาพแวดล้อม
เพื่อให้คุณสามารถตั้งโปรแกรม BBC micro:bit ใน MicroPython ได้ คุณต้องตั้งค่าตัวแก้ไขสำหรับมัน (ตัวแก้ไข Mu) และตั้งค่า GiggleBot MicroPython Runtime เป็นรันไทม์ เพื่อที่ คุณต้องทำตามคำแนะนำในหน้านี้ ณ ขณะนี้ เวอร์ชัน v0.4.0 ของรันไทม์ถูกใช้
ขั้นตอนที่ 4: การเขียนโปรแกรม GiggleBot
ก่อนที่จะลงมือ รันไทม์ GiggleBot MicroPython มีรันไทม์แบบคลาสสิกสำหรับ BBC micro:bit และไลบรารีอื่นๆ เพื่อรองรับ GiggleBot และเซนเซอร์ Dexter Industries อื่นๆ
หลังจากตั้งค่าแล้ว ให้เปิดสคริปต์ต่อไปนี้ในตัวแก้ไข Mu และคลิกที่ Flash การดำเนินการนี้จะแฟลช GiggleBot MicroPython Runtime และสคริปต์ที่คุณเพิ่งเปิดไปยัง BBC micro:bit ของคุณ สคริปต์ยังแสดงอยู่ด้านล่าง
เมื่อกระบวนการแฟลชเสร็จสิ้น ให้ซ้อน BBC micro:bit ลงใน GiggleBot โดยให้นีโอพิกเซลของบอร์ดหันไปข้างหน้า วางบนรางแล้วเปิดสวิตช์
โปรดสังเกตว่าในสคริปต์ PID และค่าคงที่อื่นๆ 2 ค่า (ค่ากำหนดความเร็วและค่าคงที่ความเร็วต่ำสุด) ถูกตั้งค่าไว้แล้ว
หมายเหตุ: สคริปต์ต่อไปนี้อาจมีช่องว่างหายไป และดูเหมือนว่าจะเกิดจากปัญหาบางอย่างในการแสดง GitHub Gists คลิกที่ส่วนสำคัญเพื่อนำคุณไปยังหน้า GitHub ซึ่งคุณสามารถคัดลอกและวางโค้ดได้
GiggleBot PID Line Follower - ปรับแต่งด้วย NeoPixels
จากการนำเข้าไมโครบิต* |
จากการนำเข้า gigglebot* |
จาก utime นำเข้า sleep_ms, ticks_us |
นำเข้า ustruct |
# เริ่มต้น GB neopixels |
นีโอ = init() |
#จับเวลา |
update_rate =50 |
# กำไร/ค่าคงที่ (สมมติว่าแรงดันแบตเตอรี่อยู่ที่ประมาณ 4.0 โวลต์) |
Kp =25.0 |
กี่ = 0.5 |
Kd =35.0 |
trigger_point =0.3 |
min_speed_percent =0.3 |
base_speed =70 |
ค่าที่ตั้งไว้ =0.5 |
last_position = เซ็ตพอยต์ |
อินทิกรัล =0.0 |
run_neopixels =True |
center_pixel =5# โดยที่พิกเซลตรงกลางของรอยยิ้มจะอยู่บน GB |
# เทอร์ควอยซ์ = ทูเพิล(แผนที่(แลมบ์ดา x: int(x / 5), (64, 224, 208))) # สีที่จะใช้วาดข้อผิดพลาดด้วยนีโอพิกเซล |
# เทอร์ควอยซ์ = (12, 44, 41) # ซึ่งเป็นสีเทอร์ควอยซ์ด้านบนที่แสดงความคิดเห็นไว้ข้างต้น |
error_width_per_pixel =0.5/3# ข้อผิดพลาดสูงสุดหารด้วยจำนวนเซ็กเมนต์ระหว่างแต่ละ neopixel |
defupper_bound_linear_speed_reducer (abs_error, trigger_point, upper_bound, smallest_motor_power, maximum_motor_power): |
ฐานโลก_ความเร็ว |
ถ้า abs_error >= trigger_point: |
# x0 = 0.0 |
# y0 = 0.0 |
# x1 = ขอบเขตบน - trigger_point |
# y1 = 1.0 |
# x = abs_error - trigger_point |
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0) |
# เหมือนกับ |
y = (abs_error - trigger_point) / (บน_bound - trigger_point) |
motor_power = base_speed * (smallest_motor_power + (1- y) * (สูงสุด_motor_power - เล็กที่สุด_motor_power)) |
ส่งคืน motor_power |
อื่น: |
คืนค่า base_speed * maximum_motor_power |
วิ่ง = เท็จ |
Previous_error =0 |
ในขณะที่จริง: |
# หากกดปุ่ม a ให้เริ่มติดตาม |
ถ้า button_a.is_pressed(): |
วิ่ง = จริง |
#แต่ถ้ากดปุ่ม b ให้หยุดผู้ติดตามไลน์ |
ถ้า button_b.is_pressed(): |
วิ่ง = เท็จ |
อินทิกรัล =0.0 |
Previous_error =0.0 |
พิกเซล_off() |
หยุด() |
sleep_ms(500) |
ถ้ารัน isTrue: |
#อ่านเส้นเซ็นเซอร์ |
start_time = ticks_us() |
ขวา, ซ้าย = read_sensor(LINE_SENSOR, ทั้งสอง) |
# เส้นอยู่ด้านซ้ายเมื่อตำแหน่ง < 0.5 |
# เส้นอยู่ทางขวาเมื่อตำแหน่ง > 0.5 |
# เส้นอยู่ตรงกลางเมื่อตำแหน่ง = 0.5 |
#มันคือค่าเฉลี่ยเลขคณิตถ่วงน้ำหนัก |
ลอง: |
ตำแหน่ง = ขวา /float(ซ้าย + ขวา) |
ยกเว้นข้อผิดพลาด ZeroDivision: |
ตำแหน่ง =0.5 |
# ช่วงต้องเป็น (0, 1) และไม่ใช่ [0, 1] |
ถ้าตำแหน่ง ==0: ตำแหน่ง =0.001 |
ถ้าตำแหน่ง ==1: ตำแหน่ง =0.999 |
# ใช้ตัวควบคุม PD |
ข้อผิดพลาด = ตำแหน่ง - จุดตั้งค่า |
อินทิกรัล += ข้อผิดพลาด |
การแก้ไข = Kp * ข้อผิดพลาด + Ki * อินทิกรัล + Kd * (ข้อผิดพลาด - Previous_error) |
Previous_error = ข้อผิดพลาด |
#คำนวณความเร็วมอเตอร์ |
motor_speed = upper_bound_linear_speed_reducer (abs (ข้อผิดพลาด), setpoint * trigger_point, setpoint, min_speed_percent, 1.0) |
leftMotorSpeed = motor_speed + การแก้ไข |
rightMotorSpeed = motor_speed - การแก้ไข |
# ทำให้ neopixels สว่างขึ้นตามข้อผิดพลาดที่กำหนด |
ถ้า run_neopixels isTrue และ total_counts %3==0: |
สำหรับผม'\x00\x01\x02\x03\x04\x05\x06\x07\x08': |
นีโอ = (0, 0, 0) |
สำหรับฉันใน'\x00\x01\x02\x03': |
ifabs(ข้อผิดพลาด) > error_width_per_pixel * i: |
ถ้าเกิดข้อผิดพลาด <0: |
# neo[center_pixel + i] = เทอร์ควอยซ์ |
นีโอ[center_pixel + i] = (12, 44, 41) |
อื่น: |
# neo[center_pixel - i] = เทอร์ควอยซ์ |
นีโอ[center_pixel + i] = (12, 44, 41) |
อื่น: |
เปอร์เซ็นต์ =1- (error_width_per_pixel * i -abs(error)) / error_width_per_pixel |
# สว่างขึ้นพิกเซลปัจจุบัน |
ถ้าเกิดข้อผิดพลาด <0: |
# neo [center_pixel + i] = tuple (แผนที่ (แลมบ์ดา x: int (x * เปอร์เซ็นต์), เทอร์ควอยซ์)) |
neo[center_pixel + i] = (int(64* เปอร์เซ็นต์ /5), int(224* เปอร์เซ็นต์ /5), int(208* เปอร์เซ็นต์ /5)) |
อื่น: |
# neo [center_pixel - i] = tuple (แผนที่ (แลมบ์ดา x: int (x * เปอร์เซ็นต์), เทอร์ควอยซ์)) |
neo[center_pixel - i] = (int(64* เปอร์เซ็นต์ /5), int(224* เปอร์เซ็นต์ /5), int(208* เปอร์เซ็นต์ /5)) |
หยุดพัก |
neo.show() |
ลอง: |
#หนีบความเร็วมอเตอร์ |
ถ้าเหลือความเร็วมอเตอร์ >100: |
leftMotorSpeed =100 |
rightMotorSpeed = rightMotorSpeed - ซ้ายMotorSpeed +100 |
ถ้าใช่ความเร็วมอเตอร์ >100: |
rightMotorSpeed = 100 |
leftMotorSpeed = leftMotorSpeed - rightMotorSpeed +100 |
ถ้า leftMotorSpeed <-100: |
leftMotorSpeed = -100 |
ถ้า rightMotorSpeed <-100: |
rightMotorSpeed = -100 |
#สั่งงานมอเตอร์ |
set_speed(leftMotorSpeed, rightMotorSpeed) |
ขับ() |
# พิมพ์ ((ข้อผิดพลาด, motor_speed)) |
ยกเว้น: |
#ในกรณีที่เราประสบปัญหาบางอย่างที่แก้ไขไม่ได้ |
ผ่าน |
# และรักษาความถี่ลูป |
end_time = ticks_us() |
delay_diff = (end_time - start_time) /1000 |
if1000.0/ update_rate - delay_diff >0: |
สลีป (1000.0/ update_rate - ล่าช้า_diff) |
ดู rawgigglebot_tuned_line_follower.py โฮสต์ด้วย ❤ โดย GitHub
ขั้นตอนที่ 5: ปล่อยให้มันทำงาน
มี 2 ปุ่มบน BBC micro:bit: ปุ่ม A และปุ่ม B:
- การกดปุ่ม A จะทำให้ GiggleBot ทำตามบรรทัด (ถ้ามี)
- การกดปุ่ม B จะหยุด GiggleBot และรีเซ็ตทุกอย่างเพื่อให้คุณใช้งานได้อีกครั้ง
ขอแนะนำเป็นอย่างยิ่งว่าอย่ายก GiggleBot ขณะที่กำลังเดินตามเส้น แล้วใส่กลับเข้าไปใหม่ เนื่องจากข้อผิดพลาดในการคำนวณอาจสะสมและทำให้เส้นทางของหุ่นยนต์ยุ่งเหยิงโดยสิ้นเชิง หากต้องการยกขึ้น ให้กดปุ่ม B จากนั้นใส่กลับเข้าไปใหม่ ให้กด A อีกครั้ง
แนะนำ:
หุ่นยนต์ Line Follower โดยใช้ Arduino Uno และ L298N: 5 ขั้นตอน
หุ่นยนต์ Line Follower โดยใช้ Arduino Uno และ L298N: Line Flower เป็นหุ่นยนต์ที่ง่ายมากเหมาะสำหรับอุปกรณ์อิเล็กทรอนิกส์สำหรับผู้เริ่มต้น
Neopixel Ws2812 Rainbow LED เรืองแสงพร้อม M5stick-C - เรียกใช้ Rainbow บน Neopixel Ws2812 โดยใช้ M5stack M5stick C โดยใช้ Arduino IDE: 5 ขั้นตอน
Neopixel Ws2812 Rainbow LED เรืองแสงพร้อม M5stick-C | เรียกใช้ Rainbow บน Neopixel Ws2812 โดยใช้ M5stack M5stick C การใช้ Arduino IDE: สวัสดีทุกคนในคำแนะนำนี้ เราจะเรียนรู้วิธีใช้ neopixel ws2812 LED หรือแถบนำหรือเมทริกซ์นำหรือวงแหวน LED พร้อมบอร์ดพัฒนา m5stack m5stick-C พร้อม Arduino IDE และเราจะทำ ลายรุ้งกับมัน
การควบคุมวิทยุ RF 433MHZ โดยใช้ HT12D HT12E - การสร้างรีโมทคอนโทรล Rf โดยใช้ HT12E & HT12D ด้วย 433mhz: 5 ขั้นตอน
การควบคุมวิทยุ RF 433MHZ โดยใช้ HT12D HT12E | การสร้างการควบคุมระยะไกล Rf โดยใช้ HT12E & HT12D ด้วย 433mhz: ในคำแนะนำนี้ฉันจะแสดงวิธีสร้างรีโมทคอนโทรล RADIO โดยใช้โมดูลตัวรับส่งสัญญาณ 433mhz พร้อมการเข้ารหัส HT12E & IC ถอดรหัส HT12D ในคำแนะนำนี้ คุณจะสามารถส่งและรับข้อมูลโดยใช้ส่วนประกอบราคาถูกมาก เช่น HT
การปรับแต่ง GiggleBot Line Follower - ขั้นสูง: 7 ขั้นตอน
การปรับแต่ง GiggleBot Line Follower - ขั้นสูง: ใน Instructables สั้น ๆ นี้ คุณจะต้องปรับแต่ง GiggleBot ของคุณเองเพื่อให้เป็นไปตามเส้นสีดำ ในบทช่วยสอนอื่น ๆ ของ GiggleBot Line Follower เราฮาร์ดโค้ดค่าการปรับแต่งให้ทำงานตามสถานการณ์นั้น คุณอาจต้องการทำให้มันเป็น
วิธีสร้าง Line Follower โดยใช้ Arduino: 8 ขั้นตอน (พร้อมรูปภาพ)
วิธีสร้าง Line Follower โดยใช้ Arduino: หากคุณกำลังเริ่มต้นกับวิทยาการหุ่นยนต์ หนึ่งในโครงการแรกที่ผู้เริ่มต้นสร้างจะมีผู้ติดตามไลน์ด้วย เป็นรถของเล่นพิเศษที่มีคุณสมบัติวิ่งตามเส้นซึ่งปกติจะมีสีดำตัดกับพื้นหลัง มาทำดาวกัน