使って適当に工作したメモを残していきます。アナログセンサの値を取得するために、前回掲載したA/Dコンバータを使います。arduinoをよく使う人は、ここで「あれ?」と思うかもしれません。言うか、私は思いました。UNOなどのアナログ入力ピンは、A/Dコンバータ(ADC)なしでアナログセンサを接続することができます。チップにADCが埋め込まれているのでアナログ入力ピンに繋ぐといきなりA/D変換後の値を取得できます。ところで、ハードウェア屋さんにとってはA/D変換は常識ですが、IT屋さんは、A/D変換というのを分かっているようで分かっていないことが多いです。そもそも、「アナログ」と「デジタル」の違いも実は怪しい人が少なくありません。言うか、私は分かっていませんでした。言うわけで、今回はA/D変換について。意外とよくあるのが「実数値=アナログ値」という勘違いです。プログラム中で値を参照できている時点でそれは全て「デジタル値」です。「アナログ入力から取得した値は連続値が取れる」という勘違いもよくあります。アナログ値がA/D変換された時点で実数の離散値になります。厄介なのが「A/D変換後の値は工学値ではない」という罠。温度20度ではありません。絵で描くとこんな感じ。アナログセンサは環境変化によって抵抗値が変化します。この変化の仕方はセンサの特性として決まっていて、非線形なことが多いようです。明るさが2倍になっても抵抗が2倍や0.5倍になるわけではありません。ここまでがアナログセンサのお仕事。次に、アナログセンサをA/Dコンバータに繋いでA/D変換します。センサの抵抗値が変わると言うことは、その両端での電圧の値が変わります。A/Dコンバータはそれを決められたビット数に量子化します。A/Dコンバータなら0〜5Vを256分割。(たぶん)本当はもっと賢いことをやっているらしいのですがイメージとしてはそんな感じ。最終的に摂氏などの工学値が欲しい場合はデジタル値を工学値に戻します。センサ特性が非線形なので工学値変換も非線形になります。(2)の時点で離散値になっているので、変換した工学値も離散値です。多くの場合、A/D変換後の値をソフトウェア的に変換してやる必要がありますが、この工学値変換曲線を作るのが結構難しいと思います。モジュール化して売られているアナログセンサの中にはは、メーカーから配られているライブラリを使うと(1)〜(3)をまとめてやってくれるものもあるようです。(温湿度センサのDHT11など)小学生に説明してみたA/D変換について小学四年生に説明してみました。どこまで伝わったかは謎。A/D変換の話が長くなってしまったので、A/Dコンバータの使い方はまた次回。次回はSPI通信を使ってA/Dコンバータから値を取得します。