- รู้เบื้องต้นเกี่ยวกับโมดูลเซนเซอร์ตรวจจับแสงดิจิตอล BH1750
- Arduino
- การเขียนโปรแกรม Arduino สำหรับเชื่อมต่อ BH1750 Light Sensor
เมื่อคุณนำโทรศัพท์ของคุณไปกลางแดดหรือในที่มีแสงจ้าโทรศัพท์จะปรับความสว่างโดยอัตโนมัติตามสภาพแสง ปัจจุบันอุปกรณ์แสดงผลส่วนใหญ่ในแต่ละวันไม่ว่าจะเป็นทีวีหรือโทรศัพท์มือถือจะมี Ambient Light Sensor อยู่ภายในเพื่อปรับความสว่างโดยอัตโนมัติ วันนี้ในบทช่วยสอนนี้เราจะใช้เซ็นเซอร์BH1750 Light Sensor Module หนึ่งตัวและเชื่อมต่อกับ Arduinoและแสดงค่า Lux บน LCD 16x2
รู้เบื้องต้นเกี่ยวกับโมดูลเซนเซอร์ตรวจจับแสงดิจิตอล BH1750
BH1750คือDigital Ambient Light SensorหรือLight Intensity Sensorซึ่งสามารถใช้เพื่อปรับความสว่างของจอแสดงผลอัตโนมัติในโทรศัพท์มือถือจอ LCD หรือเปิด / ปิดไฟหน้าในรถยนต์ตามสภาพแสงกลางแจ้ง
เซ็นเซอร์ใช้โปรโตคอลการสื่อสารแบบอนุกรมI 2 C ซึ่งทำให้ใช้งานร่วมกับไมโครคอนโทรลเลอร์ได้ง่ายขึ้น สำหรับการสื่อสารแบบ I2C จะมีพิน SDI และ SDA pinout ของ BH1750 Ambient เซนเซอร์ตรวจจับแสงที่แสดงด้านล่าง:
เอาต์พุตของเซ็นเซอร์นี้อยู่ในLUX (lx) ดังนั้นจึงไม่จำเป็นต้องมีการคำนวณเพิ่มเติม Lux เป็นหน่วยวัดความเข้มของแสง วัดความเข้มตามปริมาณแสงที่กระทบบนพื้นที่ใดพื้นที่หนึ่ง หนึ่งลักซ์เท่ากับหนึ่งลูเมนต่อตารางเมตร
เซ็นเซอร์ทำงานกับแรงดันไฟฟ้าจาก2.4V 3.6V ไป (ปกติ 3.0V) และมันกินปัจจุบันของ0.12mAเซ็นเซอร์นี้มีช่วงกว้างและความละเอียดสูง (1-65535lx) และนอกจากนี้รูปแบบการวัดยังมีขนาดเล็ก (ประมาณ +/- 20%) นอกจากนี้ยังสามารถทำงานได้อย่างอิสระโดยไม่มีส่วนประกอบภายนอก
แม้ว่าเซ็นเซอร์ LDR จะสามารถใช้เพื่อควบคุมอุปกรณ์ตามสภาพแสงได้ แต่ก็ไม่แม่นยำขนาดนั้น เราได้ใช้เซ็นเซอร์ LDR เพื่อสร้างแอพพลิเคชั่นควบคุมแสงมากมาย:
- Arduino Light Sensor Circuit โดยใช้ LDR
- เครื่องตรวจจับความมืดโดยใช้ LDR และ 555 Timer IC
- วงจร LDR อย่างง่ายเพื่อตรวจจับแสง
- Arduino Color Mixing Lamp โดยใช้ RGB LED และ LDR
Arduino
แผนภาพวงจรเพื่อเชื่อมต่อ BH1750 Light sensor กับ Arduinoแสดงด้านล่าง
หมุดสื่อสาร I2C SDA และ SCL ของ BH1750 เชื่อมต่อกับ Arduino พิน A4 และ A5 ตามลำดับสำหรับการสื่อสารI 2 C ดังที่เราทราบแรงดันไฟฟ้าสำหรับเซ็นเซอร์คือ 3.3v ดังนั้น VCC และ GND ของ BH1750 จึงเชื่อมต่อกับ 3.3V และ GND ของ Arduino สำหรับ LCD พินข้อมูล (D4-D7) เชื่อมต่อกับพินดิจิทัล D2-D5 ของ Arduino และพิน RS และ EN เชื่อมต่อกับ D6 และ D7 ของ Arduino V0 ของ LCD เชื่อมต่อกับหม้อและใช้หม้อ 10k เพื่อควบคุมความสว่างของ LCD
การเขียนโปรแกรม Arduino สำหรับเชื่อมต่อ BH1750 Light Sensor
ส่วนการเขียนโปรแกรมสำหรับการใช้เซ็นเซอร์ LUXนี้กับ Arduinoนั้นง่ายมาก แม้ว่าจะมีไลบรารีสำหรับเซ็นเซอร์นี้ แต่เราก็สามารถใช้งานได้โดยไม่ต้องใช้สิ่งนั้น
ประการแรกเราได้รวมไฟล์ส่วนหัวสำหรับโปรโตคอลLCD และ I 2 C
# รวม
ในฟังก์ชั่น การตั้งค่า เราได้เตรียมใช้งานทั้ง LCD และเซ็นเซอร์และพิมพ์ข้อความเปิดบน LCD
การตั้งค่าเป็นโมฆะ () { Wire.begin (); lcd.begin (16,2); lcd.print ("BH1750 Light"); lcd.setCursor (0,1); lcd.print ("เซ็นเซอร์ความเข้ม"); ล่าช้า (2000); }
นี่ BH1750_Read และ BH1750_Init ฟังก์ชั่นที่ใช้ในการอ่านและเขียนค่า Lux ตามลำดับ Wire.beginTransmission () ฟังก์ชั่นที่ใช้ในการเริ่มต้นการส่งและ Wire.requestFrom (ที่อยู่ 2) ฟังก์ชั่นใช้ในการอ่านลงทะเบียนที่ 2 แสดงจำนวนการลงทะเบียน
เพิ่มเติม Wire.endTransmission () ใช้เพื่อสิ้นสุดการส่งและ ฟังก์ชัน Wire.write () ใช้เพื่อไปยังรีจิสเตอร์ที่ต้องการโดยป้อนที่อยู่ของรีจิสเตอร์นั้น
int BH1750_Read (ที่อยู่ int) { int i = 0; Wire.beginTransmission (ที่อยู่); Wire.requestFrom (ที่อยู่ 2); ในขณะที่ (Wire.available ()) { buff = Wire.read (); ผม ++; } Wire.endTransmission (); กลับฉัน; } โมฆะ BH1750_Init (ที่อยู่ int) { Wire.beginTransmission (ที่อยู่); Wire.write (0x10); Wire.endTransmission (); }
ใน วง ฟังก์ชั่นที่เราจะพิมพ์ค่าลักซ์เวลาจริงผ่านจอแอลซีดีก่อนอื่นให้เปรียบเทียบค่าที่ส่งคืนจากฟังก์ชัน BH1750_Read กับ 2 จากนั้นเริ่มพิมพ์ค่า Lux หากมีค่าเท่ากับ 2 ที่นี่จะเปรียบเทียบค่ากับ 2 เนื่องจากฟังก์ชัน BH1750_Read ส่งคืนค่าจำนวนรีจิสเตอร์และเรากำลังอ่านรีจิสเตอร์เพียง 2 รายการ ดังนั้นเมื่อถึง 2 โปรแกรมจะเริ่มพิมพ์ค่า LUX ของความเข้มแสง
จากนั้นใช้สูตรเพื่อรับค่าจากรีจิสเตอร์ทั้งสองและหารด้วย 1.2 ซึ่งเป็นความแม่นยำในการวัด
ห่วงเป็นโมฆะ () { int i; uint16_t ค่า = 0; BH1750_Init (ที่อยู่ BH1750); ล่าช้า (200); ถ้า (2 == BH1750_Read (BH1750address)) { value = ((บัฟ << 8) - บัฟ) /1.2; lcd.clear (); lcd.print ("ความเข้มใน LUX"); lcd.setCursor (6,1); lcd.print (ค่า); } ล่าช้า (150); }
ในที่สุดเปิด Arduino และอัปโหลดโปรแกรมไปยัง Arduino ทันทีที่อัปโหลดโปรแกรม LCD จะเริ่มแสดงความเข้มของแสงในหน่วย LUX คุณยังสามารถเปลี่ยนค่าต่างๆได้โดยเปลี่ยนความเข้มของแสงรอบ ๆ เซ็นเซอร์ตามที่แสดงในวิดีโอด้านล่าง