极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19366|回复: 12

新一代的桌面气象站系统

[复制链接]
发表于 2015-6-10 13:37:52 | 显示全部楼层 |阅读模式
本帖最后由 迷你强 于 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的库

程序代码

  1. #include <Wire.h>
  2. #include "Adafruit_HTU21DF.h"
  3. Adafruit_HTU21DF htu = Adafruit_HTU21DF();

  4. #include <Adafruit_BMP085.h>
  5. Adafruit_BMP085 bmp;

  6. #include "U8glib.h"
  7. U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);        // I2C / TWI

  8. #define ADDR  0b1011100

  9. void draw(byte id,float date) {
  10. if(id ==0)   //temp
  11. {
  12.   u8g.setFont(u8g_font_unifont);
  13.   u8g.drawStr( 0, 10, "Temperature");
  14.   u8g.setFont(u8g_font_freedoomr25n);
  15.    u8g.setPrintPos(30, 45);
  16.    u8g.print(date,1);
  17.    u8g.setFont(u8g_font_10x20);
  18.    u8g.print("C");
  19. }
  20. if(id ==1)  //hum
  21. {
  22.   u8g.setFont(u8g_font_unifont);
  23.   u8g.drawStr( 0, 10, "Humidity");
  24.   u8g.setFont(u8g_font_freedoomr25n);
  25.    u8g.setPrintPos(40, 45);
  26.    u8g.print(date,0);
  27.    u8g.setFont(u8g_font_10x20);
  28.    u8g.print("%");
  29. }
  30. if(id ==2)  //pa
  31. {
  32.   u8g.setFont(u8g_font_unifont);
  33.   u8g.drawStr( 0, 10, "Atmospheric pressure");
  34.   u8g.setFont(u8g_font_courB18);
  35.    u8g.setPrintPos(0, 45);
  36.    u8g.print(date,0);
  37.    u8g.setFont(u8g_font_10x20);
  38.    u8g.print("Pa");
  39. }
  40. if(id ==3)  //gzd
  41. {
  42.   u8g.setFont(u8g_font_unifont);
  43.   u8g.drawStr( 0, 10, "Light intensity");
  44.   u8g.setFont(u8g_font_freedoomr25n);
  45.    u8g.setPrintPos(30, 45);
  46.    u8g.print(date,0);
  47.    u8g.setFont(u8g_font_10x20);
  48.    u8g.print("Lux");
  49. }
  50. }

  51. void setup(void) {
  52.   
  53.   htu.begin();
  54.   bmp.begin();
  55.   Wire.begin();     //IIC初始化
  56.   Wire.beginTransmission(ADDR);
  57.   Wire.write(0b00000001);
  58.   Wire.endTransmission();

  59. }

  60. void loop(void) {
  61.   // picture loop
  62.   
  63.   
  64.   /*********aaaaaaaaaaaa*********/
  65.   
  66.   int val = 0;

  67.   // reset
  68.   Wire.beginTransmission(ADDR);
  69.   Wire.write(0b00000111);
  70.   Wire.endTransmission();
  71.   delay(100);
  72.   Wire.beginTransmission(ADDR);
  73.   Wire.write(0b00100000);
  74.   Wire.endTransmission();
  75.   delay(120);
  76.   Wire.requestFrom(ADDR, 2); // 2byte every time

  77.   for (val=0; Wire.available()>=1; ) {
  78.     char c = Wire.read();
  79.     //Serial.println(c, HEX);
  80.     val = (val << 8) + (c & 0xFF);
  81.   }

  82.   val = val / 1.2;
  83.   
  84. /*********aaaaaaaaaaaa*********/
  85.   
  86.   
  87.   
  88.   float tem = htu.readTemperature();
  89.   float hum = htu.readHumidity();
  90.   float pa =bmp.readPressure();
  91.   float lux =val;
  92.   u8g.firstPage();  
  93.   do {
  94.     draw(0,tem);
  95.   } while( u8g.nextPage() );
  96.       delay(2000);
  97.   /******************************/

  98.     u8g.firstPage();  
  99.   do {
  100.     draw(1,hum);
  101.   } while( u8g.nextPage() );
  102.      delay(2000);
  103.     /******************************/
  104.    
  105.     u8g.firstPage();  
  106.   do {
  107.     draw(2,pa);
  108.   } while( u8g.nextPage() );
  109.     delay(2000);
  110.     /******************************/
  111.    
  112.       u8g.firstPage();  
  113.   do {
  114.     draw(3,lux);
  115.   } while( u8g.nextPage() );
  116.   
  117.   // rebuild the picture after some delay
  118.   delay(2000);
  119. }
复制代码


制作过程的视频演示

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-6-10 14:14:40 | 显示全部楼层
沙发么?
前排鼓掌
回复 支持 反对

使用道具 举报

发表于 2015-6-10 14:18:43 | 显示全部楼层
非常不错,不过那个OLED屏幕,也做块板子插上去,就更利索了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-10 15:14:48 | 显示全部楼层
wetnt 发表于 2015-6-10 14:18
非常不错,不过那个OLED屏幕,也做块板子插上去,就更利索了!

挡住咋办?这个考虑不清楚啊。。。
回复 支持 反对

使用道具 举报

发表于 2015-6-10 16:20:54 | 显示全部楼层
你们的 alpha 系列的定位是什么呢?

潜在给什么人用哦?
回复 支持 反对

使用道具 举报

发表于 2015-6-10 16:26:34 | 显示全部楼层
的確整齊得多了, 也很方便.  
但這種設計, 會否限制了傳感器使用的接口?  如果每個板子上可以用 類似 dip switch 的方式去設定 使用的 I/O 就更好了.
當然, 如果 I/O 固定了, 開發的程式也可以用固定 I/O, 只要編掛上沒衝突就好了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-10 16:59:08 | 显示全部楼层
Super169 发表于 2015-6-10 16:26
的確整齊得多了, 也很方便.  
但這種設計, 會否限制了傳感器使用的接口?  如果每個板子上可以用 類似 dip  ...

大部分传感器都是总线式的。不用担心啦。。就像我这次的,其实都是在一条总线上(I2C)
回复 支持 反对

使用道具 举报

发表于 2015-6-10 17:56:50 | 显示全部楼层
是 I2C 的就比较方便, 不用考虑 接口的问题.
光照度传感器 也是 I2C 的吗?  我还以为是用简单的光敏做的.

如果接其他 非 I2C 传感, 有可能做到在版子上用 switch 控制 I/O 吗?  
可以的话, 相信比接线再方便.
但要把传感器收到这样细的空间, 可能会有点难度.

不过, 这个设计, 真的可以方便了很多, 而且接线减少了, 也整齐得多了.
回复 支持 反对

使用道具 举报

发表于 2015-6-10 19:00:08 | 显示全部楼层
迷你强 发表于 2015-6-10 15:14
挡住咋办?这个考虑不清楚啊。。。

可以做侧面显示的啊……
回复 支持 反对

使用道具 举报

发表于 2015-6-10 23:55:00 | 显示全部楼层
堆叠设计,刚好体现了积木特性
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-11 11:02:37 | 显示全部楼层
suoma 发表于 2015-6-10 23:55
堆叠设计,刚好体现了积木特性

回复 支持 反对

使用道具 举报

发表于 2015-6-11 13:03:50 | 显示全部楼层
{:soso_e179:}
回复 支持 反对

使用道具 举报

发表于 2015-6-11 14:41:11 | 显示全部楼层
我也觉得比较适合教学
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 09:19 , Processed in 0.061520 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表