STM32单片机+BH1750光照强度传感器+OLED屏幕+蜂鸣器报警+光强数据发送到串口调试助手+源代码

目录

1、BH1750简介

2、具体参数

3、光强驱动代码

4.串口打印数据

5、源代码

6.串口调试助手软件

7.BH1750光照强度传感器原理图资料 


1、BH1750简介


 BH1750是一种用于两线式串行总线接口的数字型光强度传感器集成电路。这种集成电路可以根据收集的光线强度数据来调整液晶或者键盘背景灯的亮度。利用它的高分辨率可以探测较大范围的光强度变化。BH1750的内部由光敏二极管、运算放大器、ADC采集、晶振等组成。对应广泛的输入光范围(相当于1-65535lx),最小误差变动在土20%,而且受红外线影响很小。

 1、采用ROHM原装BH1750FVI芯片
 2、光照度范围: 0-655351x,传感器内置16bitAD转换器直接数字输出,省略复杂计算)省略标定
 3、内部包含通信电平转换,与5V单片机I0连接,支持STM32/51/ardunio
 4、XH2.54接口连接线,方便客户DIY
 5、小体积,广泛应用于室内光照检测、蔬菜、苗圃、温室大棚

2、具体参数


采用ROHM原装BH1750FVI芯片
供电电源: 3-5v
数据范围: 0-65535lx
传感器内置16bitAD转换器
直接数字输出,省略复杂的计算,省略标定
不区分环境光源,接近于视觉灵敏度的分光特性
可对广泛的亮度进行1勒克斯的高精度测定
标准NXP 1IC通信协议
模块内部包含通信电平转换,与5v单片机IO直接连接

3、光强驱动代码

BH1750.文件

#include "BH1750.h"
#include "delay.h"

uint8_t BH1750_Buf[8];   
int     dis_data;                       
//*********************************************************
//
//lѸׁԶBH1750Śҿ˽ߝ
//
//*********************************************************
void Multiple_read_BH1750(void)
{  
		uint8_t i;	
    BH1750_IIC_start();                          
    BH1750_IIC_write_byte(BH1750_Rd);         
	
		for (i=0; i<3; i++)                      
    {
        BH1750_Buf[i] = BH1750_IIC_read_byte();          
        if (i == 3)
        {

          BH1750_IIC_NACK();                
        }
        else
        {		
          BH1750_IIC_ACK();                
       }
   }

    BH1750_IIC_stop();                          
    Delay_ms(5);
}

//*********************************

void Single_Write_BH1750(uint8_t REG_Address)
{
    BH1750_IIC_start();                  
    BH1750_IIC_write_byte(BH1750_Wr);  

    BH1750_IIC_write_byte(REG_Address);    
  //  BH1750_SendByte(REG_data);       
    BH1750_IIC_stop();                  
}

//Եʼۯ

void BH1750_Init(void)       
{
   Single_Write_BH1750(0x01); 
}
//ׁȡ˽ߝҢԦm׵ܘ

float BH1750_Read_Data(void) 
{																										//}ɧς׈2251,Ϊ22.51ʣˏ׈ìʪ׈30211ìΪ30.211%
    Single_Write_BH1750(0x01);  
    Single_Write_BH1750(0x10);   

     Delay_ms(180);             

    Multiple_read_BH1750();       

    dis_data=BH1750_Buf[0];
    dis_data=(dis_data<<8)+BH1750_Buf[1];
    
    BH1750_temp=(float)dis_data/1.2;
	return BH1750_temp;
}

 BH1750_IIC.c文件

#include "BH1750_IIC.h"
#include "delay.h"
#define IIC_D     6
void BH1750_GPIO_Init(void)	
{

	GPIO_InitTypeDef  GPIO_InitStructure;  

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
 

	GPIO_InitStructure.GPIO_Pin =  IIC_SDA_PIN | IIC_SCL_PIN;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//
	GPIO_Init(GPIOB, &GPIO_InitStructure);

}

void SDA_Pin_IN(void)  //SDA
{
	GPIO_InitTypeDef  GPIO_InitStructure;  
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
 
	GPIO_InitStructure.GPIO_Pin =  IIC_SDA_PIN ;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//
	GPIO_Init(GPIOB, &GPIO_InitStructure);
}

void SDA_Pin_Output(void) //
{
	GPIO_InitTypeDef  GPIO_InitStructure;  
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
 
	GPIO_InitStructure.GPIO_Pin =  IIC_SDA_PIN ;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void BH1750_IIC_Delay()
{
			Delay_us(IIC_D);
}
/*
 *@brief 		IIC؜ПԵʼۯگ˽
 *@param[in]	NULL
 *@author		MrWeng
 *@date			2020-8-10
 */
void BH1750_IIC_Init(void)	
{
		IIC_SDA_H;
		IIC_SCL_H;
		BH1750_IIC_Delay();
}


void BH1750_IIC_start(void)  
{

		IIC_SDA_H;//-ٟ
		IIC_SCL_H;
		BH1750_IIC_Delay();
		IIC_SDA_L;
		IIC_SCL_L;		
		BH1750_IIC_Delay();
}

void BH1750_IIC_stop(void) 
{

		IIC_SCL_H;
		IIC_SDA_L;
		BH1750_IIC_Delay();
		IIC_SDA_H;	
		IIC_SCL_L;
		BH1750_IIC_Delay();
}

uint8_t BH1750_IIC_Get_ack(void)
{
		uint16_t CNT;
		SDA_Pin_IN();
		IIC_SCL_L;		
		IIC_SCL_H;		
		BH1750_IIC_Delay();
		while((IIC_SDA_Read)  && (CNT < 100) )
		{
				CNT++;
				if(CNT == 100)
				{
						return 0;
				}
		}

		IIC_SCL_L;		
		BH1750_IIC_Delay();
		SDA_Pin_Output();
		return 1;

}

void BH1750_IIC_ACK(void)	
{ 

		IIC_SDA_L;	
		IIC_SCL_H;	
		BH1750_IIC_Delay();
		IIC_SCL_L;	
		BH1750_IIC_Delay();
}


void BH1750_IIC_NACK(void)
{ 

		IIC_SDA_H;	
		IIC_SCL_H;	
		BH1750_IIC_Delay();
		IIC_SCL_L;	

}


void BH1750_IIC_write_byte(uint8_t Data)
{

		uint8_t i;
		for(i=0;i<8;i++)
		{
				if((Data & 0x80) == 0x80)
				{
						IIC_SDA_H;
						
				}
				else
				{
						IIC_SDA_L;
						
				}
				
				IIC_SCL_H; 
				BH1750_IIC_Delay();
				IIC_SCL_L;
				BH1750_IIC_Delay();
				Data = Data << 1;
				
		}
		IIC_SDA_L;		
		BH1750_IIC_Get_ack();
}

uint8_t BH1750_IIC_read_byte(void)
{

		uint8_t i;
		uint8_t Data = 0;       
		SDA_Pin_IN();
		IIC_SCL_L;	//Ј-֍ʱדП
		IIC_SDA_H;	//ՙ-ٟ˽ߝП
		BH1750_IIC_Delay();
		for(i = 0;i < 8;i++)
		{
				Data = Data<<1;		
				
				IIC_SCL_H;				
				BH1750_IIC_Delay();
				if(IIC_SDA_Read)		
				{
						Data = Data|0x01;	
				}
				IIC_SCL_L;				
				BH1750_IIC_Delay();
		}
		SDA_Pin_Output();
		return Data;					

}

4.串口打印数据

5、源代码

《STM32单片机+BH1750光照强度传感器+OLED屏幕+蜂鸣器报警+光强数据发送到串口调试助手》源代码资源-CSDN文库

6.串口调试助手软件

串口调试助手-keil5调试工具资源-CSDN文库

7.BH1750光照强度传感器原理图资料 

BH1750光照强度传感器原理图、模块资料资源-CSDN文库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式Dora

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值