Mbits with microBLOCK บทที่ 5 บอร์ด AX-Mbits

เพื่อนำขาอินพุต/เอาต์พุตของบอร์ด mbits ไปใช้งานได้อย่างมีประสิทธิภาพ
ต้องต่อเสริมเข้ากับบอร์ดขยายต่างๆ ทาง inex ได้เตรียมบอร์ด AX-Mbits ไว้สำหรับต่อขยาย
ดึงความสามารถของบอร์ด mbits มาใช้ได้อย่างเต็มที่

AX-Mbits

    บนบอร์ด AX-Mbits
มีคอนเน็กเตอร์รองรับการติดตั้งบอร์ด Mbits และจุดเชื่อมต่ออุปกรณ์ภายนอก รวมถึงจุดต่อสำหรับเซอร์โวมอเตอร์ด้วย

คุณสมบัติทางเทคนิค

  • มีซ็อกเก็ตสำหรับติดตั้งบอร์ด Mbits
  • มีสวิตช์กดติดปล่อยดับ 2 ตัวที่ต่อพ่วงมาจากสวิตช์ A และ B บนบอร์ด Mbits
  • มีจุดต่อสำหรับขาพอร์ตอินพุต/เอาต์พุตดิจิตัลจำนวน 13 จุด
  • มีจุดต่อรองรับอินพุตอะนาลอก 3 จุด
  • มีจุดต่อรองรับการสื่อสารแบบ SPI 1 ชุด(3 พอร์ต)
  • มีจุดต่อแบบ JST 4 ขาสำหรับต่อพ่วงอุปกร์ภายนอกผ่านบัส I2C
  • มีตัวต้านทานปรับค่าได้ต่อที่ขา P7 สำหรับทดสอบอ่านค่าแอนะล็อก
  • มีจุดต่อสำหรับเซอร์โวมอเตอร์ 4 ช่อง เซอร์โวมอเตอร์ต้องใช้ไฟเลี้ยงภายนอก
  • มีวงจรจ่ายไฟ +5V สำหรับเซอร์โวมอเตอร์และ +3.3V สำหรับเลี้ยงบอร์ด Mbits และวงจรทั้งหมด
  • ขนาด 89×57 มม. และ 100 x 58 มม. เมื่อรวมถาดรอง

การใช้งานกับบอร์ด Mbits

เสียบบอร์ด Mbits ลงบนบอร์ด AX-Mbits
โดยหันด้าน LED RGB 5×5 มายังด้านหน้าในทิศทางดังรูป

การจ่ายไฟเลี้ยง

1. ต่อผ่านพอร์ต microUSB ของ Mbits จะเป็นการจ่ายไฟคอมพิวเตอร์ Powerbank
หรืออะแดปเตอร์สำหรับชาร์จมือถือก็ได้

2. ต่อแรงดัน 3V เข้าจุดต่อ JST 2 ขา ส่วนมากจะมาจากถ่าน AA หรือ AAA จำนวน 2 ก้อนต่อผ่านกะบะถ่านที่มีขั้วสายเป็นแบบ JST 2 ขา

3. จ่ายไฟ +6 ถึง 9V เข้าที่จุดต่อเทอร์มินอลบล็อก 2 ขา ส่วนมากใช้กับแบตเตอรี่ หรือถ่านตั้งแต่ 3 ก้อนขึ้นไป ถ้าต่อวิธีนี้สามารถขับเซอร์โวมอเตอร์ให้ทำงานได้

4. จ่ายไฟ +6 ถึง 9V เข้าที่แจ๊กอะแดปเตอร์ สามารถใช้อะแดปเตอร์แรงดันตั้งแต่ 5V ขึ้นไป แต่ไม่ควรเกิน 12V แนะนำให้ใช้ 9V ไอซีเรกูเลเตอร์สำหรับรักษาแรงดันจะได้ไม่ร้อนเกินไป

การขับอุปกรณ์เอาต์พุตดิจิตอลภายนอก

สำหรับอุปกรณ์เอาต์พุตแบบดิจิตัล จะใช้คำสั่ง digital write เพื่อส่งลอจิก “0” หรือ “1” ออกไปยังอุปกรณ์เอาต์พุต ขาที่ใช้งานได้คือขา P0-P16

สำหรับ ZX-LED ที่จะติดสว่างเมื่อได้รับลอจิก “1” และดับเมื่อได้รับลอจิก “0”

ตัวอย่างที่ 20 ไฟกะพริบ ด้วย ZX-LED

    เหมือนเป็น Hello World ของวงการเขียนโค้ดด้านอิเล็กทรอนิกส์ ต้องมีโค้ดนี้ขึ้นก่อนเลย

ZX-LED ต่อกับขา P0 จะติดสว่างเมื่อได้รับลอจิก “1” และจะดับเมื่อได้ลอจิก “0”

ตัวอย่างที่ 21 เปิด/ปิด ZX-LED ด้วย Button A และ B

ต่อ ZX-LED เข้ากับขา P0 แบบเดียวกับตัวอย่างที่ 20

เมื่อกดสวิตช์ Button A จะส่งลอจิก “1” ออกไปที่ขา P0 ทำให้ LED ติดสว่าง ถ้ากดสวิตช์ Button B จะส่งลอจิก “0” ทำให้ LED ดับ

ตัวอย่างที่ 22 เปิด/ปิด ZX-LED ด้วย Button A และ B

https://ide.microblock.app/?open=1647653090455-RDzuG0.mby

เปลี่ยนโค้ดให้สวิตช์ 1 ตัวควบคุมทั้งเปิดและปิด LED 1 ดวง โดย Button A ควบคุม ZX-LED ที่ขา P0 ส่วน Button B ควบคุม ZX-LED ที่ขา P4

การทำงาน

    สร้างตัวแปร A และ B ขึ้นมาเพื่อเก็บสถานะเริ่มต้นของ LED ถ้ามีการกดสวิตช์ Button A ต้องตรวจสอบสถานะก่อน ถ้าตัวแปร A เป็น “0” ก็สั่งให้ ZX-LED ที่ขา P0 ติด พร้อมทั้งเปลี่ยนสถานะตัวแปร A ให้เป็น 1 ด้วย กลับกันถ้าค่าตัวแปร A เป็น “1” แสดงว่าเดิม ZX-LED ติดอยู่ ก็สั่งให้หลอดไฟดับและสั่งตัวแปร A ให้กลายเป็น “0” สำหรับ Button B ก็ทำงานในลักษณะเดียวกัน แต่ใช้ตัวแปร B และZX-LED ที่ขา P4 นั่นเอง

อ่านอินพุตดิจิตัลจาก ZX-Button

แผงวงจรสวิตช์ ZX-Button

ZX-BUTTON เป็นอุปกรณ์อินพุตแบบดิจิตัล ประกอบไปด้วยสวิตช์พร้อม LED แสดงผล จากวงจรจะเห็นว่า ถ้ากดสวิตช์ให้ลอจิกเป็น “0” และ LED ติดสว่าง ถ้าไม่กดจะให้ลอจิกเป็น “1”

คำสั่ง digital read pin จะคืนค่า “0” หรือ “1” ออกมาจากขาที่ต้องการตรวจสอบ ขาที่ใช้งานได้คือขา P0-P16

ตัวอย่างที่ 23 สร้างเสียงจากการกดสวิตช์

ZX-BUTTON จะต่างจากสวิตช์ A และ B บนบอร์ด Mbits โดยเมื่อกดจะเป็น “0” ไม่กดจะเป็น “1” ตัวอย่างนี้จะกดสวิตช์แล้วให้มีเสียงออกลำโพง (บนบอร์ด Mbits)

https://ide.microblock.app/?open=1647654103752-cm309x.mby

การทำงาน

การตรวจสอบสวิตช์จะต้องวนตรวจสอบอย่างต่อเนื่องดังนั้น คำสั่งจะต้องอยู่ใน forever

ZX-Button เมื่อกดแล้วให้ผลลัพธ์เป็น 0 หรือ False ดังนั้นถ้าใช้คำสั่ง if ตรวจสอบต้องกลับสถานะก่อน ด้วย not

เสียงที่ดังจาก ZX-Button ที่ขา P10 และ P13 กำหนดให้เป็นคนละความถี่เสียงกัน

การอ่านค่าแอนะล็อก

บอร์ด Mbits บนพื้นฐาน ESP32 มีวงจรแปลงแอนะล็อกเป็นดิจิตัลขนาด 12 บิต ทำให้อ่านค่าได้ในช่วง 0-4095 โดย ใช้คำสั่ง analog read pin คำสั่งนี้สามารถอ่านค่าแอนะล็อกได้จากหลายๆ ขา แต่ขาที่แนะนำให้ใช้โดยไม่กระทบกับการทำงานของขาอื่นๆ ประกอบด้วย ขา P1 ,P2 P6 และ P7 (knob : ตัวต้านทานปรับค่าได้)

ตัวอย่างที่ 24 ทดสอบอ่านค่าแอนะล็อกจาก knob

ตัวต้านทานปรับค่าได้บนบอร์ด AX-Mbits ออกแบบเพื่อคืนค่าแรงดัน 0-3.3V เมื่อต่อเข้ากับขา P7 ทำให้อ่านเป็นค่าแอนะล็อกได้ในช่วง 0-4095 ตามการปรับหมุน โดยทดสอบง่ายๆ จากโค้ดตัวอย่าง

โค้ดตัวอย่างนอกจากนำค่าไปแสดงที่หน้าต่าง Terminal ในค่า 0-4095 แล้วเพื่อให้ค่าเป็นเลข 2 หลักแสดงที่ LED RGB 5×5 ด้วย จึงนำค่ามาหารด้วย 40.96 กลายเป็นเลข 0-99 นำมาแสดง

เซอร์โวมอเตอร์

เซอร์โวมอเตอร์ คือชุดเฟืองขับมอเตอร์ที่มีวงจรขับมอเตอร์ในตัว ผู้ใช้งานส่งสัญญาณควบคุมเป็นความกว้างพัลส์ให้กับตัวมันก็จะสามารถควบคุมตำแหน่งของมอเตอร์ให้เคลื่อนที่ไปยังตำแหน่งที่ต้องการในช่วง 0-180 องศา

สำหรับเซอร์โวมอเตอร์ที่เห็นในรูปเป็นรุ่น SG92R เป็นเซอร์โวขนาดเล็ก มีตำแหน่งสายสัญญาณดังนี้

สีน้ำตาล     เป็นกราวด์


สีแดง     เป็นไฟเลี้ยง 4.8V-6V


สีส้ม     เป็นสายสัญญาณควบคุม

คำสั่งควบคุมเซอร์โว

ขณะเขียนบทความคำสั่งควบคุมเซอร์โวมอเตอร์ สำหรับบอร์ด Mbits บน microBlock IDE ยังไม่มีครับ ต้องพึ่งพา ชุดคำสั่งจาก Extension ครับ ตำแหน่งขาจะต้องใช้ตำแหน่งขาของบอร์ด ESP32 มาตรฐานตามนี้ครับ

การเพิ่ม Extension

1. คลิกที่เมนู Extension

2. ค้นหา Extension ชื่อ Servo จากนั้นกด Install เพื่อติดตั้ง (ต้องเชื่อมอินเตอร์เน็ต)

3. จะปรากฏหัวข้อคำสั่ง Servo เพิ่มขึ้นมา ภายในมีคำสั่งเพียงคำสั่งเดียว

รูปแบบคำสั่ง

ตัวเลขชุดแรกคือตำแหน่งขา GPIO ของเซอร์โวมอเตอร์ สำหรับบอร์ด AX-Mbits จะเทียบเคียงดังนี้

P10 = GPIO14

P11 = GPIO12

P12 = GPIO5

P16 = GPIO15

ตัวเลขชุดที่ 2 คือตำแหน่งที่ต้องการให้เซอร์โวมอเตอร์เคลื่อนที่ไป มีค่าระหว่าง 0-180 หน่วยเป็นองศา

การต่อเซอร์โวมอเตอร์และจ่ายไฟ

เซอร์โวมอเตอร์กินกระแสไฟค่อนข้างเยอะ ไฟเลี้ยงจาก USB เพียงอย่างเดียวไม่พอขับเคลื่อนเซอร์โวแบบนี้ได้ ต้องใช้แหล่งจ่ายไฟภายนอก มีแรงดันในช่วง 6-9V และใช้สวิตช์ POWER เพื่อเปิดจ่ายไฟจากภายนอก สำหรับตัวเซอร์โวมอเตอร์จะเสียบเข้ากับช่อง P10 ซึ่งขณะเขียนโค้ดจะระบุขาเป็น 14

ตัวอย่างที่ 25 ขยับเซอร์โวไปกลับ

https://ide.microblock.app/?open=1648054493860-osxphK.mby


การทำงาน

เพื่อไม่ให้เซอร์โวทำงานทันที จะใช้บล็อก wait ultil รอการกดสวิตช์ A ก่อนค่อยทำงาน จากนั้นให้เซอร์โวเลื่อนไปที่ตำแหน่ง 0 องศา สลับกับการเลื่อนไปที่ตำแหน่ง 180 องศา โดยเว้นระยะ 1 วินาที เนื่องจากการเคลื่อนที่จากจุดหนึ่งไปอีกจุดต้องใช้เวลา ถ้ากำหนดการหน่วงเวลาน้อยเกินไปเซอร์โวมอเตอร์จะยังไปไม่ถึงตำแหน่งเป้าหมาย

ตัวอย่างที่ 26 ปรับตำแหน่งเซอร์โวมอเตอร์ด้วยตัวต้านทานปรับค่าได้

จะทราบได้อย่างไรว่า ถ้าเซอร์โวมอเตอร์เคลื่อนมาที่ตำแหน่งนี้ ค่าที่ต้องใช้มีค่าเป็นเท่าใด

https://ide.microblock.app/?open=1648055250787-OY8aXj.mby

การทำงาน

ค่าที่อ่านได้จากตัวต้านทานปรับค่าได้อยู่ในช่วง 0-4095 ส่วนค่าที่เซอร์โวมอเตอร์ต้องการอยู่ในช่วง 0-180 เปลี่ยนค่าช่วงได้ด้วยสมการทางคณิตศาสตร์คือ นำค่า 4095/180 เท่ากับ 22.75 เอาไปหารด้วยค่าที่อ่านได้จาก P7 (ตำแหน่งของตัวต้านทานปรับค่าได้ ) ค่าจากการหารจะเป็นเลขทศนิยม ใช้คำสั่ง round down เพื่อปัดเศษทิ้ง ก่อนเอาค่าส่งไปเก็บที่ตัวแปร S ที่สร้างขึ้น

นำค่าตัวแปร S ส่งเป็นค่าตำแหน่งไปยังเซอร์โวมอเตอร์และส่งไปแสดงผลที่หน้าต่าง Terminal ด้วยเพื่อทราบว่า ตัวเลขที่ป้อนตรงกับตำแหน่งใดของเซอร์โวมอเตอร์

สำหรับตอนที่ 5 ขอจบไว้ที่เรื่องเซอร์โวมอเตอร์

ในตอนหน้าจะมาว่ากันเรื่องเซนเซอร์ที่เชื่อมต่อจากภายนอกรูปแบบต่างๆ คอยติดตามครับ

Facebook Comments Box