在线时间279 小时
UID3181444
注册时间2015-12-8
NXP金币8
TA的每日心情 | 开心 2017-11-15 10:33 |
---|
签到天数: 79 天 [LV.6]常住居民II
金牌会员
- 积分
- 1779
- 最后登录
- 2020-8-22
|
所属团队:济南大学 1209Lab
预实现功能:
1.检测环境温湿度和光照强度,显示数据,预留其他传感器的拓展接口。
2.360度全向红外发射器,能够学习并自动编码对设备进行遥控。
3.能够调整家庭的背景音乐。
4.通过WIFI将数据传输到网页云平台,能够实现在线查看实时家居数据和控制家用电器,如灯、风扇和窗帘。
目前已经完成了60%左右的功能,还需要进一步的完善,这两天比较忙,没更新帖子,帖子会陆续更新。
这一贴将会介绍读取光照传感器,我们通过比较市面上几种常用的光照传感器,最终选取了价格较为低廉的BH1750,该传感器采用IIC总线通信,数字式环境光照传感器,内置16位的模数转换器,它能够直接输出一个数字信号,不需要再做复杂的计算。这是一种更精良的和容易使用简易电阻器的版本,通过计算电压,来获得有效的数据。这款环境光传感器能够直接通过光度计来测量。光强度的单位是流明"lx"。当物体在均匀的光照下它能够在每平方米获得1lx的光通量,它们的光强度是1lx。有时为了充分利用光源,你可以增加一个光源的反射装置。那样在某些方向就能获得更多的光通量,以增加被照表面的亮度。
#include "BH1750.h"
#define BH1750_Address 0x46 //器件地址
/*************************************************************************
* 1 2 0 9 电 机 拖 动 实 验 室
* 函数名称:BH1750_Init
* 功能说明:BH1750初始化
* 参数说明:无
* 函数返回:无
* 修改时间:2016年11月10日
* 备 注:无
* 作 者:何昌昕
*************************************************************************/
void BH1750_Init(void)
{
BH1750_SingleWrite(0x01);//高精度模式
}
/*************************************************************************
* 1 2 0 9 电 机 拖 动 实 验 室
* 函数名称:BH1750_GetData
* 功能说明:BH1750获取光照强度
* 参数说明:无
* 函数返回:光照强度:lux
* 修改时间:2016年11月10日
* 备 注:无
* 作 者:何昌昕
*************************************************************************/
uint8_t BH1750_GetData(void)
{
uint8_t i,lux;
uint8_t Data[3];
BH1750_SingleWrite(0x01);
BH1750_SingleWrite(0x10);
delay_ms(120);
IIC_Start(); //起始信号
IIC_SendByte(BH1750_Address+1); //发送设备地址+读信号
for (i=0; i<3; i++) //连续读取3个地址数据,存储中BUF
{
Data = I2C_ReceiveByte(); //BUF[0]存储0x32地址中的数据
if (i == 3)
{
IIC_NoAck(); //最后一个数据需要回NOACK
}
else
{
IIC_Ack(); //回应ACK
}
}
IIC_Stop(); //停止信号
lux=Data[0];
lux=(lux<<8)+Data[1];
lux=(float)lux/1.2; //参照数据手册
return lux;
}
/*************************************************************************
* 1 2 0 9 电 机 拖 动 实 验 室
* 函数名称:BH1750_SingleWrite
* 功能说明:BH1750写指令
* 参数说明:无
* 函数返回:无
* 修改时间:2016年11月10日
* 备 注:无
* 作 者:何昌昕
*************************************************************************/
void BH1750_SingleWrite(uint8_t REG_Address)
{
IIC_Start(); //起始信号
IIC_SendByte(BH1750_Address); //发送设备地址+写信号
IIC_SendByte(REG_Address); //内部寄存器地址
IIC_Stop(); //发送停止信号
}
/*----------------------------end of BH1750.c-------------------------------*/
这边就不发效果图了,贴上源代码和数据手册
BH1750.zip
(851.23 KB, 下载次数: 9)
|
|