連載
» 2015年11月25日 05時00分 UPDATE

Windows 10 IoT Coreで始めるIoT入門:第4回 Windows IoTで温度などのアナログデータを計測する (1/2)

今回はセンサー出力をアナログデータとして取り込む例を紹介。ただしRaspberry Pi 2 Model BにはA/D変換機能がないので、I2C対応の温度センサーを使用する。

[打越浩幸,デジタルアドバンテージ]
Windows 10 IoT Coreで始めるIoT入門
Windows Server Insider


「Windows 10 IoT Coreで始めるIoT入門」のインデックス

連載目次

 前回は、Raspberry Pi 2 Model BにLEDとスイッチを接続して、それを制御する方法を紹介した。今回はアナログ入力を取り扱う例を取り上げる。

I2C対応デバイスの例 I2C対応デバイスの例
今回はI2Cデバイスを接続する例を取り上げる。I2Cデバイスは、信号線と電源、合わせて4本だけで接続できる。温度センサーや圧力センサー、LCDディスプレイなどをはじめとして、さまざまなI2Cデバイスがある。

I2Cバスで温度センサーを接続する

 前回は、Raspberry Pi 2 Model B(以下Raspberry Pi)と接続したLED出力もスイッチ入力も、オンかオフかのデジタルデータとして取り扱った。だが、現実のデバイスではデジタルではなく、アナログ値を扱うことも少なくない。

 例えば温度や湿度、圧力(気圧)、光量、音量などを測定するセンサーは、通常は結果をアナログの値(電圧や電流)や抵抗値などとして返すようになっている。コンピューターで取り扱うためには、何らかの方法でこれらのアナログ値をデジタルの値に変換する、A/D変換(Analog to Digital変換)が必要だ。

 残念ながらRaspberry Piは標準ではA/D変換機能を持っておらず、アナログデータを利用したい場合は何らかの外付けのデバイスや部品が必要となる。Raspberry PiでA/D変換を行うにはいくつか方法があるが、今回は「I2C(Inter-Integrated Circuit)」(「アイ・スクエア・シー」もしくは「アイ・ツー・シー」と読む)という、シリアル伝送デバイスを使う方法を紹介する(これ以外にも、SPIや1 Wire、UARTなどのシリアル通信インターフェースが利用できる)。

 I2Cは、電子機器の内部で使うための安価なシリアル通信技術であり、速度はあまり速くないが(せいぜい数Mbit/s)、センサーの情報をやりとりしたり、複数の回路基板間で通信したりといった用途には向いている。I2Cはバス構造になっており、1つのバスに複数のデバイスを接続して通信できる。各デバイスには7bitのアドレスが付いているので、1つのI2Cバスには最大で100程度のデバイスが接続できる。バスといっても(電源とGNDを除くと)クロック線とデータ線の2本だけなので、システムの構成も非常に簡素である。

I2Cの基本バス構造 I2Cの基本バス構造
I2Cでは、バス接続した複数のデバイス間で、クロック(SCL)とデータ(SDA)の2本の信号線を使ってシリアル伝送している。バス上の各デバイスには7bitのアドレスが付けられており、相互に通信できる。バスにはプルアップ抵抗が必要だが、これはRaspberry Piに内蔵されているため、外部に抵抗を付ける必要はない。

 I2Cに対応したセンサーやデバイスは、通常は外付けの抵抗や部品などを追加することなく、I2Cバスに接続するだけですぐに利用できるものが多い。今回はI2C対応の温度センサーIC「ADT7410」を接続して室温を測定してみよう。といってもICチップを直接Raspberry Pi 2 Model Bに接続するのは困難なので、ブレッドボードで簡単に実験できるようにした製品を利用する。

Analog DevicesのADT7401 Analog Devices社のADT7401
13bitもしくは16bitの精度で温度を測定できる、I2C対応の温度測定用IC。外付け部品や校正の必要がなく、扱いやすい。これは、ブレッドボードに指しやすいように、プリント基板に実装してピンを付けた製品。

 ADT7410やI2Cに関する説明はここでは省略するので、以下のサイトを参照していただきたい。特別な外付け部品や校正作業などは不要で、I2Cバス経由でADT7410にアクセスするだけで、摂氏で表現した温度データが16bitの精度(整数部8bit、小数部7bit)ですぐに得られる。測定可能な温度範囲は−40〜+105℃である(あまりにも低温/高温だと、Raspberry Pi 2 Model B自身が動かなくなるだろうが)。

 接続方法は簡単で、Raspberry Pi 2 Model BのI2Cバス(SDAとSCLピン)に、ADT7410のSDAとSCLピンを接続するだけである。これ以外に3.3Vの電源とGNDも接続する。

Raspberry Pi 2 Model BのI2Cバスピン Raspberry Pi 2 Model BのI2Cバスピン
I2Cバスはデータ通信用のクロックを送る「SCL」ピン(5番ピン)と、データを送受信する「SDA」ピン(3番ピン)の2本で構成されている。この2本をI2CデバイスのSCLとSDAに接続し、さらに電源(3.3Vか5V)とGNDも供給すること。デバイスが複数ある場合は、SCLやSDAを延長してその先にどんどん接続していけばよい。

 供給する電源は使用するデバイスによって異なるが(使用する部品のデータシートなどを参照のこと)、ADT7410の場合は5Vと3.3Vのいずれでもよい。

 実際にブレッドボード上に配線したのが次の写真である。

I2Cの温度センサーADT7410の接続例 I2Cの温度センサーADT7410の接続例
小型のブレッドボードを使ってADT7410をRaspberry Pi 2 Model Bに接続したところ。I2Cの信号線2本と、電源、GNDの計4本を接続している。複数のI2Cデバイスがあっても、数珠つなぎにするだけでよい。

       1|2 次のページへ

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。