西安下雪了,做了一个室内温度计
摘要:最近各地都在下雪,湖南湖北西安都下雪了。養熱帶花草和寵物的同學們需要多留意室內溫度。下面教一個實用性強、制作簡單的溫度計。使用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用法
- 下一篇: 三枚硬币自制收音机