Aldebaranな人のブログスマートフォン用の表示で見るAldebaranな人のブログこの広告は、90日以上更新していないブログに表示しています。PiのGPIOにはI2Cと呼ばれるシリアル通信用端子が準備されており、I2C対応センサーの実装に利用可能です(I2CはArduino等でも対応しています)。I2C温度センサーは、「TMP102(データシート)」や「ADT7410(データシート)」あたりが有名どころかと思います。今回は、以前からよく使っているADT7410を例にI2Cセンサーの取扱いについてご説明します。データシートで「データを格納しているレジスタのバイト(ビット)長」と「換算式や分解能」を確認しましょう。P12)読んでみると、ADT7410は標準13bit(2バイト)で、その際の分解能は1/16(0.0625)とあり、換算式も記載されています。13bitの際には出力対応表(代表値)まで掲載されています。これらを書き下すと、次のようになります。ここで、前回のPythonでのI2Cセンサーの値を読み出している部分の記述を見直しながら計算過程を追っていきましょう。2)関数の第3引数の2は読み出すデータバイト長を表しています。今回は13bitですので、2バイト必要です(3ビット余計ですが)。3の部分を見て行きましょう。日本語で書くと、「1data[0]をまるっと8ビット左シフトして、2data[1]とOR演算で繋いで、13ビットを取り出すために、33ビット右シフトして不要部分を削る」ということになります。絵で描くと次のような感じです。最後に、最上位ビットが1すなわち4096以上の場合には、負数となるので8192との差をとり、13bit設定時の分解能である1/16(0.0625)との積をとれば、データシートにあるように摂氏温度(真値)を得ることが出来ます。いかがだったでしょうか?センサーのデータシートには換算式が示されることが多く一見分かった気になりますが、サンプルコードにおけるビット演算と分解能の計算部分のフォローが少なく、ここででつまずくことも少なくないのではないかと思います。これを押さえておけば、他のセンサーでも怖いもの無しですので、参考にして頂ければと思います。(1)月別アーカイブ検索リンクはてなブログブログをはじめる週刊はてなブログはてなブログProアクセス解析はてなブログをはじめよう!yamaryu0508さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。