ハンダ付け不要!初心者でもできる、30分おきにセンサーの値をWeb上に保存する仕組みを安定して動かす(回路編)

Posted: / Modified: / Tags: ESP8266



先日、スイッチサイエンスで「ESP-WROOM-02 Arduino互換ボード」が発売されました。

格安で使えるWiFiモジュールとして話題になったESP8266(ESP-WROOM-02)ですが、電子工作初心者から見ると「ハンダ付けが必要」で手を出すにもちょっと勇気がいる状況でした。

しかし今回の互換ボードのおかげで、ハンダ付けが不要になって初心者でも手を出しやすくなりました。

また、ESP8266(ESP-WROOM-02)はArduino IDEで開発可能なので、ほとんどArduinoと同じ感覚で使うことが出来ます(スイッチサイエンスの記事で、Arduino IDE用のファームウェアへの書き換えは工事設計認証(いわゆる技適)に影響を与えない、とあるので法的にも安心して利用できます)。

そこで今回は、ESP8266(ESP-WROOM-02)のスリープ機能を使って30分ごとに圧力センサーの値をWeb上に保存する仕組みを安定的に動作させる方法を紹介します。

「回路編」と「プログラム編」の2部構成で、今回は回路編です。

初歩的な部分から説明するので、「電子回路はオームの法則くらいしかわかんない」といった電子工作初心者の方でもイチから取り組むことが出来ます。

「ESP8266って何?なんか難しそう」と思われる方もいるかもしれませんが、先ほど述べたように扱い方自体は基本的にArduinoと同じですし、Arduino IDEで開発が出来るのでArduinoを触ったことがある方であれば、気軽に取り組むことが出来るかと思います。C言語に慣れていない方も、簡単か関数しか使っていないので、プログラミングの経験が少しでもあれば理解できる内容になっています。

※保存先にはMilkcocoaを使用しますが、保存データ数100,000データまでは無料なので、無料プランでも単純計算で2,000日以上使えます。

※※なお、乾電池で駆動させたより実用的な例は、こちらのQiita記事に書きました。やや高度な内容ですが興味がある方はどうぞ。以下のページで洗剤の残量を見ることが出来ます。

必要なもの

合計:3,960円(送料込で4,500円くらい)

センサーの値ってそもそも何?

圧力センサーの値を読む回路を作るのですが、そもそも「センサーの値」とは何なのかわからない人のために説明します。

「センサーの値」というのは厳密に言うと、結構おかしな表現です。

これを理解するためには、Arduinoなどのマイコンボードの入出力について理解する必要があります。

今回は入力しか使わないので入力に限ってお話しします。

Arduinoや今回使うESP-WROOM-02の入力には、「アナログ入力」と「デジタル入力」の2種類があります。

ざっくり言うと、デジタル入力は「入力を0(LOW)か1(HIGH)の2通りで判断する」、アナログ入力は「入力を細かく(今回だと0〜1023)判断する」といったふうになります。本来、アナログ値は完全に連続なのですが、コンピュータで扱っている以上離散的になります(ちなみに、アナログ入力でどれくらい細かく測れるかの性能のことを「分解能」といいます)。

アナログ・デジタルの違いはわかりましたが、その「入力」っていうものの正体は何なのかという疑問が出てくると思います。

それはズバリ、「電圧」です。

コンピュータは電気で動いていて、電気で動いているということは必ず電圧をかけることになります。Arduino UNOであれば5V付近の電圧をかけますし、ESP-WROOM-02であれば3.3V付近の電圧をかけます。これを、5Vで動いている(動作電圧5V)、3.3Vで動いている(動作電圧3.3V)みたいに言ったりします。

この「○○Vで動いている」というのが、入力・出力を考えるときにとても重要で、マイコンボードは基本的にこの○○Vを入力・出力の基準にします。

デジタル入力を例にとると、Arduino UNOは5Vで動いているので、ピンに5V付近の電圧がかかったらHIGH、0V付近の電圧がかかったらLOWと判断されます。ESP-WROOM-02は3.3Vで動いているので、ピンに3.3V付近の電圧がかかったらHIGH、0V付近の電圧がかかったらLOWと判断されます。

ESP-WROOM-02のHIGH(3.3V)出力をArduino UNOのデジタル入力で受け取ったとしても、HIGH(5V)にはならないんですね(動作上HIGHに見えるかもしれませんが、正常なHIGHではないです)。

ここで「『ピンに電圧がかかる』ってなんやねん」と疑問を持つ人がいる気がするので簡単に説明します。以下のように回路を組むと、それぞれ図に書いた電圧がかかります。

「電圧がかかる」というと、以下のように素子の端と端に電位差がある状態だと学校で習ったかと思います。

それだと、「ピンに電圧をかける」といわれても片方しか端が見当たらくてどうすればいいかわからない方もいるかと思います。なので、「入力ピンとGND間に電圧をかける」と考えればわかりやすいかと思います。先ほどの図をわかりやすく書き直すと以下のようになります。

こう見るとマイコンボードを並列に接続していて、元の回路の電圧になんだか影響を与えてしまいそうな感じがしますが、入力状態のピンは入力インピーダンスがすごく高いため(抵抗値がすごく高い抵抗を接続するイメージ)、元の回路にほとんど影響を及ぼさないようになっています。

難しいことは気にせず、最初のうちは「回路上のある電圧(電位)の地点から線を引っぱってきてピンに繋いだらその電圧がかかる」と考えれば大丈夫です。

少しそれましたが、今度はアナログ入力を考えると、Arduino UNOは5Vで動いているので、入力ピンにかかる電圧0〜5Vの範囲を0〜1023で判断します(ただアナログ入力は、Arduinoが動作電圧を基準にしているだけで、測定の精度をあげるために動作電圧より低い電圧を基準電圧にするケースもよくあるようです。ちなみにArduinoでも基準電圧を切り替える機能があります)。

ここで「センサーの値」という言葉に戻ってみましょう。

マイコンボードの入力ピンはあくまで「電圧(の変化)」しかわかりません。つまり、回路上のセンサーが化学変化によってある地点の電圧を変化させ、その変化する部分を入力ピンにつないだときの値の変化を「センサーの値」と言っているわけです。CdSセル(光センサー)や今回使う圧力センサーは、言ってしまえば光の量や圧力の変化によって抵抗値が変わるただの「可変抵抗」です。

「センサーの値」という言葉は、あたかもセンサーから特殊な信号が送られて来ているように聞こえて、ちょっとおかしいことがわかりますよね。厳密には「センサーによって変化する電圧の変化」です。同じセンサーを使っていても分圧の仕方によって値は当然変わります。

※なお、電圧をかけて出力をそのままアナログ入力につなぐだけで良いセンサー(温度センサー等)や、「シリアル通信」と呼ばれる方法で値が送られてくるような「センサーモジュール」として売られているものもあります(温湿度センサ モジュール DHT11等)。

圧力センサーの抵抗値から分圧する抵抗を定める

それでは、「圧力センサーの値」を取得するための回路を作りましょう。

その前に、「マイコンボードの入出力は動作電圧を基準に考える」と言いましたが、ESP-WROOM-02のアナログ入力であるTOUTは0〜3.3Vではなく、0〜1Vの範囲を測ることに注意します。

※追記(2015-03-03):ESP-WROOM-02 Arduino互換ボードのアナログ入力A0は0〜3.3Vでした。

では、今回使う圧力センサーの抵抗値を見てみましょう。基本的に部品の情報は「データシート」と呼ばれるものに書いてあります。

圧力センサーのデータシートを見て判断しても良いのですが、秋月電子の圧力センサーの商品ページにスペックの概要が載ってるのでそっちを参考にします(秋月の部品なら、必要な情報はだいたい商品ページに載っているので、それを見るだけで済む場合がほとんどです)。

  • 指で力いっぱいつまんでるとき:2kΩ〜10kΩ
  • 何も圧力がかかっていないとき:1MΩより大きい

抵抗値がわかったので、回路設計です。

回路設計で大事なことは、「許容値を超えないように余裕をもってつくる」です。0〜1V 0〜3.3Vの範囲なので、今回は余裕を持って最高でも0.5V1.65Vまで入力されるようにしましょう。

圧力センサーの最低(指で力いっぱいつまんでいるとき)の抵抗値は2kΩです。3.3Vが電源電圧で、2kΩを使って0.5V1.65Vになる地点をつくる必要がありますが、1.65Vは電源電圧のちょうど半分なので、同じ2kΩを使えば良いですね。

2kΩは筆者が持ち合わせていなかったので、2.2kΩを使います(2kΩでも大丈夫です)。

実際に計算してみると、2.2kΩを使うと最高で1.73Vが入力ピンにかかるようになります。1.65Vをちょっと超えていますが3.3Vよりは全然小さいので大丈夫です。

圧力センサーに圧力がかかっていない状態の電圧も見てみましょう。圧力センサーに圧力がかかっていない状態の抵抗値は1MΩなので、測定する地点の電圧はほぼ0Vになります。

回路設計が出来たので、実際に配線してみましょう。以下の感じで配線します。

この回路でセンサー値を読んでみると確かに、センサーをつまむと500(1.65V)近くの値にいくことがわかります(秋月のページには「力一杯つまむ」と書いてありますが、結構ゆるめにつまんで500くらいいきます)。

※ ESP-WROOM-02開発ボードをArduino IDEで開発する方法はこちらのドキュメントを参考下さい。

次回はプログラムを書いていきます

今回は、マイコンボードの入出力の基礎と圧力センサーの値を取得する回路設計について説明しました。

応用として、圧力センサーを光センサーで置き換えて、同じように計算して回路設計してみてはどうでしょうか(使う抵抗の抵抗値が2.2kΩより大きくなるかと思います)。

次回は、読み取ったセンサーの値をMilkcocoaに保存するプログラムを書いていきます。この仕組みの重要ポイントである「安定動作」のコツを中心に説明していこうかと思っています。