このページの本文へ

前へ 1 2 3 次へ

「快適IoTコンテスト」自作ホームオートメーション部門に応募だ!

ラズパイ×カメラ×センサーで、超簡単にIoT作ってみた

2015年11月11日 15時00分更新

文● 船田戦闘機

  • この記事をはてなブックマークに追加
  • 本文印刷

ニコニコとトコスティックとラズパイでドアカメラ

 使用したラズパイはクアッドコアのRaspberry Pi2。シングルコアのB+でも問題ないだろう。USB端子が1つしかないA+の場合はトコスティックを接続すると全端子がふさがってしまい、ネットワーク接続を確保できない。ここでは撮った写真をサーバーにアップロードするところまで作るので、B+または2を前提に説明する。

透明ケースに入れたRaspberry Pi2にカメラ、トコスティック、Wi-Fiモジュールを接続した。この状態で消費電力は約2.5W。モバイルバッテリーを電源にするとどこでもテストできて便利だ。ソフトウェア次第で複数のニコニコを同時にモニターすることもできるので、そのテストもした

ラズパイ専用のカメラモジュールは「プリット ひっつき虫」でケースに固定した

ひっつき虫を使うときは、念のため基板上の電子部品を避ける。角度を自在に調整できるので、カメラモジュールの固定にはもってこい。案外長持ちもする

 ラズパイのWi-Fi設定については触れないが、ググればすぐ参考になるページが見つかるだろう。これから始めるラズパイ上の作業はsshで他のコンピュータからログインして行なう。

 プログラミングを始める前に、ニコニコから送られてくる生データをラズパイ上で見てみよう。ターミナルソフトウエアにcuを使う例を示すので、まず次のコマンドでcuをインストールする。

sudo apt-get install cu

 トコスティックをUSBポートに接続した状態で次のようにすると、受信データが表示されるはずだ。

cu -l /dev/ttyUSB0 -s 115200

 ttyUSB0はUSBシリアルデバイスとして認識されたトコスティックを表し、115200はその通信レートだ。接続が成功すると、次のようなデータがぽつぽつと1秒ごとに表示される。

::ts=8380
::ts=8381

 「ts」はタイムスタンプの略。ここで先ほど設定したニコニコに電池を入れると、次のようなデータが連続的に表示されるだろう。

::rc=80000000:lq=57:ct=005E:ed=81015F52:id=0:ba=2970:a1=1288:a2=0658:x=0011:y=-018:z=-136

 このデータの読み方は、こちらのページで詳しく説明されている。『無線タグアプリで使ってみる』

 複数のニコニコがトコスティックの受信範囲にあるとき、それらからのデータを同時に受信できるが、データは混ざりあってしまう。仕分けるには「ed=」以下のMACアドレスを見るのが一番単純な方法だ。加速度センサーのデータはx=、y=、z=の部分で、これは先ほどのスマホアプリのグラフを思い出せば意味がとれるだろう。

Pythonスクリプトで処理する

 「cu」による生データ観察ができたら、「~.」(cuの終了コマンド)を入力してコマンドラインに戻ろう。そして、cuの代わりにPythonスクリプトを作ってトコスティックからデータを取得してみる。ファイル名はread2525.pyとでもしておこう。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
import serial

ser1 = serial.Serial("/dev/ttyUSB0", 115200)

while 1:
  if ser1.inWaiting() > 0:
    sys.stdout.write(ser1.readline())
  sys.stdout.flush()

 この短いスクリプトを実行すると、トコスティックの出力がシェルに流れてくる。事前に

chmod 775 ./read2525.py

 として、実行フラグを立てておくと便利だ。次のようにすると、ファイルにデータを保存できる。

./read2525.py > log

 control+cでスクリプトを止め、lsすると、logというファイルができていて、そこにデータが保存されているはずだ。

 データの流れをスクリプトで捕らえられるようになった。次はそのデータを処理するスクリプトを作る。ここでいう処理とは、次のような内容だ。

  • 指定したニコニコからの「動き」を示すデータを検出する
  • カメラモジュールを使って撮影し画像ファイルとして保存する
  • そのファイルを指定したサーバにFTPでアップロードする

 できあがったPythonスクリプトを下記に示す。

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import os, sys, datetime, threading
from ftplib import FTP
import picamera  # apt-get install python-camera

sensorAddress = "81015F52"  # 対象TWE-LiteのMAC address
extension = ".jpg"
delay = 3  # second
messageCounter = 0

def takePicture():
    d = datetime.datetime.today()
    dt = d.strftime("%Y%m%d%H%M%S")

    with picamera.PiCamera() as camera:
        camera.resolution = (640, 480)
        camera.annotate_text_size = 20
        camera.annotate_text = dt
        camera.capture(dt + extension)
        print dt + extension 
    try:
        ftp = FTP("your.server""id""password")
        ftp.cwd("/home/your/space/")
        f = open(dt + extension, 'rb')
        command = "STOR " + dt + extension
        ftp.storbinary(command, f)  # put file
        f.close()
        ftp.quit()
    except Exception, e:
        print "ftp error: " + str(e)

while True:
    line = sys.stdin.readline()
    if "ed=" + sensorAddress  in line:
        messageCounter += 1
        if messageCounter % 2 == 1: # 1行おきに処理(動き始めだけを見る)
            print "acceleration detected. taking a picture..."
            t = threading.Timer(delay, takePicture)
            t.start()

 先ほどのスクリプトと比較すると少し長いが、それなりに複雑な処理をこれだけの行数で記述できてしまうのだから、ラズパイとPythonの組み合わせは強力だ。もっともエラー処理をほとんどしていないので、実用に供するためには例外的な状況に対処するコードがたくさん必要となるだろう。あくまでもサンプルプログラムとして見てほしい。

 スクリプト名がcamera.pyだとしたら、実行は次のようにする。

./read2525.py | ./camera.py

 おっとその前に、ラズパイのカメラ設定が有効になっていることを確認しよう。コマンドラインからは

sudo raspi-config

 として設定ツールを起動すれば調べることができる。設定変更もこのツールだ。それから、カメラコントロールのためのPythonライブラリも必要。

sudo apt-get install python-picamera

 とすればよいだろう。

 事前の設定はニコニコ側にも必要となる。スマホと組み合わせて使ったニコニコは加速度センサーのデータを一定間隔で送り続けるという設定だった。今度はドアの開閉という静止状態から突然発生する動きに反応したいので、もう一度OTA設定を行なって、動きの検出に適したモードに変更する。ニコニコの設定については次のページで詳しく説明されている。『IoT無線タグ設定の詳細説明』

 このページの「動作モードとパラメータの変更」に記載されている「モード8 Active/Inactive」がドアの開閉の検出に使えそうだ。準備が整ったら、2つのスクリプトを組み合わせて実行してみよう。

./read2525.py | ./camera.py

 こうするとread2525.pyが受信したデータはパイプ(|)で接続されたcamera.pyへ送られ処理される。

 camera.pyは指定したMACアドレスを持つニコニコからのデータだけに反応する。ニコニコ側で動作を検出するので、データが来たら観測対象が動いたと判断して(加速度センサーの値は無視して)撮影する。ただし間髪入れず撮ってしまうとドアしか写らない。撮りたいのはドアを開けて入ってきた何かなので、ウエイト(wait)を入れられるようにした。このあたりの処理は別スレッドで行なうようになっているので、ドアが頻繁に開け閉めされるような状況でもたぶん大丈夫だろう。

 サーバーへのアップロードにはFTPを使っているが、この部分は用途に応じた変更を加えてほしい。Pythonのサンプルコードはすぐに見つかるだろう。アイデアジェネレーターと連携させる場合は前回の記事の最後で紹介したスクリプトが参考になるかもしれない。

ドアを開けて入ろうとするとパシャリ。実験成功。カメラ付きのラズパイは下駄箱の上にポンと置かれている。写真が横向きになってるのはカメラを90度回せば直るはず

 「OpenCV(オープンソースコンピュータビジョン)」を使ってサンタ検出スクリプトを作ろうと思い、サンタの帽子とヒゲをつけてみたが、服もサンタにすべきだった。OpenCVはラズパイでも動作する画像処理ソフトウェア。顔認識も可能だ。時間切れでそこまで紹介できなかったが、個人プロジェクトとして取り組むつもり。

コンテストの締め切りは11月30日

 皆さんの発想の邪魔にならないよう「ドアカメラ」という地味な作例を示したわけだが、加速度センサーとカメラだけでできることは無数にありそうだ。センサーをどこに付けるかで意味合いが全然違ってくる。玄関ではなくトイレのドア、冷蔵庫の扉、ベランダの洗濯物、勝手に開けられたくない引き出し、猫ドア、家族の手首、赤ちゃんのぬいぐるみの中……。

 加速度以外のデータがほしい場合は、センサー選びから始めることになるだろう。TWE-Liteモジュールにセンサーを接続するときは、次のページが参考になる。『遠隔監視 - I2C入力』

 センサーによっては、ソフトウェア資産が豊富なArduinoを使うほうが楽な場合もある。そのあたりは臨機応変に考えよう。今回のドアカメラのように動きに反応して写真を撮るかわりに、モーターやソレノイドで別の動きを作り出したい場合(例えばノックすると自動的に鍵が外れるとか)は、ラズパイに駆動回路を付け加える必要がある。この場合も作例が豊富なArduinoの併用を検討するといいだろう。

 浮かんだアイデアを形あるものに変える方法を見つけるには、先例を検索するのが有効な手段だ。でも、調べ物ばかりしているとなかなかモノが出来上がらなかったりもする。実際に手を動かして、試しに作ってみることも同じくらい大事だ。

 コンテストの締め切りは11月30日。時間はまだあるので、手を動かして、モノを作りながら、アイデアを膨らませてほしい。

■関連サイト

前へ 1 2 3 次へ

カテゴリートップへ

1
Apple 2026 MacBook Neo A18 Proチップ搭載13インチノートブック:AIとApple Intelligenceのために設計、Liquid Retinaディスプレイ、8GBユニファイドメモリ、512GB SSDストレージ、1080p FaceTime HDカメラ、Touch ID - インディゴ
Apple 2026 MacBook Neo A18 Proチップ搭載13インチノートブック:AIとApple Intelligenceのために設計、Liquid Retinaディスプレイ、8GBユニファイドメモリ、512GB SSDストレージ、1080p FaceTime HDカメラ、Touch ID - インディゴ
¥110,162
2
Apple 2026 MacBook Air M5チップ搭載13インチノートブック:AIとApple Intelligence、13.6インチLiquid Retinaディスプレイ、16GBユニファイドメモリ、512GB SSDストレージ、12MPセンターフレームカメラ、Touch ID - スカイブルー
Apple 2026 MacBook Air M5チップ搭載13インチノートブック:AIとApple Intelligence、13.6インチLiquid Retinaディスプレイ、16GBユニファイドメモリ、512GB SSDストレージ、12MPセンターフレームカメラ、Touch ID - スカイブルー
¥177,333
3
Lenovo Chromebook クロームブック IdeaPad Flex 3i Gen8 12.2インチ インテル® プロセッサー N100搭載 メモリ4GB eMMC 64GB バッテリー駆動12.0時間 重量1.25kg アビスブルー 82XH001KJP
Lenovo Chromebook クロームブック IdeaPad Flex 3i Gen8 12.2インチ インテル® プロセッサー N100搭載 メモリ4GB eMMC 64GB バッテリー駆動12.0時間 重量1.25kg アビスブルー 82XH001KJP
¥46,000
4
【整備済み品】富士通 ノートパソコン LIFEBOOK U9310 13.3型FHD(1920x1080) 超軽薄 ノートPC/第10世代 Core i5-10310U@1.7GHz/ 8GB メモリ/高速ストレージ SSD/Webカメラ/WIFI/Type-C/HDMI/win11&MS Office 2019 搭載 ビジネス 在宅勤務向け パソコン (メモリ:8GB/SSD:256GB)
【整備済み品】富士通 ノートパソコン LIFEBOOK U9310 13.3型FHD(1920x1080) 超軽薄 ノートPC/第10世代 Core i5-10310U@1.7GHz/ 8GB メモリ/高速ストレージ SSD/Webカメラ/WIFI/Type-C/HDMI/win11&MS Office 2019 搭載 ビジネス 在宅勤務向け パソコン (メモリ:8GB/SSD:256GB)
¥36,970
5
【整備済み品】ノートパソコン 東芝 G83 13.3インチ FHD 軽量 第10世代Core i5-10210U/Windows 11 Pro/MS Office 2021搭載/初期設定不要/Wifi/Bluetooth/HDMI/Type C/LANポート/SDカードスロット (Corei5-10th,メモリ8GB, SSD256GB)
【整備済み品】ノートパソコン 東芝 G83 13.3インチ FHD 軽量 第10世代Core i5-10210U/Windows 11 Pro/MS Office 2021搭載/初期設定不要/Wifi/Bluetooth/HDMI/Type C/LANポート/SDカードスロット (Corei5-10th,メモリ8GB, SSD256GB)
¥32,880

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

ASCII倶楽部

注目ニュース

  • 角川アスキー総合研究所

プレミアム実機レビュー

ピックアップ
1
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
¥2,280
2
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
¥1,890
3
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
¥740
4
UGREEN USB Type Cケーブル PD対応 100W/5A 超急速充電 USB C ナイロン編み 断線防止 iphone17/16/15シリーズ/iPad/MacBook Pro/Galaxy S24/Matebook/iPad/Xperia等USB-C各種対応(1m, ブラック)
UGREEN USB Type Cケーブル PD対応 100W/5A 超急速充電 USB C ナイロン編み 断線防止 iphone17/16/15シリーズ/iPad/MacBook Pro/Galaxy S24/Matebook/iPad/Xperia等USB-C各種対応(1m, ブラック)
¥743
5
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
¥990
6
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
¥937
7
NIMASO ガラスフィルム iPad 第11世代(A16) 2025用/iPad 10.9インチ 第10世代 2022用 衝撃吸収 強化 ガラス 保護フィルム 指紋防止 ガイド枠付き NTB22I574
NIMASO ガラスフィルム iPad 第11世代(A16) 2025用/iPad 10.9インチ 第10世代 2022用 衝撃吸収 強化 ガラス 保護フィルム 指紋防止 ガイド枠付き NTB22I574
¥1,359
8
KIOXIA(キオクシア)【日本製】SDカード 64GB SDXC UHS-I Class10 読出速度100MB/s 国内正規品 メーカー保証5年 KLNEA064G
KIOXIA(キオクシア)【日本製】SDカード 64GB SDXC UHS-I Class10 読出速度100MB/s 国内正規品 メーカー保証5年 KLNEA064G
¥1,650
9
エルパ(ELPA) 扉付タップラン 電源タップ 延長コード 125V 3m 3個口 ホワイト WBT-N3030B(W)
エルパ(ELPA) 扉付タップラン 電源タップ 延長コード 125V 3m 3個口 ホワイト WBT-N3030B(W)
¥652
10
バッファロー マウス 無線 ワイヤレス 5ボタン 【戻る/進むボタン搭載】 小型 軽量 節電モデル 最大584日使用可能 BlueLED ブラック BSMBW315BK
バッファロー マウス 無線 ワイヤレス 5ボタン 【戻る/進むボタン搭載】 小型 軽量 節電モデル 最大584日使用可能 BlueLED ブラック BSMBW315BK
¥1,040

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

デジタル用語辞典

ASCII.jpメール デジタルMac/iPodマガジン