$ 10ポータブルArduinoウェザーステーション(AWS)
コンポーネントと消耗品
> ![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 |
必要なツールとマシン
> ![]() |
|
アプリとオンラインサービス
> ![]() |
|
このプロジェクトについて




最近、私の大学で小さな科学展示会が開かれました。そのため、先生から、若い学生に電子工学について教えるプロジェクトを提示するように依頼されたので、基本的に2日間で何かを作ることができました。
ここの気候条件は大きく異なり、最近は気温が摂氏34〜40度前後になっています。そこで、気象観測所を作ることにしました。
では、気象観測所は何をするのでしょうか?
気象観測所は、さまざまなセンサーを使用して気象と環境に関連するデータを収集するデバイスです
のようなセンサー
- 風
- 湿度
- 雨
- 温度
- 圧力
- 高度
目的は、携帯型の気象観測所を作ることです
必要な機能
- 温度
- 湿度
- 圧力
- 高度
ステップ1:材料:ものを購入する時間







プロジェクトに必要なものは次のとおりです
私は実際に自分のUNOでプロジェクトを開始しましたが、その後、コンパクトソリューションに切り替えることにしました。
私はその瞬間にnanoを持っていたので、それと一緒に行かなければなりませんでした。それが最小であるため、microを使用したいと思います。
とにかくそれらを残して、ここで予算と部品について話すことはリストです。
- DHT22温度および湿度センサー-> $ 3.00
- BMP180圧力センサー(私の地域ではBMP280の方が安いですが、高価です)> $ 2.00
- Arduino Nano> $ 1.89
- はんだ付け
- I2Cドライバー付きLCDディスプレイ> $ 3.0
- ベロボード
- 女性ヘッダー
ツールエンドにはが必要です
- はんだごて
- ラジオペンチ
- ワイヤー
そしてまたしばらく
ステップ2:温度と湿度-DHT22







温度の測定は、別のセンサーを使用して行うことができます。
人気のあるものはDHT22、DHT11、SHT1x
つまり、基本的に、このセンサーが互いにどのように異なるのか、そしてなぜ私が最初にDHT22を使用したのかを理解しましょう。
AM2302は校正済みデジタル信号を出力します。独自のデジタル信号収集技術と湿度検知技術を採用し、信頼性と安定性を確保しています。その検出要素は、8ビットのシングルチップコンピューターに接続されています。
このモデルのすべてのセンサーは、正確なキャリブレーションチャンバーで温度補正およびキャリブレーションされ、キャリブレーション係数はOTPメモリのプログラムのタイプに保存されます。センサーが検出すると、メモリから係数が引用されます。小型で低消費で長い伝送距離(100m)により、AM2302は過酷な用途に適しています。4本のピンが1列にパッケージされているため、接続が非常に便利です。
3つの長所と短所を見てみましょう。
DHT11
長所:はんだ付けは必要ありません。 3つの中で最も安い。安定した出力をすばやく取得します。 20m以上の伝送。強い干渉。
短所:ライブラリ!解決オプションはありません。エラー:温度+/- 2°C;湿気+/- 5%RH。不十分な測定範囲(0-50°C)。アプリケーション:ガーデニング、農業。
DHT22
長所:はんだ付けは必要ありません。 DHT11に数ドルを追加して、アップグレードを入手してください。滑らかな曲線。最小のエラー。広い範囲。 20m以上の伝送。強い干渉。
短所:より敏感になる可能性があります。遅い温度追跡。ライブラリが必要です。アプリケーション:環境モニタリング。 SHT1x
長所:はんだ付けなし。滑らかな曲線。小さなエラー。迅速な対応。低消費電力。自動スリープ。並外れた長期安定性と一貫性。
短所:2つのデジタルインターフェース。湿度エラー。 DHT11と同じ測定範囲。ライブラリが必要です。用途:重作業と長時間の設置。以下は、比較的安価な3つの選択肢です。
接続
Vccから5Vまたは3.3V
Gnd to Gnd
arduinoのピン2へのデータ
ステップ3:気圧計と圧力センサー-BMP180



bmp180は、I2C(「ワイヤー」)インターフェースを備えた気圧センサーです。
気圧センサーは、周囲の空気の絶対圧力を測定します。この気圧は、天候と高度の両方によって異なります。
このbmp180モジュールには3.3vレギュレーター662kが付属していましたが、これはばかげたことになりました。そのため、vcc全体を直接チップにバイパスするためにワイヤーを接続しました。
注:そうすることで、3.3 vのみを使用するように制限します。それを超える電圧を使用すると、デバイスが台無しになります。
他のモデルには662k電圧レギュレータがない場合があります。よく確認してください。
戻ってきたら、センサーをarduinoに接続しましょう。
センサーは、nanoとUnoのどちらであるarduinoのi2cバスに接続します
SDA ==> A4
SCL ==> A5
VCC ==> 3.3V
GND ==> GND
気圧について少し話しましょう。気圧は高度と温度をどのように測定しますか。
どの位置でも大気圧は一定ではありません。地球の自転、軸の傾き、およびその他の多くの要因の間の複雑な相互作用により、圧力の高い領域と低い領域が移動し、それが毎日見られる天気の変化を引き起こします。気圧の変化を監視することで、天候の短期的な変化を予測できます。
たとえば、圧力の低下は通常、雨天または嵐が近づいていることを意味します(低圧システムが入り込んでいます)。気圧の上昇は通常、晴天が近づいていることを意味します(高圧システムが通過しています)。
大気圧も高度によって異なります。エベレストベースキャンプ(5,400)の絶対気圧はデリー(216)よりも低い
絶対圧力は、ある場所から別の場所への圧力測定値を直接比較することは難しいため、相対圧力、つまり海面圧力を使用します。
高度の測定
海面での大気圧の平均圧力は1013.25hPa(またはmbar)です。宇宙の真空に向かって登ると、これはゼロになります。このドロップオフの曲線はよく理解されているため、次の式を使用して、2つの圧力測定値(pとp0)間の高度差を計算できます。
alti =44330 * [1-(p / p0)^(1 / 5.255)]
ベースライン圧力(p0)として海面気圧(1013.25 hPa)を使用する場合、方程式の出力は海抜の現在の高度になります。
注意事項
空気を入れてください: BMP180は、圧力を測定するために周囲の空気にアクセスする必要があるため、密閉されたケースに入れないでください。小さな通気孔を設けることで十分です。ただし、空気が多すぎないようにしてください :一方、動きの速い空気や風にさらされると、瞬間的な圧力変動が発生し、測定値に影響を与える可能性があります。強い気流からデバイスを保護します。
クールに保つ: 圧力を測定するには正確な温度測定値が必要なため、デバイスを急激な温度変化にさらさないようにし、近くの高温部品やその他の熱源からデバイスを遠ざけてください。
乾いた状態に保つ :BMP180は湿気に敏感です。水没させたり、液体の水に接触させたりしないでください。
盲目にしないでください: 驚いたことに、BMP180内のシリコンは光に敏感であり、光はチップ上部の穴からデバイスに入る可能性があります。最高の精度を得るには、チップを周囲光から保護してください。
ステップ4:回路を作る







そこで、nanoのヘッダーを作成することから始めます。実際にメスのヘッダーをカットし、ファイルして元々そのサイズのように見せます。次にはんだ付けします。次に、DHT22センサーのヘッダーを作成しました
。データからグランドに接続するには10kの抵抗が必要でした。次に、すべてをはんだ付けしました。次に、bmp180の時間で、同様の方法でヘッダーを追加しました。電源として3.3Vを使用しました。すべてのi2cバスを接続しました。
最後に、i2c lcdを使用しているディスプレイを追加したので、bmp180モジュールに使用したのと同じバスを使用しました。
(マシンのクロックを不整合にするために後でrtcモジュールを追加したかった4番目のスロットがあります)
ステップ5:コードの時間




待って....................
ライブラリをダウンロードする
bmp180
https://github.com/sparkfun/BMP180_Breakout_Arduin ...
BMP180_Breakout_Arduino_Library-master.zipDht22ライブラリ
https://github.com/adafruit/DHT-sensor-library
arduinoにライブラリをインストールするには、このリンクを確認してください
https://www.arduino.cc/en/Guide/Libraries
私はarduino1.6.5を使用したので、コードはこのバージョンで確実に機能します。また、機能しない場合は、ベースバージョンとして1.6.5を使用してください。
#include #include #include #include "DHT.h" #include
SFE_BMP180圧力;
#define ALTITUDE 20.56 #define I2C_ADDR 0x27 // <<-追加するここにアドレスを指定します。接続しているピン
//使用しているタイプのコメントを外します!//#defineDHTTYPE DHT11 // DHT 11#define DHTTYPE DHT22 // DHT 22(AM2302)、AM2321DHT dht(DHTPIN、 DHTTYPE); LiquidCrystal_I2C lcd(I2C_ADDR、En_pin、Rw_pin、Rs_pin、D4_pin、D5_pin、D6_pin、D7_pin); float t1、t2;
void setup(){Serial.begin(9600); lcd.begin(16,2); // <<-LCDは20x4で、必要に応じてLCDに変更します// LCDバックライトONlcd.setBacklightPin(BACKLIGHT_PIN、POSITIVE); lcd.setBacklight(HIGH); lcd.home(); // LCDlcd.print( "Weather Station"); delay(5000); dht.begin();で家に帰るpressure.begin(); } void loop(){char status;ダブルT、P、p0、a; status =pressure.startTemperature(); if(status!=0){delay(status);
status =pressure.getTemperature(T); if(status!=0){Serial.print( "1"); lcd.clear(); lcd.setCursor(0,0); lcd.print( "バロ温度:"); lcd.setCursor(0,1); lcd.print(T、2); lcd.print( "deg C"); t1 =T; delay(3000);
ステータス=pressure.startPressure(3); if(status!=0){//測定が完了するのを待ちます:delay(status);
status =pressure.getPressure(P、T); if(status!=0){lcd.clear(); lcd.setCursor(0,0); lcd.print( "絶対圧力:"); lcd.setCursor(0,1); lcd.print(P、2); lcd.print( "mb"); delay(3000);
p0 =pressure.sealevel(P、ALTITUDE); //現在1655メートル(ボルダー、コロラド州)
a =pressure.altitude(P、p0); lcd.clear(); lcd.setCursor(0,0); lcd.print( "高度:"); lcd.setCursor(0,1); lcd.print(a、0); lcd.print( "メートル"); delay(3000); }}}} float h =dht.readHumidity(); //温度を摂氏(デフォルト)として読み取りますfloat t =dht.readTemperature(); t2 =t; lcd.clear(); lcd.setCursor(0,0); // 2行目の先頭に移動lcd.print( "Humidity:"); lcd.setCursor(0,1); lcd.print(h); lcd.print( "%"); delay(3000); lcd.clear(); lcd.setCursor(0,0); // 2行目の先頭に移動lcd.print( "DHT Tempurature:"); lcd.setCursor(0,1); lcd.print(t); lcd.print( "deg C"); delay(3000); lcd.clear(); lcd.setCursor(0,0); // 2行目の先頭に移動lcd.print( "Mean Tempurature:"); lcd.setCursor(0,1); lcd.print((t1 + t2)/ 2); lcd.print( "deg C"); delay(3000);}
FSIULGKING9D7SD.ino
コード
- コードスニペット#1
コードスニペット#1 プレーンテキスト
#include
#include #include #include "DHT.h" #include SFE_BMP180圧力;
#define ALTITUDE 20.56 #define I2C_ADDR 0x27 // <<-ここにアドレスを追加します。 #define Rs_pin 0#define Rw_pin 1#define En_pin 2#define BACKLIGHT_PIN 3#define D4_pin 4#define D5_pin 5#define D6_pin 6#define D7_pin 7
#define DHTPIN 2 //どのデジタルピン再接続
//使用しているタイプのコメントを解除します!//#defineDHTTYPE DHT11 // DHT 11#define DHTTYPE DHT22 // DHT 22(AM2302)、AM2321DHT dht(DHTPIN、DHTTYPE); LiquidCrystal_I2C lcd(I2C_ADDR、En_pin、Rw_pin、Rs_pin、D4_pin、D5_pin、D6_pin、D7_pin); float t1、t2;
void setup(){Serial.begin(9600); lcd.begin(16,2); // <<-LCDは20x4で、必要に応じてLCDに変更します// LCDバックライトONlcd.setBacklightPin(BACKLIGHT_PIN、POSITIVE); lcd.setBacklight(HIGH); lcd.home(); // LCDlcd.print( "Weather Station"); delay(5000); dht.begin();で家に帰るpressure.begin(); } void loop(){char status;ダブルT、P、p0、a; status =pressure.startTemperature(); if(status!=0){delay(status);
status =pressure.getTemperature(T); if(status!=0){Serial.print( "1"); lcd.clear(); lcd.setCursor(0,0); lcd.print( "バロ温度:"); lcd.setCursor(0,1); lcd.print(T、2); lcd.print( "deg C"); t1 =T; delay(3000);
ステータス=pressure.startPressure(3); if(status!=0){//測定が完了するのを待ちます:delay(status);
status =pressure.getPressure(P、T); if(status!=0){lcd.clear(); lcd.setCursor(0,0); lcd.print( "絶対圧力:"); lcd.setCursor(0,1); lcd.print(P、2); lcd.print( "mb"); delay(3000);
p0 =pressure.sealevel(P、ALTITUDE); //現在1655メートル(ボルダー、コロラド州)
a =pressure.altitude(P、p0); lcd.clear(); lcd.setCursor(0,0); lcd.print( "高度:"); lcd.setCursor(0,1); lcd.print(a、0); lcd.print( "メートル"); delay(3000); }}}} float h =dht.readHumidity(); //温度を摂氏(デフォルト)として読み取りますfloat t =dht.readTemperature(); t2 =t; lcd.clear(); lcd.setCursor(0,0); // 2行目の先頭に移動lcd.print( "Humidity:"); lcd.setCursor(0,1); lcd.print(h); lcd.print( "%"); delay(3000); lcd.clear(); lcd.setCursor(0,0); // 2行目の先頭に移動lcd.print( "DHT Tempurature:"); lcd.setCursor(0,1); lcd.print(t); lcd.print( "deg C"); delay(3000); lcd.clear(); lcd.setCursor(0,0); // 2行目の先頭に移動lcd.print( "Mean Tempurature:"); lcd.setCursor(0,1); lcd.print((t1 + t2)/ 2); lcd.print( "deg C"); delay(3000);}
Github
https://github.com/sparkfun/BMP180_Breakout_Arduino_Library/archive/master.ziphttps://github.com/sparkfun/BMP180_Breakout_Arduino_Library/archive/master.zipGithub
https://github.com/adafruit/DHT-sensor-libraryhttps://github.com/adafruit/DHT-sensor-library 回路図

製造プロセス