1回目:コンピュータでアナログを扱うのは大変?そんなことはない
言葉だけが独り歩きしているIoTです。何をもってIoTといっているのかわからない世界でもあります。理系の人なら、手を動かすことは得意でしょう。その片鱗に触れてみましょう。
IoT入門というセミナを受講すると「ラズパイ(Raspberry Pi)」で「Lチカ」のばっかりだね、という巷のうわさがあります。否定はできません。IT業界でC言語を学ぶとき、ソースを書いてコンパイルが通ったとき、「Hello World」と画面に文字を出すのと同じレベルだからです。
「ラズパイ」とは、イギリス発の世の中に1500万台以上出荷されているマイコン・ボードで、安価なことと、同じモデルが長期にわたって手に入ることが特徴です。
「Lチカ」は「LEDをチカチカ点滅させる」を略した用語です。ラズパイがIoTのプロトタイピングで使われる最大の理由が、教育用というのではなく、GPIOと呼ばれる電子機器を制御できる機能をネイティブに持っていることに起因します。ラズパイのマイコン・ボードには40本のI/O(アイ・オー;日本語では入出力)があり、スイッチやセンサ、モータ駆動回路をつなげて、プログラミングができます。
その中で、一番手軽な動作がLEDを点滅させることです。セミナー主催者側の用意する部品代が安いというのも大きな理由です。ラズパイの「パイ」は、Pythonという世界で一番使われている言語からつけられた名前です。よほど高速に動作させるものでなければ、Pythonで記述できます。今話題のクラウドへの接続に使われるプロトコルMQTTやnode-REDにも対応しています。
LチカでないけどマスターしたいIoT事例
実は、ラズパイのライバルにイタリア発のArduinoがあります。電子工作に使われますが、IoTのプロトタイピングにも適しています。Arduinoにはアナログ入力の機能がありますが、ラズパイにはありません。なので、作ってみましょう。
温度や湿度はアナログ的に変化します。コンピュータでアナログはそのまま扱えないので、最初にアナログをディジタルに変換します。そのために、A-Dコンバータと呼ぶICを使います。
はずれの多いと感じるテレビの天気予報番組では、現在の温度を表示していますね。「30.1℃」とか。小数点第一位まで表示しています。そよ風が吹けば変わってしまう数値です。この小数点0.1℃の分解能を温度センサで得るために必要なA-Dコンバータのビット数はいくらでしょうか。
その前に、ビット数というのは、アナログをどれだけ細かくディジタル値に直せるかという単位です。音楽業界では「ハイレゾ」という流行物がありますが、これは、アナログの音源を24ビットPCMデータに変換しています。とんでもなく細かいです。それまでのCDが16ビットだったのですが、その差を人はわかるそうです。人の耳というか脳は優れものですね。
A-DコンバータICには8ビット、10ビット、12ビット、16ビット、24ビットなどが市販されています。8ビットは現在の需要が少なく、先ほど出たArduinoにも10ビットのA-Dコンバータが内蔵されています。10ビットとは、3.3Vの電圧があれば、最小3.3/2^10=3.2mVという細かく量子化ができます。
けれど、温度センサで一般的なLM35だと、1℃の変化は10mVに相当します。この温度センサでは、30℃は300mVですから30.1℃は300.1mVです。つまり、3.2mV単位では、小数点第一位を正確に表現できないです。
では12ビットだったらどうでしょうか。3.3/2^12=0.8mVです。これでも粗いですね。16ビットなら最小0.05mVなので十分な性能だとわかります。
ここで問題が二つあります。
一つは、16ビットA-Dコンバータを利用するには、ベテランが回路設計しプリント基板を経験に基づいて設計をして実装しなければ、最小0.05mVを担保できません。それだけ、極小の電圧を扱っています。
もう一つは、温度センサLM35自体の確度が±0.25℃です。つまり、購入して、そのまま使うと、20℃は19.75℃から20.25℃の間の出力電圧が出ますということです(確率的には例えば95%以内がそうなる)。なのに、0.1℃の話をしていても意味がないの
です。つまり、1個1個校正しないと、0.1℃の単位は保証できないということです。もちろん、気象庁では校正の相談を受けてくれます。
認定品の説明PDFを読むと、電圧計は最小桁が1uV以下が読めることが条件となっています。DMMでいえば6.5桁が必要です。15万円ぐらいします。
はたして、テレビの天気予報で登場する温度計が校正を受けているかどうかは知りません。
用意するものは二つ
プロトタイプでは動かして検証することが一番大切なので、妥協して12ビットのA-Dコンバータを選びます。定番はMCP3208です。12ビット8チャネル入力のA-Dコンバータです。温度センサを8個も同時につないで測定ができます。製品には1チャネル、4チャネルなどのモデルもあるので、自分の利用したいチャネル数にあわせて購入します。シリーズなのに、データの読み出し方法はみんなタイミングが異なる曲者ですが。
電子回路の試作ではDIPタイプを使います。ブレッドボードで実験したり、はんだ付けしても失敗がありません。量産時にはピンのピッチが狭い小さなパッケージが使われます。
A-Dコンバータは、基準電圧をもとにディジタル値に変換します。つまり、基準電圧がいい加減だと、24ビットA-Dコンバータを使っても、変換結果は細かいだけでずれてしまっているということです。
半導体は、温度で特性が変わります。ICを作っている工場は24℃に保たれているそうです。温度計は野外に出て使うものですから、-40℃から100℃くらいで基準電圧が変化するのはまずいです。-40℃というのは、車のラジオの動作保証温度です。シベリアで冬の朝にラジオが聴けないと売り物になりません。
MCP3208には基準電圧を入力するVref端子があります。電圧はいくらでもかわないのですが、正確で、温度によってできるだけ変化しない電圧源を用意します。
一番安易な方法が、電源である3.3Vをそのままつなぐ方法です。プログラムの開発時はそれでもかまいませんが、ラズパイが動くたびに、この電圧は変化します。もちろん、グラウンドの0Vも変動します。KeysightのDMM 34461Aでラズパイの電源変動を記録しました。
安定化電圧回路で一番シンプルなのが、ツェナーダイオードを利用する方法です。いろいろな電圧が用意されていますが、原理上、電圧が5.6V付近のデバイスは温度特性がよいです。3.3Vで動作するマイコンなので、ポテンショメータを使って電圧を下げます。ツェナーダイオードはRSコンポーネンツで比較的多く取り扱っています。
もっと広範囲で安定な温度特性を得るには、バンド・ギャップ・タイプの基準電圧ICを使います。電圧は各種出ていますが、ポピュラなTL431は2.5V出力なので、そのままか、3.3Vへポテンショメータを使って電圧を上げます。
本来なら、12ビットA-Dコンバータの確度が得られる基準電圧源の変化をシミュレートして、精度が保証できることを確認すべきですが、ここでは省略します。
まとめると、次の2点を用意します。
・A-DコンバータMCP3208
・Vref用にツェナーダイオード
予告 2回目:ハードウェアの組み立てとプログラミング、えっ、たったの2行
ブレッドボードを使って、回路を組み立てます。ブレッドボードは、名前のとおり?パン生地をこねる板です。でも、パンは作らないです。正式名称は、ソルダーレス・ブレッドボードです。つまり、はんだ付けをしない試作基板という意味です。電子部品を差し込んでいくと、動く回路が作れる優れものです。