ラズパイその他工作

小型ラズパイZeroでモバイル・ガジェットをつくろう! 第4回: 小型ディスプレイを付けてスマートウォッチをつくる!

こんにちは、ヨシケンです!ラズパイZeroを使った第4回記事です。ここでは、これまでに使ったセンサやリモコンの機能に加えて、小型ディスプレイを付けて、音声で操作ができるスマートウォッチをつくりたいと思います。腕時計に話しかけて、センサチェックやリモコン操作できるので、なかなか未来感のあるデバイスになりますよ!

前回の記事:小型ラズパイZeroでモバイル・ガジェットをつくろう! 第3回: 声で操作するマルチリモコンをつくる!

1

今回の記事で必要な物一覧

・Raspberry Pi Zero
2

・Seeed ReSpeaker 2-Mics Hat
3

・Grove OLEDディスプレイ(画面の大きさ違いでどちらか選択してください)

GROVE OLED 128×64 GROVE OLED 96×96
zero_b zero_a

・Groveセンサ、赤外線など(測りたいもの、使い方に応じて選択してください)

Grove発信用赤外線LED Grove 温湿度センサ Grove 遠赤外線反射センサ
3a 3b 3c

・スマートウォッチ外装(シリコンケースなど)
zero-4a

・小型リチウムポリマーバッテリー
(※注意:取り扱いに十分気をつけて自己責任でお使いください)
b

・スイッチ付きブレイクアウト基板
zero-5

 

今回の記事の流れ

1. ラズパイZeroに有機ELディスプレイを付ける
2. ディスプレイをセンサー、赤外線などと連動させて使う
3. 音声対応スマートウォッチにする
4. まとめ

1.ラズパイZeroに有機ELディスプレイを付ける

ラズパイZeroに画面を付ける為に、ここでは手軽なGroveの有機ELディスプレイを使っていきます。Groveケーブルが付いたものとしては、128 x 64の横長OLEDディスプレイや、96 x 96の正方形ディスプレイがあります。Seeed社のWikiにその詳細な使い方が記述されています。

Grove OLED 128 x 64 ディスプレイ

zero_b

このディスプレイを使うためには、これまで使ってきたReSpeakerのうち、端側にあるI2C接続が使えるコネクタを使用します。

zero-7

端側のコネクタに、ディスプレイからのGroveケーブルを差し込み、電源を入れます。
zero-8

このディスプレイをラズパイで使うためには、まずraspi-configでI2Cという接続方式を有効化させます。
また、第2回のGroveセンサーを使った記事でも使用しましたが、Groveをラズパイで使うためのライブラリgrove.pyをインストールします。以下のGithubからgrove.pyをダウンロードし、Python3系でプログラム群をインストールします。

$ sudo raspi-config # Interfacing menuからI2Cの有効化
$ git clone https://github.com/Seeed-Studio/grove.py
$ cd grove.py
$ sudo pip3 install .
$ cd grove

インストールが完了すると、groveというフォルダの中に以下のようにさまざまなプログラムが入っています。その中から今回はOLEDディスプレイを使うためのgrove_oled_display_128x64.pyを使います。

zero-9

それでは早速、python3コマンドでこのプログラムを流してみます。

$ python3 grove_oled_display_128x64.py

zero-10
これで、手軽にHello Worldのサンプル表示ができたのではないでしょうか?

2.ディスプレイをセンサ、赤外線などと連動させて、便利に使う

それではセットされたディスプレイに色々な情報を出してみましょう。まずは時計風に現在時刻などを表示します。先ほどのサンプルプログラムをコピーして、grove_oled_time.pyなどとして自フォルダ内(ここではPrograms/watch)に置いておきます。その中で、以下のmainプログラム中に現在時刻を表示する記述を追加します。

$ sudo cp ~/grove.py/grove/grove_oled_display_128x64.py ~/Programs/watch/grove_oled_time.py
$ sudo vi ~/Programs/watch/grove_oled_time.py

[grove_oled_time.py (時間表示として以下赤枠部分を追加)]

zero-11

このgrove_oled_time.pyを実行すると、写真のように現在日時を表示してくれたのではないかと思います。

zero-12

次に、第2回で使った温湿度センサを真ん中のGroveソケットに差して、ディスプレイに温度、湿度を表示してみましょう。grove_oledプログラムからの変更部分は、以下の黄色の部分です。

$ cd ~/Programs/watch
$ sudo cp grove_oled_display_time.py grove_oled_temp.py
$ sudo vi grove_oled_temp.py

上記のgrove_oled_temp.pyを流してみると、部屋の湿度、温度をこのように表示し始めました。

zero-13

zero-14 

また第3回で使用した赤外線発信LEDをセットして、その結果も表示させてみます。赤外線の登録、実行は前回記事を見て、済ませておいてください。

$ sudo cp grove_oled_display_time.py grove_oled_ir.py
$ sudo vi grove_oled_ir.py

これでプログラムを流して、ReSpeaker上のボタンを押すと、赤外線が送信されて(テレビのリモコンがオンされて)、画面上にRemoteTV ONの表示が出ます。

zero-15

3.音声操作できるウォッチ型デバイスにする

最後に、音声認識機能と連動させて、時計型のスマートウォッチにします。

前回記事を見て、Google Cloud Speechを使えるようにしておいてください。Google Cloud Consoleから、Cloud Speechの有効化とSDKのインストールをすることができます。

zero-16

Cloud Speechのインストールが済んだら、このデバイスのボタンが押されると、音声指示を聴き始めるようなbutton_watch.pyプログラムをつくります。ここは前回のリモコンづくりとほとんど同じ仕組みです。

ここではラズパイ上のボタンを1回プッシュすると、Cloud Speechが指示を聞き始め、「リモコンオン」「温度を測って」などの言葉で、先ほどのプログラムを動かすようにします。
実際に音声を聞き始めるstream_jp_watch.jpなどのプログラム群は、サンプルとして以下に一覧していますので、ご自分のラズパイにコピーして使ってみてください。
 https://github.com/ktrips/RasAi/tree/master/Programs/watch
– button_watch.py: ボタンを押すと音声聞き始め
– stream_jp_watch.py: Cloud Speechで特定の言葉に反応して、センサ、リモコン操作
– grove_oled_ir.py: 実際のリモコン操作プログラム
– grove_oled_temp.py: 温湿度センサ操作プログラム
– assistant_once.py: Google Assistantの実行プログラム

プログラムができたところで、時計風な外装もつくっていきます。ラズパイZeroを覆う外装として、ここではラバーのケースを使っています。ディスプレイがちょうど出るような窓を、カッターで切っておきました。また電源スイッチやGroveの端子が使えるような穴も開けておきます。

そこに腕時計のバンドを付けて、スマートウォッチ風にしてみました。Groveケーブルを少し外に出して、好きなセンサを付け替えできるようにしています。ここでは先ほどセットした、温湿度センサまたは赤外線発信LEDを付けています。

18

最後に、一連の動作を実行するスクリプトをつくって、それをラズパイ起動時に自動実行させます。

ラズパイ起動時に自動起動させる為に、以下のようにサービス登録をおこないます。

$ sudo cp watchd.service /etc/systemd/system/
$ sudo systemctl enable watchd
$ sudo systemctl start watchd
$ sudo systemctl status watchd

それでは、ラズパイZeroを再起動して使ってみます。ボタンを一度押すと、音声を聞き始めます。「テレビオン!」や「加湿器オン!」などと話しかけてください。機器の赤外線受光部近くでおこなうと、リモコンとして動作してくれます。また、ボタン2度押しでご自分の好きなプログラムを直接起動します。長押しすると、Google Assistantが起動して、天気や道順なども教えてくれるようになっています。

 
21

この他にもGroveのセンサを変えて、色々使ってみてください。腕時計に話しかけて、リモコンやAssistant機能が使えて、なかなか未来的なスマートウォッチができたのではないかと思います!

 
22

4.まとめ

ラズパイZeroに画面を付けて、スマートウォッチにしてみました。これまでのセンサやリモコン機能、そして音声認識も合わせて、まさにスマートな時計になったのではないかと思います。

特にGroveのさまざまなセンサを付け替えるだけで、他の情報を取得したりすることができるようになります。例えば空気清浄度センサを使えば、空気清浄機チェックにも使えます。またGPSや心拍センサなどを付けて、健康管理デバイスのように使うこともできます。

全4回に渡ってお贈りしてきました「小型ラズパイZeroでモバイル・ガジェットをつくろう!」は今回が最終回となります。ラズパイZeroを使うと、小型で音声などにも対応したさまざまなスマートデバイスがつくれるのが分かっていただけたのではないかと思います。これからもぜひラズパイを使って、スマートな電子工作を進めていってください!ご愛読、ありがとうございました!

razero_580-230
ヨシケン(吉田 顕一)

普通の会社に勤めるサラリーマンですが、モノ作りが好きな週末メイカーで、電子書籍MESHBOOKを出したり、ブログを書いたりしています!

http://blog.ktrips.net