今回この記事ではArduinoを使って、あなただけの簡単な気象台の作り方をご紹介致します。
スティーブ・スペンス氏のArduinotronicsをベースにして説明します。
Instructablesのページに詳しいビデオや最新のコードについて等も記載されていますのでそちらも参照にしながら読んでいただければ分かりやすいかと思います。
この記事を読み終わる頃には、たった一つのセンサーを使って自室の温度・湿度を液晶LCDに映し出す事が出来るようになります。
なんだかちょっぴりわくわくしてきませんか?それでは初めて行きましょう!
この記事を読み終わる頃には、たった一つのセンサーを使って自室の温度・湿度を液晶LCDに映し出す事が出来るようになります。
なんだかちょっぴりわくわくしてきませんか?それでは初めて行きましょう!
必要なハードウェアの準備
・SaintSmartUnoを準備して下さい。 これが今回のプロジェクトの頭脳です。
・10k
オームレジスタ
・ブレッドボードとジャンパーコードたくさん
必要なソフトウェアの準備
・Arduino
IDE
・DHTセンサー用のライブラリ
ライブラリのインストールにはダウンロードボタンを押して、ダウンロード。ダウンロードしたものの中身を/ライブラリフォルダの中に作ったArduino専用フォルダの中にコピーアンドペーストするだけです。
ライブラリのインストールにはダウンロードボタンを押して、ダウンロード。ダウンロードしたものの中身を/ライブラリフォルダの中に作ったArduino専用フォルダの中にコピーアンドペーストするだけです。
ハードウェアの構成
あなただけの気象台を作る為に、まずDHT-22センサーと液晶LEDをArduinoにつなげる事が最も重要です。
DHT-22センサーから始めましょう。まず、センサーのシグナルピンをArduinoのピン2に繋ぎます。それからセンサーの電力供給を繋ぎます。+5VのVCCピンをArduinoに繋ぎましょう。そしてセンサーのGNDピンからArduinoのGNDピンも繋ぎます。最後に10kオームレジスタをシグナルピンと5Vの電力供給ピンの間にとりつけます。
次に液晶LEDの設置にかかります。LEDのSCLとArduinoのピン8を繋ぎます。次にLEDのSDAとArduinoのピン9、LEDのCSとArduinoのピン10、LEDのDCとArduinoのピン11です。そしてArduinoのピン13をリセットして下さい。
最後に電力供給を行います。VCCをAruduinoの+5Vピンに取り付けます。そしてGnuをArduinoのグラウンドピンにとりつけます。
最後に電力供給を行います。VCCをAruduinoの+5Vピンに取り付けます。そしてGnuをArduinoのグラウンドピンにとりつけます。
下記の図を参照にしてください。
構成要素のテスト
ハードウェア同士の取り付けが終わったら次はコードを使う段階に入ります。まずは液晶の表示からみていきましょう
下記にコードを記載しました。
#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() {
}
ArduinoのTFTライブラリは液晶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);
しっかりと液晶LCDがArduinoに繋がっていれば、液晶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氏はテキスト音読機能を発表したりしていますよ。
配置が正しければ温度・湿度共に液晶LCDにうつっているはずです!
もしこのコード配列が最新のバージョンであるか確かめたい場合このチュートリアルを参照にしてください。例えば、Steve氏はテキスト音読機能を発表したりしていますよ。
それでは最後に今回紹介した簡単気象台を作る為につかったもののリストを記載しておきましょう。
・SainSmart
Uno
・DHT-22センサー
・10k
オームレジスタ
・1.8
graphical LCD from SainSmart
・ブレッドボードとジャンパーコードたくさん
<この記事はhttp://www.openhomeautomation.net/weather-station-arduino/を意訳したものです>
No Comment to " シンプルに作るArduinoお天気センサー "