📷

RaspberryPiを使って簡易防犯カメラを作ってみる

2020/09/23に公開
この記事はQiitaからエクスポートしたままの記事です。 
https://qiita.com/kakunpc/items/d5235b6698215bab1daf
最終更新日(2015年05月23日)から5年以上が経過しています。

電子回路とか全く知識ないけど、RaspberryPiで遊びたい!!

という、普段はUnityを使ってゲーム作ってる人間がたまには他のこともやってみたというお話。

このお話は不良です。あくまでも失敗談や参考適度にでお願いします。

用意するもの

RaspberryPiの準備

買ったばかりのRaspberryPiはなんにもセットアップされていないので、まずはセットアップしましょう。
ちょうどこの辺が参考になります。

カメラを有効にする

RaspberryPiカメラはデフォルトでは有効になっていないので、まずは有効にしましょう。

cmd
> sudo raspi-config

「5 Enable Camera」からEnableにしてFinishして再起動
これでカメラが有効になります。

再起動が完了したら、カメラの動作チェックです。

cmd
> raspistill -o img.jpg

正常に動作すれば、カレントディレクトリにimg.jpgの名前で画像が保存されます!

人感センサーを取り付ける

あまり自信が一番ない部分で、電子回路的に合っているかどうか不安な部分となってます。

秋月電子通商のサイトにあるモジュール仕様書.pdfの図のとおりにRaspberryPiと接続していきます。

センサー GPIO
GND GND
TEST 25Pin
VCC 3.3v

もう一つの端子「LOAD-」と「LOAD+」は何なんだ?
とりあえずこれで動作したので後で調べてみようと思います。

人感センサーの動作チェック

コマンドラインからGPIOにアクセスして動作をチェックしてみます。

com
> sudo su
# echo 25 > /sys/class/gpio/export
# echo in > /sys/class/gpio/gpio25/direction

これでセンサーの動作準備ができ、valueに結果が入っていくはずなので、実際にチェックしてみます

cmd
# cat /sys/class/gpio/gpio25/value
1
# cat /sys/class/gpio/gpio25/value
0

ここでは1で反応あり0で反応なしとなります。
切り替わるタイミングが少し遅いので何度か試してみましょう。

MonoをインストールしてC#を使って開発してみる

RaspberryPiの本を探していると、意外とRubyやPythonで書かれた本が多いですが、ここではC#を使って開発したいと思います。
(RubyとかPythonを使ったことがないことは内緒)

まずはMonoをインストールします。

cmd
> sudo apt-get install mono-complete

200MBぐらいのパッケージ使用でちょっと時間がかかりました。

C#で組んでみる

今回RaspberryPiの制御に「RaspberryPi.Net」というライブラリを使用しました。

main.cs
using System;
using RaspberryPiDotNet;

class main
{
	static void Main(string[] args)
	{
		GPIOMem sensor = new GPIOMem(GPIOPins.GPIO_25);
		sensor.PinDirection = GPIODirection.In;

		while (true)
		{
			var pinState = sensor.Read();
			Console.WriteLine(pinState.ToString());

			if (pinState == PinState.High)
			{
				string nowTime = DateTime.Now.ToString("yyyyMMddHHmmss");

				System.Diagnostics.Process prog = new System.Diagnostics.Process();
				prog.StartInfo.FileName = "raspistill";
				prog.StartInfo.Arguments = string.Format("-t 2 -w 480 -h 360 -n -o {0}.jpg", nowTime);
				prog.Start();

				System.Threading.Thread.Sleep(10000);
				continue;
			}
			System.Threading.Thread.Sleep(500);
		}
	}
}

これをビルドし下記の3つのファイルをRaspberryPiに持っていきます。

  • RaspberryPiDotNet.dll
  • application.exe
  • libbcm2835.so (このファイルはRaspberryPi.Netの「Using GPIOMem」の項目にあります。)

実際に動かしてみる。

持ってきた3つのファイルを同じフォルダ階層にまとめて実行します。
ここではDesktopに新しいフォルダを作成して実行しています。

cmd
> cd Desktop/camapp
> sudo ./application.exe

するとコマンドラインにセンサーの結果が出力されていきます。
センサーがHighになって2秒後に画像が保存されます。
画像保存が完了したら10秒間止まってまたセンサーチェックを開始し続ける動作になると思います。
10秒間止めているのは、連続撮影の防止です。

プログラムを終了される場合は「Ctrl + C」で止まります。

なんでセンサーに反応されてから2秒後なん?

どうもraspistillコマンドが呼ばれてからカメラの初期化を行っているようで、
引数 -t で撮影開始時間をデフォルトの5秒から短くしてしまうと、初期化が間に合わず真っ黒な画像ができるときがあるそうです。
ですが今回はちょっと早めに撮影してほしい事情があったため、おそらくぎりぎり初期化が終わっているであろう2秒後の撮影にしました。
ここは各人で調整してほしいところです。

終わりに

全く電子回路には知識がありませんでしたが、どうにかここまでつくり上げることが出来ました!
これから数時間ほど試してみて、なにか面白い画像が写り込んでないか試そうと思います。

この簡易防犯カメラを作るにあったていろいろ参考にさせて頂きました。

Discussion