西安下雪了,做了一个室内温度计

c8b2588cb2a3709d17c04c49b65d7319.png

摘要:最近各地都在下雪,湖南湖北西安都下雪了。养热带花草和宠物的同学们需要多留意室内温度。下面教一个实用性强、制作简单的温度计。使用DS18B20温度传感器和OLED模块构建,这里使用的开发板是Arduino。

4418dbda76d988efdaf718cf83bd20b8.png

本项目的源码和3D文件在后台回复:20211228,即可获取。

一、材料清单

570a17293e94174c576639bcff71c76f.png
  1. Arduino × 1

  2. DS18B20 温度传感器 × 1

  3. 0.96 英寸 OLED 模块 × 1

  4. 电平转换器模块 × 1

二、编程和测试

1、将代码文件上传至 Arduino。

33a03303708be8ea8787e15d80f61c7e.png

2、显示器上的图形可以根据自己的具体情况来修改。

cbc79acf830692fb428e34688ecf00d0.png

3、将所有的组件安装到面包板上。接线方式如图所示。

cf528a0fd76e10e3da5e748ac3c1699a.png

代码如下,代码很简单,就不过多介绍了。

#include <Arduino.h>
#include <U8g2lib.h>
#include <OneWire.h> 
#include <DallasTemperature.h>#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endifU8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, SCL, SDA,U8X8_PIN_NONE); #define SUN    0
#define SUN_CLOUD  1
#define CLOUD 2
#define RAIN 3
#define THUNDER 4char i=0;
#define ONE_WIRE_BUS 2 
OneWire oneWire(ONE_WIRE_BUS); 
DallasTemperature sensors(&oneWire);void drawWeatherSymbol(u8g2_uint_t x, u8g2_uint_t y, uint8_t symbol)
{  switch(symbol){case SUN:u8g2.setFont(u8g2_font_open_iconic_weather_6x_t);u8g2.drawGlyph(x, y, 69);    break;case SUN_CLOUD:u8g2.setFont(u8g2_font_open_iconic_weather_6x_t);u8g2.drawGlyph(x, y, 65);    break;case CLOUD:u8g2.setFont(u8g2_font_open_iconic_weather_6x_t);u8g2.drawGlyph(x, y, 64);    break;case RAIN:u8g2.setFont(u8g2_font_open_iconic_weather_6x_t);u8g2.drawGlyph(x, y, 67);    break;case THUNDER:u8g2.setFont(u8g2_font_open_iconic_embedded_6x_t);u8g2.drawGlyph(x, y, 67);break;      }
}void drawWeather(uint8_t symbol, int degree)
{drawWeatherSymbol(0, 55, symbol);u8g2.setFont(u8g2_font_logisoso32_tf);u8g2.setCursor(48+3, 55);u8g2.print(degree);u8g2.print("°C"); 
}void drawScrollString(int16_t offset, const char *s)
{static char buf[36];size_t len;size_t char_offset = 0;u8g2_uint_t dx = 0;size_t visible = 0;len = strlen(s);if ( offset < 0 ){char_offset = (-offset)/8;dx = offset + char_offset*8;if ( char_offset >= u8g2.getDisplayWidth()/8 )return;visible = u8g2.getDisplayWidth()/8-char_offset+1;strncpy(buf, s, visible);buf[visible] = '\0';u8g2.setFont(u8g2_font_8x13_mf);u8g2.drawStr(char_offset*8-dx, 62, buf);}else{char_offset = offset / 8;if ( char_offset >= len )return;    // nothing visibledx = offset - char_offset*8;visible = len - char_offset;if ( visible > u8g2.getDisplayWidth()/8+1 )visible = u8g2.getDisplayWidth()/8+1;strncpy(buf, s+char_offset, visible);buf[visible] = '\0';u8g2.setFont(u8g2_font_8x13_mf);u8g2.drawStr(-dx, 62, buf);}}void draw(const char *s, uint8_t symbol, int degree)
{int16_t offset = -(int16_t)u8g2.getDisplayWidth();int16_t len = strlen(s);for(;;){u8g2.firstPage();do {drawWeather(symbol, degree);// drawScrollString(offset, s);} while ( u8g2.nextPage() );delay(20);offset+=2;if ( offset > len*8+1 )break;}
}void setup(void) {pinMode(10, OUTPUT);pinMode(9, OUTPUT); u8g2.begin();  u8g2.enableUTF8Print();sensors.begin(); 
}void loop(void) {sensors.requestTemperatures();u8g2.firstPage();do {drawWeather(SUN_CLOUD, sensors.getTempCByIndex(0));} while ( u8g2.nextPage() );delay(1000);
}

三、3D打印外壳

be344dec6c4e3567e2163774d740e3bf.png

这个外壳最初只能容纳 OLED 模块。最后通过对 Piksey Pico 进行修改,我将所有组件都装进去了。如果你使用的是 Arduino Nano 或 UNO,那么外壳就只能容纳显示器,其他电子设备必须放在外面。

四、接线测试

be197bd0025ec9dc1f40dd4095a364d9.png5ac6819bcdc5a66c68938f038438bee5.png

布线方式可根据自己的习惯来。在项目中,我使用的是多股线,效果不错。最终的布线方式,会根据你的实际情况来,可能会与我的有些不同。

e4bb33a664bc65bb1a5e461528dc2eab.png7219fe4b643aae2ad2aa36f91420a0f1.png

布线完毕后开始测试,确保一切正常后再进行组装。

五、组装所有的配件

9d1178fa5e2810b09b96166446852832.png

最后,当所有的配件安装完毕后,将外壳合上。注意安装时不要对 OLED 模块用力过猛,以免造成破损。

2d5756d2502b3a2aec0a11111468aa88.png

到目前为止,整个项目就完成了。这个项目非常的简单,适合初学的电子爱好者,如果你手头正好有一个不用的arduino板子和一个ds18b20就动手做一个吧

be3079c2ea692f644e123e8d4a664027.png

社区:MAKE趣无穷

文章项目来源:https://make.quwj.com/project/180

8aef65ca697dd18ac50819c8decefea0.gif

点击查看往期内容


推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oci mysql_Oracle常用的OCI函数

欢迎进入Oracle社区论坛&#xff0c;与200万技术人员互动交流 >>进入 sword OCIEnvInit ( OCIEnv **envhpp, ub4 mode, size_t xtramemsz, dvoid **usrmempp ); 注&#xff1a; 在8i以后&#xff0c;可用OCIEnvCreate一个函数就可以初始化环境了&#xff0c;相当于OCIIni…

sort注意事项

虽然是小事但是还是得注意一下&#xff1a;sort 区间左开右闭 从0开始 e.g: 10 9 8 7 6 5 4 3 2 1 sort(a6,a11) 区间 6 - 10 sort(a6,a10) 区间 6 - 9转载于:https://www.cnblogs.com/asdic/p/9758532.html

C语言预处理功能——关于字符串化和符号粘贴

在C语言开发中&#xff0c;宏定义是一个非常有用的工具&#xff0c;它可以使我们的代码更容易理解&#xff0c;更容易维护。如查一个常量在多处被使用&#xff0c;且今后可能会根据不同需要而修改的话&#xff0c;将其define一下那是再好不过了。除此之外&#xff0c;宏定义还有…

memmove()

memcpy()只是memmove()的一个子集 memcpy()在执行内存重叠的情况下时&#xff0c;就会发生错误&#xff0c;而memmove()不会 void *memmove(void *dest, const void *src, size_t count) {assert((dest!0)&&(src!0));unsigned char *pdest (char * )dest;unsigned char…

LINUX SHELL的神器,sed

我们知道&#xff0c;Vim 采用的是交互式文本编辑模式&#xff0c;你可以用键盘命令来交互性地插入、删除或替换数据中的文本。但本节要讲的 sed 命令不同&#xff0c;它采用的是流编辑模式&#xff0c;最明显的特点是&#xff0c;在 sed 处理数据之前&#xff0c;需要预先提供…

mysql使用shell脚本部署_shell脚本部署mysql主从

centos6两台Master IP&#xff1a;192.168.88.152Slave IP&#xff1a;192.168.88.153以下都是在主机上操作两机配置免密登录ssh-keygen -t rsassh-copy-id root192.168.88.153编写mysql_master脚本vim mysql_mster.sh#!/bin/bashservice iptables stopsetenforce 0yum -y inst…

ES6 数组、对象的扩展

8. 数组的扩展 扩展运算符&#xff08;...&#xff09;&#xff0c;将一个数组转为用逗号分隔的参数序列。 复制数组 const a2[...a1]合并数组 [...arr1, ...arr2, ...arr3]; arr1.concat(arr2, arr3);// ES5 的合并数组 这是浅拷贝,如果修改了原数组的成员&#xff0c;会同步反…

MVVM及MVVMLight相关资料

&#xff08;1&#xff09;dwahlin (2)http://blog.csdn.net/duanzilin/article/category/816515

我损失几百万换来的教训

大家好&#xff0c;我是写代码的篮球球痴&#xff0c;看到朱老师一篇抉择影响人生走向的文章&#xff0c;文中的我是作者本人。---我2009年初开始工作&#xff0c;2010年离开苏州来到深圳&#xff0c;那时候深圳的房价其实还不高&#xff0c;至少在全国来说深圳的房价还远没有现…

strcat()

把源字符串 连接 到目的字符串的后面。目的字符串的长度要足够长 char *strcat(char *dest, const char *src) {assert((NULL ! dest) && (NULL ! src));char *cp dest;while (*cp ! \0){cp;}while ((*cp *src) ! \0){;}return dest; }

android mysql 图片_android sqlite添加图片到数据库

sqlite图片是怎么储存的呢&#xff1f;其实是二进制的方式存储的blob代表使用二进制储存 (更多类型参考&#xff1a;数据库简介)在创建表的地方,VALUE_PIC代表存储图片字段&#xff0c;blob代表这个字段是以二进制储存的。/*创建表语句 语句对大小写不敏感 create table 表名(字…

MCU为什么内部不集成晶振

01MCU为什么不集成晶振本文将用STM32代替MCU。原因1&#xff1a;早些年&#xff0c;芯片的生产制作工艺也许还不能够将晶振做进芯片内部&#xff0c;但是现在可以了。这个问题主要还是实用性和成本决定的。实用性&#xff1a;如果封装进入STM32内部&#xff0c;不利于不同客户更…

[JSOI2007]建筑抢修 (贪心)

题目链接 Solution 可以考虑 \(dp\) ,但是很显然 \((n^2)\) 降不下来. 然后考虑贪心,首先,绝对的正确的是,在同等的情况下,给后面的留更多的时间. 首先按照 \(T_2\) 排序. 然后我们维护一个大根堆 每修理一栋建筑 我们就把这栋建筑的T1值加入堆 若当前无法修理 我们判断堆顶是否…

cad中怎么随意移动图形_cad中怎么随意移动图形_绘制CAD图纸的过程中CAD快捷键失灵了怎么办?...

很多人在使用笔记本绘制CAD图纸的过程中&#xff0c;当用到CAD快捷键的时候会发现部分CAD快捷键无法正常使用&#xff0c;比如按F8后并没有切换成正交状态&#xff0c;而是出来了连接投影仪的选项&#xff0c;而且其他的快捷键也无法使用了&#xff0c;如下图所示。在以前老的笔…

strcmp()

比较2个字符串&#xff0c;返回2个字符串的差值 int strcmp(const char *str1, const char *str2) {assert((NULL ! str1) && (NULL ! str2));while(*str1 && *str2 && (*str1 *str2)){str1;str2;}return (*str1 - *str2); }

元旦加班

因为项目紧张&#xff0c;元旦加班了&#xff0c;这是在腾讯的第二次节假日加班。相对于害怕加班&#xff0c;我也害怕一段时间一段时间的浪费光阴一事无成&#xff0c;更害怕一段时间&#xff0c;一段时间加班后也是一事无成。加班有时候也挺舒服的&#xff0c;为了给乌托邦的…

MySQL中修改表结构的关键字_下列SQL语句中,修改表结构的关键字是

【单选题】对《将进酒》全诗分析不正确的是【单选题】下列划线词语的解释有误的一项是【多选题】下列食品属于不完全蛋白质的是 ( ) 。【单选题】下列聚合函数中属性列必须是数值型的是【单选题】( )体现了商品生产者之间相互交换的劳动关系。【单选题】在SELECT语句中使用SUM(…

strncpy()

char *strncpy(char *dest, const char *src, unsigned int count) {assert((NULL ! dest) && (NULL ! dsrc));char *ret dest;if (0 count){return dest;}while (count-- > 0){if (!(*ret *src)) //\0{return dest;}}*ret \0;//切记!!!!!return dest; }

远程用power shell 管理vmware view 池用户

1. 在客户端安装POWER SHELL V2.0的系统补丁&#xff0c;补丁号码为KB968930&#xff0c;里面包括了winrm和powershell 2.0 2. 将view connection server服务器设置为winrm的信任主机&#xff1a; PS C:\ set-item wsman:\localhost\Client\TrustedHosts -value IP为了能在计…

GitHub的嵌入式开源项目

来源&#xff1a;嵌入式大杂烩关于GitHub&#xff0c;可能很多人误以为这是互联网人的专属&#xff0c;其实并不是&#xff0c;那上面嵌入式相关的开源项目是有很多的。现分享一些高星开源项目&#xff08;像RT-Thread、AWTK等大家都熟知的就不介绍了&#xff09;&#xff1a;A…