Faboの動作確認をとっていたのだが、付け替えたはずの中華Arduino UNOでは温度センサーが正しく読めていないことが判明した。
左の写真をみてもらおう。
サークル時計の中央の表示はDS18B20による値で正しいと思われるのだが、後方の拡大液晶表示は更に9度も高い温度が表示されている。
何かが間違っている。
古いほうのイタリア製のArduino UNOでの測定結果は、後方のモニタも同様に27度と表示している。
ちなみに、このセンサーは電圧で温度を出力するLM61CIZは2.7Vで動作する温度センサーで-30度から100度の範囲を300mVから1600mVまでのアナログ電圧で通知してくれる優れものなのだが・・・。
どうやら怪しいのは中華のArduino UNO互換機だ。電源電圧が5Vかかっていないような雰囲気だ。ADの最大計測値は電源電圧だから低いと仮定した場合には、読み取り値が大きくなり結果として温度が高いと表示してしまったようだ。
手抜きをして、サンプルコードをそのまま入れて、中華製Arduino UNOの素性を明らかにしていなかったことが事態を引き起こしたということだ。
ちなみに手元にあったArduino Leonardoでも正しい値を表示した。
電源電圧を測定してみると若干中華Arduinoの電圧が低いのだ。ちなみに動作条件はどちらもUSBでPCと接続してIDEでサンプルを書き込みシリアルモニタで確認しているわけだ。
回路図から追ってみると、どうも接続していないはずのDC入力があるという判断をしてFETがカットオフされてUSBからの電源供給がFETに入っているダイオードの順方向降下が起きているようだ。ADCが動作するのは、その最大電圧に対しての計測なので、温度が高く表示されてしまったということのようだ。
さて、対策(補修)はどこだろう
ADの基準電圧は。安定化された内部基準電圧を選べばOKかも〜
電源をリファレンスにしてるのはいかがなものかと
とりあえず、故障個所の切り分けをしています。Open Sourceなハードの筈なのですが・・・
中華基板のパターン間違いが、今回の問題でした。
http://www.techno-web.org/openlab/category/iot/fabo/