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

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…

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;不利于不同客户更…

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

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

GitHub的嵌入式开源项目

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

项目开发日志:Build AssetBundle——SpriteAtlas(已解惑)

项目信息&#xff1a;平台-AndroidUnity编辑器版本-2018.2.5f1状况1&#xff1a;真机状况下引用到图集下的sprite的UI显示出错。&#xff08;图集被打成AB包且勾选了Include in Build&#xff09;.在我们的测试下发现了以下两个解决方案&#xff1a;&#xff08;当然我觉得第二…

Sangfor上网行为管理单点登录配置

单点登录功能介绍&#xff1a; 当用户成功登录到第三方认证服务器时&#xff0c;自动通过AC的认证&#xff0c;而无需再次输入用户名和密码。 优点&#xff1a; 用户只需要输入一次账号和密码&#xff0c;即可自动通过AC的认证&#xff0c;避免账号和密码的重复输入&#xff0c…

教你精确计算 I2C 上拉电阻阻值

I2C 总线能挂多少设备&#xff1f;理论上&#xff1a;7-bit address &#xff1a;2 的 7 次方&#xff0c;能挂 128 个设备。10-bit address &#xff1a;2 的 10 次方&#xff0c;能挂 1024 个设备。当然&#xff0c;要把预留设备地址去除&#xff0c;7 bit 协议规定了 8个预留…

原型设计+用户规格说明书

用户规格说明书 作业链接&#xff1a;https://edu.cnblogs.com/campus/fzzcxy/2016SE/homework/2180 原型模型设计工具&#xff1a; 墨刀 原型模型链接&#xff1a;https://modao.cc/app/6a5fcc03e409ffe37cfcdb9cb06914271744f131 学号1&#xff1a;362 何永康 学号2&#xff…

什么集成mysql_mysql集成部署

经常听说mysql数据库是集成在系统中&#xff0c;也一直不太明白集成的概念。今天才明白集成的概念就是将mysql所有的文件放到一个文件夹下放到系统中&#xff0c;也就是将mysql采用目录迁移部署的方式进行安装。在上一篇研究了mysql的数据存储结构之后&#xff0c;也研究了mysq…

一文让你了解RT-Thread

前言要学习一项新知识或新的技能&#xff0c;首先要对其有个初步了解&#xff0c;然后再逐步学习如何运用它。本文作为快速入门 RT-Thread 系列文章的第一篇&#xff0c;首先介绍一下&#xff0c;我当时是如何学习 RT-Thread 的&#xff0c;以及参与官方组织的活动的情况&#…

创建python虚拟环境

一 windows下如何构建虚拟环境如果系统中只有python2或只有python3&#xff0c;可以直接打开命令行&#xff0c;输入pip install virtualenv 来下载创建虚拟环境的包(如果提示pip不是内部命令&#xff0c;把python文件下的Scripts的文件路径加入计算机环境变量即可可) 1. 选择一…

电源开关上的 | 和 O 究竟代表了什么?

大家好,我是写代码的篮球球痴&#xff0c;转发张老师的一篇文章。几乎所有的电器、灯具和插座上只要带有电源开关必然会出现“|”和“O”两个符号。如果只看符号判断&#xff0c;“|”和“O”到底代表什么含义呢&#xff1f;能分清&#xff1a;哪个是电路联通&#xff0c;哪个是…

重庆大二学生花了6年写出了操作系统

一直以来&#xff0c;国内操作系统都是弱势的地方&#xff0c;可能是国情原因吧&#xff0c;事实上国内也有不少人想改变这种格局&#xff0c;一直以来&#xff0c;笔者的朋友也在一直为这个方向努力&#xff0c;xbook内核&#xff0c;作者花了6年时间&#xff0c;从初中开始就…

辉哥给rockchip修复了一个内存溢出问题

还是周末我也不想说周末&#xff0c;但是不是周末的话&#xff0c;可能也没有特别清净的时间来处理困难的问题。这周末我是要加班的&#xff0c;加班的前一个晚上&#xff0c;我领导找我们吃了一个便饭&#xff0c;聊了很多东西&#xff0c;这篇文章我就不说了&#xff0c;会在…

MVC(dotnet)

一天中吹牛的时间到了&#xff0c;纠正一下自己的思维&#xff0c;要是能让过客收益那是我的荣幸。 前段时间就三层&MVC被一些网友搅的一头雾水....管他萝卜酸菜吃下去了才是自己的。 首先我要说明的是MVC只是一个表现模式&#xff0c;是一种软件架构模式&#xff0c;而三层…

微信小程序轮播图中间变大_微信小程序实现带放大效果的轮播图

本文实例为大家分享了微信小程序实现带放大效果的轮播图&#xff0c;供大家参考&#xff0c;具体内容如下效果如图WXMLWXSS.Carousel{margin-top: 49px;background-color: #fff;}.swiper-container{position: relative;}.swiper-container .swiper{padding-top: 8px;height: 38…

跟我领导吃饭

上篇文章说&#xff0c;下篇文章会说跟我们领导吃饭的事情。我领导是我上上上家公司的领导&#xff0c;不是现在TC的领导。自从离职后&#xff0c;我们差不多6个月没再见面&#xff0c;那时候我想跳槽&#xff0c;是因为得到消息说他要走&#xff0c;我刚开始不相信&#xff0c…

tyvj 1391 走廊泼水节【最小生成树】By cellur925

题目传送门 题意简化&#xff1a;给你一棵树&#xff0c;要求你加边使它成为完全图&#xff08;任意两点间均有一边相连&#xff09; &#xff0c;满足原来的树是这个图的最小生成树。求加边的价值最小是多少。 考虑Kruskal的过程&#xff0c;我们每次找一条最短的&#xff0c;…

支持向量机-SVM-最优化公式推导记录

1. 简述 SVM涉及的东西很多&#xff0c;如果要理解全面的话&#xff0c;要理解经验风险与置信风险&#xff0c;VC维理论&#xff0c;推导出最优化公式&#xff0c;最优化求解的拉格朗日解法&#xff0c;核函数&#xff0c;等等方面的内容&#xff0c;当前对SVM理解太少&#xf…