2022年6月22日水曜日

気象観測百葉箱作成

 本文は気象関連センサーの使い方のまとめ紹介

■部品リスト:

ESP8266開発ボード(必須)

・ブレッドボード(必須)

USBケーブル(必須)

温度センサーDS18B20(必須)

・雨滴感知センサー(必須)

・気圧センサーBPM180(必須)

・3mm LED

・100Ω抵抗*2(1必須)

・ジャンパーワイヤー(必須)

気圧センサーBPM180

このモジュール単体で、「気温」「気圧」の情報を計測することができます。

ピンは、左から順に「SDA」「SCL」「GND」「VIN」になっています。

・注意点

 今回は「BMP180_Breakout_Arduino_Library」を利用しています。

 下記場所でダウンロードできます。

  https://github.com/sparkfun/BMP180_Breakout_Arduino_Library

 ダウンロードされたZIPファイルが下図でもインストールできます。



配線図

雨滴感知センサー

雨滴感知センサーは状態が変化した時マイクロに通知します。

ピンは、左から順に「A0」「D0」「GND」「VIN」になっています。

・注意点

 アナログ電圧を読み取ってデジタル値に変換するために、ADCを占用しています。

 雨滴感度は調整できます。

配線図

温度センサーDS18B20

高精度デジタル温度専用センサーです。

独自の1-Wireインターフェースは、通信のために1本のポートピンだけを必要とします。

ピンは、左から順に「GND」「DQ」「VDD」になっています。

配線図


■回路イメージ

下図は集成して実物イメージです。




プログラム

#include <OneWire.h>
#include <DallasTemperature.h>
#include <SFE_BMP180.h>
#define ALTITUDE 1655.0
#define rainDigital 16 // D0
const int TEMP = 14;  //D5
OneWire oneWire(TEMP);
DallasTemperature sensors(&oneWire);
SFE_BMP180 pressure;
void setup() {
  Serial.begin(115200);
  sensors.begin();
  pinMode(rainDigital,INPUT);
  //BMP180 Sensor
  if (pressure.begin())
    Serial.println("BMP180 init success");
  else {
    Serial.println("BMP180 init fail\n\n");
    while(1);
  }
}
void loop() {
  // 温度検知
  sensors.requestTemperatures();
  float temperatureC = sensors.getTempCByIndex(0);
  Serial.print(temperatureC);
  Serial.println("℃");
  handleADC();
  // 雨滴検知
  int rain = analogRead(A0);
  Serial.print("R:");
  Serial.println(rain);
  int rainDigitalVal = digitalRead(rainDigital);
  String rainstatus;
  if(rainDigitalVal==1){
    rainstatus="No Rain";
  } else{
    rainstatus="Raining";
  }
  Serial.println(rainstatus);
  
  delay(5000);
}
void handleADC() {
  char status;
  double T,P,p0,a;
  
  Serial.println();
  Serial.print("provided altitude: ");
  Serial.print(ALTITUDE,0);
  Serial.print(" meters, ");
  Serial.print(ALTITUDE*3.28084,0);
  Serial.println(" feet");
 
  status = pressure.startTemperature();
  if (status != 0)
  {
    delay(status);
    status = pressure.getTemperature(T);
    if (status != 0)
    {
      // 温度出力:
      Serial.print("temperature: ");
      Serial.print(T,2);
      Serial.print(" deg C, ");
      Serial.print((9.0/5.0)*T+32.0,2);
      Serial.println(" deg F");
      status = pressure.startPressure(3);
      if (status != 0)
      {
        delay(status);
        status = pressure.getPressure(P,T);
        if (status != 0)
        {
          // 気圧出力:
          Serial.print("absolute pressure: ");
          Serial.print(P,2);
          Serial.print(" mb, ");
          Serial.print(P*0.0295333727,2);
          Serial.println(" inHg");
          p0 = pressure.sealevel(P,ALTITUDE); // we're at 1655 meters (Boulder, CO)
          Serial.print("relative (sea-level) pressure: ");
          Serial.print(p0,2);
          Serial.print(" mb, ");
          Serial.print(p0*0.0295333727,2);
          Serial.println(" inHg");
          a = pressure.altitude(P,p0);
          Serial.print("computed altitude: ");
          Serial.print(a,0);
          Serial.print(" meters, ");
          Serial.print(a*3.28084,0);
          Serial.println(" feet");
        }
        else Serial.println("error retrieving pressure measurement\n");
      }
      else Serial.println("error starting pressure measurement\n");
    }
    else Serial.println("error retrieving temperature measurement\n");
  }
  else Serial.println("error starting temperature measurement\n");
}



0 件のコメント:

コメントを投稿

シンプルロボットカーセットの使い方

■ マイコン :ESP3266-CH340  シンプルの案として、マイコンは安いESP8266-CH340開発ボードを選びました。該当マイコンもWIFI機能があります。  ドライバーダウンロード場所:    https://sparks.gogo.co.nz/ch340.html...