Raspberry Piで電子工作
前回のエントリで紹介した、Getting Started With Raspberry Piにあるサンプルを作ってみた。
Raspberry Pi専用の部品についてはAdafruitが一番充実していて、ここから輸入しないとダメかなと思っていたが、スイッチサイエンスがいくつか取り扱っているようなので、GPIOリボンケーブルほかいくつか買ってみた*1。
LEDはスイッチサイエンスで欲しいのが品切れだったので、秋月電子から通販で赤100個パックや3色LED10個パックなどを適当に買った*2。
USBカメラは、elinux.orgを見てロジクールのC310にしてみた。
raspberry-pi-python-sample · GitHub
最初に、本の通りシェルとPythonからLEDを光らせてみた。初めてだと、これだけでもうきうきする。PythonのソースはO'Reillyのサイトにもある。
次に、USBカメラからの画像を顔認識して髭を付けてみた。これも本の通り。速度は全然ダメで、1コマ処理するのに数秒かかる。それに、顔認識だけならRaspberry Piを使う理由もない。
で、この二つができれば顔認識したらLEDが光る、つまり顔センサーができる。以下のコードはディスプレイにカメラの画像を表示するバージョン。たったこれだけ*3。表示しないならコードは数行短くて、X Windowも不要*4。こちらのfacesensorNoView.pyを参照のこと。ここまでやると、俄然Raspberry Piを使ってる感じがしてくる。
from SimpleCV import Camera,Display from time import sleep import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(25,GPIO.OUT) myCamera = Camera(prop_set={'width':320,'height':240}) myDisplay = Display(resolution=(320,240)) while not myDisplay.isDone(): frame = myCamera.getImage() faces = frame.findHaarFeatures('face') if faces: for face in faces: print "Face at: " + str(face.coordinates()) GPIO.output(25,GPIO.HIGH) else: print "No faces detected." GPIO.output(25,GPIO.LOW) frame.save(myDisplay) sleep(.1)
印象としては、とても簡単にハードウェアにアクセスできる。JBossなどの特定のプロセスの生死を監視してLEDを光らせる、とかXFDもさほど難しくないだろう。今のところRaspbianでいろいろやろうと思うと速度がイマイチだが、最適化はまだまだみたいだし、改善されていくんだろう。
今回は本に従ってPythonで作ったが、JavaからGPIOを扱うPi4Jライブラリもあるから、今度触ってみたい。
余談:
Raspberry Pi専用として使えるディスプレイ、キーボード、バッテリがないので、Raspberry Piとの接続方法をAdafruitで紹介されていたAT&T Laptop Dock for Motorola ATRIX 4Gを買おうかどうしようか迷っている。海外だと安価に中古が買えるようだけど、日本には正規品が入ってきてないから高いなぁ…。
LOGICOOL ウェブカム HD画質 120万画素 C310
- 出版社/メーカー: ロジクール
- 発売日: 2010/08/20
- メディア: Personal Computers
- 購入: 14人 クリック: 32回
- この商品を含むブログ (6件) を見る
*1:Raspberry Pi スキルバッジもちょっと欲しかった。というか任意の絵柄を刺繍のアイロンプリントにしてくれるサービスがあればいいなぁ。
*2:大したことをやってないから壊れないと思っていたけど、Raspberry Piの3.3V端子につながったジャンパピンがちょっとブレッドボード上のLEDの端子に触れてしまったらあっさり焼き切れた。
*3:詳細はGetting Started With Raspberry Pi (Make: Projects)を見てね
*4:Xを起動しないなら速いかと思ったけど、どっちにしろ遅いことには変わらなかった。