全国 【切换城市】欢迎您来到装修百科!
关注我们
我要装修

单片机很好玩10,几毛钱的热敏电阻和51单片机,制作温度警报器

发布:2024-07-21 浏览:62

核心提示:第8节介绍了使用 DHT11 温湿度传感器制作温度警报器的方法。相信有的朋友应该看出,警报器是基于一个温度“阈值”的,即只要温度高于 15 摄氏度,就发出警报,整个系统并不关心其他温度值。使用低成本的热敏电阻 可以看出,按照第8节的方法使用 DHT11 制作温度警报器,其实有些浪费资源,因为 DHT11 能够测量温湿度的绝对值,而系统并没有用到这个功能,仅仅使用了 DHT11 在 15 摄氏度这个点的状态。那么,更合适的制作温度警报器的方法是什么呢?经过上一节的介绍,我们已经能够使用单片机的 ADC 外设

第8节介绍了使用 DHT11 温湿度传感器制作温度警报器的方法。
相信有的朋友应该看出,警报器是基于一个温度“阈值”的,即只要温度高于 15 摄氏度,就发出警报,整个系统并不关心其他温度值。
使用低成本的热敏电阻 可以看出,按照第8节的方法使用 DHT11 制作温度警报器,其实有些浪费资源,因为 DHT11 能够测量温湿度的绝对值,而系统并没有用到这个功能,仅仅使用了 DHT11 在 15 摄氏度这个点的状态。
那么,更合适的制作温度警报器的方法是什么呢?经过上一节的介绍,我们已经能够使用单片机的 ADC 外设测量电压了,只要再使用一个热敏电阻,就能够解决第8节的需求了。
很明显,热敏电阻的价格比 DHT11 的价格便宜多了。
热敏电阻,顾名思义,就是它的阻值会随着温度变化。
如下图:将热敏电阻串入电路,只要使用单片机的 ADC 外设测量热敏电阻两端电压,就可以知道环境温度的相对变化量了。
记录温度为 15 摄氏度时的电压值 Vref,之后只要将 ADC 采样的电压值与 Vref 对比,就能知道是否需要报警了。
使用热敏电阻制作温度计 这里为了快速实验,简单将热敏电阻与定电阻串联了,使用 51 单片机的 P1.0 口(即 ADC 通道 0)测量热敏电阻的电压:参照上一节介绍的 ADC 采样C语言程序:// 获取 10 位 adcWORD get_adc_res(BYTE ch){ WORD res = 0; res = get_adc_h8bit(ch); res <<= 2; res |= ADC_LOW2; return res;}void main(){ init_uart(9600); adc_init(); while(1){ delay_about_100ms(2); printf("adc: %0.2frn", 5.0*((float)get_adc_res(0))/1024.0); }}连接好各个组件:现在编译程序烧写到单片机,打开电脑端的串口调试软件,可以看出单片机已经能够成功测出热敏电阻的电压值了:用手捏住热敏电阻,会发现电压值升高了,说明这种方法能够检测环境温度变化。
利用热敏电阻制作温度警报器 在温度为 15 摄氏度时,记录热敏电阻的电压值为 3.88V。
因为我使用的这款热敏电阻温度越高阻值越低,相应的 P1.0 测量的电压值也越大。
所以当温度超过 15 摄氏度时,也即单片机测量的电压值大于 3.88V 时,单片机应驱动 LED 小灯执行“闪烁”报警动作。
热敏电阻两端的电压低于 3.88V 时,温度正常,单片机应驱动 LED 小灯执行“呼吸灯”动作。
结合前面几节介绍的内容,上面的设计C语言代码应如下实现,请看:sbit P20 = P2^0;void delay(unsigned int n){ unsigned int x; while(n--){ x = 50; while(x--); }}void twinkle_once(unsigned char darkTime){ P20 = 0; delay(100-darkTime); P20 = 1; delay(darkTime);}void led_breath_1s(){ static int cnt = 0; static char dark_time = 0, dir = 1 ; while(1){ twinkle_once(dark_time); if( 0==((cnt++)%4) ){ if(dir) dark_time += 1; else dark_time -= 1; if(dark_time >= 100) dir = 0; if(dark_time <= 60) dir = 1; } if(cnt > 200){ cnt = 0; break; } }}void led_twinkle_1s(){ char cnt = 5; while(cnt--){ P20 = 1; delay(2000); P20 = 0; delay(2000); }}void main(){ float vol; adc_init(); while(1){ vol = 5.0*((float)get_adc_res(0))/1024.0; if(vol > 3.88) led_twinkle_1s(); else led_breath_1s(); }}与驱动 DHT11 相比,上面的C语言程序简单了许多。
编译并烧写到单片机,发现因为温度正常,LED 小灯执行的是“呼吸灯”动作。
用手捏住热敏电阻,温度升高超出 15 摄氏度阈值后,LED 小灯执行了“闪烁”的报警动作: 至此,我们就使用价格只有几毛钱的热敏电阻完成了“温度警报器”的设计,而第 7 节完成这样的设计使用的 DHT11 至少需要几块钱。
欢迎在评论区一起讨论,质疑。
文章都是手打原创,每天最浅显的介绍C语言、linux等嵌入式开发,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。

  • 收藏

分享给我的朋友们:

上一篇:单片机很好玩10,用51单片机制作一个“温度警报器”,几毛钱就行 下一篇:[汉典装饰公司]室内装修如何做好预算表才能省钱(汉典装饰公司)

一键免费领取报价清单 专享六大服务礼包

装修全程保障

免费户型设计+免费装修报价

已有312290人领取

关键字: 装修设计 装修公司 别墅装修设计

发布招标得免费设计

申请装修立省30%

更多装修专区

点击排行