本帖最后由 迷你强 于 2015-6-10 14:08 编辑
大家还记得N年前本强做的一个桌面气象站系统么? 在面包板上做的,一坨一坨的连接线,相当复杂,最近我升级了下设计使用了α系列重新做了气象站
http://www.geek-workshop.com/thread-5321-1-1.html
当时的链接
重新做过的气象站拥有更简洁的外观了。当然还是通用硬件。(设备基本情况和当时的设计并没有特别的不同之处,略有升级)
基本的东西都差不多,从图上看从左到右依次是 CP2104usb串口工具(用来下载程序的),光照度传感器,328pARDUINO核心板,温湿度传感器(htu-21),气压计,锂电池控制板(电池供电,电池充电),还有下面的OLDE显示屏
依次堆叠起来
非常简单
当然啦,用了一堆库,U8GLIB库,bmp180库 还有HTU-21的库
程序代码 - #include <Wire.h>
- #include "Adafruit_HTU21DF.h"
- Adafruit_HTU21DF htu = Adafruit_HTU21DF();
- #include <Adafruit_BMP085.h>
- Adafruit_BMP085 bmp;
- #include "U8glib.h"
- U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
- #define ADDR 0b1011100
- void draw(byte id,float date) {
- if(id ==0) //temp
- {
- u8g.setFont(u8g_font_unifont);
- u8g.drawStr( 0, 10, "Temperature");
- u8g.setFont(u8g_font_freedoomr25n);
- u8g.setPrintPos(30, 45);
- u8g.print(date,1);
- u8g.setFont(u8g_font_10x20);
- u8g.print("C");
- }
- if(id ==1) //hum
- {
- u8g.setFont(u8g_font_unifont);
- u8g.drawStr( 0, 10, "Humidity");
- u8g.setFont(u8g_font_freedoomr25n);
- u8g.setPrintPos(40, 45);
- u8g.print(date,0);
- u8g.setFont(u8g_font_10x20);
- u8g.print("%");
- }
- if(id ==2) //pa
- {
- u8g.setFont(u8g_font_unifont);
- u8g.drawStr( 0, 10, "Atmospheric pressure");
- u8g.setFont(u8g_font_courB18);
- u8g.setPrintPos(0, 45);
- u8g.print(date,0);
- u8g.setFont(u8g_font_10x20);
- u8g.print("Pa");
- }
- if(id ==3) //gzd
- {
- u8g.setFont(u8g_font_unifont);
- u8g.drawStr( 0, 10, "Light intensity");
- u8g.setFont(u8g_font_freedoomr25n);
- u8g.setPrintPos(30, 45);
- u8g.print(date,0);
- u8g.setFont(u8g_font_10x20);
- u8g.print("Lux");
- }
- }
- void setup(void) {
-
- htu.begin();
- bmp.begin();
- Wire.begin(); //IIC初始化
- Wire.beginTransmission(ADDR);
- Wire.write(0b00000001);
- Wire.endTransmission();
- }
- void loop(void) {
- // picture loop
-
-
- /*********aaaaaaaaaaaa*********/
-
- int val = 0;
-
- // reset
- Wire.beginTransmission(ADDR);
- Wire.write(0b00000111);
- Wire.endTransmission();
- delay(100);
- Wire.beginTransmission(ADDR);
- Wire.write(0b00100000);
- Wire.endTransmission();
- delay(120);
- Wire.requestFrom(ADDR, 2); // 2byte every time
-
- for (val=0; Wire.available()>=1; ) {
- char c = Wire.read();
- //Serial.println(c, HEX);
- val = (val << 8) + (c & 0xFF);
- }
-
- val = val / 1.2;
-
- /*********aaaaaaaaaaaa*********/
-
-
-
- float tem = htu.readTemperature();
- float hum = htu.readHumidity();
- float pa =bmp.readPressure();
- float lux =val;
- u8g.firstPage();
- do {
- draw(0,tem);
- } while( u8g.nextPage() );
- delay(2000);
- /******************************/
- u8g.firstPage();
- do {
- draw(1,hum);
- } while( u8g.nextPage() );
- delay(2000);
- /******************************/
-
- u8g.firstPage();
- do {
- draw(2,pa);
- } while( u8g.nextPage() );
- delay(2000);
- /******************************/
-
- u8g.firstPage();
- do {
- draw(3,lux);
- } while( u8g.nextPage() );
-
- // rebuild the picture after some delay
- delay(2000);
- }
复制代码
制作过程的视频演示
|