ラズベリーパイというデバイスを使って、LEDやセンサなど外部デバイスとの入出力をしてみよう。ラズベリーパイでドリトルを使用するためには、ラズベリーパイと専用版ドリトルが必要である。
ラズベリーパイは、イギリスのラズベリーパイ財団が開発したシングルボードコンピュータである。CPUはARMを搭載しており、OSはLinuxや専用版Windowsなどが動作する。そのため、キーボードやマウス、ディスプレイを接続することで、一般的なコンピュータと同じように使うことができる。また、「Raspberry 2 Model B」では、40の入出力ピンを備えており、LEDの点灯や、スイッチの入力、センサーでの計測などを行うことができる。1)
今回は、OSとして「Raspbian」を導入した「Raspberry 2 Model B」という製品での動作を確認している。また、以下の作業はOSのインストールが済んでいる状態で、すべてコンソール上で行う。2)
1.Raspberry piをアップデートする
$ sudo apt-get update $ sudo apt-get upgrade
2.以下のコマンドを実行するとドリトルがインストールされ、センサーを利用するためのI2C の設定が行われる
$ wget http://dolittle.eplang.jp/data/dist/dolittle238rp.deb $ sudo dpkg -i dolittle238rp.deb
3.I2C の設定を有効化するためにラズベリーパイを再起動する
ドリトルをインストールすると画面左上のメニューに登録される。ドリトルは、「Menu→プログラミング→Dolittle」から起動することができる。
センサーやLEDなどのパーツは、すべてGPIOポートに接続する。3)ポート毎の機能は以下の表の通りである。パーツの接続にはジャンパワイヤーやブレッドボードを使うと便利である。4)
ポートの機能一覧
機能 | 番号 | 番号 | 機能 |
---|---|---|---|
3.3V | 1 | 2 | 5V |
GPIO2(I2C_SDA) | 3 | 4 | 5V |
GPIO3(I2C_SCL) | 5 | 6 | GND |
GPIO4(GPCLK0) | 7 | 8 | GPIO14(UART_TXD) |
GND | 9 | 10 | GPIO15(UART_RXD) |
GPIO17 | 11 | 12 | GPIO18 |
GPIO27 | 13 | 14 | GND |
GPIO22 | 15 | 16 | GPIO23 |
3.3V | 17 | 18 | GPIO24 |
GPIO10(SPI_MOSI) | 19 | 20 | GND |
GPIO9(SPI_MISO) | 21 | 22 | GPIO25 |
GPIO11(SPI_SCLK) | 23 | 24 | GPIO8(SPI_CE0) |
GND | 25 | 26 | GPIO7(SPI_CE1) |
ID_SD | 27 | 28 | ID_SC |
GPIO5 | 29 | 30 | GND |
GPIO6 | 31 | 32 | GPIO12 |
GPIO13 | 33 | 34 | GND |
GPIO19 | 35 | 36 | GPIO16 |
GPIO26 | 37 | 38 | GPIO20 |
GND | 39 | 40 | GPIO21 |
なお、使用できるセンサーは現在すべてI2C で通信を行うので、GPIO2ピンとGPIO3ピンを占有する。この2つのピンはGPIOとしての機能も持っているため、LEDやタクトスイッチなどでこれらのピンを使わないようにする必要がある。また、I2C のセンサーを複数同時に使用する場合はラズベリーパイのI2C のピンを分岐させてそれぞれのセンサーへと繋げば良い。
ラズベリーパイを用いたドリトルのプログラムは以下の様な形になる。先頭の行では、ラズベリーパイを使うプログラムを作成することを示している。以後、ラズベリーパイと接続されたセンサー類を指す「ラズパイ」というオブジェクトが利用可能となる。
システム!"raspberry" 使う。 ポート4=ラズパイ!4 入力ポート。 ポート4!プルアップ。 ...
LEDはGPIOの機能を持ったポートに接続する。5)
「出力ポート」オブジェクトは、GPIOポート番号を引数に取って初期化を行い、以下の命令を持っている。
出力ポートオブジェクトの命令一覧
命令 | 機能 |
---|---|
書く | 1か0を引数に取り、オン・オフを制御する |
読む | 現在のGPIOポートの値を取得する |
後始末 | ポートを解放する |
次の配線図とプログラムは、GPIO4ポートに接続したLEDを2秒毎に10回点滅させるものである。
システム! ”raspberry” 使う。 ポート4=ラズパイ! 4 出力ポート。 「 ポート4!1 書く。 ラズパイ!2 待つ。 ポート4!0 書く。 ラズパイ!2 待つ。 」! 10回 繰り返す。 ポート4!後始末。
GPIOポートはデジタル入力として用いることもできる。「入力ポート」オブジェクトはGPIOポート番号を引数に取って初期化を行い、以下の命令を持っている。
入力ポートオブジェクトの命令一覧
命令 | 機能 |
---|---|
プルアップ | Raspberry pi内部のプルアップ抵抗を有効にする |
プルダウン | Raspberry pi内部のプルアップ抵抗を無効にする |
読む | 現在のGPIOポートの値を取得する |
後始末 | ポートを解放する |
次の配線図とプログラムは、GPIO4ポートに接続したタクトスイッチから値を取得し、画面上に表示させるものである。6)
システム! ”raspberry” 使う。 ポート4=ラズパイ!4 入力ポート。 ポート4!プルアップ。 値=フィールド!作る。 時計=タイマー!作る 1秒 間隔 60秒 時間。 時計!「 値!(ポート4!読む) 書く。 」実行。 ポート4!後始末。
温度と湿度を計測できるセンサーとして、Texas Instruments社のHDC1000に対応している。このセンサーはI2C で通信を行っている。
温湿度センサーを扱うためにはまず温湿度センサーオブジェクトを作る必要がある。そして、温湿度センサーオブジェクトには「温度?」命令と「湿度?」命令が存在し、それぞれ温度と湿度を読み出すことができる。
次のプログラムは、センサーから1秒毎に10回温度と湿度を読み取って画面上に表示するプログラムである。
システム!”raspberry” 使う。 温湿度センサー=ラズパイ!HDC1000。 温度=ラベル!作る。 湿度=ラベル!作る 次の行。 「 温度!(温湿度センサー!温度?) 書く。 湿度!(温湿度センサー!湿度?) 書く。 ラズパイ!1 待つ。 」!10回 繰り返す。
照度を計測できるセンサーとして、TAOS社のTSL2561に対応している。このセンサーはI2C で通信を行っている。
照度センサーを扱うためにはまず照度センサーオブジェクトを作る必要がある。照度センサーオブジェクトは「照度?」命令を持っており、照度を読み出すことができる。
次のプログラムは、センサーから1秒毎に10回照度を読み取って画面上に表示するプログラムである。7)
システム!”raspberry” 使う。 照度センサー=ラズパイ!TSL2561。 照度=ラベル!作る。 「 照度!(照度センサー!照度?) 書く。 ラズパイ!1 待つ。 」!10回 繰り返す。
気圧と気温を計測できるセンサーとして、STMicroelectronics社のLPS25Hに対応している。次のプログラムはI2C で接続された気圧センサーから値を読み取り、画面上に表示するプログラムである。8)
気圧センサーを扱うためにはまず気圧センサーオブジェクトを作る必要がある。気圧センサーオブジェクトは「気圧?」命令と「気温?」命令を持っており、それぞれ気圧と気温を読み出すことができる。
システム!”raspberry” 使う。 気圧センサー=ラズパイ!LPS25H。 気圧=ラベル!作る。 気温=ラベル!作る 次の行。 「 温度!(気圧センサー!気圧?) 書く。 湿度!(気圧センサー!気温?) 書く。 ラズパイ!1 待つ。 」!10回 繰り返す。
モータードライバは、モーターを動作させるために用いるICである。このライブラリでは、東芝のTA7291に対応している。モーターを動作させるには、モータードライバとモーターに加え、電池ボックス等外部の電源が必要になる。
モータードライバーを扱う際にはまず、モータードライバのオブジェクトを作る必要がある。そして、モータードライバの制御ピンに繋いだピン番号2つを引数にとって「作る」命令を実行する。「作る」命令を実行すると、モータドライバが初期化される。モータードライバオブジェクトは以下の命令を持っている。機能は以下の表のとおりである。
モータードライバオブジェクトの命令一覧
命令 | 機能 |
---|---|
作る | モータードライバオブジェクトを初期化する |
後始末 | モータードライバオブジェクトが占有しているGPIOピンを開放する |
正転 | モーターを正転させる |
逆転 | モーターを逆転させる |
止める | モーターを停止させる |
ブレーキ | モーターにブレーキをかけて停止させる |
次のプログラムはGPIO14、GPIO15ピンに接続したモータードライバーを用いて、モーターを回転させるプログラムである。9)
システム! ”raspberry” 使う。 モータードライバ=ラズパイ!TA7291。 モータードライバ!14ポート 15ポート 作る。 モータードライバ!正転。 ラズパイ!3 待つ。 モータードライバ!止める。 ラズパイ!1 待つ。 モータードライバ!逆転。 ラズパイ!3 待つ。 モータードライバ!ブレーキ。 ラズパイ!1 待つ。 モータードライバ!後始末。