基于Arduino UNO的办公室测温仪
基于Arduino UNO的办公室测温仪在这个出门怕热化了,进门怕感冒的夏天里,我怎么样才能时时刻刻关注周围的温度?前段时间给远方的朋友打了一通电话,大概的寒暄了一下。然而在这么热的天气里,她说她感冒了,原因是太冷了:funk:,听到这话都觉得震惊了。现在的她整天要拿着体温计监测自己的体温 。还提醒我要注意室内温度,不要觉得空调吹着很舒服。回家后想着她说的话,如果自己能做一个测温仪,随时随地的检测我所处的环境温度就可以了,于是我就采用DS18B20温度传感器结Arduino UNO做了一个小型的办公室测温仪。下面就来介绍一下我们做这个小型的办公室测温仪都需要些什么吧。【所需物品】
DS18B20数字温度传感器
相对其他的温度传感器,DS18B20温度传感器具有体积小,精度高。其连线也非常方便,经过封装后可以运用于多种场合,主要根据应用场合的不同而改变其外观,适合多种室内场合测温,比如大棚测温,机房测温,洁净室测温等。
Gravity: I2CLCD1602彩色背光液晶屏
看多了千篇一律的LCD液晶显示屏,此款显示屏会有不一样的体验,它提供1600万种颜色组合,带给我们不一样的视觉感受,从此摆脱了单色背光。在接口上也很方便,仅仅需要两根通信线-IIC就可以完成背光控制。并且支持屏幕滚动,光标移动等功能,代码也是通过专门的Arduino库完成所有的设计。
DFRduino UNO R3
在主控板上我选择是的DFRduino UNO R3,他完全兼容Arduino UNO R3版本。同样使用了更强大的ATmega16U2替代了8U2,转换速度、内存和Arduino UNO R3一样。对个人而言我觉得它的外观更好看,性价比高。
IO 传感器扩展板 V7.1
IO传感器扩展板可以为初学者省去繁琐的面包板接线和故障排除,专注实现自己的创意想法。【配件图】https://mc.dfrobot.com.cn/data/attachment/album/201708/04/211332unti3sbnq5tmm7zk.jpg
【电路连接示意图】 https://mc.dfrobot.com.cn/data/attachment/album/201708/04/211336hnnon447n46icish.png https://mc.dfrobot.com.cn/data/attachment/album/201708/04/211119lhhkrhrhzvvk5elh.jpg
【效果图】
当室温<25℃的时候,屏幕显示绿色。这样的温度才令人舒心吗。
当25℃<室温<30℃时,屏幕显示黄色,室内的温度已经开始逐渐上升了。这时你可以考虑用上小风扇了。
当室温>30℃时,屏幕显示红色,当红色预警到来的时候,说明小风扇已经不起作用了,需要搬出空调来拯救我们的夏天了。为了让它看起来比较美观,我用3D打印机给它做了一个外壳,这样可以好好保护它了。【3D文件装配图】https://mc.dfrobot.com.cn/data/attachment/album/201708/04/211335rz4osp4no4ai45ls.png
【3D文件完整效果图】https://mc.dfrobot.com.cn/data/attachment/album/201708/04/211110wn300n032pc0p993.png
【实物装配】https://mc.dfrobot.com.cn/data/attachment/album/201708/04/211203eix5xb951n15zijj.jpg
3D打印文件我会附在文末,有兴趣的小伙伴可以下载。如果你有更好的创意,也可自行设计。在程序方面,还可以加上时间显示,这样既可以当测温仪,又可以当时钟。朋友们有兴趣的话,也可以扩展这方面的功能哦。
【简单的程序】#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;
byte addr;
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;
byte LSB = data;
float tempRead = ((MSB << 8) | LSB); //using two's compliment
float TemperatureSum = tempRead / 16;
return TemperatureSum;
}
留个联系方式把有程序报错了
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 {aka unsigned char }'
data = ds.read();
^
exit status 1
incompatible types in assignment of 'uint8_t {aka unsigned char}' to 'byte {aka unsigned char }'
在文件 -> 首选项开启
“编译过程中显示详细输出”选项
这份报告会包含更多信息。
川山甲的壳 发表于 2018-1-10 14:41
你的arduino安装的路径里》arduino文件夹》Libraries
已经将DFRobot_RGBLCD文件复制到了Libraries文件夹下,在arduino里还是错误。
【
sketch_jan10a.ino:1:21: fatal error: OneWire.h: No such file or directory
compilation terminated.
编译有误】 本帖最后由 qq376911787 于 2022-3-10 16:18 编辑
tmvZtJADrKde 发表于 2021-4-16 16:06
留个联系方式把有程序报错了
Arduino:1.8.9 (Windows 10), 开发板:"Arduino Nano, ATmega328P (Old Boot ...
我也是这么报错的,请问您最后解决了么
——已解决,确实是代码出了问题,不是库的问题(距离提问一个半小时后)
盒子做的蛮漂亮的,向你学习 盒子做的蛮漂亮+1 luna 发表于 2017-8-7 14:36
盒子做的蛮漂亮+1
可能用其他的颜色,应该更好看.感觉蓝色太深 你的1602还能变色,这么高级啊! 冬天可以使用吗 用哪个编程器 北岛 发表于 2017-11-8 19:15
冬天可以使用吗
我是在夏天的环境弄得,夏天大成都实在是太热了。冬天温差大也还是可以用的哦 北岛 发表于 2017-11-8 20:30
用哪个编程器
用的是arduino编程的 川山甲的壳 发表于 2017-11-9 09:24
我是在夏天的环境弄得,夏天大成都实在是太热了。冬天温差大也还是可以用的哦 ...
谢谢大佬 选择哪一个 本帖最后由 粒子 于 2022-1-5 16:52 编辑
北岛 发表于 2017-11-9 20:04
选择哪一个
是选择开发板吗?我的和你的不一样呢。https://mc.dfrobot.com.cn/data/attachment/album/201711/10/103355apv2xwm3jwc5vn49.png 这里选择哪一个e 北岛 发表于 2017-11-10 14:27
这里选择哪一个e
就选USBtinyISP 您好,我复制了您的程序,也下载了相应的库文件,但编译还是失败了,有什么原因吗? jbarry1985 发表于 2017-12-12 19:25
您好,我复制了您的程序,也下载了相应的库文件,但编译还是失败了,有什么原因吗? ...
file:///C:/Users/dell/Desktop/TIM%E5%9B%BE%E7%89%8720171213091305.png我编译和上传都没有问题啊 本帖最后由 粒子 于 2022-1-5 16:53 编辑
jbarry1985 发表于 2017-12-12 19:25
您好,我复制了您的程序,也下载了相应的库文件,但编译还是失败了,有什么原因吗? ...
https://mc.dfrobot.com.cn/data/attachment/album/201712/13/091656b8odi883qfz8gc38.png我编译和上传都没有问题 给您看下我的库文件,应该没错,wire和onewire两个文件都下载了,但就是报错。您这边的库文件可以给我参考下吗?
本帖最后由 粒子 于 2022-1-5 16:53 编辑
jbarry1985 发表于 2017-12-13 16:05
给您看下我的库文件,应该没错,wire和onewire两个文件都下载了,但就是报错。您这边的库文件可以给我参考 ...
把DFR0464移出去看一下呢,https://mc.dfrobot.com.cn/data/attachment/album/201712/13/162734y860u1i8i5lk81dz.png我的和你的一样的。
本帖最后由 川山甲的壳 于 2017-12-13 16:31 编辑
@jbarry1985你看看这个库文件行不行。这是我的库文件 问题解决啦,非常感谢您!原来examples里面的都要下载下来,但我不太清楚为什么需要这样。另外我想问下你那个上盖零件3D打印机打印方式是什么样的?按下面哪个顺序?