始めに
10分は大げさにいっているのではなく本当で、内訳は関係ありそうなサンプルプログラムを眺めてた時間が5分ぐらい、パーツを繋いでコード書く(実体はコピペ)のに5分ぐらいで合計10分ぐらいでした
GrovePi+ Starter Kit
GrovePi+ Starter Kitは Seeed 社の Grove センサー を Raspberry Pi で使えるようにする拡張ボード GrovePiに、いくつかの Grove センサーを詰め合わせてお得なお値段でセットになった、ようするに Raspberry Pi ユーザ用の Grove システムのスターターキットです(名前から分かる事しか説明できてないですね ^^;)
MagPi の Issue 33の Review のコーナー (P56) で GrovePi+ Starter Kitが もしあなたがエレクトロニクスをはじめてみたいと思っている python ファンだったら素晴らしい選択 という釣書で紹介されていたのが気になっていました。それまで単に 電気的な接続を気にしないですむ だけなんだろう(私のように電気が苦手なソフト屋には、それを気にしないですむだけでも大変ありがたいのですが)と思っていたのですがどうもそうではなく、大変便利な Cleaver Script が使えるそうです
とりあえずセンサーを繋いでサンプルプログラムを走らせながら読んでみた印象
どのプログラムがどのセンサーのサンプルなのか分かりにくかったのですが、とりあえず動かしているとだんだんわかってきました。これはたしかに楽そうで、とにかく線をつなげて、Arduino のスケッチみたいな構文でリード&ライトするだけでなんでもできそうです。
特に、 __LCD が凄く便利で、表示したい文字列とバックライトの色を set するだけという簡単さ__で、これだけでも買った元がとれそうです
Parking Sensor
Kit の部品を眺めていて、MagPi の issue 31にでていた Parking Sensor がつくれそうなきがしてきました。ここから、完成までが 10分ぐらいでした。とにかく なにも考える必要がない と思うぐらい簡単です
材料
基本的に RaspberryPi と GrovePi+ Starter Kit だけなのですが
- Raspberry Pi (Raspbian に GrovePi の設定済み。その際、こういうトラブルもありましたが Q&Aが速くて安心)
- GrovePi+
- LCD (何番でもいいので I2C に接続)
- 超音波距離センサー (Pixcer のロボットキャラの目玉みたいな奴、D2に接続)
- 緑LED (D5に接続)
- 赤LED (D6に接続)
- ブザー (D8に接続、ビクッとする程の大音響なので穴を爪楊枝とかで塞いでもいいかも)
完成イメージはこんな感じです
すみません^^; 今は関係ない DHT(デジタル湿度温度計、青い奴)が写っちゃってます ^^;;;;
近日中にこちらの測定値を M2X に送るのも簡単だった話も...
仕様
超音波距離センサーで駐車場の壁までの距離を測って
- 測った距離を LCD に表示する
- 距離が 1m 以下になったら LCD のバックライトを緑にして、緑の LED を点灯させる
- 距離が 30cm 以下になったら LCD のバックライトを赤にして、赤の LED を点灯させ、ブザーを鳴動させる
車を駐車するのに多分便利なんでしょうね。実は私はドライバーズライセンスを持った事がないのでよく知らないのですが...
バックライトはサンプルプログラムを参考(コピペ)にフェードアウトの効果をいれてみました。完成コードの中では for ループでバックライトの色を変えて実現してます
完成品の紹介動画
完成品の動作はこんな感じです
参考にしたサンプルプログラムと完成コード
以下のコードをまず眺めました、ぱっと見てすぐわかるような短いコードばっかりです
これらをなんとなくくっつけて以下のコードが完成。やってることは単にループをまわして距離を測って、距離に合わせて表示を変えているだけの簡単なものなのですが、それはそうとマジックナンバーだらけでコメントが十分じゃないあたりの手抜きこそが、10分で出来た本当の理由な気が...
import sys
sys.path.append("/home/pi/GrovePi/Software/Python/grove_rgb_lcd")
import time
from grovepi import *
from grove_rgb_lcd import *
# Connect the Grove Ultrasonic Ranger to digital port D4
# SIG,NC,VCC,GND
# ultrasonic_ranger = 4
ultrasonic_ranger = 2
led_green = 5
led_red = 6
buzzer = 8
pinMode(buzzer,"OUTPUT")
pinMode(led_green,"OUTPUT")
pinMode(led_red,"OUTPUT")
time.sleep(1)
while True:
try:
# Read distance value from Ultrasonic
distance = ultrasonicRead(ultrasonic_ranger)
print distance
dist = int(distance)
if dist > 100:
# non
digitalWrite(led_green,0)
digitalWrite(led_red,0)
setText("distance = "+str(dist))
for c in range(0,255):
setRGB(255-c,255-c,255-c)
time.sleep(.0039)
elif dist > 30:
# green
digitalWrite(led_green,1)
digitalWrite(led_red,0)
setText("distance = "+str(dist))
for c in range(0,255):
setRGB(255-c,255,255-c)
time.sleep(.0039)
else:
# red, buzzer 1sec
digitalWrite(led_green,0)
digitalWrite(led_red,1)
digitalWrite(buzzer,1)
setText("distance = "+str(dist))
for c in range(0,255):
setRGB(255,255-c,255-c)
time.sleep(.0039)
digitalWrite(buzzer,0)
except TypeError:
print "Error"
except IOError:
print "Error"
感想
ほんとになにからなにまで簡単です。
- ハンダ付けはもちろん不要
- センサーの接続方法(電圧が5Vか3.3Vか、プロトコルは etc)を意識する必要なし、単に線を接続するだけ
- ソフトウェアは GrovePi で用意されている Python の関数を呼ぶだけ
これだけでなんとなく電子工作っぽいことができてしまう簡単さはたしかに MagPi のいうとおり ”a great choice” だったなと思いました
残課題
距離センサーの測定値がちょっと短い気がします。超音波距離センサーは音速に超音波のパルス波が物体に反射してかえってくるまでの時間を掛けて距離を測るのですが、その音速(温度や湿度の関数です)の設定値がちょっと速すぎる(高温多湿の場所を基準にした?)のではと推測されます。補正用の温度、湿度をあたえる API がないので、正確な距離を求めるためにアプリ側での補正が必要そうです
Futur works
GrovePi+ を使ってdht11温室度センサーの測定値をm2xに10分で送信できた話