masa-flyu.hatenablog.com の続きです.
センサ情報をkivyでディスプレイにGUIで表示する
今回カーナビ風の図体で,見た目をかっこよくできたと自負しています.
そこでディスプレイに表示するGUIもしっかり作っていきたいと思います.
OmronのセンサはPythonでサンプルコードが用意されているため,PythonからGUIを作成する手段を調べたところ,Kivyというものを見つけました.
Kivy: Cross-platform Python Framework for NUI Development
Kivyは
- Python2,3で動作
- 完全なオープンソース
- マルチプラットフォーム
- GUIの組み立てにPythonではない独自の言語を使用でき簡単
などの特徴が挙げられており,今回の用途には十分すぎる性能です.
そしてさくっとGUIを組み立てて...と思ったのですが,結構苦労しました.
Kivyはまだ日本で流行っておらず,日本語の情報があまり多くありません.
非常に参考になるページもありますが,
https://myenigma.hatenablog.com/entry/2016/0…
少し変わったことをすると,よくわからない原因で何度も詰まってしまい,想像の数倍の時間がかかりました.
つまづいたポイントや解決策などをブログにまとめようと思っていたのですが,どこで止まって,なぜ解決したのかわからないレベルの不具合が多すぎて,今だにまとめられていません.
とりあえず,今回の作例を少し整理して,また記事をあげてみようと思っています.
紆余曲折を経て,大まかな見た目を決定しました.
アイコンにはiconmonstr.comさんの素材を使用させていただきました.
この時点では環境センサの値をKivyに読み込めていないため,適当な値を表示させています.
その後,環境センサのサンプルコードを書き換えてクラス化するなどし,Kivyから呼び出せるようにしました.
そして,センサの値を読み込んで,特定の値の範囲ならば,色を変えるなどの処理ができるように改良を加えました.
また,実際に車載することを考えると,電源投入とともに,Pythonプログラムを自動起動させなければなりません.以下の方法で登録し,自動起動させました.
Raspberry Piによる音量制御が可能なオーディオアンプを製作する
さて,せっかくセンサで環境を計測したのに,表示するだけというのは寂しいものです.
そこで,現在のセンサの値をもとに,より安全・快適にドライブするためのシステムを構築することにしました.
そのうちの1つが,オーディオの音量制御です.
私の車は普通車とはいえ廉価帯のモデルであり,時速60km程度で走行していても,エンジン音やロードノイズは大きくなります.
環境センサの計測値では通常時60[dB]程度ですが,時速60km程度だと70〜75[dB]程度まで上昇しました.
私は運転中によく音楽を聞きますが,走行中は音楽のボリュームを上げたくなります.
かといって走行中に最適にすると,信号待ちのときにうるさいと感じてしまいます.
この変化を環境センサで計測した値をもとに自動で音量調整することは,より快適なドライブにつながるでしょう.
ということで,電子ボリュームを使用したオーディオアンプを作ることにしました.
音楽はiPhoneで聞いているため,iPhoneから車載スピーカーへの配線の間に今回のアンプを仕込みます.
さらに,各種センサで計測した値に異常があるならば,表示以外に音によって知らせたくなります.
というわけでRaspberry PiのオーディオとiPhoneのオーディオを足し合わせる機能も持たせることにしました.
大まかな構成図は以下のとおりです.
iPhoneの音量のみ電子ボリュームで変化させます.
3番目の入力は予備です(ハイウェイ専用ラジオかなんか作ろうかと思ってます).
製作記を以下の記事にまとめています.
計測したノイズが一定音量を超えたら,その大きさに応じて,Raspberry PiからのI2C信号で,ボリュームが変化します.
まだ60kmまでしか試していませんが,遅延があるものの,適度な音量調整がなされ,非常に快適になりました.
Raspberry Piから車のライトの点灯状況を監視できるようにする
音量調整はとても便利ですが,センサ1つしか利用しないというのもまだ寂しいと思います.
そこで,環境光センサを用いて昼夜など明るさを判別することにしました.
運転していて怖い瞬間の一つにライトを点灯していない車があげられます.
私自身も夜ライトをつけ忘れそうになりひやひやした経験があるほか,夕方や曇天のライト点灯を忘れる時がしばしばあります.
そこで,ライトの点灯を忘れていた時に,警告表示,警告音を鳴らすことにしました.
そのためにはライトの点灯を検出しなければなりません.
便利なことに,今回Raspberry Piの電源に使用しているトヨタ10Pコネクタにはイルミ電源という端子があります.
これは,ライトの点灯に連動する電源で,この電源を監視することによりライトの点灯を判断する回路を製作しました.
以下の記事にまとめています.
動作の様子を動画に撮りました.
IMG_5779 from shujima on Vimeo.
ライトが消灯した瞬間に環境光センサの計測値(現在は0lx)を確認ししきい値を下回っていたら警告音・表示を発します.
効果音には魔王魂さんのものを使用させていただきました.
なお,逆に(先ほどとは別の)しきい値以上に明るいときに,ライトが点灯している場合は異なる警告音・表示を発します.
これによりトンネルの入り口・出口でのライト操作し忘れも防止できます.
全体のまとめ・感想
今回,いくつかの要素技術を組み合わせて,車載のシステムを構築してみました.できることは数少ないけれど,綺麗にまとまったのが,嬉しく思っています.
安定して稼働するかはわかりませんが,問題が出たら少しずつ修正していこうと思います.
Raspberry Piを使ったのは初めてではありませんが,装置として組み上げるのは初めての経験でした.
また,電子回路も初心者で,オーディオアンプを1から作って音楽が聞けた瞬間の感動は素晴らしいものでした.
今回の製作で肝になったオムロンの環境センサは最初にご紹介しました通り, 「みんなのラズパイコンテスト」内でオムロン社より無償提供いただいたものです.
今回このセンサを使って,様々な値を計測する面白さを知りました.乗車中車内の気温・湿度の変化はもとより,台風の接近による気圧変化や,車両の加速度の数値化など,おもしろい数値を可視化でき,これらをまた何かに活かせないかと画策中です.
また,このセンサのパッケージングの良さが大変素晴らしいと思いました.10種類ほどの値が取れるにも関わらず非常に小型で,バッテリーも内蔵しており,完全に無線です.
当初電源の取れる車内で,バッテリー内蔵は意味ないのではと考えていましたが,環境光センサやノイズを安定して拾える場所を探すために,センサの設置場所をいくつも試行錯誤しました.
普通のセンサなら,まずRaspberry Piから離せないですし,移動や設置も大変です.
このセンサであれば,車内であればどこにでもすぐに移動できますし,両面テープなどで手軽に設置できます.
今はこのように車両後部荷室の側面にあったフックにかけています(サイズがちょうどで,キュッとはまり完全固定されました)
このセンサとラズパイがあるだけで,本当にいろんなことができそうな気がしてきます.
今回は最初に車載をテーマにしてしまったこともあり,このセンサの性能(特にクラウド連動など)を存分に活かせませんでした.
これからも,いろんな用途で試してみたいです.
この便利で面白いセンサが欲しくなった人は以下から今すぐ購入できますよ!!(宣伝)
オムロン様,楽しいセンサを作ってくださり,提供してくださってありがとうございました.
またラズパイコンテスト主催の皆様,このようなものづくりのきっかけを与えてくださりありがとうございました.