产品选型

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

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

用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搜物联网零妖,查看更多内容,同时欢迎大家和我一起畅聊物联网,我在物联网零妖。

单片机干货,利用DS18B20设计数字温度计

一、DS18B20简介

传统的温度检测元件有热敏电阻和热电偶。这些检测元件将所测温度信号转换为模拟电信号输出,需再经A/D转换电路将模拟信号转换为数字信号后送至单片机电路处理。采用这种温度检测方法,系统硬件电路与软件编程都相对复杂。

本文设计采用数字温度传感器DS18B20 作为温度检测元件,测温范围为-55~125OC。DS18B20可以直接读出被测温度值,而且采用3线制与单片机相连,硬件电路简单,节省系统成本并提高了系统可靠性。DS18B20主要具有以下特点:

(1)采用单总线(1-wirebus)通信方式,仅需一条口线即可实现与单片机进行数据传输;

(2)具有3引脚小体积封装方式,全部传感元件及转换电路集成在形如一只三极管的集成电路内;

(3)测温范围为-550C~+1250C;

(4)电源供电范围为3.0~5.5V;

(5)可编程为9~12位数字量输出;

(6)支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温;

(7)在每个DS18B20器件都有独一无二的序列号。

二、DS18B20内部结构

1.引脚功能

DS18B20为三引脚元件,外形同普通三极管,引脚功能详见下表。

序号名称引脚功能描述1GND电源地2DQ为数据(数字信号)输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源;3VDD为外接供电电源输入端(在寄生电源接线方式时此引脚必须接地)

2.DS18B20内部结构

DS18B20主要由64位ROM、温度传感器、非挥发的温度报警触发器TH和TL、及配置寄存器等组成。

三、DS18B20工作命令

工作时,DS18B20主机(单片机)可以使用各种命令对DS18B20进行操作。操作过程为:初始化DS18B20、发ROM功能命令、发存储器操作命令。

1.读ROM [33H]

这个命令允许总线控制器读到DS18B20的8位系列编码、唯一的序列号和8位CRC码。只有在总线上存在单只DS18B20的时候才能使用这个命令。如果总线上有不止一个从机,当所有从机试图同时传送信号时就会发生数据冲突。

2.匹配 ROM [55H]

这个是匹配ROM命令,后跟64位ROM序列,让总线控制器在多点总线上定位一只特定的DS18B20。只有和64位ROM序列完全匹配的DS18B20才能响应随后的存储器操作。所有和64位ROM序列不匹配的从机都将等待复位脉冲。这条命令在总线上有单个或多个器件时都可以使用。

3.跳过 ROM [0CCH]

这条命令允许总线控制器不用提供64位ROM编码就使用存储器操作命令,在单点总线情况下,可以节省时间。如果总线上不止一个从机,在Skip ROM命令之后跟着发一条读命令,由于多个从机同时传送信号,总线上就会发生数据冲突。

4.搜索 ROM [0F0H]

当系统初次启动时,总线控制器可能并不知道单线总线上有多少器件或它们的64位ROM编码。搜索ROM命令允许总线控制器用排除法识别总线上的所有从机的64位编码。

5.报警搜索[0ECH]

这条命令的流程和Search ROM相同。然而,只有在最近一次测温后遇到符合报警条件的情况,DS18B20才会响应这条命令。报警条件定义为温度高于TH或低于TL。只要DS18B20不掉电,报警状态将一直保持,直到再一次测得的温度值达不到报警条件。

6.写暂存存储器 [4EH]

这个命令向DS18B20的暂存器TH和TL中写入数据。可以在任何时刻发出复位命令来中止写入。

7.写暂存存储器[0BEH]

这个命令读取暂存器的内容。读取将从第1个字节开始,一直进行下去,直到第9字节读完。如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。

8.拷贝暂存存储器[48H]

这个命令把暂存器的内容拷贝到DS18B20的E2ROM存储器里,即把温度报警触发字节存入非易失性存储器里。如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又忙于把暂存器拷贝到E2PROM,DS18B20就会输出一个0,如果拷贝结束的话,DS18B20则输出1。如果使用寄生电源,总线控制器必须在这条命令发出后立即启动强上拉并最少保持10ms。

9.温度转换[44H]

这条命令启动一次温度转换而无需其它数据。温度转换命令被执行,而后DS18B20保持等待状态。如果总线控制器在这条命令之后跟着发出时间隙,而DS18B20又忙于做温度转换的话,DS18B20将在总线上输出0,若温度转换完成,则输出1。如果使用寄生电源,总线控制器必须在发出这条命令后立即启动强上拉,并保持500ms以上时间。

10.重新调出[0B8H]

这条命令把报警触发器里的值拷贝回暂存器。这种拷贝操作在DS18B20上电时自动执行,这样器件一上电暂存器里马上就存在有效的数据了。若在这条命令发出之后发出读数据时间隙,器件会输出温度转换忙的标识:0为忙,1为完成。

11.读电源 [0B4H]

若把这条命令发给DS18B20后发出读时间隙,器件就会返回它的电源模式:0为寄生电源,1为外部电源。

四、DSl8B20工作时序

作为单总线器件,DSl8B20与单片机间采用串行数据传输方式,要求按照严格的时隙进行操作。主机使用时间隙来读写DSl8B20的数据位和写命令字的位(在此所有程序均采用12M晶振),单片机P3.7引脚接DSl8B20数据线。

1.初始化DS18B20

对DS18B20操作时首先要进行初始化:单片机发出复位脉冲,DS18B20以存在脉冲响应。当DS18B20发出存在脉冲对复位脉冲响应时,表明该器件已在总线上并作好操作准备。

初始化时序见图。主机总线to时刻发送一复位脉冲(最短为480us的低电平信号),接着在tl时刻释放总线并进入接收状态。DS18B20在检测到总线的上升沿之后等待15-60us接着DS18B20在t2时刻发出存在脉冲(低电平持续60-240 us)如图中虚线所示。

2.写DS18B20

DS18B20有两种类型的写时序:写0时序和写1时序。

当主机总线to时刻从高拉至低电平时就产生写时间隙。从to时刻开始15us之内应将所需写的位送到总线上,DS18B20在t0后15-60us间对总线采样,若为低电平,则写入的位是0,见图;若为高电平,则写入的位是1,见图。连续写2位间的间隙应大于1us。

3.读DS18B20

当单片机发出读时序时,DS18B20可发送数据到单片机。所有读时序必须持续60 us以上,每个时序之间发须有至少1us的恢复时间。

下图中,主机在to时刻将总线从高电平拉至低电平时,至少在1us后t1时刻将总线拉高,产生读时间隙,读时间隙在t1时刻后到t2时刻前有效。T2距to为15us。也就是说t2时刻前主机必须完成读位,并在to后的60us一120us内释放总线。

五、设计任务描述

利用单片机89S51与DS18B20设计一数字温度计,测温范围-55~125 OC,显示精度为0.1OC。采用4位LED数码管显示温度,一位小数、三位整数。正温度时,最高位显示百位温度或不显示,负温度时最高位显示符号“-”。系统采用12M晶振。

1、硬件电路设计

DS18B20典型应用电路见图9-8所示。DS18B20数据端接至单片机P3.7引脚,采用四位数码管显示温度值(3位整数,一位小数)。

2、软件设计

系统程序主要包括主程序、温度转换子程序、温度BCD码转换子程序、显示缓冲区刷新子程序等。

主程序

主程序的主要功能是进行温度转换、温度BCD码转换、显示缓冲区刷新及温度显示等,见流程图。

温度转换子程序

该子程序的功能是启动DS18B20温度转换,并将DS18B20RAM中的前两个字节温度数据读入单片机指定存储单元中。

温度BCD码转换子程序

该子程序的功能是判别所测温度的正负值,并将其小数及整数部分分别转换成BCD码,再存入单片机指定的温度存储单元中。

从DS18B20读取出的二进制值必须先换成十进制值,才能用于字符的显示。因为DS18B20的转换精度为9~12位可选,为了提高精度采用12位。在采用12位转换精度时,温度寄存器里的值是以0.0625为步进的,即温度值为温度寄存器里的二进制值乘以0.0625,就是实际的十进制温度值。通过观察表9-5可以发现一个十进制值和二进制值之间有很明显的关系,就是把二进制的高字节的低半字节和低字节的高半字节组成一个字节,这个字节的二进制值化为十进制值后,就是温度值的百、十、个位值,而剩下的低字节的低半字节化成十进制后,就是温度值的小数部分。小数部分因为是半个字节,所以二进制值范围是0~F,转换成十进制小数值就是0.0625的倍数(0~15倍)。

六、源程序清单

;工作内存定义

TEMPL EQU 26H ;存放二进制温度低字节

TEMPH EQU 27H ;存放二进制温度高字节

TEMPHC EQU 28H ;存放温度个位及小数位

TEMPLC EQU 29H ;存放温度百位(或符号位)及十位数

ORG 0000H

MOV SP, #60H

START: LCALL READTEMP ;调温度转换子程序

LCALL CONVTEMP ;调温度BCD码转换子程序

LCALL DISPNEW ;调显示缓冲区刷新子程序

LCALL DISP ;调显示子程序 ;

LJMP START

;复位ds18B20子程序

initds1820: SETB P3.7 ;置位

NOP ;空操作

CLR P3.7 ;清零

MOV R2,#250 ;主机发出延时500微秒的复位低脉冲

DJNZ R2,$ ;自减(-1)循环

SETB P3.7 ;然后拉高数据线

MOV R2,#30

DJNZ R2,$ ;延时60us等待DS18B20回应

JNB P3.7,INIT1

JMP initds1820 ;超时而没有响应,重新初始化

INIT1: MOV R2,#120

DJNZ R2,$ ;延时240us

JB P3.7,INIT2 ;数据变高,初始化成功

JMP initds1820

INIT2: MOV R2,#240

DJNZ R2,$

RET

;从DS18B20中读出一个字节数据子程序

READDS1820: MOV R7, #08H

SETB P3.7

NOP

NOP

RDLOOP: CLR P3.7

NOP

NOP

NOP

SETB P3.7

MOV R6, #07H ;延时 15us

DJNZ R6, $

MOV C, P3.7

MOV R6, #3CH ; 延时120us

DJNZ R6, $

RRC A

SETB P3.7

DJNZ R7, RDLOOP

MOV R6, #3CH ; 延时120 us

DJNZ R6, $

RET

;向DS18B20中写一个字节数据子程序

WRITEDS1820: MOV R7, #08H

SETB P3.7

NOP

NOP

WRLOP: CLR P3.7

MOV R6, #07H ; 延时15 us

DJNZ R6, $

RRC A

MOV P3.7, C

MOV R6, #34H ; 延时104 us

DJNZ R6, $

SETB P3.7

DJNZ R7, WRLOP

RET

;温度转换子程序

READTEMP: LCALL INITDS1820

MOV A, #0CCH

LCALL WRITEDS1820 ; 跳过ROM匹配

MOV A, #44H

LCALL WRITEDS1820 ;写入转换命令

MOV R6,#34H

DJNZ R6,$

READTEMP1: LCALL INITDS1820 ; 读出两字节温度子程序

MOV A, #0CCH

LCALL WRITEDS1820 ; 跳过ROM匹配

MOV A, #0BEH

LCALL WRITEDS1820 ;读暂存器

MOV R5, #02H

MOV R0, #TEMPL

READTEMP2: LCALL READDS1820 ;读一个字节

MOV @R0, A

INC R0

DJNZ R5, READTEMP2 ;未读完继续

RET

;处理温度数据并转换为BCD码子程序

CONVTEMP: MOV A, TEMPH ;取高位字节符号位

ANL A, #80H

JZ TEMPC1 ;温度为正转移

CLR C

MOV A,TEMPL ;温度为负求补码

CPL A

ADD A, #01H

MOV TEMPL, A

MOV A, TEMPH

CPL A

ADDC A, #00H

MOV TEMPH, A

MOV TEMPHC, #0BH ;TEMPHC HI=符号位(-)

SJMP TEMPC11

TEMPC1: MOV TEMPHC,#0AH ; 温度为正,符号位不显示,置码为0AH

TEMPC11: MOV A,TEMPHC

SWAP A

MOV TEMPHC, A

MOV A,TEMPL ;小数位乘 0.0625转为BCD码(采用查表法)

ANL A, #0FH

MOV DPTR,#TEMPDOTTAB

MOVC A,@A+DPTR

MOV TEMPLC,A ;TEMPLC LOW=小数部分BCD

MOV A, TEMPL ;将两字节温度组合为一字节整数温度

ANL A, #0F0H

SWAP A

MOV TEMPL, A

MOV A, TEMPH

ANL A, #0FH

SWAP A

ORL A, TEMPL

LCALL HEX2BCD1 ;将整数温度转换为BCD码

MOV TEMPL, A

ANL A, #0F0H

SWAP A

ORL A, TEMPHC ;TEMPHC LOW= 十位数BCD

MOV TEMPHC, A

MOV A, TEMPL

ANL A, #0FH

SWAP A ;TEMPLC HI=个位数BCD

ORL A, TEMPLC

MOV TEMPLC, A

MOV A, R7

JZ TEMPC12

ANL A, #0FH

SWAP A

MOV R7, A

MOV A,TEMPHC ;TEMPHC HI=百位数BCD

ANL A, #0FH

ORL A, R7

MOV TEMPHC, A

TEMPC12: RET

;小数部分代码表

TEMPDOTTAB: DB 00H,01H,01H,02H,03H,03H,04H,04H,05H,06H

DB 06H,07H,08H,08H,09H,09H

;显示区缓冲区刷新子程序

DISPNEW: MOV A, TEMPLC ;小数位置70H中

ANL A, # 0FH

MOV 70H, A

MOV A, TEMPLC ;个位置71H中

SWAP A

ANL A, #0FH

MOV 71H, A

MOV A, TEMPHC ;十位置72H中

ANL A, #0FH

MOV 72H, A

MOV A, TEMPHC ;百位或“-”符号位置73H中

SWAP A

ANL A, #0FH

MOV 73H, A

RET

;显示子程序

DISP: MOV R1, #70H ;指向显示数据首址

MOV R5, #0FEH ;扫描控制字初值

PLAY: MOV P0, #0FFH

MOV A, R5 ;位控码放入A

MOV P2, A ;从P2口输出

MOV A, @R1 ; 取显示数据到A

MOV DPTR, #TAB ;取段码表地址

MOVC A, @A+DPTR ;查显示数据对应段码

MOV P0, A ; P0输出段码

MOV A, R5

JB ACC.1 , LOOP5 ;小数点处理

CLR P0.7

LOOP5: LCALL DL1MS ;显示1ms

INC R1 ;指向下一地址

MOV A, R5 ;扫描控制字放入A

JNB ACC.3, ENDOUT ;ACC.3=0时一次显示结束

RL A ;A中数据循环左移

MOV R5, A ;放回R5内

AJMP PLAY ; 跳回PLAY循环

ENDOUT: MOV P0, #0FFH ;一次显示结束,P0口复位

MOV P2, #0FFH ;P2口复位

RET ;子程序返回

TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH

;共阳段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-"

DL1MS: MOV R6, #14H ;1ms延时子程序

DL1: MOV R7, #19H

DL2: DJNZ R7, DL2

DJNZ R6, DL1

RET

;单字节十六进制转BCD

HEX2BCD1: MOV B, #064H

DIV AB ; B=A%100

MOV R7, A ; R7=百位数

MOV A, #0AH

XCH A, B

DIV AB ;B=A%B

SWAP A

ORL A, B

RET

END

相关问答

英语翻译基于 单片机 数字温度计 设计随着时代的进步和发展,...

[最佳回答]基于单片机的数字温度计设计Digitalthermometerdesignbasedonasinglechip(microcomputer).随着时代的进步和发展,单片机技术和温度传感...

单片机 课程设计----- 数字温度计 ?(要有原程序)

[回答]仅供参考:;**************************;*用89C2051控制的数字测温仪*...

如何判断 数字 温度表数值准确度?

数字温度计采用温度敏感元件也就是温度传感器(如铂电阻,热电偶,半导体,热敏电阻等),将温度的变化转换成电信号的变化,如电压和电流的变化,温度变化和电信...

谁知道!! 单片机 测温电路?,校车人脸测温机哪家靠谱?

[回答]设计一个基于51单片机的电子温度计系统,其采用STC12C5A60S2芯片作为控制中心,DS18B20温度传感器为测温元件,LCD为显示器件。硬件设计部分包括温度传...

单片机 主要应用于哪些方面?

“单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域。1、智能仪器单片机具有体积小、功耗低、控制功能强、扩...

玩树莓派能学到什么?

...我们首先打开终端,输入如下指令$gpioreadall可以得到树莓派的IO口定义,基本的SPI,串口,CAN,I2C通信都是应有尽有。我们可以借此和很多外设,传感器连接做...

学习嵌入式开发的过程难吗?

一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。执行装...

单片机 数码管四位和四位时钟有什么区别?

回答如下:单片机数码管四位和四位时钟的区别在于它们的功能和用途不同。单片机数码管四位是一种显示器件,用于显示数字、字母和符号等信息,通常用于电子钟表...

24v温控开关需要多少钱?- 一起装修网

[回答]4高精度温控模块制冷制热控制器温控开关参考价23XH-W1711温度控制开关可调指令式高精度温控器参考价14W1711微电脑温...24v温...

基于 单片机 的太阳能热水器水位温度显示仪的课程设计

太阳能热水器配件通用西子TMC水温水位探头太阳能传感器2芯4芯7元;太阳能热水器配件水位水温传感器热水器温控感应器温度计25元;M-2太阳能微电脑显示器水...

猜你喜欢