学过单片机就会!自己动手做一个温度报警器

科技   2024-12-28 09:01   广东  
大疆无人机、福禄克万用表、小米手机、华为手表等你来!

👆面包板社区DIY活动进行中!


1.介绍

相信很多实验设计都是做温度传感器报警的设计,今天就来讲一下它的整体设计思路,这个设计非常简单,基本学过单片机的再会点数据通信基本就能拿捏的死死的。

2.设计


这个设计主要有四个部分组成,分别是单片机最小系统、显示屏、温度传感器和声光报警器,电路图如下图1所示。

图1

都是比较常见的模块,所以代码也是非常简单的,一般做设计都是先做好人机交互,也就是图1中的LCD1602显示屏。
void write_1602com(uchar com)//****液晶写入指令函数****{     rs=0;//数据/指令选择置为指令     rw=0; //读写选择置为写     P0=com;//送入数据     delay(1);     en=1;//拉高使能端,为制造有效的下降沿做准备     delay(1);     en=0;//en由高变低,产生下降沿,液晶执行命令}void write_1602dat(uchar dat)//***液晶写入数据函数****{     rs=1;//数据/指令选择置为数据     rw=0; //读写选择置为写     P0=dat;//送入数据     delay(1);     en=1; //en置高电平,为制造下降沿做准备     delay(1);     en=0; //en由高变低,产生下降沿,液晶执行命令}
可以看到驱动代码非常的少,这就是为什么很多基本设计都会用它作为人机交互装置。

然后就是DS18B20温度传感器了,这个传感器也是非常常用的,教学也会拿这个传感器来讲解,其实这个传感器的时序了解清楚之后,就没有任何难度了。
void Init_DS18B20_I(void)//初始化ds1820{     unsigned char x=0;     DQ_I = 1;    //DQ复位     Delayns(8);  //稍做延时     DQ_I = 0;    //单片机将DQ拉低     Delayns(80); //精确延时 大于 480us     DQ_I = 1;    //拉高总线     Delayns(14);     x=DQ_I;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败     Delayns(20);}//****************************************************************uchar ReadOneChar_I(void)//读一个字节{     unsigned char i=0;     unsigned char dat = 0;     for (i=8;i>0;i--)     {           DQ_I = 0; // 给脉冲信号           dat>>=1;           DQ_I = 1; // 给脉冲信号           if(DQ_I)           dat|=0x80;           Delayns(4);     }     return(dat);}//****************************************************************void WriteOneChar_I(uchar dat)//写一个字节{     unsigned char i=0;     for (i=8; i>0; i--)     {           DQ_I = 0;           DQ_I = dat&0x01;           Delayns(5);           DQ_I = 1;           dat>>=1;     }}//****************************************************************uint ReadTemperature_I(void)//读取温度{     unsigned char a=0;     unsigned char b=0;     unsigned int t=0;     float tt=0;     Init_DS18B20_I();     WriteOneChar_I(0xCC); // 跳过读序号列号的操作     WriteOneChar_I(0x44); // 启动温度转换     Init_DS18B20_I();     WriteOneChar_I(0xCC); //跳过读序号列号的操作     WriteOneChar_I(0xBE); //读取温度寄存器     a=ReadOneChar_I();  //读低8位     b=ReadOneChar_I(); //读高8位     if((b&0xf8)==0){           t=b;           t<<=8; //将b做高八位           t=t|a; //或上a,a做低八位           tt=t*0.0625;        //通过固定值算出温度           t= tt*10+0.5; //放大10倍输出并四舍五入     }     else{ //如果为负数求补码+1           a=~a;  //补码           b=~b;           t=b;           t<<=8;           //将b做高八位           t=t|a;           //或上a,a做低八位           tt=t*0.0625;        //通过固定值算出温度           t= tt*10+1.5; //放大10倍输出并四舍五入           t = -t;     }     return(t);}

不过这个传感器有一个通病,就是读写的时候可能会读到85这个值,所以读写的时候尽量不要被中断抢占,让他正常的读温度完成。

声光报警就不多说了,根据设定值报警即可,最终的效果如下图2所示。

图2


3.总结


这个设计虽然基础,但是对于初学者来说,还是有一定的知识量的,可以好好学一学,大佬就当看个小白教学就好了~

作者:二哲科技 来源:面包板社区

扫码加入

单片机技术交流群


面包板社区DIY活动进行中!👇

https://mbb.eet-china.com/forum/topic/147007_1_1.html





在面包板社区博客/论坛分享你的DIY电子设计,并在发布文章时添加【电子DIY】标签,字数不限,文章通过社区评审,将有丰富奖励送给您!


↓ 扫码参加


【奖项设置】


一等奖(1位):大疆DJI Neo无人机、小米Redmi Note13Pro、海康威视 NAS Mage20PRO...(任选一个)
二等奖(不限人数):福禄克F15B PRO MAX万用表、华为WATCH FIT 2...(任选一个)
三等奖(不限人数):小米手环9 NFC版、小米mini筋膜枪2C、价值¥300电子常用工具大礼包...(任选一个)
参与奖所有参与者均可获得500个E币奖励!
过万奖励若单篇文章/单个视频,在MBB微信号阅读量过万,每篇奖1000个E币奖励(E币可在商城兑换奖品,数据统计截至时间为2025.2.28,仅限前20篇,按文章发布在MBB社区的时间排序,个人累计封顶奖励10000个E币奖励)
E币可以在E币商城(https://estore.eet-china.com/)兑换工程师常用工具及精美礼品!如,镊子、开发板、示波器、工具箱、收纳盒等。


【文章要求】

1、内容要求原创,必须和电子行业相关且首次发布于互联网

2、内容应包括:设计思路、成品展示(如电路原理、功能展示、成本控制方案或清单、代码等)涉及核心知识产权的内容可不展示。

3. 活动期间,同一ID可多次参加,等质量条件下多发作品可累积评分。


活动时间:2024.11.13 - 2025.02.13

点击阅读原文,了解活动详情!

面包板社区
分享电子技术干货,电子工程师福利!EET电子工程专辑、ESM国际电子商情、EDN电子技术设计官方社区。
 最新文章