WebブラウザからHTTPサーバ経由でESP8266に接続されたセンサーの値を読み出すWi-Fiモジュール「ESP8266」で始めるIoT DIY(6)(3/4 ページ)

» 2015年11月27日 07時00分 公開
[今岡通博MONOist]

 次のリストが太陽電池からアナログ値を読み出して、シリアルポート経由にてPCに値を送るプログラムです。

#include "mbed.h"
Serial pc(dp16,dp15);
AnalogIn a2(dp13);
int main(){
    pc.baud(115200);
    while(1) {
        pc.printf("%f\r\n",a2.read());
        wait(0.1);
    }
}

 2行目でシリアルポートの設定をしています。16番ピンをUARTのTXに15番ピンをUARTのRXに設定しています。またそのデバイスをアクセルするためのオブジェクト名をpcとしています。3行目でアナログ入力ポートを13番ピンに設定しています。またそのアナログ入力にアクセスするたものオブジェクト名をa2としています。

 4行目からmain関数が始まります。この中でまずUARTのボーレートを115200bpsに設定します。次に6行目から9行目でのコードが永久ループの中に記述しています。その中でa2.read()で13番ピンに接続されている電圧を読みだして、浮動小数表記に変換してUARTに出力しています。その後0.1秒のウエイトを置きます。この処理が繰り返されます。

 それでは実際に太陽電池を接続しPC側のTera Termで電圧を観測してみましょう。次の写真は夜間、部屋の中で太陽電池に照明が当たっている状態です。

 太陽電池の出力は直接13番ピンに接続しています。直射日光がさす可能性があれば分圧抵抗を入れるべきでしょうが、夜間なので分圧器は入れない状態で実験しています。テスターは電圧を測定するモードになっており、GNDとアナログ入力の13番との間の電圧を表示しています。太陽電池の出力電圧は1.358Vとなっています。

夜間、部屋の中で測定Tera Termでアナログ入力の値を表示 夜間、部屋の中で測定(写真=左)、Tera Termでアナログ入力の値を表示(写真=右)

 次の図は先ほどのプログラムを動作させてTera Termでアナログ入力の値を表示しているところです。アナログ入力は上限、すなわち3.3Vが加わった時、表示される値1.000000となり0Vの時0.000000となります。ですから1.358Vの入力があった場合は1.358/3.3で0.41あたりになるのが正解ですがいかがでしょうか。ばらつきもありますが平均すると、大体そのあたりになるような感じですよね。

 次の写真は太陽電池にあたる光を遮った時の写真です。

 この時も先ほどと同様にテスターで測った値とプログラムが出力した値を検証してみましょう。テスターの値を見ると67.3mVとなっています。先ほどとスケールを合わせると0.0673Vということになります。これを先ほどと同様上限を1.000000になるよう換算すると0.0637/3.3=0.0193となります。実測値はどうでしょう。

 いかがでしょうか。近い値になってるのではないでしょうか。先ほども紹介しましたが誤差やばらつきについては以下も参考にしてください(関連記事:「mbed」で始めるARMマイコン開発入門(7):ARMマイコンに内蔵された周辺デバイスの使い方を学ぶ−アナログ入力編−)

夜間、部屋の中で太陽電池を覆って測定Tera Termでアナログ入力の値を表示 太陽電池を覆って室内測定(写真=左)、Tera Termでこの状態のアナログ入力値を表示(写真=右)

Copyright © ITmedia, Inc. All Rights Reserved.