分享

自制气象站(含程序)

 游仙 2017-05-16
 
Arduino 兼容 APRS气象站套件(带风速计、风向仪、雨量器)
      这种集成了风速计、风向仪和雨量器的新版气象站套件。所有数据都可通过串口直接读取。同时兼容Arduino设备,方便用户使用。 配合其他Arduino的传感器,可以有效地检测区域性的风速,风向,降雨量的天气参数,可以广泛应用于农业,工业,气候研究领域。适合青少年学习。
接口板有2个数据输出口 
 
DATA 接口速率2400,1 秒间隔输出。
TTL TXD 接口9600 速率(调试用),1 秒间隔输出。
 
数据输出格式
 
c000s000g000t086r000p000h53b10020 
每秒输出37个字节,包括数据末尾的换行符CR/LF。
 
数据解析:
 
c000:风向角度,单位:度。
s000:前1 分钟风速,单位:英里每小时
g000:前5 分钟最高风速,单位:英里每小时
t086:温度(华氏)
r000:前一小时雨量(0.01 英寸)
p000:前24 小时内的降雨量(0.01 英寸)
h53:湿度(00%= 100%)
b10020:气压(0.1 hpa)
Note:
 
注1:
 
接口板会自动检测是否安装了气压片、温湿度传感器,没有安装的传感器数据将显示“...”。
比如没有安装温湿度传感器和气压片,则输出数据:
c000s0000g0000t...r000p000h..b.....
 
指示灯
 
STU 指示灯:随风速、雨量传感器通断状态同步闪动。

LINK 指示灯:随DATA 输出输出闪动。

char                 databuffer[35];
double               temp;

void getBuffer()                                                                    //Get weather status data
{
  int index;
  for (index = 0;index < 35;index ++)
  {
    if(Serial.available())
    {
      databuffer[index] = Serial.read();
      if (databuffer[0] != 'c')
      {
        index = -1;
      }
    }
    else
    {
      index --;
    }
  }
}

int transCharToInt(char *_buffer,int _start,int _stop)                               //char to int)
{
  int _index;
  int result = 0;
  int num = _stop - _start + 1;
  int _temp[num];
  for (_index = _start;_index <= _stop;_index ++)
  {
    _temp[_index - _start] = _buffer[_index] - '0';
    result = 10*result + _temp[_index - _start];
  }
  return result;
}

int WindDirection()                                                                  //Wind Direction
{
  return transCharToInt(databuffer,1,3);
}

float WindSpeedAverage()                                                             //air Speed (1 minute)
{
  temp = 0.44704 * transCharToInt(databuffer,5,7);
  return temp;
}

float WindSpeedMax()                                                                 //Max air speed (5 minutes)
{
  temp = 0.44704 * transCharToInt(databuffer,9,11);
  return temp;
}

float Temperature()                                                                  //Temperature ("C")
{
  temp = (transCharToInt(databuffer,13,15) - 32.00) * 5.00 / 9.00;
  return temp;
}

float RainfallOneHour()                                                              //Rainfall (1 hour)
{
  temp = transCharToInt(databuffer,17,19) * 25.40 * 0.01;
  return temp;
}

float RainfallOneDay()                                                               //Rainfall (24 hours)
{
  temp = transCharToInt(databuffer,21,23) * 25.40 * 0.01;
  return temp;
}

int Humidity()                                                                       //Humidity
{
  return transCharToInt(databuffer,25,26);
}

float BarPressure()                                                                  //Barometric Pressure
{
  temp = transCharToInt(databuffer,28,32);
  return temp / 10.00;
}

void setup()
{
  Serial.begin(9600);
}
void loop()
{
  getBuffer();                                                                      //Begin!
  Serial.print("Wind Direction: ");
  Serial.print(WindDirection());
  Serial.println("  ");
  Serial.print("Average Wind Speed (One Minute): ");
  Serial.print(WindSpeedAverage());
  Serial.println("m/s  ");
  Serial.print("Max Wind Speed (Five Minutes): ");
  Serial.print(WindSpeedMax());
  Serial.println("m/s");
  Serial.print("Rain Fall (One Hour): ");
  Serial.print(RainfallOneHour());
  Serial.println("mm  ");
  Serial.print("Rain Fall (24 Hour): ");
  Serial.print(RainfallOneDay());
  Serial.println("mm");
  Serial.print("Temperature: ");
  Serial.print(Temperature());
  Serial.println("C  ");
  Serial.print("Humidity: ");
  Serial.print(Humidity());
  Serial.println("%  ");
  Serial.print("Barometric Pressure: ");
  Serial.print(BarPressure());
  Serial.println("hPa");
  Serial.println("");
  Serial.println("");
}

专业测量数据输出格式(公制):
JP3短接,通电后,将进入专业测量模式,方便进行二次开发。
2个端口同时输出,TTL TXD 调试端口9600速率  ;DATA数据接口2400速率    
专业测量数据格式:
A0789B000C0000D0000E0000F0000G0000H0000I0000J0000K0000L0209M703N10233
每0.5秒输出71个字节,包括数据末尾的换行符(OD,OA)
 
数据解析:
A0789: 风向测量AD值。
B000:  风向角度值
C0000: 实时风速频率 1Hz
D0000:   实时风速 0.1M/S
E0000:   前一分钟平均的风速 0.1m/s
F0000:   前5分钟的最高风速 0.1m/s
G0000: 实时雨量斗数,0-9999 ,循环计数
H0000: 前一分钟雨量斗数,0-9999
I0000 : 前1分钟雨量 0.1mm
J0000: 前一小时雨量 0.1mm
K0000:  前24小时雨量  0.1mm
L0209:温度(摄氏度),0.1度,低于零度,首位显示符号“-”。零下需传感器支持。
M703:湿度 0.1 (0%= 99%)
N10233  气压(0.1 hpa)
所有配件均在网上可购

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多