历史上的今天
返回首页

历史上的今天

今天是:2024年10月30日(星期三)

正在发生

2019年10月30日 | 单片机SHT20+BH1750+BMP180温湿度、气压、光照度三合一设计

2019-10-30 来源:51hei

最近一直想做一个可以检测温湿度的,光照强度,还有气压检测的仪表。而且要精度高反应快的传感器,在网上找了一圈,看的眼花缭乱,符合要求的价格都不低,无意中看到某宝看到一个温湿度、气压、光照度三合一的传感模块,最重要的是模块上面集成的温湿度芯片是我首选的SHT20,还有光照强度传感器BH1750. ,都符合自己的要求,这2款芯片在大学的时候就有所了解,算是温度检测和光照检测领域里,精度高,体积非常小,性价比很高的一款。气压传感器一般都是采用BMP180或者BMP085,这2个芯片也差不多的,现在用BMP180的感觉要多一些。非常符合设计需要。 再加上这个模块是串口输出,直接就可以读取数据啦。哈哈哈,根本不需要自己去进行3个传感器的驱动代码编程,。(其实之前我也买个单独的模块回来,本来打算3个模块并联使用,,奈何程序花了好几天时间都没有调试通过,后来模块直接都不知道丢哪里去了。)。于是果断重新就此准备自己重新制作一个。        因为是模块,没有相关的显示屏,硬着头皮问卖家能不能拿送个显示屏................结果和预想的一样。需要单独购买。好吧,又买了一块单片机的板子,到手拼接后,开始查资料制作,于是出现了此贴。

从单片机板子和模块到手后 到制作完成总共花了1天时间!附实物图与相关程序,留给需要的人吧!其实还可以通过气压大小,有相应来计算出海拔高度。过段时间更新的时候我在上传上来。。。。3合1模块上的传感器:CMCU-01 SHT20+BMP180+BH1750FVI

.

 

各传感器的参数介绍:
================================================
SHT20是瑞士Sensirion 数字温湿度传感器。 SHT20数字温湿度传感器是众多温湿度传感器中一款性价比高的产品,配有4C 代CMOSens®芯片。除了配有电容式相对湿度传感器和能隙温度传感器外,该芯片还包含一个放大器、A/D 转换器、OTP 内存和数字处理单元。用量以百万计,且应用领域广泛。该类传感器适用于对成本极其敏感但又注重品质的大批量生产的行业。 同时具有很高的温度精度和湿度精度。 SHT20系列模块专为低功耗小体积应用设计,具有良好的品质、快的响应速度、抗干扰能力强、性价比高等优点、极低的功耗。懂行的人都知道它的优点。传感器重要参数:                   湿度测量范围:0—100%RH
湿度精度范围(10%RH to 95%RH): ±3%RH温度测量范围: -40℃—125℃  (-40 - +257°F)温度精度范围:±0.3℃湿度迟滞:±1%RH测量时间:50ms年漂移量:-0.5%RH/year响应时间:5 s
=================================================
BMP180是一款高精度、小体积、超低能耗的压力传感器,可以应用在移动设备中
它的性能卓越,绝对精度最低可以达到0.03hPa,并且耗电极低,只有3μA,采用强大的8-pin陶瓷无引线芯片承载(LCC)超薄封装,可以通过I2C总线直接与各种微处理器相连
主要特点:
压力范围:300~1100hPa(海拔9000米~-500米),从这里可以看出来,该模块还可以通过公式计算海拔高度哦~
低功耗:5μA,在标准模式
高精度:低功耗模式下,分辨率为0.06hPa(0.5米)
高线性模式下,分辨率为0.03hPa(0.25米)

======================================================BH1750FVI
采用ROHM原装BH1750FVI芯片
光照度范围:0-65535 lx   (有没有发现比光敏电阻强N倍?)
传感器内置16bitAD转换器
直接数字输出,省略复杂的计算,省略标定
不区分环境光源
接近于视觉灵敏度的分光特性
可对广泛的亮度进行1勒克斯的高精度测定

===============================================

单片机源程序如下:

#include

#include

#include"LCD1602.h"


#define uchar unsigned char                // 以后unsigned char就可以用uchar代替

#define uint  unsigned int                // 以后unsigned int 就可以用uint 代替



uchar rxfalg=1;

uchar Byte1,Byte2,Byte3,Byte4,Byte5,Byte6,Byte7,Byte8,Byte9,Byte10,Byte11,Byte12,Byte13,Byte14,Byte15,Byte15,Byte16;


uint Light,Pressure,Temp; //定义的光照强度,气压,温度。

uchar Humi; //湿度

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

// 毫秒级的延时函数,time是要延时的毫秒数

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

void DelayMs(uint time)

{

        uint i,j;

        for(i=0;i                for(j=0;j<112;j++);

}




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

// 串口初始化

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

void UartInit()

{

        SCON = 0x50;        // 配置串口寄存器

        TMOD = 0x20;        // 配置定时器寄存器

        TH1  = 0xfd;        // 计算波特率的值为9600

        TL1  = 0xfd;        // 计算波特率的值为9600

        EA   = 1;                        // 打开总中断

        ES   = 1;                        // 打开串口中断

        TR1  = 1;                        // 启动定时器

}



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

// 主函数

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

void main(void)

{


  LCDInt(); //液晶初始化

        UartInit();                                                        // 串口初始化

  DelayMs(500);


             SetXY(0,0); // 光照

                         LCDWriteDate('L');

                         LCDWriteDate(':');

             SetXY(0,7);

             LCDWriteDate('L');

             LCDWriteDate('x');

        

             SetXY(1,0); // 气压

                         LCDWriteDate('P');

                         LCDWriteDate(':');

             SetXY(1,8);

             LCDWriteDate('K');

             LCDWriteDate('p');

           

            

             SetXY(0,10); // 温度

                         LCDWriteDate('T');

                         LCDWriteDate(':');

            // SetXY(0,15); //

                        // LCDWriteDate(0XDF);

                        

             SetXY(1,11); //湿度

                         LCDWriteDate('H');

                         LCDWriteDate(':');

                         SetXY(1,15); //

       LCDWriteDate('%');

                        

        

        while(1)

        { 

                

                 

                if(rxfalg==0)

                {

                         rxfalg=1;

                 

                  //光照强度

                   SetXY(0,2); //

       LCDWriteDate(Light/10000+0x30);

                         LCDWriteDate(Light%10000/1000+0x30);

                         LCDWriteDate(Light%1000/100+0x30);

                         LCDWriteDate(Light%100/10+0x30);

                         LCDWriteDate(Light%10+0x30);

                        

                         //气压强度

                   SetXY(1,2); //

       LCDWriteDate(Pressure/10000+0x30);

                         LCDWriteDate(Pressure%10000/1000+0x30);

                         LCDWriteDate(Pressure%1000/100+0x30);

                         LCDWriteDate('.');

                         LCDWriteDate(Pressure%100/10+0x30);

                         LCDWriteDate(Pressure%10+0x30);

                        

                         //温度

                   SetXY(0,12); //

       LCDWriteDate(Temp/100+0x30);

                         LCDWriteDate(Temp%100/10+0x30);

                         LCDWriteDate('.');

       LCDWriteDate(Temp%10+0x30);

                         

                         //湿度

                   SetXY(1,13); //

       LCDWriteDate(Humi/10+0x30);

       LCDWriteDate(Humi%10+0x30);

                        

                }

                

           DelayMs(500);

}


}


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

// 串口中断服务程序

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

void UartInt(void) interrupt 4

{

      ES = 0;                           //关串口中断,防止中断嵌套


                        while(!RI);                        // 固定位0XAA

推荐阅读

史海拾趣

Base Two (2) Systems公司的发展小趣事

Base Two (2) Systems深知技术创新的重要性,因此不断加大对研发的投入。公司引进了一批高端研发人才和先进设备,为研发团队提供了强有力的支持。在研发团队的努力下,公司不断推出新产品,并对现有产品进行升级改进,以满足市场的不断变化和客户的多样化需求。

Galil Motion Control Inc公司的发展小趣事

随着公司业务的不断发展壮大,Base Two (2) Systems开始实施国际化战略。公司积极拓展海外市场,与多个国家和地区的合作伙伴建立了合作关系。同时,公司还在海外设立了研发中心和生产基地,以便更好地服务全球客户。这一国际化战略的实施,使得公司的业务范围更加广泛,也为公司的未来发展打开了新的篇章。

这五个故事展示了Base Two (2) Systems在电子行业中的发展历程和取得的成就。通过技术创新、市场扩张、研发投入、品质管理和国际化战略的实施,公司逐渐发展成为电子行业中的佼佼者,为行业的发展做出了积极的贡献。

ERA Transformers公司的发展小趣事

为了保持技术领先地位和市场竞争力,ERA Transformers公司非常重视创新与研发工作。公司每年都会投入大量资金用于新产品的研发和技术创新。在一次研发项目中,公司成功开发出了一种具有超高能效和极低损耗的新型变压器。这款产品的问世立即引起了市场的广泛关注,并成功获得了多项国内外专利。持续的创新与研发使得ERA Transformers公司在电子行业中始终保持着领先地位。

科山芯创(COSINE)公司的发展小趣事

科山芯创(COSINE)公司成立于2017年,由一群对射频及模拟集成电路芯片充满热情的工程师创立。他们看到了中国电子行业中对于高性能、高品质芯片的巨大需求,于是决定成立一家公司,专注于这一领域的研发与设计。他们的初心是通过自主创新和核心技术,为国内外客户提供有竞争力的解决方案。

EMCORE公司的发展小趣事

自成立以来,科山芯创始终坚持技术创新。他们投入大量资源用于研发,不断推出新产品。其中,COS8820射频收发芯片、COS6212线驱动器功放芯片等产品,凭借其优异的性能和稳定性,在市场上获得了广泛认可。这些产品的成功,不仅证明了科山芯创的技术实力,也为其在电子行业中树立了良好的口碑。

台湾三礼(3L)公司的发展小趣事

1991年,三礼公司正式成立了美国分公司(3LU),此举标志着公司开始进军北美市场,将其作为货物管理中心,并与G-TEP合作组建了3L Global Co.(3LG),共同开拓和发展所有北美业务。这一战略决策为三礼公司打开了新的增长通道,使得公司能够更好地服务全球客户,提升品牌影响力。

问答坊 | AI 解惑

最实用的新手教程,详细的图解,绝对原创

本人制作的MEGA16入门图解教程。号称新手保姆。。不信自己看。。。。。…

查看全部问答>

电力电子专业状况及职场发展

老是看到好多新同学打听这个专业,N多人还在比较电力系统和电力电子与电力传动,哪个更好?哪个更有前(钱)途?马上就过年了,今天有点空,也想冒下泡,想跟对这一方向有点兴趣的兄弟姐妹简单聊一下总体情况。我也只是一名研发工程师,说得不对不全 ...…

查看全部问答>

华为布线规范

比较规范的布线…

查看全部问答>

单片机和FPGA通信

本帖最后由 paulhyde 于 2014-9-15 03:33 编辑 我找到的一些单片机和FPGA通信的材料,里面含有两片资料文章 [ 本帖最后由 open82977352 于 2010-2-10 16:46 编辑 ]  …

查看全部问答>

STM32W108问题,还请指教

大家好,我想用STM32W108做一个ZIGBEE的无线通信方案,有两个问题请教。 (1)这款新品有卖了吗?大致多少价格?    或者哪里能申请样片? (2)如果说我采用树型网络,ARM9作为协调器,STM32W108作为路由设备,CC2430作为终端设备。 ...…

查看全部问答>

出口香港食品营养标签将有新规

   香港政府《2008年食物及药物(成分组合及标签)(修订:关于营养标签及营养声称的规定)规例》将于2010年7月1日起实施。届时所有在香港销售的预包装食品(规例规定可豁免的食品除外)须标注营养标签,该营养标签必须标示能量和七种核心 ...…

查看全部问答>

LM3S微控制器初始化配置文件

接触LM3S快一周了,这是我第一次接触ARM微处理器,没想到很快就上手啦,激动之余觉得里面那么多的寄存器,设置起来确实是十分的复杂,虽然提供了库函数,但是里面的函数及常量实在是多,如果不用去记忆这些函数就好了,为此,我编写了一个初始化配 ...…

查看全部问答>

求CC2430实现无线抄表的资料

用CC2430,利用ZigBee无线技术,将水表数据发送到另个CC2430模块,再在液晶屏上显示数据。 请问该怎么做,求有关的资料…

查看全部问答>

Redhat5.0下nfs的搭建

1 首先把 PC机,虚拟机,开发办三个系统构成一个桥接网络。配置过程如下:(1)保证虚拟机是桥接模式如图:VM――》settings设定虚拟网卡为桥接模式:选择虚拟网卡和物理网卡为同一个:(2)在linux的终端输入lokkit 命令关闭linux的防火墙:接着在 ...…

查看全部问答>