なんでも作っちゃう、かも。

Arduino/Make/フィジカルコンピューティング/電子工作あたりで活動しています。スタバの空きカップを使ったスタバカップアンプなど製作。最近はもっぱらArduinoと3Dプリンタの自作に興味があります。

四角いドットマトリクスLED

Posted by arms22 on 2016年02月02日 1  0

スイッチサイエンスさんで販売委託中のミニ電光掲示板キット「Dotsduino」、多色展開は行っていないのですがドットマトリクスLEDを別途用意して頂くことで他の色に取り替えて組み立てることができます。秋月電子で販売されているドットマトリクスLEDで使えそうなものをいくつかピックアップしてみました。まぁ寸法が38x38mm・ピン数が16本ならだいたい使えます。写真は参考程度にお願いします。出来る限り実際の色に近づけようと思ったのですが、、むずい。。

IMGP1201

オプトサプライの角型ドットマトリクスLED青(OSL641505-BB)。今まであまり見たことがなかったタイプ。マインクラフト風でgoodですね。

IMGP1203

オプトサプライの角型ドットマトリクスLED赤(OSL641505-BRA)。こいつもなかなか綺麗だ。

IMGP1181

オプトサプライ社の丸型ドットマトリクスLED青(OSL641501-AB)

IMGP1184

オプトサプライ社の丸型ドットマトリクスLED緑(OSL641501-AG)。順電圧が少し高め、緑色ってVf 2.1Vぐらいのイメージ。

IMGP1194

オプトサプライ社の丸型ドットマトリクスLED黄(OSL641501-AY)。ちょっとオレンジ色っぽい。左上から5行2列目の2ドットがちょっと暗い。はずれ引いたかも。

IMGP1122

丸型と角型の薄さ比較。角型は結構薄いですね。

Dotsduinoキット、スイッチサイエンスさんで絶賛販売中です!
https://www.switch-science.com/catalog/510/

Raspberry PiでPython(とOpenCV)はじめました。

Posted by arms22 on 2016年01月26日 0  0



仕事ではC/C++を使ったプログラムを書くことが多いのですが、動的型付け言語、所謂スクリプト言語を1つマスターしたいと思いPythonを勉強することにしました。

Pythonを選んだ理由は、

  • プログラム言語別年収ランキングで一位
     国外の話で国内だとあんまり変わらないみたい。orz
  • Rubyより速そう
     バイナリパーサーを書いてみたんだけどあまりにも遅いのでPythonならどうだろう?という期待を込めて。
  • Raspberry Piにはじめから入っている
     環境構築の手間がはぶけて電子工作しつつPythonの勉強ができて一石二鳥。
  • OpenCVも使ってみたい
     OpenCVは画像処理・画像解析・機械学習用のライブラリ。データサイエンスの分野でPython+OpenCVが流行っているみたいなのでついでに。

これからPythonをはじめようと思っている方は下記チュートリアルから始めると良いと思います。実際にPythonインタプリタを動かしながら読むとすぐにコードを書けるようになります。

Python チュートリアル - Python 2.7.x ドキュメント
http://docs.python.jp/2/tutorial/

今回は前回紹介した2次元温度センサー「Grid-EYE」を使ったサーモグラフィーをRaspberry PiとPythonを使って作り直しました(上動画)。画面への表示処理にはOpenCVを使っています。

本記事では、
  • Raspberry PiからI2Cデバイスにアクセスする方法
  • Raspberry PiからOpenCVを利用する方法
を解説します。


回路


IMGP1086
Grid-EYEのピン配置・周辺回路についてはこちらの記事を参照してください。

GPIO_RaspberryPi_Model_A+_B+_and_B2
Raspberry Pi Model A+, B+, B2のピン配置図です。Model A, Bのピン配置はこのサイトを参照してください。

Raspberry PiとGrid-EYEの接続
2)SDA -- SDA1
3)SCL -- SCL1
4)INT -- 未接続
9)VDD -- +3V3
6)GND -- GND




I2Cドライバ・I2Cライブラリのセットアップ


まずはI2C関連のツールとPython用のI2Cライブラリをインストールします。
# sudo apt-get install i2c-tools python-smbus

次に raspi-config を使ってカーネルのI2Cドライバを有効にします。設定が終わったら一旦再起動します(ドライバを読み込む為)。
# sudo raspi-config
08 Advanced Options > A7 I2C > Yes
# sudo reboot

再起動したらI2Cドライバが正常に動作しているか確認してみましょう。次のコマンドを入力するとI2Cバスに接続されているデバイスのアドレスが表示されます。68はGrid-EYEです。
# sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

次のようなエラーが表示された場合、I2Cバスの番号を1から0に変えてコマンドを実行してください。
Error: Could not open file `/dev/i2c-1' or `/dev/i2c/1': No such file or directory

Raspberry Piのリビジョンによって利用できるI2Cバスが異なるようです。初期モデルのRaspberry PiはI2C0、A+, B+, B2ではI2C1が利用できます。
# sudo i2cdetect -y 0

Pythonからデバイスにアクセスできるか確認してみましょう。Pythonを起動して青色のコマンドを入力してください。Grid-EYEのサーミスタ温度が読み出せるはずです。
# python
>>> import smbus # I2Cライブラリをインポート
>>> i2c = smbus.SMBus(1) # I2Cバスアクセス用のインスタンス取得
>>> temp = i2c.read_word_data(0x68, 0x0E) # デバイスアドレス0x68のレジスタ0x0Eから2バイト読み出す
>>> temp * 0.0625 # 読み出した値に0.0625を掛けて温度に変換
29.1875



OpenCVライブラリのセットアップ


続いてOpenCVライブラリとPython用バインディングをインストールします。
# sudo apt-get install libopencv-dev python-opencv

PythonからOpenCVのバージョンを確認します。
# python
>>> import cv2 # opencvライブラリをインポート
>>> print cv2.__version__ # バージョン情報をプリント
‘2.4.9.1'

画像を読み込んで画面に表示します。
# wget http://www.cs.cmu.edu/~chuck/lennapg/lena_std.tif
# python
>>> import cv2
>>> img = cv2.imread('lena_std.tif') # wgetで取得した画像を読み込む
>>> cv2.imshow('lena_std', img) # 読み込んだ画像を表示するよう指示
>>> cv2.waitKey() # waitKeyを呼び出したタイミングで画像を表示

GdkGLExt-WARNING **: Window system doesn't support OpenGL.というエラーが発生した場合、次のライブラリもインストールしてください。Raspbian Jessie 8.0ではOpenGLがなぜか無効になっているようです。
# sudo apt-get install libgl1-mesa-dri

画像を表示するにはRaspberry PiをGUIモードで起動しておく必要があります。コンソールモードを使用している場合、次のようにXウィンドウシステムを起動し環境変数DISPLAYを設定してからPythonスクリプトを実行してください。
# startx&
# export DISPLAY=:0.0

sshでログインしている場合、Xオプションを指定してログインするとリモートホストに画面を転送することができます。リモートホスト側にXウィンドウシステムが必要です(OSXだとXQuartsとか)。
$ ssh pi@rpi.local -X
# echo $DISPLAY
localhost:11.0



サーモグラフィーのソースコード


GridEye.pyはGridEYEへのアクセス処理をまとめたモジュールです。thermistorTempはサーミスタ温度を浮動小数点型で返します。pixelOutはピクセル毎の温度を浮動小数点のリスト型で返します。

grid_eye_view.pyはサーモグラフィーのメインモジュールです。GridEYEからピクセル毎の温度データを読み出し、温度を0~255のグレースケール値に変換します。このデータを8x8のグレースケール画像として、カラー画像に変換(cv2.applyColorMap)し、512x256の表示用バッファに補完アルゴリズムを変えて2回拡大転送(cv2.resize)します。最後に画面に表示するよう指示(cv2.imshow)します。実際にはcv2.waitKeyを呼んだタイミングで画面に表示されます。

ソースコードはGitHubで公開しています。こちらからもダウンロードできます。

arms22/GridEye.py
https://gist.github.com/arms22/e62e682089fe428b1de8

アーカイブをダウンロードしてスクリプトファイル(grid_eye_view.py)に実行権を与えて実行してください。
# curl -L https://git.io/vzoKn > grid_eye_view.zip
# unzip -j -d grid_eye_view grid_eye_view.zip
# cd grid_eye_view/
# chmod +x grid_eye_view.py
# ./grid_eye_view.py



参考リンク


RPi Low-level peripherals - eLinux.org
http://elinux.org/RPi_Low-level_peripherals

Configuring I2C | Adafruit’s Raspberry Pi Lesson 4. GPIO Setup | Adafruit Learning System
https://learn.adafruit.com/adafruits-raspberry-pi-lesson-4-gpio-setup/configuring-i2c

Raspberry Pi B+にOpenCV-Python環境を構築する - Qiita
http://qiita.com/jh3rox/items/be803f9171db8fe737de

Enable OpenGL on Raspbian Jessie for OpenCV
https://www.raspberrypi.org/forums/viewtopic.php?f=91&t=128464


初めてのPython 第3版
初めてのPython 第3版
posted with amazlet at 16.01.25
Mark Lutz
オライリージャパン
売り上げランキング: 64,168


詳解 OpenCV ―コンピュータビジョンライブラリを使った画像処理・認識
Gary Bradski Adrian Kaehler
オライリージャパン
売り上げランキング: 50,249


Arduinoで赤外線アレイセンサ「Grid-EYE」から2次元の温度データを取得する

Posted by arms22 on 2016年01月03日 0  0

IMGP1082

Grid-EYEはPanasonicが開発した赤外線センサで8x8(64画素)の2次元の温度データを出力します(上写真、四角い窓の缶パッケージ)。視野角60度で広範囲の温度が計測できます。電子レンジやエアコン、また静止した人体の検出も可能なのでデジタルサイネージなどにも使われています。



とある伝でこのICのサンプルを頂いたのでサーモグラフィーを作ってみました。Grid-EYEで取得した2次元の温度データをProcessingを使って表示しています(詳細はサンプルコード2)。


回路


GridEyeサンプル回路
industrial.panasonic.com/cdbs/www-data/pdf/ADI8000/ADI8000CJ1.pdfより引用

Arduinoとの接続
2)SDA -- A4 または SDA
3)SCL -- A5 または SCL
4)INT -- 2番 または 3番
9)VDD -- 3.3V
6)GND -- GND

SDA/SCL/INT端子は10kΩの抵抗でプルアップします。その他のコンデンサ・抵抗は推奨回路どおり接続します。INTピンは割り込み信号を出力する端子です。設定した閾値を超えた時、または下回った時にLOWレベルを出力します。今回は使用しないので未配線でもOKです。電源はAMG883xなら3.3V、AMG885xなら5.0Vを接続します。


ライブラリ

Grid-EYEからピクセル毎の温度を読み込むためのライブラリを作りました。下記URLからzipファイルをダウンロードしてください。ライブラリをインストールするにはArduinoのメニューからスケッチ > Include Library > Add .ZIP Library...を選択し、先ほどダウンロードしたzipファイルを選びます。

arms22/GridEye
https://github.com/arms22/GridEye/archive/master.zip


サンプル1

Arduinoでピクセル温度データを読み込むサンプルです。サーミスタ温度とピクセル温度データを読み込み、シリアル通信で温度を文字列として送信します。シリアルモニタでサーミスタ温度とピクセル温度データが確認できます。サーミスタ温度を読み出す関数thermistorTemp()の戻り値はint型で1LSB=0.0625度です。ピクセル温度データを読み出す関数pixelOut()の第1引数には温度データを格納するint型配列を渡します。1LSB=0.25度です。



サンプル2

Processingを使ってサーモグラフを表示するサンプルです。Arduinoでピクセル温度データを読み込み、シリアル通信で1ピクセルを2バイトのshort型で下位バイト・上位バイトの順で送信します。温度データの送信前に2バイトのヘッダ(0x55、0xaa)をデータの区切りとして送信します。Processing側では130バイトのデータ(ヘッダ2バイト+ピクセル温度データ64*2)がバッファに溜まるのを待ちます。130バイト受信したらヘッダを受信したか確認します。ヘッダを受信したらピクセル温度データを変数に格納します。
受信したピクセル温度データはサーモグラフっぽく見せるために色と温度の対応を調整するのが結構大変でした。Processing側のコードはPythonで記述しています。



赤外線アレイセンサ Grid-EYE | 電子デバイス・産業用機器 | Panasonic
http://industrial.panasonic.com/jp/products/sensors/built-in-sensors/grid-eye


↓本格的なモノは結構高いですな。。



いたずら防止用の棚とびら

Posted by arms22 on 2015年12月20日 0  0

いたずら防止用棚扉

こどものいたずら防止用に棚にとびらをつけました。ゴチャゴチャしていた棚がすっきり。いたずら防止より棚をすっきり見せる効果の方が高いかも。肝心のいたずら防止になったかと言えば、こどもはすぐにとびらの開け方を覚えてしまったのであまり効果はなかったかもしれない。。

いたずら防止用棚扉

とびらの材料は厚さ4mmのシナベニアで、枠をつけずそのまま扉にしています。少し歪みが気になりますが簡易とびらなのでOKとしました。シナベニアはSTORIOというDIYショップで購入しました。指定した寸法で木材をカットして発送してくれます。角丸加工も行ってくれるようですが、今回は自分で加工しました。

STORIO 曲げ木製品とオーダメイドDIYサービス
http://www.storio.co.jp

3Dプリントしたノブ

ノブは3Dプリンタで製作しました。3Dプリンタで作れる実用的なモノ(指より数える程しかない)の一つかもしれない。そろそろ3Dプリンタで3Dプリンター以外”も”作れることを証明したいなぁ。。

Raspberry PiにOSMCをインストールして快適YouTubeライフ!

Posted by arms22 on 2015年11月18日 0  0

image

Raspberry PiにOSMC(オープンソースのメディアセンターアプリと関連するソフトウェア環境一式)を入れて、HDTVでYouTube動画を視聴できる環境を作りました。OSMCはネットワーク上の動画・音楽・写真を再生する機能のほか、アドオンを追加するとことで海外のさまざまな動画配信サービスに接続することができます。Raspberry PiにはH.264のハードウェアデコーダが搭載されており、OSMCはこの機能を使ってフルHDサイズの動画もスムースに再生することができます。OSMCのインストールはRaspbianと同様にインストール用SDカードを用意してRaspberry Piに挿して起動するだけ(簡単!)。Raspberry Pi買ったものの積み基板になっているという方は試してみてください。

ハードウェア構成はRaspberry Pi B+に8GBのマイクロSDカードとバッファローのUSB無線LAN子機「WLI-UC-GNHP」、TVはシャープの「LC-20E5」です。OSMCはすべてのRaspberry Piモデルで動作します。初期型のBモデル(メモリ256MB)でも動作しました。より安定した動作を求めるなら1GBのメモリを積んだRaspberry Pi 2、クラス10のSDカード、安定した電源の利用が推奨されています。


OSMCのインストール


OSMCインストール1

下記URLからRaspberry Pi向けのインストーラーをダウンロードします。
https://osmc.tv/download/

インストーラーを起動しいくつかの質問に答えていくと、SDカードへのOSMCイメージの書き込みが始まります。ここでWiFiの設定をしておけばRaspberry Pi上での設定が省けます。

  • 言語→英語
  • OSMC動作させるデバイス→Raspberry Pi
  • インストールするバージョン→2015.09-2
  • インストールメディア→on an SD card
  • ネットワーク→ワイヤレス(SSIDとパスワードを設定)
  • メディア選択→/dev/rdisk1(環境によって変わります)

SDカードへの書き込みが終わったらRaspberry Piに挿入し電源を入れるとインストールの続きが始まります。


初期設定

OSMC初期設定

インストールが完了するとOSMCが起動しHOME画面が表示されます。続いて初期設定画面が開きます。

HDMI CEC対応のTV(○○リンク)を使用している場合、TVリモコンで基本的なメニュー操作が行えます。TV側のHDMI機器連動機能がオフになっていると使えないのでこの機能をオンにしてください。

初期設定画面で言語の選択メニューが表示されますが、まずは「English」を選んで設定を終えてください。デフォルトのフォントには日本語フォントが含まれていないので「Japanese」を選択すると画面一杯に豆腐(□)が表示されて操作できなくなります。


日本語メニューに切り替える

次のようにメニューを選ぶと日本語表示に切り替わり、日本語コンテンツが表示できるようになります。
Settings > Appearance > Skin > Fonts > Arial
Settings > Appearance > International > Language > Japanese
Settings > Appearance > International > Character set > Japanese (Shift-JIS)


M+フォントのインストール(オプション)

OSMCのテーマに合わせて最近流行の細字フォントをインストールします。下記URLで公開されているスクリプトファイルを使ってM+フォントのインストールと設定を行いました(うまく動かなかったので少し手直して使っています)。

Raspberry Pi2にOSMC入れてKodi(旧:XBMC)日本語化するまで
http://mzyy94.com/blog/2015/02/16/raspberry-pi2-osmc-jp/

OSMC Japanese font replace(修正版)
https://gist.github.com/arms22/19b8548a6e516496c81f

Raspberry Piにsshでログインします。※パスワードは osmc です。
ssh osmc@osmc.local

シェルスクリプトをダウンロード・実行します。
curl -L http://git.io/vClug | sh -

シェルスクリプトの実行が終わったら一旦再起動してください。OSMCのメニューからRebootを選択すると再起動します。
Power > Reboot

OSMCが起動したらインストールしたフォントを選んで言語を日本語に設定します。Character setはDefaultでOKです。
Settings > Appearance > Skin > Fonts > Arial > M+ 1C Light
Settings > Appearance > International > Language > Japanese
Settings > Appearance > International > Character set > Default


リモコンアプリ

Kodiリモコンアプリ

iOS/Android向けにリモコンアプリが提供されています。基本操作に加え日本語入力にも使えて、TVリモコンよりもレスポンスが良いようです。OSMCのソフトウェアキーボードでは日本語を入力することができないので、YouTubeで日本語キーワードを検索したい場合はこのアプリを使って入力するとよいでしょう。

Official Kodi Remote - App Store
https://itunes.apple.com/jp/app/official-kodi-remote/id520480364


YouTubeアドオンの追加

Youtubeサブスクリプション一覧

次のようにメニューを選んでYouTubeアドオンを追加します。
ビデオ > video add-ons > Get more... > YouTube > Install

Googleアカウントを使ってSign inします。画面の指示に従ってPCまたはタブレットでYouTubeのアクティベートページを開き、OSMCの画面に表示されている認証コードを入力します。
ビデオ > video add-ons > YouTube > Sign in

認証が完了するとお気に入りに登録している動画(Liked Videos)や購読しているチャネルの動画(My subscriptions)が視聴できるようになります。
ビデオ > video add-ons > YouTube > Liked Videos
ビデオ > video add-ons > YouTube > My subscriptions


TVリモコンのキー割り当てを変更する

キーエディタ

選択しているアイテムに対する操作はコンテクストメニューにまとめられています。TVリモコンにはコンテクストメニューの機能が割り当てられていないので、Keymap Editorを使ってTVリモコンにコンテクストメニューを割り当てます。

次のようにメニューを選んでKeymap Editorをインストールします。
プログラム > Get more ... > Keymap Editor

Keymap Editorを起動し、TVが反応しないキーにコンテクストメニューを割り当てます。
プログラム > Keymap Editor > Edit > Global > Navigation > Context Menu > Edit key > 任意のキーを押す


Sambaサーバのインストール(オプション)

OSMCのローカルストレージに動画を置いて再生させたい場合、Sambaがあると便利です。次のようにメニューを選んでSambaサーバをインストールします。
MyOSMC > App Store > Samba (SMB) Server

OSXの場合、Finderのメニューから移動→サーバへ接続、次のURLを入力して接続ボタンを押すとOSMCのホームフォルダがデスクトップにマウントされます。
smb://osmc.local


参考記事

ラズベリーパイとOSMCで作るハイレゾオーディオプレイヤー – インストール&日本語化セットアップガイド
http://dolls.orz.hm/?p=10783

RPi - Raspberry Pi と OSMC(旧 RaspBMC)でメディア・ハブを楽しむ方法
http://netbuffalo.doorblog.jp/archives/5070483.html

Raspberry Pi2にOSMC入れてKodi(旧:XBMC)日本語化するまで
http://mzyy94.com/blog/2015/02/16/raspberry-pi2-osmc-jp/

OSMC - Lisa Wiki
http://www.lisa.jp/index.php/OSMC




Raspberry Pi Model A+
Raspberry Pi Model A+
posted with amazlet at 15.11.15
raspberrypi.org
売り上げランキング: 37,751