资讯详情

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

c8b2588cb2a3709d17c04c49b65d7319.png

:最近到处都在下雪,湖南、湖北、西安都在下雪。养热带花卉和宠物的学生需要更加注意室内温度。这里有一个实用的,简单的温度计DS18B20温度传感器OLED模块构建,这里使用的开发板是Arduino。

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

一、材料清单

  1. Arduino × 1

  2. DS18B20 温度传感器 × 1

  3. 0.96 英寸 OLED 模块 × 1

  4. 电平转换器模块 × 1

编程和测试

1.上传代码文件 Arduino。

可根据自身具体情况修改显示器上的图形。

3.将所有部件安装在面包板上。接线方式如图所示。

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

#include<Arduino.h> #include<U8g2lib.h> #include<OneWire.h> #include<DallasTemperature.h>  #ifdefU8X8_HAVE_HW_SPI #include<SPI.h> #endif #ifdefU8X8_HAVE_HW_I2C #include<Wire.h> #endif  U8G2_SSD1306_128X64_NONAME_1_SW_I2Cu8g2(U8G2_R0,SCL,SDA,U8X8_PIN_NONE);  #defineSUN0 #defineSUN_CLOUD1 #defineCLOUD2 #defineRAIN3 #defineTHUNDER4  chari=0; #defineONE_WIRE_BUS2 OneWireoneWire(ONE_WIRE_BUS); DallasTemperaturesensors(&oneWire);  voiddrawWeatherSymbol(u8g2_uint_tx,u8g2_uint_ty,uint8_tsymbol) { switch(symbol) { caseSUN: u8g2.setFont(u8g2_font_open_iconic_weather_6x_t); u8g2.drawGlyph(x,y,69); break; caseSUN_CLOUD: u8g2.setFont(u8g2_font_open_iconic_weather_6x_t); u8g2.drawGlyph(x,y,65); break; caseCLOUD: u8g2.setFont(u8g2_font_open_iconic_weather_6x_t); u8g2.drawGlyph(x,y,64); break; caseRAIN: u8g2.setFont(u8g2_font_open_iconic_weather_6x_t); u8g2.drawGlyph(x,y,67); break; caseTHUNDER: u8g2.setFont(u8g2_font_open_iconic_embedded_6x_t); u8g2.drawGlyph(x,y,67); break; } }  voiddrawWeather(uint8_tsymbol,intdegree) { drawWeatherSymbol(0,55,symbol); u8g2.setFont(u8g2_font_logisoso32_tf); u8g2.setCursor(48 3,55); u8g2.print(degree); u8g2.print("°C"); }  voiddrawScrollString(int16_toffset,constchar*s) { staticcharbuf[36]; size_tlen; size_tchar_offset=0; u8g2_uint_tdx=0; size_tvisible=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;//nothingvisible dx=offset-char_offset*8; visible=len-char_offset; if&nsp;( 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 模块用力过猛,以免造成破损。

到目前为止,整个项目就完成了。

社区:MAKE趣无穷

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


专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

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

标签: 室内温度传感器t7412a

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台