- Въведение в цифровия модул за сензор за светлина BH1750
- Arduino
- Програмиране на Arduino за свързване на BH1750 Light Sensor
Когато вземете телефона си на слънце или при силно осветление, той автоматично регулира яркостта според условията на осветление. Повечето от дисплейните устройства вече дни, независимо дали става въпрос за телевизор или мобилен телефон, имат сензор за околна светлина вътре, за да регулират яркостта автоматично. Днес в този урок ще използваме един такъв сензор BH1750 Light Sensor Module и ще го свържем с Arduino и ще покажем стойността на Lux над 16x2 LCD.
Въведение в цифровия модул за сензор за светлина BH1750
BH1750 е цифров сензор за околна светлина или сензор за интензивност на светлината, който може да се използва за автоматично регулиране на яркостта на дисплея в мобилни устройства, LCD дисплеи или за включване / изключване на фаровете в автомобилите в зависимост от условията на външното осветление.
Сензорът използва I 2 C сериен комуникационен протокол, което улеснява използването с микроконтролери. За I2C комуникация има SDI и SDA щифтове. В Конекторите на BH1750 атмосферния светлинен сензор е показано по-долу:
Изходът на този сензор е в LUX (lx), така че не изисква допълнителни изчисления. Lux е единицата за измерване на интензитета на светлината. Той измерва интензивността според количеството светлина, удряща върху определена област. Един лукс е равен на един лумен на квадратен метър.
Сензорът работи на напрежение от 2.4V до 3.6V (обикновено 3.0V) и консумира ток от 0.12mA. Този сензор има широк обхват и висока разделителна способност (1-65535lx) и освен това варирането на измерването също е малко (около +/- 20%). Той може да работи и самостоятелно без външен компонент.
Въпреки че LDR сензор може да се използва и за управление на устройствата въз основа на условията на осветление, но това не е толкова точно. Използвахме LDR сензор за изграждане на много приложения, контролирани от светлина:
- Схема на Arduino Light Sensor с помощта на LDR
- Тъмен детектор с помощта на LDR и 555 Timer IC
- Проста LDR схема за откриване на светлина
- Смесителна лампа Arduino Color, използваща RGB LED и LDR
Arduino
Схемата за свързване на BH1750 Light сензор с 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 протокол.
#include
Във функцията за настройка инициализирахме както LCD, така и сензора и отпечатахме съобщението за отваряне на LCD.
void setup () { 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 (); i ++; } Wire.endTransmission (); return i; } void BH1750_Init (int адрес) { Wire.beginTransmission (адрес); Wire.write (0x10); Wire.endTransmission (); }
В функция цикъл , ние отпечатваме лукс стойности в реално време през LCD. Първо сравнете връщаната стойност от функцията BH1750_Read с 2 и след това започнете да отпечатвате стойностите Lux, ако тя е равна на 2. Тук стойностите се сравняват с 2, защото функцията BH1750_Read връща стойността на броя на регистрите и четем само 2 регистъра. Така че, когато достигне 2, програмата започва да отпечатва LUX стойностите на интензивността на светлината.
След това се използва формула, за да се получат стойностите от двата регистъра и да се разделят на 1,2, което е точността на измерване.
void loop () { int i; uint16_t стойност = 0; BH1750_Init (BH1750address); забавяне (200); if (2 == BH1750_Read (BH1750address)) { value = ((buff << 8) -buff) /1.2; lcd.clear (); lcd.print ("Интензивност в LUX"); lcd.setCursor (6,1); lcd.print (стойност); } забавяне (150); }
Накрая включете Arduino и качете програмата в Arduino. Веднага след като програмата бъде качена, LCD започва да показва интензитета на светлината в LUX единици. Можете също да променяте стойностите, като променяте интензивността на светлината около сензора, както е показано във видеото по-долу.