Tags:

シンプルに作るArduinoお天気センサー

By 文系なArduino 2014年6月21日土曜日

Arduinoを使ってあなただけの簡単気象台作り



今回この記事ではArduinoを使って、あなただけの簡単な気象台の作り方をご紹介致します。
スティーブ・スペンス氏のArduinotronicsをベースにして説明します。 Instructablesのページに詳しいビデオや最新のコードについて等も記載されていますのでそちらも参照にしながら読んでいただければ分かりやすいかと思います。

この記事を読み終わる頃には、たった一つのセンサーを使って自室の温度・湿度を液晶LCDに映し出す事が出来るようになります。

なんだかちょっぴりわくわくしてきませんか?それでは初めて行きましょう!


必要なハードウェアの準備

SaintSmartUnoを準備して下さい。 これが今回のプロジェクトの頭脳です。
DHT-22sensorこれは温度・湿度を計測するために使います
10k オームレジスタ
1.8graphical LCD温度・湿度表示用
・ブレッドボードとジャンパーコードたくさん

必要なソフトウェアの準備

Arduino IDE
DHTセンサー用のライブラリ

ライブラリのインストールにはダウンロードボタンを押して、ダウンロード。ダウンロードしたものの中身を/ライブラリフォルダの中に作ったArduino専用フォルダの中にコピーアンドペーストするだけです。


ハードウェアの構成

あなただけの気象台を作る為に、まずDHT-22センサーと液晶LEDArduinoにつなげる事が最も重要です。

DHT-22センサーから始めましょう。まず、センサーのシグナルピンをArduinoのピン2に繋ぎます。それからセンサーの電力供給を繋ぎます。+5VVCCピンをArduinoに繋ぎましょう。そしてセンサーのGNDピンからArduinoGNDピンも繋ぎます。最後に10kオームレジスタをシグナルピンと5Vの電力供給ピンの間にとりつけます。

次に液晶LEDの設置にかかります。LEDSCLArduinoのピン8を繋ぎます。次にLEDSDAArduinoのピン9LEDCSArduinoのピン10LEDDCArduinoのピン11です。そしてArduinoのピン13をリセットして下さい。

最後に電力供給を行います。VCCAruduino+5Vピンに取り付けます。そしてGnuArduinoのグラウンドピンにとりつけます。

下記の図を参照にしてください。



構成要素のテスト

ハードウェア同士の取り付けが終わったら次はコードを使う段階に入ります。まずは液晶の表示からみていきましょう
下記にコードを記載しました。

#include <TFT.h>    // Arduino LCDライブラリについて
#include <SPI.h>
// ピンについて
#define cs    10
#define dc    9
#define rst    8
// インスタンスライブラリを作成
TFT TFTscreen = TFT(cs, dc, rst);
void setup() {
    // 液晶を初期化
    TFTscreen.begin();
    // 液晶を消去
    TFTscreen.background(0, 0, 0);
    // フォントカラーを白に設定
    TFTscreen.stroke(255,255,255);
    // フォントサイズを設定
    TFTscreen.setTextSize(2);
    // テスト用の文を記載
  TFTscreen.text("The screen is working !",0,0);
}
void loop() {
}




ArduinoTFTライブラリは液晶LCDを使う作業を簡略化してくれます。しかし、とりあえず重要な主となるコードについて知っておきましょう。

まず、正しいライブラリを指定するというところから始めます。
#include <TFT.h>    // Arduino LCDライブラリについて
#include <SPI.h>

それからTFTスクリーンを作ります。
TFT TFTscreen = TFT(cs, dc, rst);

次の重要なポイントは液晶LCDを初期化することです。
TFTscreen.begin();


最後に()内のテキストファンクションに何か文章を書いて、液晶LCDにその文を投影します。

TFTscreen.background(0, 0, 0);


しっかりと液晶LCDArduinoに繋がっていれば、液晶LCD上に「The screen is working !」と出ている筈です。


全てを繋ごう!

それでは、センサーとスクリーンを統合する作業に入りましょう。コードは結構な長さですが、重要なステップはしっかりと示していきますのでご安心下さい。
下記にコードを記載しました。

/*
ArduinoTFTテキスト例
この例はどのようにArduinoTFTに文章を書くかというデモンストレーションである。
このコード例がパブリックドメインのものだ。
Scott Fitzgeraldによって2013/04/15に作られた。
Modded by Steve Spence of http://arduinotronics.blogspot.com
*/

#include <TFT.h> // Arduino LCD ライブラリについて
#include <SPI.h>

// Unoのためのピン設定
#define cs 10
#define dc 9
#define rst 8

// インスタンスライブラリを作成

TFT TFTscreen = TFT(cs, dc, rst);

// 液晶に表示するチャー配列
char tempPrintout[6];
char humPrintout[6];

// DHT湿度・温度系センサーの為のテスト例
//パブリックドメイン。ladyadaにより記載 Written by ladyada, public domain
// 華氏温度設定についての追加 Steve Spence, http://arduinotronics.blogspot.com
#include <DHT.h>
#define DHTPIN 2 // どのピンに接続したかについて
// 何も記入しないこと!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)

int cycleTime = 2000;

DHT dht(DHTPIN, DHTTYPE);

float h;
float t;

void setup() {

// すべてのGLCDを使ったコードにはまずこの一行目から始める
TFTscreen.begin();

// 黒背景でスクリーンを消去
TFTscreen.background(0, 0, 0);

// 液晶上の文について設定する
// フォントカラーを白に設定
TFTscreen.stroke(255,255,255);

// フォントサイズを設定
TFTscreen.setTextSize(2);

// 気温を左上端から映し出すよう設定
TFTscreen.text("Temp (F)",0,0);

//湿度を左上端から映し出すよう設定
TFTscreen.text("Humidity (%)",0,60);

// フォントサイズをループ設定の為大きいサイズに設定
TFTscreen.setTextSize(4);

dht.begin();

}

void loop() {

// D2センサー上で温度・湿度の値を読み取る

// 湿度・温度の値を250ミリ秒毎に読み取る
// センサーは2秒前読み取った値を表示(遅い速度のセンサーである)
h = dht.readHumidity();
t = dht.readTemperature();
t = (t*1.8)+32; //C to F conversion

String tempVal = doubleToString(t, 2);
String humVal = doubleToString(h, 0);
// String sensorVal = String(1.234);

// 読み取った値をchar配列に変換
tempVal.toCharArray(tempPrintout, 6);
humVal.toCharArray(humPrintout, 6);

// フォントカラーの設定
TFTscreen.stroke(255,255,255);

// センサーの値を投影
TFTscreen.text(tempPrintout, 0, 25);
TFTscreen.text(humPrintout, 0, 85);

// 少々の待ち時間を要す
delay(cycleTime);
// 先程記載したコードを削除する
TFTscreen.stroke(0,0,0);
TFTscreen.text(tempPrintout, 0, 25);
TFTscreen.text(humPrintout, 0, 85);

}

//Rounds down (via intermediary integer conversion truncation)
String doubleToString(double input,int decimalPlaces){

if(decimalPlaces!=0){

String string = String((int)(input*pow(10,decimalPlaces)));

if(abs(input)<1){

if(input>0)

string = "0"+string;

else if(input<0)

string = string.substring(0,1)+"0"+string.substring(1);

}

return string.substring(0,string.length()-decimalPlaces)+"."+string.substring(string.length()-decimalPlaces);

}

else {

return String((int)input);

}

}





では、液晶LCDのコードを見てきた時と同じようにどのようなコードを付け加えていったか見ていきましょう。
まずDHTセンサーの為に正しいライブラリを指定するというところから始めます。正しいセンサータイプと、センサー用のインスタンスを設定します。

#include <DHT.h>
#define DHTPIN 2 // どのピンに接続したかについて
// 何も記入しないこと!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
int cycleTime = 2000;
DHT dht(DHTPIN, DHTTYPE);


まだセットアップ()のファンクション内です。次にセンサーを初期化します。

dht.begin();


次にループ()の部分を書いていきます。温度と湿度を読めるようにします。

h = dht.readHumidity();
t = dht.readTemperature();

そして温度・湿度の計測結果をcustom double ToString()を使ってStrings形式に変換する必要があります。そして、液晶LCDに値を投影する前に、まずこの二つのStrings形式の値をChar系列に変換します。

tempVal.toCharArray(tempPrintout, 6);
humVal.toCharArray(humPrintout, 6);

最後に液晶LSDに温度湿度の値を2行にして投影することができます。


TFTscreen.text(tempPrintout, 0, 25);
TFTscreen.text(humPrintout, 0, 85);


ではこのコードをアップロードしてみましょう。

配置が正しければ温度・湿度共に液晶LCDにうつっているはずです!

もしこのコード配列が最新のバージョンであるか確かめたい場合このチュートリアルを参照にしてください。例えば、Steve氏はテキスト音読機能を発表したりしていますよ。

それでは最後に今回紹介した簡単気象台を作る為につかったもののリストを記載しておきましょう。

SainSmart Uno
DHT-22センサー
10k オームレジスタ
1.8 graphical LCD from SainSmart
・ブレッドボードとジャンパーコードたくさん


最後になりましたが ArduinotronicsSteve Spence氏の大変素晴らしいチュートリアルに感謝致します!


<この記事はhttp://www.openhomeautomation.net/weather-station-arduino/を意訳したものです>

Post Tags:

文系なArduino

Aduinoとraspberry PiとWebサービスで食べている「文系」です。マレーシアとシンガポールを拠点としてITコンサルタントとしても活躍し、中国語教師としても活躍中の身でもあります。IT農業をシンガポールで始めようと計画中です。

No Comment to " シンプルに作るArduinoお天気センサー "