ロゴ ロゴ

Mindstorm-EV3による侵入者検知システム

(去年の部内用pdfを再編集しました。)

はじめに

1年前期に授業でEv3を扱う機会があったのですが、勝手がわからず何もできませんでした。しかし1年後期に
再度使用する機会をいただいたので、超音波センサーを用い侵入者を感知して連絡するシステムを構築することにしました。

つくるもの

Ev3devとwebカメラと超音波センサーを用いて侵入者検知機を作ります。
撮影した画像はメールで自分のgamilに届くようになっています。
右側にある超音波センサーを用いて距離を測定し、左側にあるwebカメラで侵入者を撮影します。


環境

mindstorm-EV3
PC : Windows10
ev3dev os :(ev3dev-strech-ev3-generic-2018-11-13)
python3.5.3

使用したもの

LEGO mindstorm-EV3
超音波センサー(Ev3専用)
USB wifi ドングル
Webカメラ
microsdカード(16GB)
usbハブ
大量の電池(充電できるバッテリーを借りなかったため)

Ev3devの導入

Ev3dev bootディスクを用意する

http://www.ev3dev.org/download/

上記のリンクよりev3devのisoイメージファイルをダウンロードします。

microSDカードにイメージファイルを書き込む

microsdカードはフォーマットしておきます。
書き込みにはWin32diskImagerを使いました。

起動

MicrosdカードをEv3に挿し、中央のボタンを押す。

Ev3をネットにつなぐ

ネットに接続

Ev3を操作し、設定のWifiの欄から繋ぎたいWifiを選択しパスワードを入力します。

SSH

PCからEv3に接続するため今回はTeraTermを用います。Ev3がWifiに接続されていると
左上にIPアドレスが表示されているのでそれを入力します。
また、デフォルトでユーザー名は”robot”パスワードは”maker”となっています。

環境構築

// ev3devのアップデート
sudo apt-get update
// ev3devのアップグレードsudo apt-get upgrade
// webカメラで写真を撮るためにfswebを使います。
// fswebcamのインストール
sudo apt-get install fswebcam
// メールを送るためにsSMTPを使います。 sudo apt-get install -y ssmtp
// インストールが完了したら,/etc/ssmtp/ssmtp.conf を開く。
vi /etc/ssmtp/ssmtp.conf
// SMTP サーバの設定を変更。
root=sample@gmail.com  // ←自分のメールアドレス(gmailを使用)
mailhub=smtp.gmail.com:587  // ←SMTPサーバのアドレス
// 同じ設定ファイルに、GmailのSMTP サーバにアクセスするための認証情報を追記します。
AuthUser=sample@gmail.com // ←自分のメールアドレス
AuthPass=password // ←Gmailのパスワード
UseSTARTTLS=YES // ←メールの暗号化設定、Gmailを使う場合はYES。

// sSMTPは添付ファイルを付けられないのでmuttというメールクライアントソフトを使います。 sudo apt-get install -y mutt
// プログラムを定期的に実行する必要があるのでcronを導入します。
$sudo apt-get install cron

Webカメラを認識させる

運用図


cronにより毎分cron.confを呼びだす。cron.confはcmd.shを呼び出し、
check.pyを起動する。そこで超音波センサーで読み取った値が一定以下になると
subprocessよりphoto.pyを呼び出し、photo.pyはfswebcamで写真を撮り、muttコマンドでそれらをメールで送る。

ファイル構成

作ったプログラム

cron.conf
// 分 曜 日 曜日 コマンド

*/1 * * * * /home/robot/cmd.sh

check.py


import ev3dev.ev3 as ev3
import time
import subprocess

us = ev3.UltrasonicSensor('in1')
cmd = ['python3','photo.py']

i = 0
while i < 10:
    if us.value() < 100:
        print("hit")
        subprocess.run(cmd)
        print("ok")
    time.sleep(0.1)
    i++

cmd.sh

#!/bin/sh

cd
python3 check.py

photo.py

import time
import subprocess

cmd = ['./fsweb.sh']
cmd_1 = ['./photo.sh']

subprocess.run(cmd)
print("fsweb ok")
subprocess.run(cmd_1)
print("mutt ok")
time.sleep(0.1)

fsweb.sh

#!/bin/bash

fswebcam -r 1280x720 INVADER.jpg

photo.sh

// オプション -n でシステムの Muttrc を読まない
// mutt -n -s 件名 メールアドレス -a ファイル名 メール本文
#!/bin/bash

mutt -n -s warning sample@gmail.com -a INVADER.jpg < mail.txt

mail.txt

HELLO

運用結果

これからの課題

・学校でのWifi設定がBluetooth接続うまくいかず学校での使用がで来ませんでした。
・超音波センサーの反応のプログラミングがうまく実装できず、少しタイミングがずれてしまう。

感想

・環境構築などで手間取ってまいました。例えば、間違って大切なファイルのパーミッション設定を777にしてしまったり、
pipがインストールできなかったりなどしてOSイメージを何回も入れたことなどです。
しかしその過程でエラーを調べるうちにいろんな知識が増えていき、結果的にいい経験になりました。
今回で学んだことをこれからの学習にも生かしていきたいと思います。

参考サイト

https://qiita.com/murotani/items/46f905bec33b1673c41a
https://qiita.com/murotani/items/9a1b121a4500faf9e0db
http://www.jitaku-svr.info/index.php?mutt
https://ozuma.hatenablog.jp/entry/20120711/1342014448
http://www.tapun.net/raspi/raspberry-pi-ssmtp-mutt
https://oxynotes.com/?p=6912
http://eng-memo.hatenadiary.com/entry/2016/05/05/211419
https://qiita.com/shuntaro_tamura/items/c759bc318859a1203211
https://ozuma.hatenablog.jp/entry/20120711/1342014448
https://github.com/ev3dev/ev3dev/issues/1093
https://pknight.hatenablog.com/entry/20170414/1492152828
https://qiita.com/UNILORN/items/a1a3f62409cdb4256219
https://qiita.com/suzuki_y/items/52160149baae1ac3d73c
https://stackoverflow.com/questions/43712641/couldnt-lock-home-marc-sent-in-mutt
http://itmcreate.com/wp/archives/875

コメント入力

関連サイト