ใช้งาน micro:GamePad  ควบคุม Pretty Car ในชุด Building:bit Super kit

ใช้งาน micro:GamePad ควบคุม Pretty Car ในชุด Building:bit Super kit

micro:GamePad
micro:GamePad คือบอร์ดขยายที่เปลี่ยน micro:bit ให้เป็นจอยเกมคอนโซลเต็มรูปแบบ มาพร้อมก้านโยกอนาล็อก 3 แกนความแม่นยำสูง ที่ช่วยให้คุณควบคุมทิศทางและความเร็วของหุ่นยนต์ได้อย่างลื่นไหลและละเอียดแม่นยำ บนบอร์ดมีปุ่มกดที่ตั้งโปรแกรมได้อิสระถึง 7 ปุ่ม พร้อมมอเตอร์สั่นและลำโพง เพื่อสร้างประสบการณ์การใช้งานที่สมจริง โดยรวมกล่องแบตเตอรี่ไว้บนแผงวงจรโดยตรง ทำให้สะดวกต่อการถือใช้งาน

มีคุณสมบัติดังนี้

  • แหล่งพลังงาน: 3V DC (ใช้ถ่านขนาด AAA จำนวน 2 ก้อน)
  • จอยสติ๊ก (Joystick):
    • แบบอนาล็อก 2 แกน (แกน X: พิน P1, แกน Y: พิน P2)
    • แบบดิจิทัล 1 แกน (แกน Z/การกดปุ่มจอยสติ๊ก: พิน P8)
  • ไฟ LED และมอเตอร์สั่นในตัว: เชื่อมต่อผ่านพิน P12
  • ปุ่มกด (Keys):
    • ปุ่ม A (A), ปุ่ม B (B)
    • ปุ่ม C (พิน P13), ปุ่ม D (พิน P14), ปุ่ม E (พิน P15), ปุ่ม F (พิน P16)
    • ปุ่ม Z (พิน P8 – กดที่ตัวจอยสติ๊ก)
  • ขนาด: 5.83 x 2.24 นิ้ว (หรือ 148 x 57 มิลลิเมตร)

รูปที่ 1 แสดงรายละเอียดของ micro:GamePad

หลักการทำงานของระบบควบคุม

  • การควบคุมแบบอนาล็อก (Analog Control): ก้านโยกส่งค่าสัญญาณ 0-1023 ผ่านขา P1 (แกน X) และ P2 (แกน Y) ช่วยให้ควบคุมทิศทางและความเร็วได้ละเอียดตามน้ำหนักการโยก
  • การควบคุมแบบดิจิทัล (Digital Control): ประกอบด้วยปุ่มกด 7 ปุ่ม (รวมปุ่มกดใต้ก้านโยกขา P8) ทำงานแบบ Active Low (กดเป็น 0, ปล่อยเป็น 1) โดยปุ่ม X และ Y จะตรงกับปุ่ม A และ B ของ micro:bit
  • ระบบตอบสนอง: มีมอเตอร์สั่นในตัวที่ขา P12 สำหรับสร้างการสั่นสะเทือน และลำโพง (Buzzer) ที่ขา P0 สำหรับส่งเสียงประกอบ
  • การจัดการพลังงาน: ใช้พลังงานจากถ่าน AAA 2 ก้อน (3V) โดยมีสวิตช์เปิด-ปิดและไฟ LED แสดงสถานะบนบอร์ดโดยตรง

การสื่อสารไร้สายด้วย Radio

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

ชุดคำสั่งในหัวข้อ Radio

รูปที่ 2 แสดงชุดคำสั่งของ Radio

ตัวอย่างที่ 1 ใช้งานปุ่มกด C, D, E, F ควบคุมการเคลื่อนที่ของ Pretty Car ด้วยคำสั่งมอเตอร์โดยตรง

ในตัวอย่างแรกนี้ จะเน้นที่ความเข้าใจพื้นฐานของการส่งและรับสัญญาณวิทยุ โดยเมื่อเรากดปุ่ม(C,D,E,F) ที่รีโมทคอนโทรล micro:GamePad ฝั่งรีโมทจะส่งข้อความ (String) ไปยังหุ่นยนต์ Pretty Car เมื่อหุ่นยนต์ได้รับข้อความนั้น จะสั่งงานมอเตอร์ให้หมุนหรือหยุดทันทีตามเงื่อนไขที่กำหนดไว้

ภาคส่ง micro:GamePad

รูปที่ 3 ใช้งานปุ่ม C, D, E และ F ของ micro:GamePad

ขั้นตอนการใช้งาน
  • เปิดเบราว์เซอร์และไปที่ https://makecode.microbit.org/  เพื่อเริ่มเขียนโค้ด
  • เตรียม micro:GamePad ให้พร้อมใช้งาน บรรจุถ่านขนาด AAA จำนวน 2 ก้อน
  • เชื่อมต่อ micro:bit สำหรับใช้งานกับ micro:GamePad เข้ากับคอมพิวเตอร์ด้วยสาย microUSB เพื่ออัปโหลดโค้ดในรูปที่ 4
  • เมื่ออัปโหลดโค้ดแล้ว นำ micro:bit มาเชื่อมต่อกับ micro:GamePad เพื่อทดลองการทำงาน

รูปที่ 4 แสดงโค้ดตัวอย่างที่ 1 ส่วนของภาคส่ง micro:GamePad

สามารถเปิดโค้ดได้ที่ https://makecode.microbit.org/S24055-98566-38476-65577

อธิบายการทำงาน

โค้ดนี้เป็นโค้ดสำหรับการส่งข้อมูล Radio ไปยัง group ที่กำหนด จะทำงานเมื่อกดปุ่ม C, D, E, และ F โดยแบ่งการทำงานเป็น 2 ส่วนได้แก่

  • การตั้งค่า (On Start)
    • Radio Group: กำหนดกลุ่มสัญญาณวิทยุให้ตรงกับหุ่นยนต์เพื่อการสื่อสาร
    • Pull-up Pins: ตั้งค่าขา P13-P16 เป็น Up เพื่อป้องกันสัญญาณลอยและทำให้ปุ่มทำงานเสถียร 
  • ตรรกะการทำงาน (Forever) ใช้เงื่อนไข if...else if ตรวจสอบสถานะ Digital Read ของแต่ละปุ่มเรียงตามลำดับความสำคัญ
    • เมื่อกดปุ่ม: ส่งข้อความระบุทิศทาง (“Up”, “Down”, “Left”, “Right”) ผ่านวิทยุ.
    • เมื่อไม่กด (Release): หากไม่มีปุ่มใดถูกกด จะส่งข้อความ “Release” เพื่อสั่งให้หุ่นยนต์หยุดทันที

ภาครับ Pretty Car

รูปที่ 5 หุ่นยนต์ Pretty Car ในชุด Building:bit Superkit

ขั้นตอนการใช้งาน
  • เปิดเบราว์เซอร์ https://makecode.microbit.org/  และสร้างโปรเจคใหม่เพื่อเริ่มเขียนโค้ด
  • ติดตั้ง Extention เพิ่มเติมสำหรับใช้งาน Pretty Car ในชุด Building:bit Superkitโดยกดไปที่ Extention
  • ในช่อง Search ให้ค้นหา https://github.com/YahboomTechnology/SuperBitLibV2
  • จะมี Extention ชื่อว่า SuperBitV2 คลิกเพื่อติดตั้ง Extention ดังรูปที่ 6
  • เชื่อมต่อ micro:bit สำหรับใช้งานกับ Pretty Car เข้ากับคอมพิวเตอร์ด้วยสาย microUSB เพื่ออัปโหลดโค้ดในรูปที่ 7
  • เมื่ออัปโหลดโค้ดแล้ว นำ micro:bit มาเชื่อมต่อกับ Pretty Car เพื่อทดลองการทำงาน

รูปที่ 6 ติดตั้ง Extention สำหรับสั่งงาน Pretty Car

รูปที่ 7 แสดงโค้ดส่วนของภาครับ Pretty Car

สามารถเปิดโค้ดได้ที่ https://makecode.microbit.org/S96558-51109-55290-99388

อธิบายการทำงาน

โค้ดนี้เป็นโค้ดสำหรับการรับข้อมูล Radio ไปถูกส่งมายัง group ที่กำหนด เมื่อได้รับข้อความที่ตรงตามเงื่อนไขที่กำหนดไว้ จะสั่งมอเตอร์ให้ทำงาน  โดยแบ่งการทำงานเป็น 2 ส่วนได้แก่

  • On Start: กำหนด Radio เป็น Group 1 เพื่อให้ตรงกับรีโมท และรับข้อมูลได้
  • On Radio Received (เมื่อได้รับข้อความ):
    • นำข้อความที่ได้รับ (receivedString) มาตรวจสอบด้วยเงื่อนไข if...else if
    • ถ้าข้อความที่ได้เป็น “Up, Down, Left, Right”: สั่งมอเตอร์ M1 และ M3 ให้หุ่นยนต์เคลื่อนที่ เดินหน้า, ถอยหลัง, เลี้ยวซ้าย และเลี้ยวขวา ตามลำดับ
    • สถานะอื่นๆ (Else): หากได้รับข้อความอื่น (เช่น “Release”) หุ่นยนต์จะใช้คำสั่ง Motor Stop All เพื่อหยุดการทำงานทันที

ผลการทำงานของทั้งภาครับและภาคส่ง

ตัวอย่างที่ 2 ใช้ปุ่มกด A และ B ควบคุมความเร็วของมอเตอร์ พร้อมใช้งานมอเตอร์สั่น

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

ภาคส่ง micro:GamePad

รูปที่ 8 ตำแหน่งปุ่มกด A, B และมอเตอร์สั่น

ขั้นตอนการใช้งาน
  • ไปที่ https://makecode.microbit.org/  สร้างโปรเจคใหม่ หรือแก้ไขจากตัวอย่างที่ 1 ส่วนของภาคส่ง micro:GamePad
  • เชื่อมต่อ micro:bit สำหรับใช้งานกับ micro:GamePad เข้ากับคอมพิวเตอร์ด้วยสาย microUSB เพื่ออัปโหลดโค้ดในรูปที่ 9
  • เมื่ออัปโหลดโค้ดแล้ว นำ micro:bit มาเชื่อมต่อกับ micro:GamePad เพื่อทดลองการทำงาน

รูปที่ 9 แสดงโค้ดตัวอย่างที่ 2 ส่วนของภาคส่ง micro:GamePad

สามารถเปิดโค้ดได้ที่ https://makecode.microbit.org/_MLtPKhaF3Yc3

อธิบายการทำงาน

โค้ดนี้ทำหน้าที่ส่ง “ข้อความทิศทาง” และส่ง “สถานะปุ่ม A/B” พร้อมทั้งคอยรับค่า “Data” กลับมาเพื่อแสดงระดับความเร็วในตัว โดยจะแบ่งการทำงานเป็น 4 ส่วน ดังนี้

  • On Radio Received: เมื่อได้รับข้อมูลที่มีชื่อว่า “Data” จะกำหนดให้ตัวแปร Speed มีค่าเท่ากับ value (ค่าที่ถูกส่งมาพร้อมกัน)
  • On Start: ส่วนการตั้งค่าเริ่มต้น
    • Radio Group: กำหนดกลุ่มสัญญาณวิทยุให้ตรงกับหุ่นยนต์เพื่อการสื่อสาร
    • Pull-up Pins: ตั้งค่าขา P13-P16 เป็น Up เพื่อป้องกันสัญญาณลอยและทำให้ปุ่มทำงานเสถียร 
  • Forever: การทำงานต่อเนื่อง ใช้เงื่อนไข if...else if ตรวจสอบสถานะ Digital Read ของแต่ละปุ่มเรียงตามลำดับความสำคัญ
    • Plot bar graph of Speed: แสดงแถบกราฟบนหน้าจอ LED ของ micro:bit เพื่อบอกระดับความเร็วปัจจุบัน (สูงสุดที่ 255)
    • if digital Read: เมื่อกดปุ่มจะส่งข้อความระบุทิศทาง (“Up“, “Down“, “Left“, “Right“) ผ่านวิทยุ
    • else: เมื่อไม่กดปุ่มจะส่งข้อความ “Release” 
  • Every 200 ms:เป็นการแยกมาตรวจสอบปุ่ม A และ B ทุกๆ 0.2 วินาที
    • if button A: ส่งตัวเลข 0 ผ่านวิทยุ และสั่งให้ขา P12 เป็น High (1) เพื่อเปิดไฟ LED และมอเตอร์สั่นทำงาน
    • if button B: ส่งตัวเลข 1 ผ่านวิทยุ และสั่งให้ขา P12 เป็น High (1) เช่นกัน
    • Else: ถ้าไม่ได้กดทั้ง A และ B ให้สั่งขา P12 เป็น Low (0)

ภาครับ Pretty Car

ขั้นตอนการใช้งาน
  • ไปที่ https://makecode.microbit.org/  สร้างโปรเจคใหม่ หรือแก้ไขจาก ตัวอย่างที่ 1 ส่วนของภาครับ Pretty Car
  • ตรวจสอบการติดตั้ง Extention SuperBitV2 สำหรับใช้งาน Pretty Car ในชุด Building:bit Superkit
  • เชื่อมต่อ micro:bit สำหรับใช้งานกับ micro:GamePad เข้ากับคอมพิวเตอร์ด้วยสาย microUSB เพื่ออัปโหลดโค้ดในรูปที่ 10
  • เมื่ออัปโหลดโค้ดแล้ว นำ micro:bit มาเชื่อมต่อกับ Pretty Car เพื่อทดลองการทำงาน

รูปที่ 10 แสดงโค้ดตัวอย่างที่ 2 ส่วนของภาครับ Pretty Car

สามารถเปิดโค้ดได้ที่ https://makecode.microbit.org/_12kCw5aKMJRm

อธิบายการทำงาน

โค้ดนี้ทำหน้าที่รับสัญญาณที่ถูกส่งมา และนำมากำหนดเงื่อนไขเพื่อควบคุมการทำงานของ Pretty Car โดยจะแบ่งการทำงานเป็น 4 ส่วน ดังนี้

  • On Start (การตั้งค่า )
    • radio set group 1: กำหนดกลุ่มสัญญาณวิทยุเป็นกลุ่มที่ 1 ให้ตรงกับรีโมทฝั่งส่ง
    • set Speed to 150: กำหนดค่าเริ่มต้นของความเร็วปุ่มกดไว้ที่ 150
    • set SpeedT / SpeedD to 0: ตั้งค่าตัวแปรการเลี้ยว (Turn) และการขับเคลื่อน (Drive) ให้เป็น 0 เมื่อเริ่มโปรแกรม
  • On Radio Received receivedString: ทำหน้าที่รับ”ข้อความ”จากรีโมทเพื่อเปลี่ยนค่าในตัวแปรกลาง
    • ถ้าได้รับ “Up”: ตั้งค่า SpeedD (เดินหน้า) เท่ากับค่าความเร็วที่กำหนดไว้ และให้ SpeedT (เลี้ยว) เป็น 0
    • ถ้าได้รับ “Down”: ตั้งค่า SpeedD เป็นค่าติดลบ (ถอยหลัง) และให้ SpeedT เป็น 0
    • ถ้าได้รับ “Left”: ให้ SpeedD เป็น 0 และตั้งค่า SpeedT เป็นค่าติดลบ (เลี้ยวซ้าย)
    • ถ้าได้รับ “Right”: ให้ SpeedD เป็น 0 และตั้งค่า SpeedT เป็นค่าบวก (เลี้ยวขวา)
    • ถ้าได้รับ “Release”: ตั้งค่าตัวแปรทั้งสองให้เป็น 0 เพื่อเตรียมหยุดหุ่นยนต์
  • on radio received receivedNumber: ส่วนนี้รับค่าตัวเลขที่ส่งมาจากปุ่ม A และ B ของรีโมทเพื่อปรับระดับความเร็ว
    • ถ้าได้รับเลข 0 (ปุ่ม A): ลดค่าความเร็วลงครั้งละ 15 (จำกัดค่าไม่ให้ต่ำกว่า 0)
    • ถ้าได้รับเลข 1 (ปุ่ม B): เพิ่มค่าความเร็วขึ้นครั้งละ 15 (จำกัดค่าไม่ให้เกิน 255)
  • forever: เป็นส่วนประมวลผลหลักที่ทำงานตลอดเวลา
    • radio send value “Data” = Speed: ส่งค่าความเร็วปัจจุบันกลับไปให้รีโมทเพื่อแสดงผล
    • plot bar graph of Speed: แสดงระดับความเร็วบนหน้าจอ LED ของหุ่นยนต์
    • Motor M1 / M3: ใช้สูตรผสมสัญญาณ (SpeedD + SpeedT และ SpeedD - SpeedT) เพื่อสั่งงานมอเตอร์ทั้งสองข้างพร้อมกัน ทำให้หุ่นยนต์เคลื่อนที่และเลี้ยวโค้งได้อย่างนุ่มนวล

ผลการทำงานของทั้งภาครับและภาคส่ง

ตัวอย่างที่ 3 ใช้ Joystick บน micro:GamePad ควบคุมการเคลื่อนที่ของ Pretty Car 

ตัวอย่างนี้เป็นตัวอย่างการใช้งาน Joystick บน micro:GamePad ควบคุมการเคลื่อนที่ของ Pretty Car  โดยนำค่าที่อ่านได้จาก Joystick มาแปลงเป็นความเร็วของมอเตอร์ตามระดับการโยกของแกน X และ Y ของ JoyStick

ภาคส่ง micro:GamePad

รูปที่ 11 ตำแหน่ง JoyStick

ขั้นตอนการใช้งาน
  • เปิดเบราว์เซอร์และไปที่ https://makecode.microbit.org/  เพื่อเริ่มเขียนโค้ด
  • เตรียม micro:GamePad ให้พร้อมใช้งาน บรรจุถ่านขนาด AAA จำนวน 2 ก้อน
  • เชื่อมต่อ micro:bit สำหรับใช้งานกับ micro:GamePad เข้ากับคอมพิวเตอร์ด้วยสาย microUSB เพื่ออัปโหลดโค้ดในรูปที่ 4
  • เมื่ออัปโหลดโค้ดแล้ว นำ micro:bit มาเชื่อมต่อกับ micro:GamePad เพื่อทดลองการทำงาน

รูปที่ 12 แสดงโค้ดตัวอย่างที่ 3 ส่วนของภาคส่ง micro:GamePad

สามารถเปิดโค้ดได้ที่ https://makecode.microbit.org/_9L2EWUJYe4ud

อธิบายการทำงาน

โค้ดชุดนี้ทำหน้าที่อ่านค่าแรงดันไฟฟ้าจากจอยสติ๊ก แล้วแปลงเป็นค่าตัวเลขเพื่อส่งไปควบคุมความเร็วและทิศทางของหุ่นยนต์ โดยจะแบ่งการทำงานเป็น 4 ส่วน ดังนี้

  • On Start (การตั้งค่า )
    • กำหนดกลุ่มวิทยุเป็นกลุ่มที่ 1 เพื่อให้ตรงกับหุ่นยนต์ตัวรับ
    • ตั้งค่าตัวแปร Turn (เลี้ยว) และ Drive (เดินหน้า/ถอยหลัง) ให้เริ่มที่ 0
  • forever: เป็นส่วนประมวลผลหลักที่ทำงานตลอดเวลา
    • Map: การอ่านค่าและแปลงสัญญาณ อ่านค่าสัญญาณอะนาล็อกจากจอยสติ๊กแกน Y (พิน P2) และแกน X (พิน P1) ซึ่งมีค่าอยู่ระหว่าง 0 ถึง 1023 ใช้คำสั่ง Map เพื่อแปลงช่วงตัวเลขให้กลายเป็น -255 ถึง 255
    • if absolute of: การสร้างพื้นที่หยุดนิ่ง (Deadzone) เพื่อป้องกันหุ่นยนต์ไหลเองเมื่อจอยสติ๊กคลาดเคลื่อนเล็กน้อย ใช้คำสั่งตรวจสอบระยะการโยกจอยสติ๊กโดยไม่สนใจทิศทาง
      • Drive < 30:  หากโยกน้อยกว่า 30 หน่วย ระบบจะสั่งให้ Drive เป็น 0
      • Turn < 30: หากโยกน้อยกว่า 30 หน่วย ระบบจะสั่งให้ Turn เป็น 0
    • Radio Send value: ส่งค่าที่ประมวลผลเสร็จแล้วผ่านวิทยุ โดยใช้ชื่อ “D” สำหรับค่าการเดินหน้า และ “T” สำหรับค่าการเลี้ยว เพื่อให้ฝั่งรับนำไปคำนวณแยกกันได้ถูกต้อง

ภาครับ Pretty Car

ขั้นตอนการใช้งาน
  • เปิดเบราว์เซอร์ไปที่ https://makecode.microbit.org/  และสร้างโปรเจคใหม่เพื่อเริ่มเขียนโค้ด
  • ตรวจสอบการติดตั้ง Extention SuperBitV2 สำหรับใช้งาน Pretty Car ในชุด Building:bit Superkit
  • เชื่อมต่อ micro:bit สำหรับใช้งานกับ Pretty Car เข้ากับคอมพิวเตอร์ด้วยสาย microUSB เพื่ออัปโหลดโค้ดในรูปที่ 13
  • เมื่ออัปโหลดโค้ดแล้ว นำ micro:bit มาเชื่อมต่อกับ Pretty Car เพื่อทดลองการทำงาน

รูปที่ 13 แสดงโค้ดตัวอย่างที่ 3 ส่วนของภาครับ Pretty Car

สามารถเปิดโค้ดได้ที่ https://makecode.microbit.org/_4Ar5zEfXRKWk

อธิบายการทำงาน

โค้ดชุดนี้จะรับค่าตัวเลขจากการโยกจอยสติ๊กมาประมวลผล และจะนำผลลัพธ์ที่ได้มาสั่งงานมอเตอร์ให้เคลื่อนที่ตามทิศทางและน้ำหนักมืออย่างละเอียด โดยจะแบ่งการทำงานดังนี้

  • on radio received name value: การรับข้อมูลที่ส่งมาจากรีโมท
    • if name == “D”: ถ้าได้รับค่าชื่อ “D” (Drive) จะนำค่าตัวเลขนั้นไปเก็บไว้ในตัวแปร SpeedD (เดินหน้าหรือถอยหลัง)
    • else if name”T”: หากได้รับค่าชื่อ “T” (Turn) จะนำค่าตัวเลขนั้นไปเก็บไว้ในตัวแปร SpeedT (เลี้ยวซ้ายหรือขวา)
  • On Start (การตั้งค่า )
    • radio set group 1: กำหนดกลุ่มสัญญาณวิทยุให้ตรงกับรีโมทตัวส่ง
    • set SpeedT / SpeedD to 0: รีเซ็ตค่าตัวแปรการเลี้ยวและการขับเคลื่อนให้เป็น 0 เพื่อให้หุ่นยนต์หยุดนิ่งเมื่อเริ่มโปรแกรม
  • forever: เป็นส่วนที่นำค่าจากตัวแปรมาคำนวณและสั่งงานมอเตอร์ตลอดเวลา
    • Motor M1: ใช้สูตร SpeedD + SpeedT เพื่อกำหนดความเร็วล้อซ้าย
    • Motor M3: ใช้สูตร SpeedD - SpeedT เพื่อกำหนดความเร็วล้อขวา

ผลการทำงานของทั้งภาครับและภาคส่ง

ตัวอย่างที่  4 การใช้งาน micro:GamePad แบบไฮบริด

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

ภาคส่ง micro:GamePad

รูปที่ 14 แสดงโค้ดตัวอย่างที่ 4 ส่วนของภาคส่ง microGamePad

สามารถเปิดโค้ดได้ที่ https://makecode.microbit.org/_Up34UKHszHX1

อธิบายการทำงาน

โค้ดชุดนี้จะเป็นการส่งข้อมูลจากการกดปุ่มและการใช้งาน JoyStick ซึ่งจะมีรูปแบบคล้ายตัวอย่างก่อนหน้า แต่จะปรับเปลี่ยนรูปแบบการส่งข้อมูลเพื่อให้เกิดเสถียรภาพมากขึ้น โดยประมวลผลคำสั่งทั้งหมดให้เป็นตัวเลข “D” (Drive) และ “T” (Turn) ก่อนส่งออก เพื่อลดความหนาแน่นของสัญญาณวิทยุที่ส่งออกไป โดยจะมีรายละเอียดดังนี้

  • On Start (การตั้งค่า )
    • radio set group 1: กำหนดกลุ่มวิทยุเป็นกลุ่มที่ 1 เพื่อให้ตรงกับหุ่นยนต์ตัวรับ
    • set Drive/Turn: ตั้งค่าตัวแปร Turn (เลี้ยว) และ Drive (เดินหน้า/ถอยหลัง) ให้เริ่มที่ 0
    • set Speed: กำหนดค่าความเร็วเริ่มต้น Speed ไว้ที่ 150
  • forever: เป็นส่วนประมวลผลหลักที่ทำงานตลอดเวลา
    • ใช้คำสั่ง map แปลงค่าจากจอยสติ๊ก (0 ถึง 1023) ให้เป็นช่วงความเร็ว -255 ถึง 255
    • ระบบพื้นที่หยุดนิ่ง (Deadzone): ใช้ absolute of เพื่อเช็คว่าถ้าโยกจอยสติ๊กน้อยกว่า 30 หน่วย ให้ถือว่าเป็น 0 เพื่อป้องกันหุ่นยนต์ไหลเอง
    • การจัดการปุ่มกดทิศทาง (if Drive == 0 and Turn == 0): หากไม่ได้โยกจอยสติ๊ก ระบบจะมาเช็คการกดปุ่ม P13-P16 แทน
      • หากกดปุ่ม (P15) จะตั้งค่า Drive = Speed
      • หากกดปุ่ม (P13) จะตั้งค่า Drive = Speed*-1
      • หากกดปุ่ม (P16) จะตั้งค่า Turn = Speed*-1
      • หากกดปุ่ม (P14) จะตั้งค่า Turn = Speed
    • radio set value: เมื่อประมวลผลเสร็จ จะส่งค่าออกไปเพียง 2 ค่า คือ “D” (เดินหน้า/ถอยหลัง) และ “T” (น้ำหนักการเลี้ยว)
  • Every 200 ms:เป็นการแยกมาตรวจสอบปุ่ม A และ B ทุกๆ 0.2 วินาที
    • if button A: ส่งตัวเลข 0 ผ่านวิทยุ และสั่งให้ขา P12 เป็น High (1) เพื่อเปิดไฟ LED และมอเตอร์สั่นทำงาน
    • if button B: ส่งตัวเลข 1 ผ่านวิทยุ และสั่งให้ขา P12 เป็น High (1) เช่นกัน
    • Else: ถ้าไม่ได้กดทั้ง A และ B ให้สั่งขา P12 เป็น Low (0)

ภาครับ Pretty Car

รูปที่ 15 แสดงโค้ดตัวอย่างที่ 4 ส่วนของภาครับ Pretty Car

สามารถเปิดโค้ดได้ที่ https://makecode.microbit.org/_23mfqLLKYCqF

อธิบายการทำงาน

โค้ดชุดนี้จะเป็นการรับข้อมูล โดยจะเน้นที่ความเร็วในการตอบสนอง โดยทำหน้าที่ “รับและสั่งการ” เป็นหลัก เนื่องจากข้อมูลที่ถูกส่งมาจะผ่านการคำนวณมาเรียบร้อยแล้ว โดยรายละเอียดในการสั่งงานดังนี้

โค้ดชุดนี้จะเป็นการรับข้อมูลจากการกดปุ่มและการใช้งาน JoyStick ซึ่งจะมีรูปแบบคล้ายตัวอย่างก่อนหน้า แต่จะปรับเปลี่ยนรูปแบบการส่งข้อมูลเพื่อให้เกิดเสถียรภาพมากขึ้น โดยประมวลผลคำสั่งทั้งหมดให้เป็นตัวเลข “D” (Drive) และ “T” (Turn) ก่อนส่งออก เพื่อลดความหนาแน่นของสัญญาณวิทยุที่ส่งออกไป โดยจะมีรายละเอียดดังนี้

  • On Start (การตั้งค่า )
    • radio set group 1: กำหนดกลุ่มสัญญาณวิทยุให้ตรงกับรีโมทตัวส่ง
    • set SpeedT / SpeedD to 0: รีเซ็ตค่าตัวแปรการเลี้ยวและการขับเคลื่อนให้เป็น 0 เพื่อให้หุ่นยนต์หยุดนิ่งเมื่อเริ่มโปรแกรม
    • set Speed: กำหนดค่าความเร็วเริ่มต้น Speed ไว้ที่ 150
  • On Radio Received: การรับข้อมูล
    • รับค่าทิศทาง: เมื่อได้รับค่าชื่อ “D” จะเก็บไว้ในตัวแปร SpeedD และหากได้รับชื่อ “T” จะเก็บไว้ใน SpeedT
    • รับสถานะปุ่ม: รับเลข 0 หรือ 1 เพื่อมาปรับระดับความเร็วในตัวหุ่นยนต์ให้ตรงกับที่รีโมทสั่งมา
  • forever: เป็นส่วนประมวลผลหลักที่ทำงานตลอดเวลา
    • plot bar graph of Speed: แสดงระดับความเร็วบนหน้าจอ LED ของหุ่นยนต์
    • สั่งงานมอเตอร์: ระบบจะนำค่าจากตัวแปรกลางมาคำนวณตามสูตรทางคณิตศาสตร์ เพื่อกำหนดความเร็วให้แต่ละล้อแยกกัน
      • มอเตอร์ล้อซ้าย (M1): คำนวณจาก SpeedD + SpeedT
      • มอเตอร์ล้อขวา (M3): คำนวณจาก SpeedD - SpeedT

วิดีโอตัวอย่างการทำงาน

Facebook Comments Box