Seeeduino XIAO Microcontroller (LAB5)

การทดลองที่ 5 จะเป็นการเชื่อมต่อระหว่าง Seeeduino XIAO กับอุปกรณ์อินพุต/เอาต์พุตต่างๆ ด้วย I2C หรือ IIC ทั้งนี้การเชื่อมต่ออุปกรณ์ต่างๆ ผ่านรูปแบบการสื่อสารนี้ก็เพื่อเพิ่มความสามารถให้กับบอร์ดประมวลผล โดยมีจุดเด่นในเรื่องของการสื่อสารได้ค่อนข้างเร็ว, ใช้ขาสำหรับเชื่อมต่ออุปกรณ์น้อย, สามารถเชื่อมต่ออุปกรณ์ต่างๆ เข้ามาแบบขนานและมีอุปกรณ์อินพุต/เอาต์พุตใช้รูปแบบการสื่อสารลักษณะนี้มากมาย ในตัวอย่างการทดลองที่ 5 จะเป็นการใช้ตัวเซนเซอร์ความเข้มของแสงสำหรับทดลอง

Seeeduino XIAO Microcontroller (LAB5)
รูปที่ 1 โมดูลเซนเซอร์แสง BH1750

รูปที่ 1 เป็นลักษณะของโมดูลเซนเซอร์แสง BH1750 ขนาดเล็ก ซึ่งใช้การสื่อสารแบบ I2C โดยการเชื่อมต่อเข้ากับบอร์ด Seeeduino XIAO ที่ขา 4 (SDA) และ 5 (SCL) และต่อไฟเลี้ยง 3.3V ที่อยู่กับบอร์ด Seeeduino XIAO ได้ทันที และข้างล่างนี้จะเป็นคุณสมบัติของโมดูลเซนเซอร์ BH1750

BH1750 sensor specifications (Ref. https://github.com/claws/BH1750 [11])

  • Operating voltage: 3.3V .. 4.5V max
  • Low current by power down: max 1uA
  • I2C bus interface: max 400kHz
  • Ambience light:
    • Range: 1 – 65535 lx
    • Deviation: +/- 20%
    • Selectable resolutions:
      • 4 lx (low resolution, max 24 ms measurement time)
      • 1 lx (mid resolution max 180 ms measurement time)
      • 0.5 lx (high resolution 180 ms measurement time)
  • No additional electronic components needed

จากข้อมูลข้างบนจะเป็นคุณสมบัติของโมดูล BH1750 เบื้องต้น และเราสามารถศึกษารายละเอียดเพิ่มเติมตามลิ้งข้างล่างบทความนี้ครับ [12]

Seeeduino XIAO Microcontroller (LAB5)
รูปที่ 2 การเขียนโปรแกรมสำหรับโครงงาน

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

/*   
       Seeeduino XIAO Microcontroller LAB5
       Test I2C Protocol by BH1750 Sensor   
       Date : 3-6-64   
 */

#include <Wire.h>
#include <BH1750.h>

 BH1750 lightMeter;

 void setup(){
   Serial.begin(115200);  
   Wire.begin();
   lightMeter.begin();
   Serial.println(F("BH1750 Test begin"));
 }

 void loop() {
   float lux = lightMeter.readLightLevel();
   Serial.print("Light: ");
   Serial.print(lux);
   Serial.println(" lx");
   delay(1000);
 }

การทำงานของโปรแกรมคร่าวๆคือ ช่วงบรรทัดแรกเราจะใช้ไลบารี่ 2 ส่วนคือ Wire.h และ BH1750.h เป็นโปรแกรมใช้งานสำเร็จที่สามารถเรียกใช้งานได้ทันที ซึ่งจะช่วยให้เราใช้เวลาในการพัฒนาโปรแกรมทั่วไปได้เร็วขึ้น จากนั้นบรรทัดถัดลงมา (void setup) จะเป็นการกำหนดค่าความเร็วในการสื่อสารด้วยคำสั่ง Serial.begin(115200); และกำหนดการเริ่มใช้งานการสื่อสารแบบ I2C และโมดูลเซนเซอร์

จากนั้นในลูปคำสั่ง (void loop) จะใช้คำสั่งอ่านค่าจากตัวเซนเซอร์ float lux = lightMeter.readLightLevel(); โดยค่าที่อ่านได้จะถูกเก้บไว้ที่ตัวแปร lux เสร็จแล้วนำค่าที่ได้ไปแสดงผลที่พอร์ตคอม (COM12) ในโปรแกรม Arduino IDE (Serial Monitor) แล้วหน่วงเวลาไว้ 1 วินาทีและกลับไปอ่านค่าจากตัวเซนเซอร์อีกครั้ง สำหรับข้างล่างนี้จะเป็นลิงก์ดาวน์โหลดไฟล์ไลบารี่สำหรับโมดูล BH1750

BH1750 Arduino library ------>  https://github.com/claws/BH1750
Seeeduino XIAO Microcontroller (LAB5)
รูปที่ 3 สัญญาณที่เกิดขึ้นตำแหน่งขา SDA ของตัวเซนเซอร์

รูปที่ 3 แสดงลักษณะของสัญญาณที่เกิดขึ้นจากขา 4 (SDA) ทั้งนี้ทดลองวัดสัญญาณเพื่อสังเกตการส่งข้อมูลระหว่างโมดูลเซนเซอร์ BH1750 และบอร์ด Seeeduino XIAO

Seeeduino XIAO Microcontroller (LAB5)
รูปที่ 4 ลักษณะการต่อวงจรสำหรับทดลองและใช้แสงนีออนในการทดสอบ

รูปที่ 4 แสดงการทดสอบให้ตัวโมดูล BH1750 รับแสงจากหลอดนีออนโดยตรง และส่งค่ามายังพอร์ตคอม (COM12)

Seeeduino XIAO Microcontroller (LAB5)
รูปที่ 5 ข้อมูลที่อ่านได้จากเซนเซอร์ขณะใช้แสงนีออน

รูปที่ 5 เป็นค่าแสดงผลที่ได้จากโมดูล BH1750 ซึ่งค่าที่โดยเฉลี่ยประมาณ 1150 lx

Seeeduino XIAO Microcontroller (LAB5)
รูปที่ 6 การทดลองใช้ถุงกรองแสงในการทดสอบ

รูปที่ 6 แสดงการทดสอบให้ตัวโมดูล BH1750 ถูกบังด้วยถุงกรองแสงและส่งค่ามายังพอร์ตคอม (COM12)

Seeeduino XIAO Microcontroller (LAB5)
รูปที่ 7 ข้อมูลที่อ่านได้ขณะใช้ใช้ถุงกรองแสงบังตัวเซนเซอร์

รูปที่ 7 เป็นค่าแสดงผลที่ได้จากโมดูล BH1750 โดยจะสังเกตเห็นว่าช่วงบรรทัดบนจะมีค่าเฉลี่ยประมาณ 380 lx ซึ่งตัวเซนเซอร์ถูกบังด้วยถุงกรองแสงและบรรทัดถัดมาจะมีค่ากลับไปที่ประมาณ 1120 lx เมื่อเอาถุงกรองแสงออกเพื่อให้เห็นความแตกต่าง

Seeeduino XIAO Microcontroller (LAB5)

สำหรับการทดลองที่ 5 นี้เป็นการสื่อสารแบบ I2C ระหว่างบอร์ด Seeeduino XIAO และอุปกรณ์อินพุต/เอาต์พุตต่างๆ ซึ่งสามารถนำมาเชื่อมต่อได้ง่าย และช่วยให้บอร์ด Seeeduino XIAO มีขาใช้งานในด้านอื่นๆ เพิ่มขึ้น ซึ่งเหมาะอย่างยิ่งสำหรับโครงงานที่ต้องการตัวประมวลผลได้รวดเร็ว ขนาดเล็ก และใช้พื้นที่จำกัด และการเลือกบอร์ดประมวลผลนี้มาใช้งานก็เป็นอีกตัวเลือกหนึ่งครับ.

Reference

  1. Seeeduino XIAO – Seeed Wiki (seeedstudio.com)
  2. How to Add Seeed boards to Arduino IDE – Seeed Wiki (seeedstudio.com)
  3. Grove Shield for Seeeduino XIAO with embedded battery management chip – Seeed Wiki (seeedstudio.com)
  4. https://wiki.seeedstudio.com/Seeeduino-XIAO-CircuitPython/
  5. Seeeduino XIAO_v1.0_191112.sch (seeedstudio.com)
  6. Seeeduino XIAO Expansion board – Seeed Wiki (seeedstudio.com)
  7. https://www.seeedstudio.com/Seeeduino-XIAO-Pre-Soldered-p-4747.html
  8. https://www.seeedstudio.com/Seeeduino-XIAO-Expansion-board-p-4746.html
  9. ArduPicLab: How to modify analog output range of Arduino Due
  10. https://forum.seeedstudio.com/
  11. https://github.com/claws/BH1750
  12. https://www.mouser.com/datasheet/2/348/bh1750fvi-e-186247.pdf
  13. https://www.instructables.com/BH1750-Digital-Light-Sensor/