ラズパイ初心者がRaspberry Pi Zero WHでドライブレコーダーを作ってみたらこうなった

こんにちは、UXデザインセンターの sgi-chang です。

昨今、あおり運転や高齢者の事故等でドライブレコーダーの映像により事故の全容が明らかになり、

迅速な解決へと導いています。

そのため需要も高まり、前年度と比較して売り上げ、出荷数は倍以上だとか!

ニュースをみるたび、車を運転するならこれはもう必須なのではと思う今日この頃。

そこで、前々から興味のあったラズパイで、ドライブレコーダーを作ってみることにしました。

今回は以下の流れで進めて行きたいと思います。

  • 用意したもの
  • 機能概要
  • 作成手順
  • エピローグ
  • おまけ、秋葉原で買い物編

題名のとおり、初心者なので手探りでやっています。

初心者ならではのつまずきポイント等を感じて暖かい目で見て頂ければ嬉しいです。

何かありましたら sgi-chang までツッコミ願います。

(特にkikuchiさん、宜しくお願い致します。)

用意したもの

  • Raspberry Pi Zero WH
  • Raspberry Zero V1.3 mini Camera
  • microSD カード
  • miniHDMI 変換プラグ
  • microUSB ケーブル(Type-B)
  • microUSB 変換ケーブル(micro USB Type-B→micro USB Type-A)
  • USB電源プラグ
  • USB MicroSD カードリーダー
  • HDMI ケーブル
  • ディスプレイ
  • キーボード
  • マウス
  • USBハブ

上記は、あらたに購入したものもあったり、家にあるもので済ませたりって感じです。

microSDカードは大容量で安いものを見つけたので勢いで256GBも買っちゃいましたが、

5時間分くらいの記録でよければ、64GB、128GBで充分な気がします。

USBハブはあってもなくてもどっちでもいいかも。

作成手順で後述しますが、OSのセットアップが終わるまでは、

モニター、キーボード、マウスは直接接続して作業するので、ケーブル関連はひととおり用意したほうが無難です。

機能概要

今回、以下の機能のドライブレコーダーを作ってみます。

  • 電源を入れると撮影が開始される。
  • 10分間隔で撮影し、mp4で保存する。
  • 保存ファイル数が30を超えたら、ファイル作成日時が古いものから削除する。
  • 起動している限り、撮影し続ける。

以上、とてもシンプルな機能です。

本当はもっといろんな機能を搭載したい…(泣)

とりあえず、今回は「運転中に運転内容を記録する」に特化したものとします。

作成手順

初心者の私がやってみたこと。

1. OS (Raspbian) のイメージをインストール

2. microSD カードをフォーマット

3. microSD カードに Raspbian を 書き込む

4. Raspberry Pi を起動、初期設定をする

5. カメラ、SSH、VNC を有効にする

6. PC から VNC 接続する

7. shell プログラミング

8. 動作確認

初心者ながら、OSのイメージ書き込みまでは、ラズパイを買ったその日に済ませることができました。

さすが教育用だなと思いました。

しかも CLI なのかと思いきや、GUI で操作しやすかったです。

(とはいえ、やはり大半は CLI で操作)

インストール以降は、丸一日かけての実装となりました。

それでは実際に作成した手順をご紹介します。

1. OS (Raspbian) のイメージをインストール

まずは、普段使っている PC (Windows or Mac) にRaspbian (Raspberry Pi の OS) をインストールします。

公式ページからもダウンロードできますが、

かなり重いらしいので、下記の日本のミラーサイトからダウンロードしました。

参考URL:
http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/

どれをインストールしていいのか分からず、現時点で最新の「raspbian-2019-07-12」の

2019-07-10-raspbian-buster.zip をインストールしました。

インスールしたzipファイルは適当な箇所に解凍します。

先に公式ページ以外でRaspbianの情報を知りインストールした為、「NOOBS」を後から知りました。

ちなみに公式ページでは「NOOBS」のインストールをおすすめしています。

※sgi-changのつまずきポイント
「NOOBS」のインストールでもよかったのかも!?とちょっと後悔…
まずは公式ページから情報を入手すべきでした。反省。

2. microSDカードをフォーマット

OSを書き込む前に microSD カードをフォーマットします。

PCにmicroSD カードを接続します。

公式ページSD Formatter をクリックしてSD Memory Card Formatter のページから該当のOSのファイルをダウンロード、

解凍、実行、カードの選択後、フォーマットを押して完了です。

今回は公式ページのおすすめフォーマットアプリ (for NOOBS) で実施しました。

3. microSD カードにRaspbian を書き込む

公式ページ「Download balenaEtcher and install it.」「balenaEtcher」をクリックしてbalenaEtcherのページに遷移し、

Windows 向けまたは macOS 向けを選択してダウンロードします。

ダウンロード後、起動して「Select image」で「1. OS(Raspbian)のイメージをインストール」でインストールしたイメージ(2019-07-10-raspbian-buster.img) を選択して、

「Select target」で接続しているmicroSDカードを選択して、最後は「Flash!」で終わり。

ここまで、各インストールとかに時間がかかりましたが、作業としては割と淡々と進めることができたと思います。

それでは、いよいよ Raspberry Pi の登場です。

4. Raspberry Pi を起動、初期設定をする

Raspberry Piに「3. microSDカードにRaspbianを書き込む」で準備したmicroSDカードを差し込んで、

ディスプレイやキーボード、マウスをつないで、microUSB経由で電源を入れると起動します。

画面の左上にRaspberryキターーーーーーッ!!!(古い)

ちょっと感動してしまいました。

その後、

 

「Welcome to the Raspberry Pi Desktop」の画面が出て、GUIで「Country」「Language」とか聞かれるがままに設定して終わり。

ここでWi-Fiも設定してください。(※)

なんて初期設定が簡単なの!?って思ったのですが、どうやら以前まではこんな感じでは無かったようです…。

※別途、Wi-Fi接続する場合は、
画面右上のWi-Fiアイコンをクリックしてアクセスポイントを選択して Wi-Fi に接続します。

5. カメラ、SSH、VNCを有効にする

左上の Raspberry マークをクリック→設定→Raspberry Pi の設定→インターフェイス

の画面で、

カメラ、SSH、VNCを有効にします。

6. PCからVNC接続する

VNCを有効にすると、画面上にVNCアイコンが表示されます。

そこをクリックするとIPアドレスが分かります。

または、

画面上の LxTerminal (コマンドプロンプト、Terminal みたいなアイコン) をクリックして、

等でipアドレスを調べておきます。

次にPCで「VNC Viewer」をここからダウンロードします。

ダウンロードすると展開、インストールして、VNC Viewerを立ち上げます。

画面上の入力欄に Raspberry Pi の IP アドレスを入力して「Username」「Password」を入力します。

ちなみにデフォルト値は

Username:pi
Password:raspberry

だそうです。(※)

入力後OKを押すと、PCからRaspberry Pi が操作できるようになります。

特にRaspberry Pi 用にディスプレイ、キーボード、マウスを用意しなくてもこれで楽に作業ができます!

すごく便利です!

ちなみに、VNCアイコンをクリックして、右上の三本線のメニューボタン→File Transfer をクリックすると、PCにファイルを転送することができます。

※sgi-chang のつまずきポイント
どのサイトをみても、上記のデフォルト値でログインできると書いてあるのですが、私の場合は、ログインできませんでした。
そこで調べた結果、「VNCアイコン」をクリック、右上の三本線のメニューボタン→Options→Security→Authentication→VNC password を選択、password を設定、PCで設定したpassword を入力、
でうまくいきました。

7. shell プログラミング

ここまで来たら、あとはひたすらドライブレコーダーの機能を実装します。

まずは、カメラを動かすことができるかどうかを試します。

LxTerminal を立ち上げて

おっ! /home/pi/ に静止画、test.jpg ができました!次は、

こちらも、約10秒の動画を

/home/pi/video.h264

で確認することができました。

ちなみに、

のようにオプションを追加すると画面を回転することができるそうです。

mp4 への変換は

先に上記のコマンドで MP4Box をインストールして、

raspivid コマンドで作成した動画に対して mp4 をラップします。

この辺りの詳細は公式ページに記載があります。

今回は、ただひたすら動画を撮っていくだけなので、

このシェルスクリプトで事足りました。

(Python とかで実装する必要なかった…)

実際に実装したソースコードはボリュームがあるので、

GitHub:
ソースコードはこちらで公開しています。
https://github.com/sgi-chang/DriveRecorder
ご参考までに。

なお、Raspberry Pi起動時にシェルスクリプトを動かすのは、

/etc/rc.local

に上記で作成したシェルを呼び出すようにファイル名を追記しました。

sudoコマンドを忘れずに。

8. 動作確認

直接shellを実行したり、/etc/rc.local に追記したりで動作確認をしました。

順調にmp4ファイルがどんどん保存されていきました。

さて、実際に車に積んでみるとするか、と思った矢先…

「Camera control callback cmd=0x4f525245mmal: No data received from sensor. Check all connections, including the Sunny one on the camera board」

え!?

えええええええっ!?

認識してるんだけど、赤く光ってるんだけど、応答がない…

そしてめちゃくちゃ熱い…

カメラ壊れた…

というわけで、実活用に至らず。

またカメラを手に入れて実際のドライブレコーダーとしての動画ができましたら追記致します。

※sgi-changのつまずきポイント
思いっきり、カメラを雑に扱いすぎました。
電源入れたまま抜き差ししたり、上下逆につけたり、折ったり曲げたりひねったり…
(ピンセットがなかったから毛抜きでつまんだり…)←多分、これがとどめを刺した
部品は丁寧に扱いましょう…

エピローグ

携わっている案件で Raspberry Pi の話が出て、

以前から気になっていたのもあり、Raspberry Pi で何かしたいなと思い立ちました。

また最近、ドライブレコーダーも気になっていて、ちょうどこれだ!とひらめきました。

カメラが残念なことになり、かなり残念ですが、もう一度カメラを手に入れてリベンジしようと思います。

さらに、機能も「運転中に運転内容を記録する」のみにフォーカスして実装しやすくしたものの、

じゃあ、店頭に並んでいたら買うか?と聞かれたら「うーん」となってしまいます。

個人的には、

  • 電源切ったり入れたりでずっと録画が動いているのは何とかしたい。
  • 動画保存に時間がかかる、またその間は録画されないのが気になる。
  • 音声認識で録画をコントロールしたい。
  • Raspberry Pi と PC とのデータ転送を何とかしたい。(できれば microSD カードで)
  • 録画中を確認できるようにしたい。
  • ケース、見た目、立てかけやすいとか形状を何とかしたい。

等々…こんな機能があればいいなあとか妄想が膨らみました。

もし、このドライブレコーダーを売ろうとしている会社(ベンチャー企業、数名程度)があって、

機能を拡張したいんだけど、どのようにして製品にすればいいのか、よし!UXデザインで考えてみよう。

となりさらに妄想が膨らみ…

この続きは次回へ(続くかもしれない)

おまけ、秋葉原で買い物編

日頃、ほとんど買い物はインターネットでしていますが、

急に「今日、作ろう」と思い立ったので、

土曜日の午後に秋葉原の電気街に出かけました。

回ったお店は、

  • 浜田電機
  • ツクモロボット王国
  • あきばお~2号店
  • 千石電商
  • 秋月電子通商

これらのお店はそれぞれ近いので、とても行き来しやすかったです。

普段、秋葉原駅は乗り換えで使っていますが、駅周辺はあまり行かないので、新鮮でした。

とにかく、人が多い!

観光の人、部品買いにきた人、イベントに来た人、色んな恰好をした人…

土曜日というのもあり、どこも混雑していました。

お目当ての品を探すのに、上記のお店を1往復するつもりが3往復くらい行ったり来たりしてしまいました。

そこで手に入れた品はこちら、

浜田電機
Lexar 256GB MicroSDカード
\3,130

ツクモロボット王国
Raspberry Pi Zero ケースセット
内容:ケース、miniHDMI 変換プラグ、microUSB 変換ケーブル(micro USB Type-B→micro USB Type-A)
\2,160

千石電商
Raspberry Zero V1.3 mini Camera
\3,250
計:\8,540

とりあえず、ラズパイ初心者なので、安価な Raspberry Pi Zero から始めたいと思ったわけです。

そして Raspberry Pi Zero は$5、あまりの安さに驚きました。それを単体で欲しかったのですが、どこにも売ってない!

セットとかいらないんだけど…と思ったのですが、やむを得ずツクモロボット王国にしかなかったのでそこで Zero のケースセットを買いました。

そう、あれ?とお気づきの方もいらっしゃるかと思います。

最初に買ったのは Raspberry Pi ZeroWH じゃなくて Raspberry Pi Zero。

ああ、隣に600円差で Raspberry Pi ZeroW が売ってあったのに!何を血迷ったか、私、ただのZeroの方を買ってしまい…

色々手段はあるのでしょうが、ネット接続できないと今時、開発しづらいったらありゃしない…

(Raspberry Pi Zero は無線 LAN なし)

そこで別の日に買いに行ったのですが、もう Raspberry Pi ZeroW のセットは売り切れていたので、

千石電商
Raspberry Pi ZeroWH
\2,300

を買いました…
とりあえず、今は必要のないGPIOピンがめっちゃ刺さっています…(生け花の剣山みたいなやつ)

ああ、Raspberry Pi ZeroW が欲しかった…

※sgi-changのつまずきポイント
買い物に出かける時は、予めちゃんと調べてから行きましょう。

それにしてもRaspberry Piの開発、楽しいですね!

秋葉原での買い物も、他のお店と比べてみたり悩んでみたり、とても楽しかったです。

ちなみに、秋葉原ではドライブレコーダーが\2,000以下で売られていました…

最後までお読みいただき誠にありがとうございます。