Давно хотел попробовать что-то запрограммировать.
Поэтому с Fasttech заказал Arduino и кучу модулей к нему. Одним из таких модулей был BH1750FVI - датчик освещенности, задумывался для других целей, но....
Потребовалось оценить разницу в свечении светодиода при 450мА и 700мА - появилась идея почему бы не сделать люксметр как первый проект на ардуино. Быстрый поиск в гугле выдал эту страницу http://embedded-lab.com/blog/?p=7558
Потребовалось минуты 3 чтобы скачать Arduino IDE поставить необходимые драйверы и прочитать быстрый how to
Подключил все как в статье - тупо скопировал код запустил монитор порта и увидел нули. Честно скажу - разбираться времени не было. Поэтому еще немного гугла и получаем код, который идет как пример к чипу. Закачиваем, запускаем монитор порта и вот значения с чипа в люксах сыпятся нам на экран компьютера. Простейший люксметр создан.
Вроде как датчик уже откалиброван. Преимущества решения
1. Цена (Arduino Uno R3 Rev3 Development Board SKU 1001700 $9.84 + BH1750FVI Digital Light Sensor Module for Arduino SKU 1012006 $2.90)
2. Гибкость. Вынули датчик освещенности воткнули хоть счетчик гейгера.
3. Место - у вас не будет валяться 1001 устройство
4. Веселье Даже если никогда не программировали, как и я. Почему бы просто не попробовать )
Код на всякий случай.
- Код: выделить все
/*
Sample code for the BH1750 Light sensor
Version 0.1
website:www.DFRobot.com
Connection:
VCC-5v
GND-GND
SCL-SCL(analog pin 5)
SDA-SDA(analog pin 4)
ADD-NC
*/
#include <Wire.h> //BH1750 IIC Mode
#include <math.h>
int BH1750address = 0x23; //setting i2c address
byte buff[2];
void setup()
{
Wire.begin();
Serial.begin(9600);//init Serail band rate
}
void loop()
{
int i;
uint16_t val=0;
BH1750_Init(BH1750address);
delay(200);
if(2==BH1750_Read(BH1750address))
{
val=((buff[0]<<8)|buff[1])/1.2;
Serial.print(val,DEC);
Serial.println("[lx]");
}
delay(150);
}
int BH1750_Read(int address) //
{
int i=0;
Wire.beginTransmission(address);
Wire.requestFrom(address, 2);
while(Wire.available()) //
{
buff[i] = Wire.read(); // receive one byte
i++;
}
Wire.endTransmission();
return i;
}
void BH1750_Init(int address)
{
Wire.beginTransmission(address);
Wire.write(0x10);//1lx reolution 120ms
Wire.endTransmission();
}