查看: 3891|回复: 0

基于Arduino UNO的办公室测温仪

[复制链接]
  • TA的每日心情

    2018-1-11 13:58
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2017-8-14 15:01 | 显示全部楼层 |阅读模式
    基于Arduino UNO的办公室测温仪
    在这个出门怕热化了,进门怕感冒的夏天里,我怎么样才能时时刻刻关注周围的温度?
    前段时间给远方的朋友打了一通电话,大概的寒暄了一下。然而在这么热的天气里,她说她感冒了,原因是太冷了,听到这话都觉得震惊了。现在的她整天要拿着体温计监测自己的体温 。还提醒我要注意室内温度,不要觉得空调吹着很舒服。
    回家后想着她说的话,如果自己能做一个测温仪,随时随地的检测我所处的环境温度就可以了,于是我就采用DS18B20温度传感器结Arduino UNO做了一个小型的办公室测温仪。

    下面就来介绍一下我们做这个小型的办公室测温仪都需要些什么吧。
    【所需物品】



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



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



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



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


    【电路连接示意图】
       

    【效果图】


    当室温<25℃的时候,屏幕显示绿色。这样的温度才令人舒心吗。


    当25℃<室温<30℃时,屏幕显示黄色,室内的温度已经开始逐渐上升了。这时你可以考虑用上小风扇了。


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


    3D文件完整效果图】

    【实物装配】

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

    【简单的程序】

    kittenblock中小学创客名师推荐的图形化编程软件

    #include <OneWire.h>
    #include <Wire.h>
    #include "DFRobot_RGBLCD.h"
    int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2
    DFRobot_RGBLCD lcd(16,2);  //16 characters and 2 lines of show
    //Temperature chip i/o
    OneWire ds(DS18S20_Pin);  // on digital pin 2
    void setup(void)
    {
      Serial.begin(9600);
      lcd.init();
      lcd.setRGB(0, 255, 0);
      lcd.setCursor(1, 0 );
      lcd.print("Tep: ");
    }
     
    void loop(void)
    {
     float temperature = getTemp();
      delay(1000);
       lcd.setCursor(5,0); 
       lcd.print(temperature);
        if(temperature<25)
        {
        lcd.setRGB(0, 255, 0);
       }
        else if (temperature<30)
        {
        lcd.setRGB(255, 215, 0);
        }
        else
        {
        lcd.setRGB(255, 0, 0);
        }
        lcd.setCursor(10, 0 );
       lcd.write(0xdf);              //display°
       lcd.print('C');
        delay(100);
      delay(100); //just here to slow down the output so it is easier to read
    }
    float getTemp()
    {
      //returns the temperature from one DS18S20 in DEG Celsius
     
      byte data[12];
      byte addr[8];
     
      if ( !ds.search(addr)) {
          //no more sensors on chain, reset search
          ds.reset_search();
          return -1000;
      }
     
      ds.reset();
      ds.select(addr);
      ds.write(0x44,1); // start conversion, with parasite power on at the end
     
      byte present = ds.reset();
      ds.select(addr);    
      ds.write(0xBE); // Read Scratchpad
     
      for (int i = 0; i < 9; i++) { // we need 9 bytes
        data = ds.read();
      } 
      ds.reset_search();
      byte MSB = data[1];
      byte LSB = data[0];
     
      float tempRead = ((MSB << 8) | LSB); //using two's compliment
      float TemperatureSum = tempRead / 16;
      return TemperatureSum;
       
    }

    测温仪3D打印文件.rar (947.06 KB, 下载次数: 17)
    打赏作者鼓励一下!
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    【项目】基于Arduino Nano的多功能桌面感应垃圾桶
    【项目】基于Arduino Nano
    基于Arduino Nano的多功能桌面感应垃圾桶随着大学生活不断往前迈进,宿舍桌面上的杂物
    智能物联网花盆
    智能物联网花盆
    打坏了一个费时5小时 3D打印的花盆,耗时22小时 下载:Kittenblock软件,安装、运
    呼吸灯实验
    呼吸灯实验
    本文节选自《Arduino程序设计基础》 之前的章节已经介绍了多种方法控制LED,但单是开
    为开发板 Generic ESP8266 Module 编译时出错
    为开发板 Generic ESP8266
    第一次尝试Arduino UNO软串口通信,编译一直通不过,错误信息 “开发板 generic (平
    Arduino Uno 无法上传程序
    Arduino Uno 无法上传程序
    原来可以正常使用的Arduino Uno 板子突然不能上传程序了,硬件驱动正常,TX和RX指示灯
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表