本文は気象関連センサーの使い方のまとめ紹介
■部品リスト:
・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 // D0const int TEMP = 14; //D5OneWire oneWire(TEMP);DallasTemperature sensors(&oneWire);SFE_BMP180 pressure;void setup() {Serial.begin(115200);sensors.begin();pinMode(rainDigital,INPUT);//BMP180 Sensorif (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 件のコメント:
コメントを投稿