はじめまして! 私、久原(くばら)と申します。ご縁がありまして、電子工作の記事を書かせてもらうことになりました。
Raspberry Pi(本稿では愛をこめてRasPiと表記しますね)、最近流行っていますよね! 私もつい最近触り始めまして、この小さな体ひとつでLinuxを動かしながら電子工作まで出来てしまう、そんなところに大変魅力を感じています。映像出力あり、ネット環境あり、かつGPIOを生でたたけるので電子工作も出来る…そんな夢の様な環境ですから、たとえばこんなことも出来ます;
RasPiに320×240のSPI液晶をつないでフレームバッファを転送。テキストエディタを立ち上げてUSBキーボードでプログラミング、GCCでコンパイルして、セルフ電子工作環境! RasPiを買って最初にやったのがこれなんですが、かなり感動しました。以来、RasPiでの電子工作に没頭しております。
RasPiでデジカメを作ろう!
今回ご紹介するのは、とあるRasPiユーザ交流会に参加した際に持っていった、とあるRasPi電子工作。その名も…「ダンボールデジカメ」!!!
どーん!!!…あれ?こどもが段ボールで作った図工の作品? とか思ってしまいますが、実はちゃんとカメラとして動くんです。
特徴としては、以下の点が挙げられます;
- ポータブル! 好きなときにシャッターを押して、たくさんの写真を保存できます。
- 無線対応! 写真はWi-Fi経由ですぐに共有されて、PCでプレビュー&取り出せます。
- かわいい! 好きな箱を好きなだけデコって、オリジナルのデジカメが作れます。
こんなユニークなオリジナルのデジカメが、なんと1日あれば余裕で作れちゃいます。週末工作に、親子での共作に…いかがですか?今回はそのレシピを紹介したいと思います。
材料
項目 | 部品 | 価格 | 備考 |
---|---|---|---|
RasPi | Raspberry Pi B+ | 3,900~5,400 | BでもOK |
SDカード | 容量4GB以上、Class 4以上 | 500 | |
Webカメラ | Logicool HD Webcam C270 | 1,100 | UVC対応ならOK |
USB-Wi-Fi | WLI-UC-GNM | 800 | なんでもOK |
バッテリ | DE-M01L-5220WH | 1,500 | 出力1A以上 |
USBケーブル | Micro-B | 100 | |
制御ボード | 1x タクトスイッチ 1x LED 1x 圧電ブザー 2x 抵抗(330Ω) 4x ジャンパワイヤ(オス-メス)1x ブレッドボード(小型) |
500 | 左記はブレッドボードで作成する場合。ハンダ付け可能であればそちらがベター。 |
外装 | お好きな箱! | 200x150x50mmくらいは欲しい | |
小計 | 8,400~9,900 |
私の購入先は、制御ボードは秋月電子通商で、それ以外はすべてAmazonでした。よりお買い得な購入先としては、RasPiはRSオンラインで購入できるのであればそちらが最安値(編集部注:2014年10月8日現在の情報です)、購入ついでに制御ボード用パーツもRSオンラインで買っちゃうというのも一手です。アキバで行脚して全部そろえるなら千石電商を中心に買いまわるのが一番そろえやすいと思います。
必要な環境
ネットワークカメラとして動かすために、無線LAN(Wi-Fi)環境が必要です。ご自宅の無線機器を利用していただくか、スマートフォンのテザリング機能をお使いください。(私はデモするときに、よくスマホのテザリング機能で簡便なWi-Fiアクセスポイントを構築しています。意外な使い方でオススメです)
無線設定を行うために、以下の情報が必要です:
- SSIDまたはESSID
- 暗号化方式(WPA-PSKが多いと思います)
- パスワード
制御ボード
今回の電子工作部分になります。といっても5つのパーツを並べる+4本配線するだけなので、作業的には簡単ですよ。
圧電ブザーとLEDには極性(プラス・マイナス)がありますので、向きに注意してください。写真では下側をプラスにそろえてあります。抵抗値は仮に330Ωとしましたが、様子を見て100Ω~1kΩの範囲で変えて頂いて大丈夫です(つまり有り合わせの部品でOKです)。
ちなみに部品を最低限で済ませたい場合は、スイッチだけで動きます。その場合はスイッチの足と21,25ピンをダイレクトにつないでも動きます。図工的にやりたい場合は、電線とテープだけでもイケるかもしれませんね。
RasPiのセッティング
RasPiの基本的なセットアップについては、こちらのIT女子のラズベリーパイ入門奮闘記で紹介されていますので割愛いたします(SDカードにOSが入っていて、ネットワークにつながり、システムアップデートがされている状態を前提とします)。OSはRaspbianを想定しています。
以下の操作はすべて、ターミナルを使ったコマンドライン操作になります。以下のいずれかの方法を選択してください。
- RasPiのGUIから操作(RasPiのターミナルアプリを起動)
- RasPiのCUIから操作(起動時の黒い画面から操作)
- SSHでリモート接続(PCからLAN経由で接続)
- RS-232Cで接続(RasPiのTX, RX, GNDと、PCのRS-232Cを接続)
起動する前に
RasPiを起動する前に、Wi-FiドングルとWebカメラをRasPiのUSBポートにそれぞれ接続しておいてください。その後、RasPiの電源を投入しましょう。
無線LANの設定
起動した画面で、以下のコマンドを入力します;
ifconfig
表示される項目の中に「wlan0」が存在するかを確認して下さい。表示されていない場合はUSB-Wi-Fiドングルが刺さっていないので、いったん「sudo halt」コマンドでRasPiを終了し、挿しなおしてから起動してください。挿してあるのに認識されない場合は、電源が弱いか、USB-Wi-Fiドングルの故障が疑われます。
確認が終わりましたら、ご自宅の無線LAN情報を設定ファイルに書き込みます;
sudo sh -c 'wpa_passphrase SSID PASSWORD >> /etc/wpa_supplicant/wpa_supplicant.conf'
「SSID」と「PASSWORD」は、ご自身の無線環境のものを入力してください。成功すると、無線LANの設定情報が、設定ファイルに書き込まれます(何も表示されなければ成功)。
続いて、USB-Wi-Fiドングルを使用して、無線LANに接続するように設定します。以下のコマンドを入れると、nanoというテキストエディタが開きます;
sudo nano /etc/network/interfaces
開いたエディタ画面で、以下の二行を変更してください;
iface wlan0 inet dhcp wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
変更を終わったらファイルを保存します。「Ctrl+X」を押し、「Y」→「Enterキー」と続けて押してください。これで保存が完了し、元の画面に戻るはずです。
その後、いったん再起動します。以下のコマンドで再起動が出来ます;
sudo reboot
再起動したRasPiに、以下のコマンドを入力します;
ifconfig
「wlan0」の欄に、以下のような「inet addr」の項目が表示されていればOKです!
inet addr:192.168.11.105 Bcast:192.168.11.255 Mask:255.255.255.0
※うまくいかない場合は…
ご自宅の無線機が「ステルスモード」をご利用の場合は、追加の設定が必要になります。
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
開いたエディタ画面で、「network=」で囲まれた部分に、以下の1行を追加してください;
scan_ssid=1
Ctrl+X→Y→Enterで保存します。その後再起動を行ってみてください。
その他、詳細な設定が必要な場合は、「wpa_supplicant」で検索するとヒントが出てくると思います。例えば下記の文献などをご参照ください;
参考文献:https://www.gentoo.org/doc/ja/handbook/handbook-x86.xml?part=4&chap=4
プログラミング
今回はC言語を利用します。ソースコードをGitHubにて公開しましたので、そちらをお使いいただければ、プログラミング自体はナシで大丈夫です!
まずはシステムアップデート
いろいろインストールする前に、まずはシステムアップデートを行っておきましょう;
sudo apt-get update sudo apt-get upgrade
最近アップデートしていなかった場合、もしかすると以下のエラーが出るかもしれません;
E: Some index files failed to download. They have been ignored, or old ones used instead.
この場合は、以下のファイルを編集します;
sudo nano /etc/apt/sources.list.d/wolfram.list
表示されたエディタ上で、下記のリストを「#」でコメントアウトします;
#deb http://repository.wolfram.com/raspbian/ stable non-free
これでエラーがでなくなると思います。
参考文献:http://www.raspberrypi.org/forums/viewtopic.php?t=87501&p=616463
OpenCVとwiringPiをインストール
カメラを使うためにOpenCVを、シャッターボタンを操作するためにwiringPiを、それぞれ利用します。いずれもネットワークから入手できます。
OpenCVはapt-getでインストールできます。140MBとかなり大きいです;
sudo apt-get install libopencv-dev
wiringPiはGitHubリポジトリ経由でダウンロードして、手動でインストールです;
cd ~ git clone git://git.drogon.net/wiringPi cd wiringPi ./build
「All Done.」と表示されればOKです。
ソースコード
ソースコードは、GitHubの私のリポジトリに公開しています。以下のコマンドでダウンロードと環境構築ができます;
cd ~ git clone https://github.com/mkubara/dambo-cam.git
コンパイル
C言語のソースコードをRasPi上で実行できるプログラムに変換するには、コンパイルという作業が必要です。以下のコマンドでコンパイルを実行できます;
cd dambo-cam gcc main.c `pkg-config opencv --libs` -lwiringPi -lm
pkg-configで使っている「`」という記号は、「Shift+@」で入力できます。
実行!
実行前に、シャッター部分が配線済みか、Webカメラが接続済みか、それぞれ確認してください。それではプログラムを実行して確認しましょう!
sudo ./a.out
実行すると、LEDが赤く点灯します。この状態になっていれば、スイッチを押すと写真を撮れます。それではスイッチを押してみましょう。「ピコッ」という音とともにLEDが消灯します。2~3秒で撮影は完了です。「ぺぺぺポーン」という音が鳴れば正常に写真が撮れていますよ!
何回かシャッターを押してみたら、「Ctrl+C」でプログラムを終了しましょう。その後以下のコマンドを実行します;
ls photo
表示結果にJPEGファイルがリストアップされていれば、撮影OKです!
もしLEDが光らなかったり、音がならなかったりしたら、回路の作成ミスだと思います。概ね「配線ミス」または「極性を間違えた」なので、確認してみてください。
プログラムの自動起動設定
現在のところプログラムは、コマンドを実行しないと動作しません。このままだとポータブルにしたあとにも、毎回コマンドをたたかないといけなくなり大変不便です。そこでRasPiが起動した時に、カメラプログラムも一緒に起動するように設定しましょう。それには以下のファイルを書き換えます;
sudo nano /etc/rc.local
以下の内容を、「exit 0」の手前に追記します;
cd /home/pi/dambo-cam sudo ./a.out &
Ctrl+X→Y→Enterで保存すればOKです。
Sambaをインストール
RasPiの写真を、すぐにネットワーク越しに見れるようにしてくれるのがファイルサーバーのSambaです。早速RasPiへインストールしていきましょう。大きめのシステムなので少し時間がかかります;
sudo apt-get install samba samba-common-bin
Sambaの設定には、以下のファイルを書き換えます;
sudo nano /etc/samba/smb.conf
ファイルの末尾に、共有したいフォルダの指定を書き加えます。以下のようにしましょう;
[photo] path = /home/pi/dambo-cam/photo read only = yes browsable = yes guest ok = yes force user = pi
Ctrl+X→Y→Enterで保存します。共有ユーザ名はpiになりました。
この共有フォルダにパスワードをかけます。smbpasswdコマンドを使います;
sudo smbpasswd -a pi
パスワードを2回きかれますので、同じものを2回打ち込んでください。「Added user pi.」と表示されれば、新しいユーザ名とパスワードが登録されます。
その後、Sambaを再起動します;
sudo service samba restart
これで、お手持ちのPCから撮った写真が見えるようになっているはずです! Windowsの場合はエクスプローラから「ネットワーク」を選ぶと、「RASPBERRYPI」というPCが見えるようになっているはずです。これを選択すると、ユーザ名とパスワードをきかれますので、先ほど設定したものを入力してください。「photo」フォルダが見えますね。この中に、試し撮りした写真がたくさん保存されているはずです!
組み立て
あとはダンボールデジカメになるように組み立てるだけです! ここが一番楽しい?
穴あけ
穴あけが4箇所必要です。段ボールなんでカッターでもザクザク切っちゃいましょう!
- カメラのレンズ(20mmほどの穴+必要であれば撮影中LED用の5mm穴)
- シャッターボタン(10mm程度、飛び出す必要あり)
- シャッターLED(8mm程度)
- シャッター音スピーカ穴(10mm程度、スピーカは飛び出さなくてもOK)
寸法は目安です。お作りいただいたシャッター回路や、カメラの大きさに合わせて調整してください。
組み付け
各パーツを適当な方法で固定していきます。私は手早くやるために全部ガムテープで固定しました(これは完全に図工レベル!)。電源はモバイルバッテリから取り回しすることにしています。RasPiは電池でもしっかり動くのがステキですね。
撮影しよう!
いよいよ撮影! まずはカメラの中にあるモバイルバッテリの電源をONにしましょう。しばらくすると、LEDランプが赤く点灯します。この状態になれば、いつでもシャッターを押せます! さぁ押してみましょう! ポチッとな!
ピコッ、という音とともに、LEDが消灯します。この間はカメラを動かさずに待ってください。Webカメラをセットアップして、撮影を行っています。2~3秒で撮影は完了、ぺぺぺポーンという音が鳴れば、正常に写真が撮れていますよ!
撮影結果を見てみよう!
SambaでWindowsからアクセスしてみましょう。ポータブルになっていても、見えていますよね!
撮った写真
解像度はデフォルトでは640×480設定です。プログラムを修正すると変更できるようになっていますので、ご興味のある方はぜひ!
おわりに
いかがでしたか? Linuxを触る、プログラミングする、電子工作する、ネットワークを使う…RasPiの魅力がギュッと詰まった、楽しいアイテム作りができるのではと思っています。
ちなみにこのカメラは、私が社内で主催した「もくもく会」で作ったものなんです。もくもく会とは「みんなで集まるんだけど、みんな好きなことを勝手に勉強する会」という一種の勉強会で、業務とはちょっと違う切り口で勉強してみないかい?というかたちで土曜日とかに開催してます。その中で私がRasPiを勉強したいな、と思って作ったのがダンボールデジカメなんですね。弊社内や、弊社運営シェアハウス「TOLABL」でも、こういった講習会や勉強会などを定期的に開催する予定です。ご興味ありましたら、DevicePlus編集部までご連絡ください!
応用例
ここからの応用例として、こんなものはいかがでしょう?
- 遠隔シャッター: こどもの様子確認、サーバ監視
- 定点カメラ: 豆苗育成日記、空模様カメラ
- 防犯カメラ: 人感センサをつけて、誰かが通ったらシャッターON
プログラミング、電子工作、ネットワーク、いろいろ混ぜあわせて思い思いの作品ができるRasPi。ぜひ使って作ってみてください! ステキなカメラ、またはお茶目なカメラができたら、ぜひ教えて下さいね!
※2015/1/20追記:本記事の内容に、一部誤りがありました。お詫びして訂正いたします。