Piperで遊んでみた
by K.I
2016/08/01〜
Index
- RaspberryPiとMinecraftで電子工作の基本を学べるというPiperがちょっと面白そう
- ということで、Piperで遊んでみた。
- 遊び終わったら、今度はRaspberryPiとして遊んでみようという感じ
- →どんなもんなのか、ついつい買ってしまった
- レーザー加工された箱を自分で組み立てるようになっている。
- これはプラモデル感覚で、子供に電子工作に興味を持ってもらうには、うまい方法だと思う。
番号 | 内容 | 数量 | 備考 |
1 | ネジ(20mm) | x13 | x15→木製パネル、アクリルパネルの固定用ネジ |
2 | 四角ナット | x31 | ネジ受けナット |
3 | ネジ(10mm) | x16 | x18→蝶番の固定に使うネジ |
4 | 留め金 | x1組 | 箱と蓋の留め金 |
5 | ネジ・六角穴ナット | x4組 | 箱と蓋のステー固定用 |
6 | プラスチックネジ・ナット | x4組 | x3→RaspberryPi固定用、別にアクリルケースに1組付属していた |
7 | 蝶番 | x4 | 箱の蓋と前面の開閉用蝶番 |
8 | Wifiドングル | なし | RaspberryPi3は、Wifi内蔵のため付属していない |
9 | ネームプレート | x5 | 箱の上面に貼るPiperネームプレート |
| | | |
| 押しボタンスイッチ | x6 | 赤青緑黄黒黒のスイッチ |
| その他部品 | | 小型ボタンスイッチx5、スライドスイッチx3、ブザーx2 |
| LED | x5 | 赤青緑黄白のLED |
- Wifiドングルが入っていなくて、ちょっと焦った。
- でも調べてみると、RaspberryPi3になってWifi内蔵になったので、付属しなくなったらしい。
- それ以外に、配線用のケーブルやRaspberryPiをPCとして使うための部品が付属している。
| 内容 | 数量 | 備考 |
| USBから5V電源を得るケーブル | x1 | ディスプレイ電源ケーブル |
| HDMIケーブル | x1 | RaspberryPiのディスプレイ用ケーブル |
| マイクロUSBケーブル | x1 | RaspberryPi用の電源ケーブル |
| ブレッドボード用ジャンパケーブル | x25 | 赤青緑黄黒各5本づつ |
| プラスドライバー | x1 | Piperセット組立て用 |
| | | |
| 光学マウス | x1 | RaspberryPi用マウス |
| ミニブレッドボード | x2 | 配線用ブレッドボード |
| アンプ付きスピーカー | x1 | RaspberryPiの音声出力用 |
| ミニUSBケーブル | x1 | スピーカ用電源ケーブル |
| RaspberryPi v3 | x1 | Piperのコントロール用 |
| RaspberryPi用ベース | x1 | アクリル製のRaspberryPi用固定ベース |
| モバイルバッテリー | x1 | USB電源x2出力 |
- ミニブレッドボードとか、スピーカーは最初入っていないと思ったけど、
- ブレッドボードの下のスポンジの下に隠されていた。。
- レーザー加工による木製ケースは、説明書通りに組み合わせて、ちょっとネジ止めするだけで完成する
- でもレーザー加工の部品って初めて組み立てたけど、こんな精度が良いものなのか。
- 特に手を入れなくても、ピッタリ嵌るのは気持ちが良い。
1このぐらい加工できるものは、まだまだ高いけどね。。
[top]
- まずモバイルバッテリーと、スピーカーを充電しておく
- モバイルバッテリーは、緑LEDが4個付いていて、充電が進むにつれて以下のように点灯状態が変わる
- 1個目点灯、2個目点滅2
- 1,2個目点灯、3個目点滅
- 1,2,3個目点灯、4個目点滅
- 全LEDが点灯(点滅なし) →充電完了
- バッテリー充電中は、USB電源出力はOFF状態になるようだ。
- 最初にスピーカーを接続して、電源をONにしておく。
- 次に、バッテリーにディスプレイ用電源ケーブルを接続
- 最後に、RaspberryPiの電源ケーブルを接続する
- RaspberryPi起動時に、HDMIが接続されていないとディスプレイが認識されないようなので、
- 必ず上記のようにディスプレイから電源を入れるか、或いは同時に電源を入れるようにする
- 電源を入れると、RaspberryPiのOSの Raspbianが起動する
→RaspberryPiで、おなじみの起動画面
- しばらくするとデモムービーが流れて、Piperのシステムが起動する
→こいつが主人公のようだ
→Wifiが未設定の場合は、俯いている
- Wifiのマークに×が付いているので、それをマウスでクリックして設定する
- Wifiルータの一覧が表示されるので、選択してパスワードを入力する
- ストーリーモードを開始すると、Piperpodが主人公の物語が始まる
- 最初は、マウスで方向を変えたり、ブロックを壊したり、置いたり出来るだけ。
- ミッションが英語で指示されるので、それをクリアしていくと物語が進んでいく。
- 英語なので、ちょっと意味が分からなくて悩んだりするけど、それもまた良いかも。
- 前進するにはどうするんだろうと思ったけど、
- まず工作台で、進むための回路を作っていくわけなのか。
- Minecraftの世界で配線方法を示して、こちらの世界で実際に配線する
→Minecraftの工作台で見られる配線と同様に、実際の配線をする
- 解き方についてはネタばれになっちゃうので、ここでは書かないけど、パズル的な要素もあって、けっこう面白い。
- Minecraftの世界を利用して配線させるというのは、なかなかうまい方法だな〜
- Minecraftは流行ってるみたいなので、やったことある人なら、サクサク進められると思う。
- 何処に行ったら良いか分からなくなりそうだけど、
- 色がついたブロックを辿って行けば、ちゃんと目的地に着くようになっている。
2確認していないが、これ以下の状態があるかもしれない。
[top]
- Piperは面白かったんだけど、ストーリーモードが終わってしまうと、
- MineCraftのクリエイティブモードぐらいしか使い道がないみたいだ。
- でも最新のPiperで使っているのは、BluetoothやWifiが基板上に載っている、高性能の RaspberryPi3!
- ちょっと勿体無いので、普通のRaspberryPi3として、再利用してみよう。
- これ以降は、PiperというよりRaspberryPi3の記事という感じ。
- DebianのRaspberry版である、 最新のRaspbian(Jessie)を ダウンロード
- SDROMへの書き込みには、 Win32DiskImager を使う
- Win32DiskImagerを起動して、ダウンロードしたzipファイルを解凍したImageFileをSDROMに書き込む
- 自分は、16GBのマイクロSDを使った。
- 以前のRaspberryPiのマイクロSDは、押すと外れるタイプだったが、RasberryPi3は単純に引き抜くタイプに変わっている
- Piperのアクリルのケースを取らずに、ピンセット等で引き抜く方が楽だと思う。
- RaspberryPiのPiperのSDROMを抜いて3、
- Raspbianを書き込んだSDROMを差し直して、電源を供給する
- HDMIモニタの電源を先に入れてから、RaspberryPIの電源を入れるようにすること。
- Wifiのメニューから、Wifiルータを選択して、パスワードを入れるだけ。
- これは、Piperの設定でやっているので、同様にやれば良い。
- もちろん、Ethernetケーブルで有線接続しても良いけど。。
- USB接続のキーボードがあれば、そのまま使えるはず。
- でも、自分は持ってないので、Bluetooth接続を試してみた。
- AppleのBluetooth接続のキーボードと、マウスがあったので、試しに接続してみた。
- Bluetoothのメニューから、Add Deviceを選んで、キーボードの電源を入れると、
- xxxxxxの数値をキーボードでタイプして、Enterキーを押すと、
- Connected Successfully と表示されて、コネクトされた。
- Bluetoothマウスも同様に選択して、Pairボタンでコネクトするが、
- でも、キーボード入力に全然反応しない。
- たまに入力されるが、10文字ぐらい連続して入力されたりする。
- どうやらキーボードは、Bluetoothマウスと干渉してしまうようだ。
- 仕方ないので、マウスは元々のUSBマウスを使うことにした。
- あと折角なので、持ち運びを考えて、折りたたみ式のBluetoothキーボードを買ってみた。
- これは充電式で、一度Connectしておけば、キーボードの電源を入れて、何かキーを押せば、
- キーボードの左上の青いLEDが一度点灯して、コネクトされるので、以降はキー入力可能になる
- このキーボードは、中間に繋ぎ目があるので、Bのキーが押し辛い。
- あと、数字キーの位置が微妙に右寄りなので、タッチタイピングの場合は、ちょっと慣れが必要かも。
- それ以外は、小さい割りに、なかなか良いキーボードなんだけど。。
- Piperのモバイルバッテリーは、もちろん使えるんだけど、充電するのが、ちょっとメンドクサイ。
- 電源スイッチは無いけど、コンセントに挿すと、ちゃんとRaspbianが起動する
- HDMIとRaspberryPiの電源供給順が心配だったんだけど、問題ないようだ。
- RaspberryPi3は、最大2.5Aぐらい喰うらしいので、十分な容量の電源が必要なので注意。
- とりあえず、これでモバイルバッテリーの充電を気にしなくて済むので、気楽に使えるようになった。
- 差込口は5個あるので、スピーカーの充電とか、それ以外にも電源として使える余裕がある
- 電子工作に使うなら、電源はなにかと使うので、差込口の多いものにしたほうが良いと思う
- デフォルトでは、時刻がUTCになってるので、場所を日本に設定する
- 左上のラズベリーパイのメニューから、Preference→RaspberryPi Configurationを選択
- Localisationタブを選択、Set Localeボタンを押して、以下の設定
- Language → ja(Japanese)
- Countory → JP(Japan)
- Character Set→ UTF-8
- Would you like to reboot now? と聞いてくるので、Yesで再起動する
- 日本語フォントは、初めからインストールされているようだ。
- JISキーボードの場合は、設定→キーボードとマウスで、キーボードのレイアウトの設定が必要だと思う。
- 自分が使っているのは、USキーボードなので、デフォルト設定のままでOKだった
- Terminalから、以下のように ibus-anthyのパッケージをインストール
$ sudo apt-get install ibus-anthy
- 続行すると、インストールに数分掛かるので、ちょっと待ちます。
- インストールが完了したら、左上のラズベリーメニューから、IBusの設定を選ぶ。
- 最初は、iBusが起動していないので、起動確認のDialogが表示されるので、起動する。
- キーボードショートカットの設定は、初期状態で、<Super>spaceになっている。
- Super,Hyper,Metaは、昔のLispマシンで使われたキーボードにあったキーらしい。
- Superは、WindowsキーやAppleキーで代用、Metaは、Altキーで代用出来るようだ
- でも、自分の場合、Winキーを押すとメニューが出てしまうので、
- やっぱり、<Control>spaceに設定した。
- Bluetoothのメニューの左側に、USと表示4されるようになった。
- このメニューから、日本語入力に変更することも出来る。
- もちろん、Ctrl-Spaceで、日本語入力への切替も出来るようになった。
- PiperのHDMIモニターには音声出力できないので、イヤホンジャックにスピーカーを接続5する。
- Raspbianのデフォルトの音声出力は、HDMIになっているらしく音が出ないので、
$ amixer controls
numid=3,iface=MIXER,name='PCM Playback Route'
numid=2,iface=MIXER,name='PCM Playback Switch'
numid=1,iface=MIXER,name='PCM Playback Volume'
numid=5,iface=PCM,name='IEC958 Playback Con Mask'
numid=4,iface=PCM,name='IEC958 Playback Default'
- 出力先の設定は numid=3、ボリュームは numid=1 になっている
$ amixer cget numid=3
numid=3,iface=MIXER,name='PCM Playback Route'
; type=INTEGER,access=rw------,values=1,min=0,max=2,step=0
: values=0
- 音声出力先は、0:自動、1:アナログ出力、2:HDMI
- なので、自動になってるんだけど、何故か音が出ない6ので、以下のようにアナログ出力に設定する
- 試しに、ボリュームを80%に設定して、wavファイルを出力してみる
$ amixer set PCM 80%
$ aplay /usr/share/sounds/alsa/Side_Left.wav
3これは、いちおう大事に保存しておきましょう。
4自分は、USキーボードを使っているので、USと表示されるが、JISキーボードの場合はJPとなるらしい。
5Piperのモニタじゃなくて、テレビのHDMIとかに接続するなら、そのまま音が出ると思う。
6HDMIモニタ使ってる時点で、HDMI音声出力になるのかも。
[top]
- Raspbian(Jessie)には、初めからScratchがインストールされているんだけど、
- GPIOを弄ることは出来ないらしいので、ScratchGPIOというのを使ってみよう。
- ということで、結局はScratchGPIO7のインストールはしなくても良いので、
- この章は読み飛ばしてもらっていいんだけど、仕様はいろいろ違っている7ようだ。
$ wget http://bit.ly/1wxrqdp -O isgh7.sh
$ sudo bash isgh7.sh
画面を右クリックして、デスクトップの設定で、
- デスクトップアイコンを表示するようにしておけば、
- デスクトップ上に、ScratchGPIO7とScratchGPIO7plusが表示される。
- ちなみに、Pi-Scratchという似たようなプロダクトもあるらしい。
- Pi-Scratchの使い方については、 こちらが詳しい
- 共存させるのがちょっと面倒くさそうなので、とりあえずScratchGPIOの方を使ってみる。
- ScratchGPIO7の仕様 →最初からインストールされているScratchと少し仕様が違う
- ScratchGPIO7の場合は、gpioを含むコマンド以外は、基本的にPIN番号で設定を行うようだ。
Command | Pin status | 説明 |
config*in | input-pullup | 入力・内部プルアップ設定 |
config*pullnone | input-none | ただの入力に設定 |
config*pulldown | input-pulldown | 入力・内部プルダウン設定 |
pin*on | output-high | H出力・ピン番号で指定 |
pin*off | output-low | L出力・ピン番号で指定 |
gpio*on | output-high | H出力・GPIO番号で指定 |
gpio*off | output-low | L出力・GPIO番号で指定 |
power*,% | output-pwm | PWM出力・PWM値は0〜100で指定 |
triggerresetpin* | wait trigger | ピン状態変化待ちになる |
- *はPIN番号、gpioコマンドのみGPIO番号を指定
- %はPWM値、0〜100でDutyを指定、整数値でなくても良いみたいだが、そこまでの精度はなさそう
- config*input, config*inpullup, config*inputpullup は、いずれも無効だった
- config*out は無効、configで設定しなくても、pin*on,pin*offで出力値を設定すると、出力ピンになるらしい
- ScratchGPIO7の場合は、GPIOサーバは最初から起動している8。
- 変数を作って、変数に設定値を入れるというやり方でも良い
変数 | 設定値 | 説明 |
config* | in, inputdown, inputnone | 入力設定、順にpullup入力, pulldown入力, ただの入力 |
pin* | 0, 1 | ピン番号指定による出力、0:L出力、1:H出力 |
gpio* | 0, 1 | GPIO番号指定による出力、0:L出力、1:H出力 |
power* | 0〜100 | PWM出力、Dutyを%で指定 |
- 入力端子の状態がどうなってるか気になったので確認。普通の方はここは気にせず飛ばしてください。
外部の接続 | pullup | none | pulldown | 備考 |
10k pulldown | 0.59V | 0V | 0V | 内部pullup=約45.6k |
Open | 3.27V | 0.4V | 0V | |
10k pullup | 3.28V | 3.28V | 2.71V | 内部pulldown=約47.5k |
3.28-0.59=2.69
10k:PullUp抵抗=0.59:2.69
PullUp抵抗=10k*2.69/0.59=45593=45.6k
3.28-2.71=0.57
PullDown抵抗:10k=2.71:0.57
PullDown抵抗=10k*2.71/0.57=47544=47.5k
- 入力設定による端子状態については、ScratchGPIO7でもデフォルトのScratchでも、全く同じだと思う。
- triggerresetpin*を実行すると、そのピンの状態の変化待ちになる
- それからtriggerpin* を受け取ったとき の動作を記述することで、
- GPIOからの入力をトリガにしたプログラムを記述することが出来る
- トリガは一度しか送られてこないので、再度実行したいときは、
- triggerresetpin*を実行して、トリガの再設定をしなければならない。
broadcast power8,50
→Hの部分が50%、Lの部分が50%になっている
broadcast power8,20
→Hの部分が20%、Lの部分が80%になっている
- PWMの周波数は約194Hzで、変更はpfreq変数を使うらしいが、設定方法10がわからない。
- まずは定番のLED点滅11やってみよう
- PIN8と5V間に、抵抗を通してLEDを接続する12
- 抵抗は、1kΩ(カラーコード茶黒赤○)ぐらいで良いと思う。
- 緑の旗マークを押すと、以下をずっと繰り返す
- PIN8をONにして、1秒待ち
- PIN8をOFFにして、1秒待ち
- LEDは向きがあるので、点灯しなかったら、逆向きに挿してみる
- LEDの長いほうの端子を、右側(+5Vから抵抗を通した方)に接続すればよい
7なんで、ある程度統一しようと思わなかったんだろう。。
8但し、ScratchGPIO7を終了しても、GPIOサーバは起動したままになっているようだ。
9scratchはソースコードの載せにくいのが欠点だなぁ。。図を載せるの面倒だけど、こんな風に書いて分かるかなぁ。。。
10適当に設定すると、PWM出力されなくなる。。
11最近では、LピカとかLチカとか言うらしい。
12厳密に言うと、5-3.3=1.7Vぐらいなので、Vfの小さいLEDは完全に消灯しないかもしれない。でもこの接続ならVfの大きい青色LEDでも確実に点灯する。
[top]
- 最初から、Raspbian(Jessie)にインストールされているScratchでもGPIOが操作できるようだ。
- 自分は、ちょっと試して出来ないと思っていたが、それはGPIOサーバを起動していない所為だった。
- 最初にGPIOサーバを起動するのを忘れないようにすること!
- Scratchのファイルメニューから、GPIOサーバを起動させておく
- 念のため、プログラムの最初で、broadcastでgpioserveronを送って起動させるようにした方が良いと思う。
- なので、単純なGPIOの入出力だけ行う場合は、ScratchGPIO7のインストールは不要
- でも、ピン状態の変化によるプログラム起動は出来ないようなので、 ポーリング13でやる必要があると思う。
- ScratchGPIOの仕様 →これはScratchGPIO7と仕様が少し違っている
- デフォルトのScratchの場合は、基本的にGPIO番号で設定を行うようだ。
Command | Pin status | 説明 |
gpioserveron | gpio server on | GPIOサーバ起動 |
gpioserveroff | gpio server off | GPIOサーバ停止 |
| | |
config*out | output | 出力設定 |
config*in | input-pullup | 入力・内部プルアップ設定 |
config*pullnone | input-none | ただの入力に設定 |
config*pulldown | input-pulldown | 入力・内部プルダウン設定 |
gpio*on | output-high | H出力 |
gpio*off | output-low | L出力 |
gpio*pwm% | output-pwm | PWM出力 |
- 最初に、GPIOサーバを起動してから操作する必要がある(重要)
- *はGPIO番号を指定
- %はPWM値、0〜255でDutyを指定、128でDutyが約50%になるようだ、
- configで設定しなくても、gpio*on,gpio*offで出力値を設定すると、出力ピンになるらしい
- 変数を作って、変数に設定値を入れるというやり方は、
broadcast gpio14pwm128
→Hの部分が約50%、Lの部分が約50%になっている
broadcast gpio14pwm51
→Hの部分が約20%、Lの部分が約80%になる
broadcast gpio14pwm255
→Hの部分が100%になってくれればいいが、僅かにLの部分がある
- PWM出力の時、pwm値を255以上にしても、Lになる部分(300〜400nsぐらい)を無くすことは出来ないようだ。
- PWM出力の周波数は約800Hzで、ScratchGPIO7より少し速い。
- LED点滅は、ScratchGPIO7と、ほとんど同じだが、若干コマンドが異なる。
- 配線は全く同じものを使用する。同じPIN8だが、GPIO番号でいうとGPIO14となる
- LEDの向きに注意。点灯しなかったら、逆に挿しなおしてみる。
- 緑の旗マークを押すと、GPIOサーバを最初に起動して、
- あとは、以下をずっと繰り返す
- GPIO14をONにして、1秒待ち
- GPIO14をOFFにして、1秒待ち
- ScratchGPIO7は基本的にPIN番号で指定していて、PIN入出力はGPIO番号で指定することも可能だが、
- デフォルトのScratchではGPIO番号で指定するしかないようだ。
13要するに、ループで繰り返しチェックして、変化したら処理するということ。
14pwm127でも、良いかもしれない。
[top]
- GPIOは、GPIO番号、或いはコネクタの端子ピン番号で指定する。
- GPIOのピンヘッダを下にした時のGPIOのピン配置15を示す
- ピン配置については、ScratchGPIO7でもデフォルトのScratchでも、当然、全く同じ。
- あとは、Chromium(Web Browser)で、Chrome://plugins/をアクセスして、
- Flashを有効にして、さらに常に許可するにチェックを入れておく
- 最新の、最新のRaspbian(Jessie)なら、これでWeb上のScratch2.0が動くはず
- 試しに、自分もScratchのプログラムを作ってみました →プログラム
- 残念ながら、Web上のScratchではローカルのGPIOのコントロールは出来ないみたいなので、
- GPIOの制御をするなら、ローカルにインストールされたScratch1.4を使わないといけないのが残念
15巷ではピンヘッダが上の配置図が多いが、Piperは下になってて見づらいので、自分で作りました。。
[top]
- Piperは、箱の組立てから始めて、簡単な工作や電子工作の基本を学べる
- 小学校低学年だと難しいかもしれないけど、わくわくしながら進められると思う。
- Minecraftの世界と繋がっているのも面白いと思った。
- 全部のミッションをクリアしてしまうと、もうあまり遊べないけど、
- あとはRaspberryPiとして、いろいろ弄っていけば良いと思う。
- まぁ、Piperのディスプレイは少し小さめなので、すぐに物足りなくなるかもしれない
- ディスプレイは、テレビのHDMI端子を使った方がいいかも。。
- モバイルバッテリもちょっと面倒なので、USB充電器使った方がいいみたい。
- でも、これをきっかけにして、電子工作の面白さを知って、
- Piperを分解したり、いろいろ改造してみれば、楽しいかもしれない。
- Scratchのプログラムは、思いのほか面白かったので、
- Raspberry Piではじめる どきどきプログラミング 日経BP社
- Scratchを使ったプログラム、ちょっとだけ電子工作という本→小学校高学年以上向けって感じの本なんだけど、
- MinecraftやGPIOをScratchで操作するやり方が説明されていて、意外と読み甲斐があった
- Piper持っててストーリーモード終わっちゃって、その後はどうしようという感じなら、かなりおススメの本だと思う
[top]
[電子工作関連に戻る]