产品选型

51单片机的温度传感器 51单片机实现温湿度传感器实时监控并LCD显示的解决方案

小编 2024-10-06 产品选型 23 0

51单片机实现温湿度传感器实时监控并LCD显示的解决方案

简介:

51单片机STC89C52RC是本方案的选用芯片,以其8位处理和极低的价格来看,是很适合进行本次实验。LCD显示屏本次选用的型号是1602A。

在实现51单片机实现温湿度传感器实时监控并LCD显示的基础功能后,还可以通过单片机的串口通信和WIFI模块或者Zigbee模块进行物联网连接,使设备连接互联网,再通过TCP连接进行物联网的一整套方案,包括手机APP实时监控数据,也可以是手机APP远程开启风扇来调节温度或者湿度,但这些不在本次方案中细说,本人已经实现上述功能,只是技术不完善,所以不在此公布。

Protues8仿真图:

51单片机完整程序(代码很长,但是完整,可以直接复制使用):

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

//

//

//

//

//

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

#include <reg52.h>

#include <intrins.h>

#include <lcd.c>

#include <string.h>

#include <stdlib.h>

#include <stdio.h>

//

typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量 */

typedef signed char S8; /* defined for signed 8-bits integer variable 有符号8位整型变量 */

typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量 */

typedef signed int S16; /* defined for signed 16-bits integer variable 有符号16位整型变量 */

typedef unsigned long U32; /* defined for unsigned 32-bits integer variable 无符号32位整型变量 */

typedef signed long S32; /* defined for signed 32-bits integer variable 有符号32位整型变量 */

typedef float F32; /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */

typedef double F64; /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */

//

#define uchar unsigned char

#define uint unsigned int

#define Data_0_time 4

//----------------------------------------------//

//----------------IO口定义区--------------------//

//----------------------------------------------//

sbit P2_0 = P2^0 ;

//----------------------------------------------//

//----------------定义区--------------------//

//----------------------------------------------//

U8 U8FLAG,k;

U8 U8count,U8temp;

U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;

U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;

U8 U8comdata;

U8 outdata[5]; //定义发送的字节数

U8 indata[5];

U8 count, count_r=0;

U8 str[5]={"RS232"};

U16 U16temp1,U16temp2;

U8 a[]={"Temperature: "};

U8 b[]={"Humidity: "};

U8 wd_sw,wd_gw,sd_sw,sd_gw;

void Delay(U16 j)

{

U8 i;

for(;j>0;j--)

{

for(i=0;i<27;i++);

}

}

void Delay_10us(void)

{

U8 i;

i--;

i--;

i--;

i--;

i--;

i--;

}

void COM(void)

{

U8 i;

for(i=0;i<8;i++)

{

U8FLAG=2;

while((!P2_0)&&U8FLAG++);

Delay_10us();

Delay_10us();

Delay_10us();

U8temp=0;

if(P2_0)U8temp=1;

U8FLAG=2;

while((P2_0)&&U8FLAG++);

//超时则跳出for循环

if(U8FLAG==1)break;

//判断数据位是0还是1

// 如果高电平高过预定0高电平值则数据位为 1

U8comdata<<=1;

U8comdata|=U8temp; //0

}//rof

}

//--------------------------------

//-----湿度读取子程序 ------------

//--------------------------------

//----以下变量均为全局变量--------

//----温度高8位== U8T_data_H------

//----温度低8位== U8T_data_L------

//----湿度高8位== U8RH_data_H-----

//----湿度低8位== U8RH_data_L-----

//----校验 8位 == U8checkdata-----

//----调用相关子程序如下----------

//---- Delay();, Delay_10us();,COM();

//--------------------------------

void RH(void)

{

//主机拉低18ms

P2_0=0;

Delay(180);

P2_0=1;

//总线由上拉电阻拉高 主机延时20us

Delay_10us();

Delay_10us();

Delay_10us();

Delay_10us();

//主机设为输入 判断从机响应信号

P2_0=1;

//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行

if(!P2_0) //T !

{

U8FLAG=2;

//判断从机是否发出 80us 的低电平响应信号是否结束

while((!P2_0)&&U8FLAG++);

U8FLAG=2;

//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态

while((P2_0)&&U8FLAG++);

//数据接收状态

COM();

U8RH_data_H_temp=U8comdata;

COM();

U8RH_data_L_temp=U8comdata;

COM();

U8T_data_H_temp=U8comdata;

COM();

U8T_data_L_temp=U8comdata;

COM();

U8checkdata_temp=U8comdata;

P2_0=1;

//数据校验

U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);

if(U8temp==U8checkdata_temp)

{

U8RH_data_H=U8RH_data_H_temp;

U8RH_data_L=U8RH_data_L_temp;

U8T_data_H=U8T_data_H_temp;

U8T_data_L=U8T_data_L_temp;

U8checkdata=U8checkdata_temp;

}//fi

}//fi

}

void main()

{

U8 i,j;

LcdInit();

Delay(1); //延时100US(12M晶振)

while(1)

{

RH();//调用温湿度读取子程序

str[0]=U8T_data_H;

str[1]=U8T_data_L;

str[2]=U8RH_data_H;

str[3]=U8RH_data_L;

str[4]=U8checkdata;

wd_sw=U8T_data_H/10%10+0x30;

wd_gw=U8T_data_H%10+0x30;

sd_sw=U8RH_data_H/10%10+0x30;

sd_gw=U8RH_data_H%10+0x30;

a[12]=wd_sw;

a[13]=wd_gw;

a[14]=0xdf;

a[15]='C';

a[16]='\0';

LcdWriteCom(0x00+0x80);

for(i=0;i<16;i++)

{

LcdWriteData(a[i]);

}

b[9]=sd_sw;

b[10]=sd_gw;

b[11]='\%';

b[12]='\0';

LcdWriteCom(0x42+0x80);

for(i=0;i<12;i++)

{

LcdWriteData(b[i]);

}

//读取模块数据周期不易小于 2S

Delay(30000);

}

}

用51单片机做一个物联网温度计+远程开关

一、故事背景

物联网温度计

1,对物联网技术感兴趣的朋友想玩一些物联网应用练练手,这个正好合适。

2,刚毕业的萌新或者还没有毕业的青年年男女,想学习物联网知识,这个适合你练手。

3,已经入坑单片机开发很久的工程师,想了解最新的物联网架构,接触一下互联网的思维,这个很合适。

4,拿这个项项目练手很"划算"。视频在阿里云大学在线免费看,源码相关软件可以零妖博客免费下载作为参

考,原理图和PCB个⼈可以免费下载使用。单纯讨论经济成本,自己打样+购买元器件估计RMB100。想想

啊兄弟们,100块钱的投⼊,买不来吃亏买不来上当,换来的是⼀丢沉甸甸的物联⽹知识。

5,整个项目得到了阿里云IOT事业部的大力支持感谢阿里的同学给予帮助。

⼆ 物联联网框架

物联网的应用

假设你是一个设计“农用电子温度计”的工程师。一个养鸡场希望探索鸡舍温度与产蛋量的关系。

你会怎么做?

用互联网的思维来思考的话,可以这样做。。。。。

在鸡舍的不同区域安装温度传感器,并将温度数据上传至服务器; 统计每天的产蛋量,并定时上传到服务器; 在服务器上面可以跑一些机器学习或者深度学习或者其他适合这个场合的的算法,算法的输入参数就是海量的温度数据,产蛋量,对应的时间点等;经过数个月的信号采集和分析,服务器可以输出一个适合这个鸡舍的数学模型;进一步验证此模型是否足够优秀,并根据科学数据的指导合理安排鸡舍的采暖,做到节能高产!真实的环境中,还会有很多参数影响产量,比如进食时间,外部噪音水平,母鸡的饲养密度,光照的控制等等,你都可以做成传感器将数据量化,上传至服务器进行科学计算。

整个环节中每一种传感器都发挥了不可替代的作用。

单独拿出温度传感器讨论一下“物联网”的架构:

传统的设备先上报数据到服务器,可以用WIFI联网。市场上买一个WIFI模块,型号EMW3080.设备通过WIFI模块连接路由器后就可以上网了。你不用花费资金购买自己的云服务器,可以通过TCP的方式链接到阿里云的IOT专用服务器(每个月会有免费的额度,100万条消息)。和服务器建立好TCP通道后,就好比两个人打电话,已经接通了。大家说的话都是普通话才可以被双方理解。设备和服务器说话,用的是叫 MQTT 的通信协议。温度信息通过MQTT协议上报至IOT服务器。IOT服务器可以将其转发至数据库进行长久保存。物联网平台顺便将数据转发到“机器学习”中。机器学习是阿里云专门的一个大数据分析的平台,专业处理各种疑难杂症。

零妖老哥这个教程,解决的是整个环节中很小的一个问题,将温度信息上传到IOT平台。

三 用51单片机+温度传感器+WIFI模组绘制原理图

原理图和pcb已经开源,个人可以免费使用,打样测试。

1,零妖老哥在器件选型的时候,特别注意了器件的封装(外观尺寸)。所有的元器件都是为了方便生手焊接的,最小的0603电容电阻,最大的是直插的继电器。

2,买WIFI模组的时候,一定要向卖家确认模组本身的固件是AT指令的,而且版本是AT2.0

3,简单的原理图讲解零妖老哥已经拍成了视频,在阿里云大学可以免费学习。

四 100元人民币左右动手打样+焊接调试

PCB打样,购买元器件,焊接元器件是你应该掌握的一条龙技能。

零妖这里说一下购买元器件时,可以参考BOM中的编号,这个编号在立创商城是唯一的,你可以根据这个编号作为参考来购买器件。

如果你不想自己焊接,可以联系零妖,不过你需要付出99元人民币的代价(自己打样其实和这个价格差不多)。收这个价格主要是考虑鼓励大家自己动手去做,而不是直接去买现成的板子。

五 51单片机软件试玩(具体代码你可以看源码)

视频在阿里云大学在线免费看

点上述链接去看视频的第一集,快速体验一把。

简单的顺序是这样的:

给单片机下载零妖写好的程序(仓促的作品,你可以写的比它还棒,鼓励你自己写)打开零妖的上位机(最好是64位的WIN系统),填写WIFI的SSID和密码。去阿里云的物联网平台注册一个账号,并实名认证。也可以用淘宝账号登陆。根据视频的提示去IOT的控制台简单操作一下。好了,在平台查看温度吧。

六 开发Web应用或者手机APP(靠聪明的你了!)

纵览整个物联网开发的架构,可以发现这个是团队协作的事情。

做事情一定要抱团,物联网项目开发也不例外。底层硬件和单片机程序的维护需要一位工程师,服务器端的逻辑代码需要至少一位工程师,数据可视化和数据加工以及UI界面的设计需要至少一名工程师。

当你发现某公司希望你一个人搞定物联网的时候,恭喜你,你得到了一个发展团队的机会!

想要学习的小伙伴,在wx搜物联网零妖,查看更多内容,同时欢迎大家和我一起畅聊物联网,我在物联网零妖。

相关问答

51单片机温度 测量选哪个元器件?

在51单片机温度测量中,最常用的元器件是温度传感器。其中,最经济实用的是NTC热敏电阻,它可以通过测量电阻值来反映温度变化。此外,还有PT100、热电偶等传感器...

52 单片机 可以接三个 温度传感器 吗?

别说同时接3个,接30个都可以。你先采集各个传感的数据,然后用定时-中断处理。传感器是信号一般是属于模拟信号,你选51单片机,如果自带AD的,最少需要3个采样...

单片机 采集 温度传感器 怎么用?

第一要完成温度传感器与单片机的硬件连接:(1)温度传感器是将非电量转换为电量即温度转换成电压(一般电压值较小为毫伏级的)因此需要加一级运算放大电路...

我要一个测量范围在10到100度,精确度在+-5的 温度传感器 _作业帮

[最佳回答]不知道你用在什么场合?你光说这些是不够的.

温度传感器 BS18b20和AD590哪个好用,哪个使用起来比较简单,...

[最佳回答]AD590需要和高精度ADC配合使用才能得到数据,好处是速度快,编程简单,麻烦的是需要校准,电路复杂,成本高。DS18B20保证精度足够,电路简单成本低,但是...

51单片机 红外 传感器 怎么安装?

单片机红外传感器安装步骤如下:首先,将红外传感器插入单片机开发板的对应接口上;其次,连接传感器的VCC引脚到5V电源上,GND引脚到地线上,OUT引脚连接到单片...

单片机 上的ds18b20 温度传感器 是什么工作原理?

我对DS18B20还是很熟悉的,前一阵才用过。如果你是应用这个的,那么你不需要搞清楚它的内部原理,内部主要有ROM.RAM和温度传感器。DS18B20是使用一根数据线进行...

51单片机 温控风扇用什么接口?

51单片机温控风扇可以使用PWM接口来控制风扇的转速,通过不同的PWM占空比来控制风扇的转速,从而达到温度控制的目的。同时,还可以通过模拟输入接口来读取温度...

dht11温湿度 传感器单片机 原理?

dht11温湿度传感器是一种常用的单片机传感器,用于测量环境的温度和湿度。它的原理是通过内部的温湿度传感器元件来感知环境的温度和湿度,并将这些数据转换成数...

发动机水温 传感器

[回答]1,硅PN结,测量范围-40~150度,灵敏度中等,价格便宜,缺点同一型号的二极管或者三极管灵敏度不一样,有一定的离散性,互换性不好。而且调试的时候必须找...

猜你喜欢