西安下雪了,做了一个室内温度计
摘要:最近各地都在下雪,湖南湖北西安都下雪了。养热带花草和宠物的同学们需要多留意室内温度。下面教一个实用性强、制作简单的温度计。使用DS18B20温度传感器和OLED模块构建,这里使用的开发板是Arduino。
本项目的源码和3D文件在后台回复:20211228,即可获取。
一、材料清单
Arduino × 1
DS18B20 温度传感器 × 1
0.96 英寸 OLED 模块 × 1
电平转换器模块 × 1
二、编程和测试
1、将代码文件上传至 Arduino。
2、显示器上的图形可以根据自己的具体情况来修改。
3、将所有的组件安装到面包板上。接线方式如图所示。
代码如下,代码很简单,就不过多介绍了。
#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打印外壳
这个外壳最初只能容纳 OLED 模块。最后通过对 Piksey Pico 进行修改,我将所有组件都装进去了。如果你使用的是 Arduino Nano 或 UNO,那么外壳就只能容纳显示器,其他电子设备必须放在外面。
四、接线测试
布线方式可根据自己的习惯来。在项目中,我使用的是多股线,效果不错。最终的布线方式,会根据你的实际情况来,可能会与我的有些不同。
布线完毕后开始测试,确保一切正常后再进行组装。
五、组装所有的配件
最后,当所有的配件安装完毕后,将外壳合上。注意安装时不要对 OLED 模块用力过猛,以免造成破损。
到目前为止,整个项目就完成了。这个项目非常的简单,适合初学的电子爱好者,如果你手头正好有一个不用的arduino板子和一个ds18b20就动手做一个吧!
社区:MAKE趣无穷
文章项目来源:https://make.quwj.com/project/180
点击查看往期内容
推荐阅读:
专辑|Linux文章汇总
专辑|程序人生
专辑|C语言
我的知识小密圈
关注公众号,后台回复「1024」获取学习资料网盘链接。
欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~
总结
以上是生活随笔为你收集整理的西安下雪了,做了一个室内温度计的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: SQL插入数据-insert用法
- 下一篇: 三枚硬币自制收音机