DevicePlus 電子工作マニュアル - Rohm...図1.1...

15
DevicePlus 電子工作マニュアル ~Raspberry Piを活用してみよう(初級編)~ Facebookの「いいね!」お知らせマシン カメラモジュールを利用した定点カメラシステム 所要時間:120分/レベル:★☆☆☆☆ http://deviceplus.jp/ Vol. 03

Transcript of DevicePlus 電子工作マニュアル - Rohm...図1.1...

Page 1: DevicePlus 電子工作マニュアル - Rohm...図1.1 conf.dディレクトリを表示し新規ファイルを作成 図1.2 ファイル名は「wiringpi.ini」 図1.3 回路図

DevicePlus 電子工作マニュアル~Raspberry Piを活用してみよう(初級編)~

Facebookの「いいね!」お知らせマシンカメラモジュールを利用した定点カメラシステム

所要時間:120分/レベル:★☆☆☆☆

http://deviceplus.jp/

Vol.03

Page 2: DevicePlus 電子工作マニュアル - Rohm...図1.1 conf.dディレクトリを表示し新規ファイルを作成 図1.2 ファイル名は「wiringpi.ini」 図1.3 回路図

はじめに………………………………………………………………………………………………… 2

第 1章 Facebook の「いいね!」お知らせマシンの実装… …………………………………… 3 1-1.作るもの・必要なもの 1-2.Facebook の「いいね!」数の取得について~API からのデータ取得 1-3.LEDの制御方法について 1-4.WiringPi(PHP 版 ) のインストール 1-5.WiringPi-PHP 実行テスト 1-6.サーボモーターの制御 1-7.Facebook「いいね!」お知らせマシン 1-8.まとめ

第 2章 カメラモジュールを利用した定点カメラシステムの実装… ………………………… 10 2-1.作るもの・必要なもの 2-2.カメラモジュールについて 2-3.カメラモジュールの使用準備 2-4.静止画の撮影 2-5.動画の撮影 2-6.定期的な実行処理を実現する「cron」の設定 2-7.定点カメラを動作させてみる 2-8.まとめ

●…所要時間:120分  ●…レベル:★☆☆☆☆●…部材費用:約 7,000 円

●…所要時間:120分  ●…レベル:★☆☆☆☆●…部材費用:約 7,000 円

も く じ

当電子工作マニュアルは、以下の内容で構成しております。

Facebook の「いいね!」お知らせマシンの実装

カメラモジュールを利用した定点カメラシステムの実装

Page 3: DevicePlus 電子工作マニュアル - Rohm...図1.1 conf.dディレクトリを表示し新規ファイルを作成 図1.2 ファイル名は「wiringpi.ini」 図1.3 回路図

2014 年6月に発売された「Raspberry…Pi…Model…B+」2015年 2月には「Raspberry…Pi……2…Model…B」もリリースされた。

2

は じ め に

現在、私たちの日常の生活シーンの中に存在するさまざまな「もの」がインターネットにつながりはじめ、ヒトや別の機器やシステムなど情報交換をするようになる「サービスのモノ化」=Iot(Internet…of…Everything) という概念が現実のものとなってきています。

そのような状況の中で、Raspberry…Pi(以後:ラズベリーパイ)は 2012年 2月に最初のラズベリーパイが発売され、現在まで電子工作ブームの追い風を受けさまざまなシーンで活用されています。ラズベリーパイがこれだけ世の中に広まった理由として考えられるのは、何よりもOS に Linux を採用していることがあげられます。Linux を採用することで、Linux にて開発していた技術者がラズベリーパイを利用するハードルが低くなることはもちろん、これまで Linux の世界で積み上げられてきたノウハウやさまざまなプログラムやソフトウェアをそのままラズベリーパイでも利用することができるため、他の同等のハードウェアに比べて導入しやすく、かつ本格的な用途での活用も可能です。

本資料では、このラズベリーパイを利用して、ラズベリーパイ・ディスプレイ・キーボード・マウスという利用から一歩足を進めて、インターネット上の情報を取得してラズベリーパイを通してLEDやサーボモーターなどのハードウェア側で出力するまでの一連の流れの解説や、カメラモジュールなどのハードウェアと Linux で汎用的に利用されているコマンドを組み合わせて、実際にすぐ生活のシーンで利用できる簡単なシステムの構築を紹介いたします。

Page 4: DevicePlus 電子工作マニュアル - Rohm...図1.1 conf.dディレクトリを表示し新規ファイルを作成 図1.2 ファイル名は「wiringpi.ini」 図1.3 回路図

写真 1.1 必要な部品

※…参考価格は 2015年 1月現在

表1.1 使用する部品一覧品名 型名・仕様 数量 参考価格(税抜)

Raspberry…Pi…Model…B+ Model…B+ 1 ¥3,940ブレッドボード EIC-301 1 ¥176赤色 LED…3mm OSDR3133A 1 ¥324…(100 個入 )

カーボン抵抗(炭素皮膜抵抗) 1/4 W…220 Ω 1 ¥93…(100 本入 )GWSサーボ…MICRO 2BBMG/JR タイプ 1 ¥1,370

ジャンパーワイヤ(オス - オス) 8 ¥306ジャンパーワイヤ(オス - メス) 3 ¥306

単三電池 4 ¥396電池ボックス 単3×4本用 1 ¥102

レゴ…クラシック…アイデアパーツ…<スペシャルセット> 1 ¥3,758

3

第 1 章 Facebookの「いいね!」お知らせマシンの実装

ウェブ上のAPI サービスをラズベリーパイで利用する方法を解説いたします。また、API から取得したデータに基づいてGPIO端子を利用した LEDやサーボモーターなどの電子回路へ出力する一連の流れをシステムとして実装します。今 回 は、Facebook の「 い い ね!」の 数 を 取得する API サービスを利用し、定期的に任意のFacebook ページに「いいね!」が押された場合、LEGOの Facebook ボックスから人形が出てくる「いいね!」お知らせマシンの実装を行います。

1.1 作るもの・必要なもの

ラズベリーパイ、LED、サーボモーターを使って、指定URL に対する Facebook の「いいね!」数が増えたらお知らせするツールを作成します。

今回の電子工作に使用する部品は(表 1.1)となります。

今回は Raspberry…Pi…Model…B+ を使用しますが、どのタイプでも大丈夫です。Raspbian のインストールを済ませた状態からスタートします。

1.2 Facebook の「いいね!」数取得について~ API からのデータ取得

Graph API URL Objecthttps://developers.facebook.com/docs/graph-api/reference/v2.2/url/

今回は Facebook より提供されている「Graph…API」を使用して、指定URL に対する「いいね!」数を取得します。具体的な取得方法は、「…http://graph.facebook.com/…」の URL に、パラメータ「id」の値にURL を指定するだけです。

Page 5: DevicePlus 電子工作マニュアル - Rohm...図1.1 conf.dディレクトリを表示し新規ファイルを作成 図1.2 ファイル名は「wiringpi.ini」 図1.3 回路図

表1.2 GPIOとの対応表

※…リビジョン 2からは、1~ 8番のピンが変更になっています。

4

例:http://deviceplus.jp/…の場合【URL】http://graph.facebook.com/?id=http://deviceplus.jp/

【取得結果】{………"id":…"http://deviceplus.jp/",………"shares":…129}

1.3 LED の制御方法について

LED の点灯に関する処理は、GPIO を制御するライブラリ「WiringPi(ワイヤリングパイ)http://wiringpi.com/」を使用します。WiringPi は C 言語用のライブラリですが、他の言語でも使用できるようなラッパーが用意されています。

WiringPi - GitHubhttps://github.com/WiringPi

WiringPi-PHP - GitHubhttps://github.com/WiringPi/WiringPi-PHP

現在は、Python、Ruby、Perl、PHP 用のラッパーが、GitHub 上で公開されています。今回は PHP版を使用していきます。

WiringPi でのピン配列WiringPi では、ピンの指定する方法が 2種類用意されています。ひとつは、「GPIO2」であれば「2」というように、GPIOのピン名の番号を使う方法です。もうひとつは、WiringPi 独自の番号を使う方法です。ピン配列は(表 1.1)のようになっています。

Pins - WiringPihttp://wiringpi.com/pins/

http://wiringpi.com/wp-content/uploads/2013/03/pins.pdf

1.4 WiringPi(PHP版)のインストール

※インストール手順は、管理者権限での実行を前提としております。

WiringPi-PHPhttps://github.com/WiringPi/WiringPi-PHP

まずはこちらのページに沿って、WiringPi-PHP をインストールしていきましょう。

インストール準備パッケージリストを更新apt-get…updateapt-get…upgrade

「php-dev」または「php5-dev」のインストールapt-get…install…php5apt-get…install…php5-dev

Page 6: DevicePlus 電子工作マニュアル - Rohm...図1.1 conf.dディレクトリを表示し新規ファイルを作成 図1.2 ファイル名は「wiringpi.ini」 図1.3 回路図

図 1.1 conf.d ディレクトリを表示し新規ファイルを作成

図 1.2 ファイル名は「wiringpi.ini」

図 1.3 回路図

5

WiringPi-PHP をインストールするためには「php-dev」または「php5-dev」が必要となるので、先にインストールを済ませておきましょう。パッケージリストを最新のものに更新してから、「php-dev」または「php5-dev」をインストールします。また、「php」または「php5」がインストールされていない場合は、合わせてインストールしておく必要があります。

WiringPi-PHP のインストールgitHub よりプログラムをクローンgit…clone…--recursive…https://github.com/WiringPi/WiringPi-PHP

WiringPi-PHP最新版のソースを、gitHubより取得します。サブモジュールも一緒にクローンするために「--recursive」パラメータを付加して実行します。

インストールcd…WiringPi-PHP./build.sh./install.sh

ソースをダウンロードした「WiringPi-PHP」ディレクトリに移動し、インストール用のシェルスクリプトを実行します。

ini ファイルの作成/etc/php5/conf.d/…のディレクトリに「wiringpi.ini」というファイルを新規作成します。(図 1.1)

同じ場所に「10-pdo.ini」というファイルがありますが、これは別ファイルへのショートカットです。コピーして使用してしまうと、リンク先のファイルの中身を書き換えてしまうことになってしまうので注意が必要です。必ず、右クリックメニューから「新規作成」、「空のファイル」を選択し、ファイル名を入力する手

順で作成しましょう。(図 1.2)

ファイルが作成されたら、LeafPad などのテキストエディタで開き、下記 2行を記述します。

extension=wiringpi.sowiringpi.pinmaptype=[PINS|GPIO|USER]

インストールはこれで終了です。早速、テストプログラムを使って動作を確認してみましょう!

1.5 WiringPi-PHP 実行テスト

ツールの作成に入る前に、WiringPi-PHP を使ってLEDを点滅させてみましょう。前述の通り、WiringPi での GPIO ピンの指定方法には 2種類あるので、ここで違いを確認してみましょう。

まず、ラズベリーパイ本体と各パーツを、(図 1.3)のように配線しておきます。今回は出力に「GPIO2」を使用します。GPIO2から 220 Ωの抵抗をはさんで LEDを接続し、GNDへと流れを作ります。

プログラム 1.1<?php

/*…GPIOのピン名を使用…*/$pin…=…2;wiringPiSetupgpio();pinMode($pin,…1);

Page 7: DevicePlus 電子工作マニュアル - Rohm...図1.1 conf.dディレクトリを表示し新規ファイルを作成 図1.2 ファイル名は「wiringpi.ini」 図1.3 回路図

6

for($i=0;$i<5;$i++){…………digitalWrite($pin,…1);…………//ON…………sleep(1);…………digitalWrite($pin,…0);…………//OFF…………sleep(1);}

/*…WiringPi 独自の番号を使用…*/$pin…=…8;wiringPiSetup();pinMode($pin,…1);for($i=0;$i<5;$i++){…………digitalWrite($pin,…1);…………//ON…………sleep(1);…………digitalWrite($pin,…0);…………//OFF…………sleep(1);}

return;

5 行目の「wiringPiSetupgpio」は GPIO のピン名を、16 行目の「wiringPiSetup」は WiringPi独自の番号を使用する指定方法です。どちらも同じ「GPIO2」のピンを指定しています。

php…-f…/root/test.php

LXTerminal より、ファイル名を指定して実行します。うまく動作すると、1秒間隔で 10 回 LED が点滅します。

WiringPi-PHP と Facebook API の連携

それでは本題の、Facebook…の Graph…API と連携させてプログラムを作成していきます。ラズベリーパイの配線は、先程のテストプログラムと同じ状態でOKです。

処理の流れは、1.…FacebookのGraph…APIから「いいね!」数を 取得。2.…増加分、LEDを点滅させる。

プログラム 1.1 は、30秒間隔で 10回の、約 5分間のプログラムです。URL、実行間隔、実行回数は、任意の値を設定してください。URL には、話題のニュース記事など、リアルタイムで「いいね!」を獲得しているようなページを指定すると良いです。

プログラム 1.1<?php

/*…設定値…*///URL$url…=…"http://deviceplus.jp/";

// 実行間隔(秒)$sleep_sec…=…30;// 実行回数$exec_count…=…10;

/*…facebook…API…*/$fb_api…=…"http://graph.facebook.com/?id=";$fb_url…=…$fb_api….…urlencode($url);

/*…GPIOの準備…*/$pin…=…2;wiringPiSetupgpio();pinMode($pin,…1);

/*…監視用カウンタ…*/$count_now…=…0;$count_pre…=…-1;$diff…=…0;

echo…"Facebook…Count…Check…:…"….…$url….…PHP_EOL;

for($k=0;$k<$exec_count;$k++){…………// いいね!数取得…………$count_now…=…0;…………$fbJson…=…@file_get_contents($fb_url);…………$fbObj……=…json_decode($fbJson);…………if(isset($fbObj->shares))……… $count_now…+=…$fbObj->shares;…………if(isset($fbObj->comments))… $count_now…+=…$fbObj->comments;…………// 差分チェック…………if($k>0){………… …$diff…=…$count_now…-…$count_pre;…………}else{………… …$diff…=…0;…………}…………echo…($k+1)….…":"….…$count_now….…"…+"….…$diff….…PHP_EOL;

…………if($diff…>…0){………… …for($i=0;$i<$diff;$i++){………… … …digitalWrite($pin,…1);…………//ON………… … …sleep(1);………… … …digitalWrite($pin,…0);…………//OFF………… … …sleep(1);………… …}…………}

…………$count_pre…=…$count_now;…………sleep($sleep_sec);}

echo…"END"….…PHP_EOL;return;

Page 8: DevicePlus 電子工作マニュアル - Rohm...図1.1 conf.dディレクトリを表示し新規ファイルを作成 図1.2 ファイル名は「wiringpi.ini」 図1.3 回路図

図 1.4…コンソール画面はこのようになります。

表1.3 GPIOとServoBlasterの対応表Servo…number… GPIO…number Pin…in…P1…header

0 4 P1-7

1 17 P1-11

2 18 P1-12

3 21/27 P1-13

4 22 P1-15

5 23 P1-16

6 24 P1-18

7 25 P1-22

図 1.5…ServoBlaster のテスト

7

LXTerminal を起動し、コマンドラインから PHPファイルを実行します。(図 1.4)php…-f…/root/fb.php

API の問い合わせ時の「いいね!」数は、前回実行時との差分(増加分)を、実行ごとに出力しています。「いいね!」数が増えた際には、増加分に応じて LEDが点灯します。

続いて、サーボモーターを追加していきます。

1.6 サーボモーターの制御

ServoBlasterhttps://github.com/richardghirst/PiBits/tree/master/ServoBlaster

サーボモーターの制御には「ServoBlaster」を使用します。

ServoBlaster のインストールhttp://oohito.com/nqthm/archives/2151

gitHub よりプログラムをクローンgit…clone…git://github.com/richardghirst/PiBits.git

ServoBlaster/user フォルダに移動し、インストールを実行します。cd…PiBits/ServoBlaster/usermakesudo…make…install

インストールを終えると、servod

で起動することができます。

GitHub のページにあるように、ServoBlaster におけるピンの指定には、(表 1.3)のような独自の番号を使用する必要があります。

たとえば、「GPIO4」を制御するには「0」を指定します。サーボモーターの回転角度は、パーセンテージで指定するか、パルス幅を 10マイクロ秒単位で指定できます。echo…0=0%…>…/dev/servoblasterecho…0=100…>…/dev/servoblaster

PHP からコマンドを実行する場合には、exec 関数を使用します。

ServoBlaster 実行テスト

サーボモーターのコードは、黄色が制御信号用、赤が電源、茶色がGNDです。今回のテストプログラムでは、電源はラズベリーパイの 2番ピンである 5.5V から取り、GPIO17 のピンを使って制御を行います。GPIO17 は、ServoBlaster での番号は「1」となります。

プログラム 1.2<?php

//ServoBlasterexec("echo…cd…/root/PiBits/ServoBlaster/user/");exec("echo…servod");exec("echo…1=0%…>…/dev/servoblaster");

for($i=0;$i<5;$i++){

Page 9: DevicePlus 電子工作マニュアル - Rohm...図1.1 conf.dディレクトリを表示し新規ファイルを作成 図1.2 ファイル名は「wiringpi.ini」 図1.3 回路図

写真 1.2 ラズベリーパイと回路

図 1.6 回路図

8

…………//ON…………exec("echo…1=90%…>…/dev/servoblaster");…………echo…$i….…"…ON"….…PHP_EOL;…………sleep(5);

…………//OFF…………exec("echo…1=0%…>…/dev/servoblaster");…………echo…$i….…"…OFF"….…PHP_EOL;…………sleep(5);}return;

1.7 Facebook「いいね!」お知らせマシンに仕上げ

LEDとWiringPi-PHP、サーボモーターとServoBlaster を使用して、Facebook「いいね!」お知らせマシンを作成していきます。LEDとサーボモーターの両方の電源をラズベリーパイから取ってしまうと、ラズベリーパイの電力が不足してしまう可能性が高いので、サーボモーターの電源は電池を使用します。また、今回のプログラムでは、WiringPi の制御にはGPIO15 ピンを、ServoBlaster の制御にはGPIO4ピンを使用してい

きます。

プログラム 1.3 完成版のプログラム<?php

/*…設定値…*///URL$url…=…"http://deviceplus.jp/";// 実行間隔(秒)$sleep_sec…=…30;// 実行回数$exec_count…=…10;

/*…facebook…API…*/$fb_api…=…"http://graph.facebook.com/?id=";$fb_url…=…$fb_api….…urlencode($url);

/*…WiringPi の準備…*/$pin_w…=…15;…//GPIO15wiringPiSetupgpio();pinMode($pin_w,…1);

/*…ServoBlaster の準備…*/$pin_s…=…0;… //GPIO4exec("echo…cd…/root/PiBits/ServoBlaster/user/");exec("echo…servod");exec("echo…".$pin_s."=90%…>…/dev/servoblaster");

/*…監視用カウンタ…*/$count_now…=…0;$count_pre…=…-1;$diff……=…0;

echo…"facebook…Count…Check…:…"….…$url….…PHP_EOL;

for($k=0;$k<$exec_count;$k++){… $count_now…=…0;

… // いいね!数取得… $fbJson…=…@fi…le_get_contents($fb_url);… $fbObj……=…json_decode($fbJson);… if(isset($fbObj->shares))……… $count_now…+=…$fbObj->shares;… if(isset($fbObj->comments))…$count_now…+=…$fbObj->comments;

… // 差分チェック… if($k>0){………………………$diff……=…$count_now…-…$count_pre;… }else{………………………$diff……=…0;… }… echo…($k+1)….…":"….…$count_now….…"…+"….…$diff…….…PHP_EOL;

Page 10: DevicePlus 電子工作マニュアル - Rohm...図1.1 conf.dディレクトリを表示し新規ファイルを作成 図1.2 ファイル名は「wiringpi.ini」 図1.3 回路図

図 1.7 旗があがる機構

写真 1.3 回転すると LEGOブロックが持ち上がる

写真 1.4 旗があがって「いいね」をお知らせ

9

… if($diff……>…0){…………… // サーボモーターON…………………… exec("echo…".$pin_s."=50%…>…/dev/servoblaster");…………… //LED点滅………………………for($i=0;$i<$diff…;$i++){…………………………………………… digitalWrite($pin_w,…1);…//ON…………………………………………… sleep(1);…………………………………………… digitalWrite($pin_w,…0);…//OFF…………………………………………… sleep(1);………………………}…………… // サーボモーターOFF………………………exec("echo…".$pin_s."=90%…>…/dev/servoblaster");… }… // 次へ… $count_pre…=…$count_now;… sleep($sleep_sec);}

echo…"END"….…PHP_EOL;return;

このプログラムでは、赤色で示した部分で、実際にサーボを ON にした後、for 文で LED をsleep(1) で指定したとおり 1秒ごとに点灯・消灯を繰り返すようにしています。LEDの点滅が終わった後、サーボをOFFにしています。たとえば前回から 5回「いいね!」が押されている場合、サーボがONになってから LEDの点滅し、サーボが下がるまで全部で、大体 10秒くらいの動作になります。

今回、この「いいね!お知らせマシン」のケースには試行錯誤が可能な、LOGOを利用します。まず「いいね!」が押されたら、そのお知らせ方法としてマシンから旗が揚がるようにしたいと思います。旗が揚がる機構については(図 1.7)のように方法で、サーボが回ることで、LEGO…ブロックが上に持ち上げられる方法で実装しました。LEGOの組

み立て方は、割愛しますが、旗を格納している部分は、ビデオを参照してください。

http://rohmweb.wistia.com/medias/pla9ndsbdg

あとは、この機構の上に、旗を取り付けて外側を作成したら完成です。API の実行回数や実行間隔、サーボモーターの角度は適宜調整してください。途中で処理を中断したい場合は、キーボードから [Ctrl]+[C] を入力することで、強制終了させます。

1.8 まとめ

ラズベリーパイを利用することで、比較的手軽にAPI などのインターネット上にある情報を取得すること、そして取得した情報をWiringPi などのライブラリを活用することで得意の言語を利用してハードウェアを操作することができました。

Page 11: DevicePlus 電子工作マニュアル - Rohm...図1.1 conf.dディレクトリを表示し新規ファイルを作成 図1.2 ファイル名は「wiringpi.ini」 図1.3 回路図

写真 2.1 必要な部品

写真 2.2 CSI ポート

写真 2.3 CSI ポートにカメラモジュールを接続

品名 型名・仕様 数量 参考価格(税抜)

Raspberry…Pi…Model…B+ Model…B+ 1 3940

ラズベリーパイ…カメラモジュール

Raspberry…Pi…Camera…Board

1 2740

※参考価格は 2015年 1月現在

表2.1 使用する部品一覧

10

ラズベリーパイに接続が可能なカメラモジュールを利用して、一定間隔で撮影を可能にする定点カメラシステムの実装を行います。本編では、カメラモジュールの設定から静止画・動画の撮影方法の解説、そして定点撮影を可能にするためのスケジュールの自動実行プログラムCRON( クロン ) の設定方法を解説いたします。

2.1 作るもの・必要なもの

ラズベリーパイ、カメラモジュールを使って、指定時間ごとに写真撮影を行う定点カメラを作成します。

必要なもの

第 2 章 カメラモジュールを利用した定点カメラシステムの実装

今回は Raspberry…Pi…Model…B+ を使用しますが、どのタイプでも大丈夫です。Raspbian のインストールを済ませた状態からスタートします。

2.2 カメラモジュールについて

カメラモジュールのセットアップについては、公式サイトのヘルプページで紹介されています。動画による説明が、とても分かりやすいです。

Camera Module Setup – Raspberry Pihttp://www.raspberrypi.org/help/camera-module-setup/

カメラモジュールは、HDMI 端子のとなりにある「CSI ポート」に接続します。

白いカバーを持ち上げ、リボンケーブルを差し込み、カバーでしっかりと固定します。リボンケーブルの先にあるカメラ本体も固定しなければ、と

Page 12: DevicePlus 電子工作マニュアル - Rohm...図1.1 conf.dディレクトリを表示し新規ファイルを作成 図1.2 ファイル名は「wiringpi.ini」 図1.3 回路図

図 2.1 「Enable…Camera」を選択

図 2.2 「Enable」を選択

図 2.3 「はい」を選択して再起動

図 2.4 カメラモジュールで撮影された画像

11

うまく撮影ができないため、ケースに取り付けるなどして安定させておくようにしましょう。カメラの基板は 4隅に穴が開いているので、ネジなどで留めることも可能です。

2.3 カメラモジュールの使用準備

カメラモジュールを使用するための準備を行います。LX…Terminal より、設定画面を表示します。

raspi-confi…g

青い背景の画面が表示されたら、「5.…Enable…Camera」を選択します。

この画面で、カメラモジュールの「有効化」「無効化」を設定します。今回は、有効化するので「Enabled」を選択します。

設定後は最初の画面に戻るので、「Finish」を選択すると、再起動するかどうかを聞かれますので、ここで一度再起動しましょう。

再起動後からは、設定が反映され、カメラモジュールを使用できます。

2.4 静止画の撮影

カメラモジュールを使用して静止画を撮影するには、「raspisill」コマンドを使用します。「raspisill」コマンドは、Raspbian にデフォルトで組み込まれています。まずは、デフォルトの状態でテスト撮影をしてみましょう。

raspistill…-o…photo.jpg

「-o」パラメータで、出力先のファイル名を指定します。同じ名前のファイルが存在しても、そのまま上書きされてしまうので注意が必要です。

(図 2.4)のように、デフォルトでは 5秒間、プレビュー映像がディスプレイに表示されます。画面を見ながら撮影位置を調整できます。プレビューが消えると同時に撮影が完了し、「-o」パラメータで指定した場所にファイルが作成されます。デフォルトの画像サイズは、横 2592px ×縦1944px です。テスト環境では、連続して撮影をすると、電力が不足するためラズベリーパイがフリーズしてしまうことが多く、定点カメラとして連続撮影する場合には、パラメータを調整しできるだけ負荷を軽減する対策が必要です。

パラメータについては、公式サイトにドキュメントが用意されています。画質の設定やエフェクトなど、詳細な設定ができます。

http://www.raspberrypi.org/documentation/usage/camera/raspicam/raspistill.md

Page 13: DevicePlus 電子工作マニュアル - Rohm...図1.1 conf.dディレクトリを表示し新規ファイルを作成 図1.2 ファイル名は「wiringpi.ini」 図1.3 回路図

図 2.5…cron の設定画面

12

Raspberry Pi Documentationhttp://www.raspberrypi.org/documentation/raspbian/applications/camera.md

2.5 動画の撮影

カメラモジュールでは、静止画だけでなく、動画も撮影が可能です。動画撮影には「raspivid」コマンドを使用します。静止画用の「raspistill」コマンドと同様、Raspbian にデフォルトで組み込まれています。

raspivid…-o…vid.h264

デフォルトの撮影時間は 5秒間。

ドキュメントhttp://www.raspberrypi.org/documentation/usage/camera/raspicam/raspivid.md

2.6 定期的な実行処理を実現する「cron」の設定

テスト用のサンプルプログラムとして、音を鳴らすだけのシェルスクリプトを用意しました。このスクリプトと cron を組み合わせて、「1分ごとに自動で音を鳴らす」という処理を実行させましょう。今回はラズベリーパイにデフォルトで用意されている音声ファイルを使用しました。

(シェルスクリプト中身)/root/test.sh#!/bin/shaplay…/usr/share/sounds/alsa/Front_Center.wav

LX…Terminal からスクリプトを実行して、動作を確認してみましょう。

/root/test.sh

実行しようとすると、「許可がありません」というエラーが表示される場合があります。これは指定したファイルへのアクセス権限がないことが原因です。「chmod」コマンドを使用して、実行権限を付与してください。

(chmodコマンドで権限を付与してから実行)http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230728/

chmod…u+x…/root/test.sh/root/test.sh

成功すると、「Front,…Center」という音声が流れます。

シェルスクリプトがうまく動作することを確認できたら、cron の実行テストをしてみましょう。cron の設定には、「crontab」というコマンドを使用します「-e」オプションを付けて実行すると、cron の設定内容をテキスト編集します。

crontab…-e

cron の設定ファイルの内容が表示されます。「#」で始まる行は、コメント行です。(図 2.5)

Page 14: DevicePlus 電子工作マニュアル - Rohm...図1.1 conf.dディレクトリを表示し新規ファイルを作成 図1.2 ファイル名は「wiringpi.ini」 図1.3 回路図

13

一番下の行に、先程作成したシェルスクリプトを呼び出す命令を追記します。

(以下を追記)*…*…*…*…*…/root/test.sh

設定項目は、左から順に「分」「時」「日」「月」「曜日」「実行ファイル」で、それぞれ半角スペースで区切って記述します。日時についての設定値には、リストや範囲を利用するための特殊記号も用意されています。

crontab ファイル - Wikipediahttp://ja.wikipedia.org/wiki/Crontab#crontab.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB

•…コンマ…(,)…で値のリストを指定する :……例 )…"1,3,4,7,8"•…ダッシュ…(-)…で値の範囲を指定する :……例)…"1-6"…("1,2,3,4,5,6"という指定と同じ意味)•…アスタリスク…(*)…でそのフィールドで取りうる全ての値を表現する。例えば、時をあらわすフィールドでは「毎時」という意味となる。•…cron 実装によっては、いくつかの追加拡張をおこなっているものもある。スラッシュ…(/)…で一定値ごとの間隔を表現する。

たとえば、上記の命令文は、日時をすべて「*」と設定しているので「毎分」実行します。1分ごとに「Front,Center」と音声が流れるようになりました。一度 cron に登録した内容は、明示的に停止を行なわない限り、次回起動時からも自動で処理が行われます。

2.7 定点カメラを動作させてみる

5 分ごとに jpg 画像を撮影し、日付ごとにフォルダに分けて格納される仕様です。

プログラム 2.1シェルスクリプトによるカメラモジュールの撮影#!/bin/bashDIR_NAME=`date…'+%Y%m%d'`FILE_NAME=`date…'+%Y%m%d%H%M'`mkdir…-p…camera/${DIR_NAME}raspistill…-o…camera/${DIR_NAME}/${FILE_NAME}.jpg…-w…400…-h…300…-t…1000…-nexit…0

(cron)*/5…*…*…*…*…/root/camera.sh

2.8 まとめ

ラズベリーパイのカメラモジュールは比較的手軽に利用することが可能です。今回はカメラモジュールの設定から撮影方法、そしてCRONを用いた定期的に撮影プログラムを動かすところまでを行いました。撮影した写真をメールプログラムと連携させることで、撮影した写真を添付ファイルとして、指定したメールアドレスに送信するなどの発展系や、撮影した画像の前後の差分を比べて変化があれば動きがあったと認識する動体検知プログラムなどと組み合わせることで必要なタイミングでのみ撮影をすることが可能になります。このように利用シーンに応じてプログラムを改良することで目的にあったシステムを実装することが可能ですので、ぜひお試しください。

Page 15: DevicePlus 電子工作マニュアル - Rohm...図1.1 conf.dディレクトリを表示し新規ファイルを作成 図1.2 ファイル名は「wiringpi.ini」 図1.3 回路図

お問い合わせ[email protected]

掲載記事利用上のご注意掲載された回路、技術、プログラムなどを利用して生じた

全ての不利益、損害、事故などDevicePlus編集部・ローム株式会社は責任を負いかねます。