欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2023/12/20 编程问答 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 西安下雪了,做了一个室内温度计 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

摘要:最近各地都在下雪,湖南湖北西安都下雪了。养热带花草和宠物的同学们需要多留意室内温度。下面教一个实用性强、制作简单的温度计。使用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」获取学习资料网盘链接。

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

    总结

    以上是生活随笔为你收集整理的西安下雪了,做了一个室内温度计的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。