4725| 38
|
基于Arduino UNO的办公室测温仪 |
本帖最后由 川山甲的壳 于 2018-1-11 09:02 编辑 基于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打印文件我会附在文末,有兴趣的小伙伴可以下载。如果你有更好的创意,也可自行设计。 在程序方面,还可以加上时间显示,这样既可以当测温仪,又可以当时钟。朋友们有兴趣的话,也可以扩展这方面的功能哦。 【简单的程序】 [C++] 纯文本查看 复制代码 #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[i] = 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; } ![]() |
947.06 KB, 下载次数: 115, 下载积分: 创造力 -1
本帖最后由 川山甲的壳 于 2017-12-13 16:31 编辑 @jbarry1985 你看看这个库文件行不行。这是我的库文件 ![]() |
© 2013-2016 Comsenz Inc. Powered by Discuz! X3.4 Licensed