概述
BH1750光照强度传感器模块二的在ArduinoUno板基础上开发
首先是传感器正面
接下来是反面
连接方式:
BH1750接口 | Arduino Uno 板接口 |
---|---|
VCC | 5V |
SCL | A4 |
DAT | A5 |
GND | GND |
ADDR | 可接可不接 |
BH1750传感器产生的结果是二进制形式分成两个字节存储的。而在传从的过程中他的高位和地位会颠倒,所以我们得对获取到的数据进行相关的处理才能还原出传感器的原始测量值。
先是对高位部分进行左移8个位 再与 低位部分进行 按位或操作 最终得到一个16位的二进制数 在对这个数的十进制形式 乘 5/6就得到原始的测量数据。
Final_value = ( ( buff[0] << 8 ) | buff[1] ) / 1.2;
光照传感器BH1750是使用I2C双向二线制同步串行协议。
所以利用光照传感器BH1750的I2C设备地址就能访问传感器的一些数据。
利用Arduino的Wire库能给指定的I2C地址写入二进制数据,也可以从制定的I2C地址获取数据。
Wire库有write()方法给begingTransmission方法所制定的设备地址写入指定的16进制数据(一般是指命令)。[1]
可以通过这两个方法给传感器发从命令。
下面是BH1750的几种测量模式的命令。
在写Arduino代码的时候可以这样表示这些指令:
0xAB // 其中 A为前四位的十进制形式 B为后四位的十进制形式
例如:
0x13 指的是 0001_0011
具体代码:
BH1750.ino
/*
* 该测试是成功的。
* 直接把BH1750光照强度传感器的SCL和DAT接口分别接到Arduino的A4,A5接口,
* 上传改代码运行一下就ok。
* @Sadam
* 1903249375@qq.com
*
*/
#include <Wire.h>
#include <math.h>
#define BH1750_CON_H 0x10 // 连续高分辨率模式,1lx,120ms
#define BH1750_CON_H2 0x11 // 连续高分辨率模式,0.5lx,120ms
#define BH1750_CON_L 0x13 // 连续低分辨率模式,4lx,16ms
#define BH1750_ONE_H 0x20 // 一次高分辨率模式,1lx,120ms
#define BH1750_ONE_H2 0x21 // 一次高分辨率模式,0.5lx,120ms
#define BH1750_ONE_L 0x23 // 一次低分辨率模式,4lx,16ms
#define BH1750address 0x23 //BH1750 I2C地址
byte buff[2];
void setup()
{
Wire.begin();
Serial.begin(9600);
}
void loop()
{
Serial.println( BH1750() );
}
double BH1750() //BH1750设备操作
{
int i=0;
double val=0;
//开始I2C读写操作
Wire.beginTransmission(BH1750address);
Wire.write(0x21);//1lx reolution 120ms//发送命令
Wire.endTransmission();
delay(200);
//读取数据
Wire.beginTransmission(BH1750address);
Wire.requestFrom(BH1750address, 2);
while(Wire.available()) //
{
buff[i] = Wire.read(); // receive one byte
i++;
}
Wire.endTransmission();
if(2==i)
{
val=((buff[0]<<8)|buff[1])/1.2;
}
return val;
}
这样就ok的。
最后
以上就是暴躁故事为你收集整理的BH1750光照强度传感器模块二的在ArduinoUno板基础上开发的全部内容,希望文章能够帮你解决BH1750光照强度传感器模块二的在ArduinoUno板基础上开发所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复