基于Arduino UNO的办公室测温仪

2017-08-078.5万
精华项目
AI 快速预览详细 收起
基于Arduino UNO的办公室测温仪是一个简单的项目,使用DS18B20温度传感器和Gravity: I2CLCD1602彩色背光液晶屏来实时监测和显示室内温度。该项目适用于办公环境,通过不同颜色的背光提示温度区间,帮助用户及时调整空调设置。硬件清单包括DFRduino UNO R3、DS18B20传感器和IO传感器扩展板。最终效果是通过彩色背光液晶屏直观显示温度变化,提高办公环境的舒适度。
基于Arduino UNO的办公室测温仪
在这个出门怕热化了,进门怕感冒的夏天里,我怎么样才能时时刻刻关注周围的温度?
前段时间给远方的朋友打了一通电话,大概的寒暄了一下。然而在这么热的天气里,她说她感冒了,原因是太冷了:funk:,听到这话都觉得震惊了。现在的她整天要拿着体温计监测自己的体温 。还提醒我要注意室内温度,不要觉得空调吹着很舒服。
回家后想着她说的话,如果自己能做一个测温仪,随时随地的检测我所处的环境温度就可以了,于是我就采用DS18B20温度传感器结Arduino UNO做了一个小型的办公室测温仪。
基于Arduino UNO的办公室测温仪图1
下面就来介绍一下我们做这个小型的办公室测温仪都需要些什么吧。
【所需物品】

基于Arduino UNO的办公室测温仪图6

相对其他的温度传感器,DS18B20温度传感器具有体积小,精度高。其连线也非常方便,经过封装后可以运用于多种场合,主要根据应用场合的不同而改变其外观,适合多种室内场合测温,比如大棚测温,机房测温,洁净室测温等。

基于Arduino UNO的办公室测温仪图7

看多了千篇一律的LCD液晶显示屏,此款显示屏会有不一样的体验,它提供1600万种颜色组合,带给我们不一样的视觉感受,从此摆脱了单色背光。在接口上也很方便,仅仅需要两根通信线-IIC就可以完成背光控制。并且支持屏幕滚动,光标移动等功能,代码也是通过专门的Arduino库完成所有的设计。

基于Arduino UNO的办公室测温仪图8

在主控板上我选择是的DFRduino UNO R3,他完全兼容Arduino UNO R3版本。同样使用了更强大的ATmega16U2替代了8U2,转换速度、内存和Arduino UNO R3一样。对个人而言我觉得它的外观更好看,性价比高。

基于Arduino UNO的办公室测温仪图9

IO传感器扩展板可以为初学者省去繁琐的面包板接线和故障排除,专注实现自己的创意想法。
【配件图】


【电路连接示意图】
   

【效果图】
基于Arduino UNO的办公室测温仪图2

当室温<25℃的时候,屏幕显示绿色。这样的温度才令人舒心吗。
基于Arduino UNO的办公室测温仪图3

当25℃<室温<30℃时,屏幕显示黄色,室内的温度已经开始逐渐上升了。这时你可以考虑用上小风扇了。
基于Arduino UNO的办公室测温仪图4

当室温>30℃时,屏幕显示红色,当红色预警到来的时候,说明小风扇已经不起作用了,需要搬出空调来拯救我们的夏天了。为了让它看起来比较美观,我用3D打印机给它做了一个外壳,这样可以好好保护它了。
【3D文件装配图】


【3D文件完整效果图】


【实物装配】

3D打印文件我会附在文末,有兴趣的小伙伴可以下载。如果你有更好的创意,也可自行设计。
在程序方面,还可以加上时间显示,这样既可以当测温仪,又可以当时钟。朋友们有兴趣的话,也可以扩展这方面的功能哦。

【简单的程序】
  1. #include <OneWire.h>
  2. #include <Wire.h>
  3. #include "DFRobot_RGBLCD.h"
  4. int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2
  5. DFRobot_RGBLCD lcd(16,2);  //16 characters and 2 lines of show
  6. //Temperature chip i/o
  7. OneWire ds(DS18S20_Pin);  // on digital pin 2
  8. void setup(void)
  9. {
  10.   Serial.begin(9600);
  11.   lcd.init();
  12.   lcd.setRGB(0, 255, 0);
  13.   lcd.setCursor(1, 0 );
  14.   lcd.print("Tep: ");
  15. }
  16. void loop(void)
  17. {
  18. float temperature = getTemp();
  19.   delay(1000);
  20.    lcd.setCursor(5,0);
  21.    lcd.print(temperature);
  22.     if(temperature<25)
  23.     {
  24.     lcd.setRGB(0, 255, 0);
  25.    }
  26.     else if (temperature<30)
  27.     {
  28.     lcd.setRGB(255, 215, 0);
  29.     }
  30.     else
  31.     {
  32.     lcd.setRGB(255, 0, 0);
  33.     }
  34.     lcd.setCursor(10, 0 );
  35.    lcd.write(0xdf);              //display°
  36.    lcd.print('C');
  37.     delay(100);
  38.   delay(100); //just here to slow down the output so it is easier to read
  39. }
  40. float getTemp()
  41. {
  42.   //returns the temperature from one DS18S20 in DEG Celsius
  43.   byte data[12];
  44.   byte addr[8];
  45.   if ( !ds.search(addr)) {
  46.       //no more sensors on chain, reset search
  47.       ds.reset_search();
  48.       return -1000;
  49.   }
  50.   ds.reset();
  51.   ds.select(addr);
  52.   ds.write(0x44,1); // start conversion, with parasite power on at the end
  53.   byte present = ds.reset();
  54.   ds.select(addr);   
  55.   ds.write(0xBE); // Read Scratchpad
  56.   for (int i = 0; i < 9; i++) { // we need 9 bytes
  57.     data = ds.read();
  58.   }
  59.   ds.reset_search();
  60.   byte MSB = data[1];
  61.   byte LSB = data[0];
  62.   float tempRead = ((MSB << 8) | LSB); //using two's compliment
  63.   float TemperatureSum = tempRead / 16;
  64.   return TemperatureSum;
  65.   
  66. }
复制代码

测温仪3D打印文件.rar

947.06 KB, 下载次数: 190

售价: 30 创造力  [记录]

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(38)
小小小海
小小小海
做得真漂亮
刘刘溜溜
刘刘溜溜
想了解一下你的盒子用什么软件画的?做了一个差不多的东西,我选了DHT20。
川山甲的壳
川山甲的壳
作者
回复刘刘溜溜
我让朋友帮我画的,最早应该是SolidWorks。
ljs硬件
ljs硬件
盒子做的不错+114514
释怀
释怀
传感器、显示屏和主控板的3D模型图是自己设计的吗?
释怀
释怀
传感器、显示屏和主控板等硬件的3D模型图是自己设计的吗?
川山甲的壳
川山甲的壳
作者
回复释怀
我让做结构的朋友帮我画的!他应该是用SolidWorks画的
JOVI
JOVI
学习学习
派大星ym
派大星ym
////
派大星ym
派大星ym
酷酷酷酷酷
yFuTtTwMabYV
yFuTtTwMabYV
盒子漂亮
yFuTtTwMabYV
yFuTtTwMabYV
下不了盒子,伽马
tmvZtJADrKde
tmvZtJADrKde
留个联系方式把 有程序报错了
Arduino:1.8.9 (Windows 10), 开发板:"Arduino Nano, ATmega328P (Old Bootloader)"
C:\Users\Administrator\Desktop\sketch_apr16a\sketch_apr16a.ino: In function 'float getTemp()':
sketch_apr16a:63:10: error: incompatible types in assignment of 'uint8_t {aka unsigned char}' to 'byte [12] {aka unsigned char [12]}'
data = ds.read();
^
exit status 1
incompatible types in assignment of 'uint8_t {aka unsigned char}' to 'byte [12] {aka unsigned char [12]}'
在文件 -> 首选项开启
“编译过程中显示详细输出”选项
这份报告会包含更多信息。
qq376911787
qq376911787回复tmvZtJADrKde
我也是这么报错的,请问您最后解决了么
——已解决,确实是代码出了问题,不是库的问题(距离提问一个半小时后)
川山甲的壳
川山甲的壳
作者
回复tmvZtJADrKde
1078883988,qq
沙漠绿洲
沙漠绿洲
3D都用的什么软件
zerotwox
zerotwox


感谢楼主的建模效果真心不错,我换了一个能测甲醛/PM2.5/温湿度的检测器
zerotwox
zerotwox
/Users/zerotwox/Downloads/IMG_5112.HEIC
感谢楼主的建模,效果真心不错
zerotwox
zerotwox
来了来了
zerotwox
zerotwox
盒子好评
blingbling
blingbling

想问大佬一下这是什么情况。
川山甲的壳
川山甲的壳
作者
回复blingbling
没有检测到“OneWire.h” 这个库文件
blingbling
blingbling
您好想问一下这是什么情况,本人新手不是很懂。。。
blingbling
blingbling
厉害
汤半泛
汤半泛
漫长的学习 才开始