ตัวอย่างใช้งาน Micro:bit Education Kit V1.3 ตอนที่ 4

I2C บัส เป็นระบบบัสที่ทำให้ micro:bit สื่อสารรับส่งข้อมูลกับชิปไอซีตัวอื่นๆ ได้ ในท้องตลาดมีอุปกรณ์ที่ใช้มาตรฐานนี้มากมาย

บทความนี้จะเอาอุปกรณ์ที่สื่อสารด้วย I2C บัสที่ชื่อ ZX-LUX มาทดลองใช้งานกัน

แผงวงจรวัดค่าแสง ZX-LUX

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

  • ติดตั้งตัวตรวจจับแสงเบอร์ BH1750 เพื่อวัดค่าความเข้มแสง
  • ติตต่อผ่านบัส I2C
  • วัดความเข้มแสง 1 ถึง 65,535 ลักซ์ มีค่าความผิดพลาด 20%
  • ใช้ไฟเลี้ยง +3 ถึง +5.5V กินกระแสต่ำมากเพียง 200uA

รูปแบบที่ 1


รูปแบบที่ 2

การเชื่อมต่อ ZX-LUX กับบอร์ด AX-microBIT

ZX-LUX เชื่อมต่อผ่านระบบบัส I2C ดังนั้นอาจใช้สาย JST4AA-8 ที่มีสายสัญญาณ 4 เส้นเชื่อมต่อ (รูปแบบที่ 1) หรือเป็นสาย JST3AF-8 2 เส้น (รูปแบบที่ 2) โดยสายสัญญาณ 4 เส้นจะประกอบไปด้วย +3V SCL (สัญญาณนาฬิกา) SDA (ขารับส่งข้อมูล) และ GND

การติดตั้ง Extensions BH1750 เพื่อใช้งาน ZX-LUX

1.ที่แถบชุดคำสั่งกดเลือก Extensions

2.ในช่องค้นหาพิมพ์ BH1750 จะพบ Extensions ชื่อ BH1750

3.คลิกเลือกเพื่อติดตั้ง Extensions ชื่อ BH1750 จะมีชุดคำสั่งเพิ่มขึ้นมา

ชุดคำสั่งของ BH1750

Set Address สำหรับกำหนดแอดเดรสในการสื่อสารระบบบัส I2C มีให้เลือก 2 ตำแหน่งคือ 35 และ 92 ปกติจะใช้ตำแหน่ง 35 คำสั่งนี้จะต้องเรียกใช้ก่อนเรียกใช้คำสั่งอื่นๆ แนะนำให้กำหนดไว้ที่ on start

turn off สำหรับสั่งปิดการทำงานของ BH1750 เพื่อประหยัดพลังงาน

turn on สำหรับเปิดใช้งาน BH1750 อีกครั้ง หลังจากเรียก turn off

get intensity คำสั่งสำหรับอ่านค่าจากโมดูล BH1750 คืนค่าความสว่างของแสงหน่วยเป็นลักซ์ (lx)

ตัวอย่างที่ 26 อ่านค่าความสว่างเทียบกับค่าแสงของ micro:bit

https://makecode.microbit.org/_A26emu9toD7s

เช่นเคยตัวอย่างแรกสำหรับทดสอบการใช้งาน ต้องอ่านค่ามาแสดงก่อน ถ้าข้อมูลมีปริมาณมาก ต้องนำไปแสดงที่ Console Device พร้อมทั้งเห็นกราฟการเปลี่ยนแปลงด้วย

การทำงาน

    เมื่อต้องใช้โมดูล BH1750 จาก ZX-LUX จะต้องกำหนดตำแหน่งแอดเดรสและค่าเริ่มต้นก่อน โดยใช้ค่า 35 กำหนดไว้ที่ on start ส่วน forever จะสั่งให้ทำงานทุกๆ 0.2 วินาทีด้วยการส่งค่าจาก ZX-LUX ตามด้วยส่งค่าจากตัวตรวจจับแสงบน micro:bit จะได้ผลลัพธ์เป็นกราฟแยกคนละบรรทัดกัน

    จากผลการทำงานพบว่าค่าที่อ่านได้จาก ZX-LUX มีความไวในการทำงานมากกว่า เห็นการเปลี่ยนแปลงของแสงที่เกิดขึ้นเล็กน้อยได้ดี

ตัวอย่างที่ 27 อ่านค่า I2C บัสโดยไม่ต้องพึ่ง Extensions

https://makecode.microbit.org/_YEfCjJaXA4gg

เพื่อให้เข้าใจการใช้งาน ระบบบัส I2C มากขึ้น ถ้าต้องใช้ Extensions จะไม่เห็นภาพการอ่านเขียนข้อมูลกับ I2C บัส Microsoft Makecode มีคำสั่งสำหรับอ่านข้อมูล I2C บัสอยู่แล้ว อยู่ในหัวข้อ Pins > more คำสั่งชื่อ I2C read number at address โดยค่ากำหนดสำหรับ ZX-LUX คือ

Address = 35 ตำแหน่งแอดเดรสสำหรับ BH1750 คือ 35

Uint16BE รูปแบบข้อมูลเป็นแบบ 16 บิตไม่คิดเครื่องหมาย ไบต์สูงขึ้นก่อน

repeated
false ไม่มีการส่งข้อมูลซ้ำ

ข้อมูลที่ได้เป็นข้อมูลดิบ ถ้าต้องการแปลงให้อยู่ในรูปแบบค่าลักซ์ จะต้องหารด้วย 1.2 ก่อน

1.2 เมื่อเขียนในรูปแบบคณิตศาสตร์คือ 6/5 ถ้าต้องหารด้วย 6/5 ก็เท่ากับคูณด้วย 5/6 นั่นเอง

การทำงาน

จากโปรแกรมจะเป็นการแก้ไขตัวอย่างที่ 26 โดยอ่านค่าจาก I2C บัสเป็นแบบ 16 บิตไม่คิดเครื่องหมาย จากนั้นคูณด้วยหา แล้วหารแบบเอาเลขจำนวนเต็ม

ผลการทดลองพบว่าค่าที่อ่านได้ตรงกับค่าที่อ่านจาก Extension นั่นเอง

จบไว้เท่านี้สำหรับเรื่อง I2C บัสในตอนที่ 4 ย้อนกลับไปอ่านตอนเก่าๆ ได้จาก

ตอนที่ 1

ตอนที่ 2

ตอนที่ 3

Facebook Comments Box