Thanapon Tapala

Backend Developer

Embedded Developer

Smart Farmer

Maker

Thanapon Tapala

Backend Developer

Embedded Developer

Smart Farmer

Maker

Blog Post

[Arduino] วิธีใช้งาน MAX44009 (Ambient Light Sensor) ไม่ถึง 5 นาที

July 25, 2019 Arduino, ESP32, ESP8266
[Arduino] วิธีใช้งาน MAX44009 (Ambient Light Sensor) ไม่ถึง 5 นาที

Overview:

MAX44009 (Ambient Light Sensor) เป็นเซ็นเซอร์วัดความเข้มแสงแบบ I2C ซึ่งใช้พลังงานต่ำมาก Ultra-Low Power กันเลยทีเดียว โดยทางผู้ผลิตเขาบอกว่าใช้พลังงานน้อยกว่า 1μA และสำหรับการทำงานนั้นรองรับ ADC ได้ถึง 22-bit และวัดความเข้มแสงได้ตั้งแต่ 0.045 Lux ถึง 188,000 Lux อีกทั้งตัวโมดูลนั้นได้ติด IR filter และ UV filter มาด้วยเพื่อเพิ่มประสิทธิภาพของ Photodiode ในการรับแสงครับ ส่วนตารางด้านล่างนี้จะเป็นสเปคของโมดูลนี้นะครับ

Image for post

Hardware Component:

  • Arduino Uno R3
  • Ambient Light Sensor(MAX44009)
  • Wire

Library Installation::

อันดับแรกเข้าไปดาวน์โหลดและติดตั้ง Library สำหรับ MAX44009 ก่อนนะครับ ซึ่งวิธีติดตั้ง Library เพียงเราเปิดโปรแกรม ArduinoIDE หลังจากนั้นเลือก Sketch -> Include Library -> Add .ZIP Library แล้วจากนั้นก็เลือก Library ที่เราดาวน์โหลดมา

Max44009-Library

Library for MAX44009 ambient light sensor

Wiring Diagram:

Image for post

ต่อสายเสร็จแล้ว ติดตั้ง Library เสร็จแล้วขั้นตอนต่อไปทดสอบใช้งานกันครับ

เตรียมโค๊ดที่จะใช้ในการทดสอบกันก่อนเลย เสร็จแล้วทำการอัพโหลดเข้าไปยัง Arduino Board โลด!!!

#include "Wire.h"
#include "Max44009.h"

Max44009 myLux(0x4A);

uint32_t lastDisplay = 0;

void setup()
{
  Serial.begin(115200);
  Serial.println(">>>>>>>>>Start MAX44009<<<<<<<<<<");
 
}

void loop()
{
  if (millis() - lastDisplay >= 1000)
  {
    lastDisplay += 1000;
    float lux = myLux.getLux();
    int err = myLux.getError();
    if (err != 0)
    {
      Serial.print("Error:\t");
      Serial.println(err);
    }
    else
    {
      Serial.print("Lux:\t");
      Serial.println(lux);
    }
  }
}

เมื่ออัพโหลดเสร็จให้เปิด Serial Monitor เพื่อดูค่าของ Lux โดยตั้ง Baudrate อยู่ที่ 115200 bps ซึ่งจากตัวอย่างนี้ผมได้ใช้แสงจากแฟลชของโทรศัพท์ส่องไปที่ตัวรับค่าโดยตรงจะเห็นได้ว่าค่าสูงสุดที่อ่านได้นั้นจะอยู่ที่ 2937.60 (บางคนอาจจะไม่พบปัญหานะครับ) ถึงแม้ว่าจะเอาแสงจากแฟลชเข้าใกล้เท่าไหร่ค่าก็ไม่เพิ่มขึ้นแม้แต่อย่างใด อ่าวว! มีปัญหาซะแล้วสิ

Image for post

วิธีแก้ไขสำหรับคนที่มีปัญหานะครับ

ให้เราเพิ่มโค๊ดเข้าไปไว้ที่ฟังก์ชั่น void setup() โดยใส่ไว้แค่ครั้งแรกครั้งเดียวนะครับเพื่อที่บอร์ด Arduino ของเราจะไปตั้งค่า IC MAX44009 ให้ทำงานใน Automatic Mode หลังจากนั้นก็สามารถลบออกได้เลยครับ

myLux.setAutomaticMode();

ซึ่งตัวโค๊ดนี้จะเข้าไปตั้งค่าให้ IC MAX44009 ทำงานภายใต้อัลกอลิทึมของมันเอง (Automatic Mode) ซึ่งโค๊ดก่อนหน้านั้นที่เราทำการอัพโหลดเพื่อทดสอบนั้นก็สามารถใช้งานได้นะครับแต่ตัว IC MAX44009 อาจจะถูกตั้งค่ามาจากโรงงานให้ทำงานใน Manual Mode เท่านั้นเองครับ ลองอัพโหลด Sketch อีกรอบสิ

Image for post
Image for post

เพียงเท่านี้เราก็มี Arduino Lux Meter ไว้ใช้งานแล้วนะครับ ซึ่งค่าที่ได้นั้นอาจจะถูกต้องหรือไม่นั้นผมก็ไม่ทราบเหมือนกันเพราะผมก็ไม่มี Lux Meter ใช้สำหรับทดสอบเหมือนกันครับ 5555 แต่สำหรับตัวเซ็นเซอร์ตัวนี้สามารถนำไปประยุกต์ได้กับหลายโปรเจค อาจจะเป็นการเก็บค่าความเข้มแสงแดดสำหรับวิเคราะห์การเจริญเติบโตของพืชผักหรือยังไงก็แล้วแต่นะครับ

สำหรับวันนี้ขอบคุณที่ติดตามครับ สวัสดีครับ 🙂

Taggs: