新一代的桌面气象站系统
本帖最后由 迷你强 于 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 ADDR0b1011100
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);
}
制作过程的视频演示
http://player.youku.com/player.php/sid/XMTI1OTAzNDIyNA==/v.swf
沙发么?
前排鼓掌 非常不错,不过那个OLED屏幕,也做块板子插上去,就更利索了! wetnt 发表于 2015-6-10 14:18 static/image/common/back.gif
非常不错,不过那个OLED屏幕,也做块板子插上去,就更利索了!
挡住咋办?这个考虑不清楚啊。。。 你们的 alpha 系列的定位是什么呢?
潜在给什么人用哦? 的確整齊得多了, 也很方便.
但這種設計, 會否限制了傳感器使用的接口?如果每個板子上可以用 類似 dip switch 的方式去設定 使用的 I/O 就更好了.
當然, 如果 I/O 固定了, 開發的程式也可以用固定 I/O, 只要編掛上沒衝突就好了.
Super169 发表于 2015-6-10 16:26 static/image/common/back.gif
的確整齊得多了, 也很方便.
但這種設計, 會否限制了傳感器使用的接口?如果每個板子上可以用 類似 dip...
大部分传感器都是总线式的。不用担心啦。。就像我这次的,其实都是在一条总线上(I2C) 是 I2C 的就比较方便, 不用考虑 接口的问题.
光照度传感器 也是 I2C 的吗?我还以为是用简单的光敏做的.
如果接其他 非 I2C 传感, 有可能做到在版子上用 switch 控制 I/O 吗?
可以的话, 相信比接线再方便.
但要把传感器收到这样细的空间, 可能会有点难度.
不过, 这个设计, 真的可以方便了很多, 而且接线减少了, 也整齐得多了. 迷你强 发表于 2015-6-10 15:14 static/image/common/back.gif
挡住咋办?这个考虑不清楚啊。。。
可以做侧面显示的啊…… 堆叠设计,刚好体现了积木特性 suoma 发表于 2015-6-10 23:55 static/image/common/back.gif
堆叠设计,刚好体现了积木特性
:lol {:soso_e179:} 我也觉得比较适合教学:lol
页:
[1]