ラズベリー・パイで
プログラミングと
電⼦⼯作を体験してみよう
⼯学院⼤学
先進⼯学部 機械理⼯学科
⾦丸隆志
1
中学⽣を対象とした講義資料
本資料の内容に必要なもの(1)
2
本講義のために、筆者があらかじめ⽤意した機器やパーツを紹介します
ラズベリー・パイ(RaspbianをインストールしたmicroSDカードも必要)
さらに、距離センサを使うためにシリアル通信機能を有効にしておく。
解説はこちらのページの「2. Raspberry Piでシリアルコンソールを無効に」に。
http://neuralassembly.blogspot.jp/2016/06/raspberry-piscratch.html
<後半の電⼦⼯作編>
ブレッドボード
http://akizukidenshi.com/catalog/g/gP-05294/
ジャンパワイヤ(ピン-ソケットタイプ)
http://akizukidenshi.com/catalog/g/gC-08933/
およびその⾊違い
ジャンパワイヤ(ピン-ピンタイプ)
http://akizukidenshi.com/catalog/g/gC-05371/
本資料の内容に必要なもの(2)
3
<LED編>
⾚⾊LED
http://akizukidenshi.com/catalog/g/gI-02320/
330Ωの抵抗
http://akizukidenshi.com/catalog/g/gR-25331/
<距離センサ編>
距離センサ(シャープ測距モジュールGP2Y0E02A)
http://akizukidenshi.com/catalog/g/gI-07546/
ピンヘッダ
http://akizukidenshi.com/catalog/g/gC-00167/
上記距離センサの配線にはんだづけし、ピン-ソケットタイプのジャンパワイヤを
取り付け、ブレッドボードに差し込みやすくしています
PIC12F1822
http://akizukidenshi.com/catalog/g/gI-04557/
ただし、下記ページの「3. PICにプログラムを書き込む」に従い
PICにプログラムを書き込んでおく必要があります。
Raspberry Piがあれば数百円のパーツ購⼊で可能です。
http://neuralassembly.blogspot.jp/2016/06/raspberry-piscratch.html
本資料の内容に必要なもの(3)
4
<キャタピラ式模型編>
電池ボックス
http://akizukidenshi.com/catalog/g/gP-00310/
モータードライバTA7291P
http://akizukidenshi.com/catalog/g/gI-02001/
10kΩの抵抗
http://akizukidenshi.com/catalog/g/gR-25103/
タミヤのタンク⼯作基本セット
http://akizukidenshi.com/catalog/g/gK-09102/
付属の電池ボックスは使わずに組み⽴てます。
モーター⽤配線
http://akizukidenshi.com/catalog/g/gP-06756/
モーターに⻑めの配線をはんだづけし、ピンヘッダをはんだづけして
ブレッドボードに差し込みやすくしています
ラズベリー・パイとは
5
名刺サイズの超⼩型コンピュータ。2012年に登場して以来、⼤⼈気
プログラミングを学ぶ⽬的で作られたため、コンピュータについて
学びたい⼈に適しています
Windows/Mac OS XやAndroid/iOSは巨⼤であったり、
内部構造が複雑だったりしますが、
ラズベリー・パイはシンプルで学びやすい
また、電⼦⼯作など「ものづくり」に適しているという⾯もあります
ラズベリー・パイの電源の⼊れ⽅
6
まず、OSの⼊ったmicroSDカードを裏⾯に押し込みます
通常はOSのインストールから
⾏いますが、今⽇は省略し、
OSをインストール済のものを
⽤います
ディスプレイ
(HDMIケーブル)
キーボードとマウス
(USBケーブル)
電源
(microUSBケーブル)
ディスプレイ、キーボード、
マウスを接続したら、最後に
電源ケーブルを差し込みます
電源スイッチはありません
microSDカードを⼀度⼊れたら
通常は⼊れたままで良いです
デスクトップからプログラミングの学習環境
Scratch(スクラッチ)を起動しよう
7
起動直後のデスクトップから、
メニュー(Menu)から「プログラミング」→「Scratch」を起動
Scratch(スクラッチ)の画⾯
8
まずは猫の位置と向きを知ろう
9
x軸
y軸
240-240
180
-180
猫の位置は
座標で決まります
猫の座標
猫には「位置」と「向き」があります
猫の向きは
⻘線の⽅向で決まります
90度
0度
-90度
180度
猫の向き
(猫の名前はスクラッチ・キャット)
では猫を動かしてみよう
10
それぞれマウスで
クリックしてみよう
「猫の向き」へ
10だけ動きます
「猫の向き」
(この図では右)
「猫の向き」が
15度回ります
「猫の向き」が
15度回ります
何度もクリックすると、それに応じて猫が動きます
⼀気に動かすには?
11
x軸
y軸
240-240
180
-180
90度
0度
-90度
180度
⼀気に90度(右)
に向きます
⼀気に画⾯中央
(x,y)=(0,0)
に戻ります
例えば下の⼆つのブロックが使えます
なお、ブロック上の数値を
変更することもできる
12
キーボードで
数値を⼊⼒
すると
変更できます
4つの選択肢から
変更できます
壁にぶつかったときに反転させる
13
右向きの時に を何度も押すと?
壁にぶつかって
それ以上
進まなくなります 向きが反転します
をクリック
右向き以外での猫の描かれ⽅3種
14
⾚丸で⽰したボタンを押すことで、3パターンが切り替わる
上下逆さに描画されます 猫は常に上下正しく
描画されます
猫は常に右向きに
描画されます
どの描画法でも動き⾃体は変わらないので、
お好みで選んでよいです
もう少しプログラムらしくしていこう
15
ここまでは、「命令」を⼀つずつ実⾏してきました
ここからは「命令」を組み合わせ、「プログラム」を作っていきましょう
「10歩動かす」命令をマウスでつかんで
「スクリプト」エリアに移動します
同じ命令を先ほどの命令の下につなげます
(⽩い線の位置につながることに注意しよう)
2つの命令がつながる
クリックすると、2つの命令が
上から順に実⾏されます
端に着いたときの処理の命令も
プログラムに追加してみよう
16
「10歩動かす」回数を増やすと、
それだけ端に着くのも早くなります
そのたびに を押すのは⾯倒
もプログラムに組み込もう
50歩動いてからの
端チェックでも
良いけれど…
10歩動くたびに
こまめに端チェック
するのも良い
命令の間に
新たに命令を
追加していきます
(⽩線の位置に
注意)
コピー、削除、切り離しを知っておこう(1)
17
取り扱うブロックが増えてきたので、その取り扱い⽅法をいくつか紹介します
⼀番上のブロックで
マウスの右ボタンをクリック
→「複製」
全
体が
複
製
さ
れ
る
コピー(複製):全体
⼀
部
が
複
製
さ
れ
る
途中ブロックで
マウスの右ボタンをクリック
→「複製」
コピー(複製):⼀部
コピー、削除、切り離しを知っておこう(2)
18
削除
⼀番上のブロックで
マウスの右ボタンをクリック
→「削除」
切り離し
切り離したい位置の
下のブロックを
マウスでつかむ
切
り
離
さ
れ
る
削
除
さ
れ
る
プログラムが複数あったら?
19
原則的には、クリックしたもの
のみが実⾏されます
スクラッチにより詳しくなれば、
⼆つのプログラムに
別々の役割を持たせることが
できますが、今⽇はそこまでは
触れません
歩いているような動きを追加(1)
20
ここまでは「歩く」と⾔っても
ただ滑っているだけでした
実際に歩いているような
動きを追加してみましょう
スクラッチはゲームを作ることにも向いているので、
「動き」を表現する仕組みがあります
猫を「歩いているように」⾒せたい
歩いているような動きを追加(2)
21
キャラクター(猫)に
⼆つの絵(コスチューム)
が⽤意されています。
この⼆つの絵を切り替えることで
猫が歩いているように⾒えます
コスチュームを順に切り替える命令が
「⾒た⽬」セクションの
「次のコスチュームにする」です
コスチュームについて知ろう
「コスチューム」タブをクリックすると…
歩いているような動きを追加(3)
22
プログラムをクリックし、実際に猫が「歩いて」いるように
⾒えることを確認しよう!
コスチュームの切り替えで歩きの実現
「10歩動かす」の後ろに
「次のコスチュームにする」
命令を追加します
繰り返し処理を覚えよう(1)
23
3つの命令がひとかたまりとして
5回繰り返されています
同じ命令群を複数回繰り返すとき
便利な仕組みが「繰り返し処理」
「制御」セクションの
「ずっと」や「10回繰り返す」
などが「繰り返し処理」の
代表例です
ここまでのプログラムは同じ処理が繰り返されていました
繰り返し処理を覚えよう(2)
24
クリックして実⾏すると、
「10歩移動」が10回繰り返されますこの部分の数字は
キーボードで書き換えられます
(100回、など)
まずは「10回繰り返す」を使ってみよう
繰り返し処理を覚えよう(3)
25
回数を決めずに無限に繰り返したいときは「ずっと」ブロックを⽤います
クリックすると、猫が無限に歩き続けます
(もう⼀度クリックすると⽌まります)
簡単なゲームを作ってみよう(1)
26
猫がずっと(勝⼿に)動き続けるようになったので、
これを利⽤して簡単なゲームを作ってみましょう
ルール: 猫がマウスのポインターを追いかけてくる
ユーザーはマウスのポインターが猫に触れられないように
マウスポインターを動かし続ける
マウスのポインターが猫に触れられればゲームオーバー
簡単なゲームを作ってみよう(2)
27
「猫がマウスのポインターを追いかけてくる」というルールの実現
左のプログラムを出発点とします
猫の「向き」をマウスポインターが存在する⽅向とすれば良いわけです
猫の「向き」に関係しているのはこの命令なので、
これを別の命令に置き換えます
⽤いるのは「動き」セクションの「〜へ向ける」ブロック
簡単なゲームを作ってみよう(3)
28
このブロックをマウスでつかんで「ずっと」から外します
同じ位置に「〜へ向ける」ブロックを挿⼊します
「〜へ向ける」の「〜」の部分をクリックし、
「マウスのポインター」を選択します
これで「マウスのポインターを追いかけてくる」
機能の完成です
実際にプログラムをクリックし、マウスを動かして
動作を確認しよう
「猫がマウスのポインターを追いかけてくる」という機能の完成
簡単なゲームを作ってみよう(4)
29
最後に、ゲームオーバー機能の実現
「制御」セクションの「もし〜なら」と
「すべてを⽌める」および
「調べる」セクションの「〜に触れた」
を⽤います。
これらをこのように組み合わせます
簡単なゲームを作ってみよう(5)
30
「〜に触れた」の
「〜」の部分をクリックし、
「マウスのポインター」を
選択します
これで完成!
クリックして動作を
確認しよう なお、この部分の数字を
キーボードで⼤きくすると
猫の動作が速くなり、
難易度が上がります。
(50にすると超⾼難度)
仕上げです
プログラミングという観点からの
ここまでのまとめ
31
プログラムは
上から順に実⾏されます
同じ命令を
何度も実⾏する場合、
「繰り返し」を⽤います
あるときのみ
命令を実⾏したい場合、
「条件分岐」を⽤います
ゲームオーバーを
実現するために
⽤いました
プログラムが複数あっても、
これらが全て
実⾏されるわけではありません
ここでは
「クリックしたものだけが実⾏」
されることを学びました
ここからは…
32
ここまでは、画⾯の中のバーチャルな(仮想的な)
世界に対するプログラミングを⾏ないました
ここからは、現実世界(リアル・ワールド)
に対するプログラミングを⾏ないます
これをフィジカル・コンピューティングといいます
(フィジカル=物質的、⾝体的、物理的)
LED 距離センサー キャタピラ式模型
以下のものを順に
試してみましょう
LEDをプログラミングしてみよう(1)
33
発光する電⼦パーツ。
電化製品のインジケータや、照明、信号機などにも使われます
LEDを発光させる際に⽤います。
オレンジ、オレンジ、茶、⾦
のカラーコードは330Ω(オーム)の
⼤きさの抵抗を⽰します
LED(Light Emitting Diode) 抵抗
LEDってなんだろう?
アノード(+)
⾜の⻑い側
カソード(ー)
⾜の短い側
LEDをプログラミングしてみよう(2)
34
電池
など
LED
抵抗
⽐較
電池
など
⾖電球
LEDを点灯させるには、抵抗が必要です
(電流を流し過ぎないため)
LEDの接続の際には向きに注意します
アノード
(+)側
カソード
(ー)側
⾖電球を点灯させる回路はどうだった?
+極
ー極
+極
ー極
LEDを光らせるための回路
⾖電球を点灯
させる際、
向きもなく
抵抗も不要
でした
LEDをプログラミングしてみよう(3)
35
ラズベリーパイ
の出⼒
LED
抵抗
GND(=0V)
「ラズベリーパイの出⼒」とは次の
⼆状態のどちらかをとることができます
HIGH / LOW
H / L
1 / 0
3.3V / 0V
すなわち
ラズベリー・パイがHIGH(3.3V)を出⼒
→LED点灯
ラズベリー・パイがLOW(0V)を出⼒
→LED消灯
これを以下の様に呼ぶこともあります
これを
ラズベリー・パイで
こう実現
3V
0V
LEDをプログラミングしてみよう(4)
36
ブレッドボード
⽳にLEDや抵抗などの電⼦パーツや
ジャンパワイヤ(後述)をさして
回路を作成します
ブレッドボードの内部配線
灰⾊の部分が内部で電気的に
つながっていることを覚えましょう
回路を作るために必要なもの
LEDをプログラミングしてみよう(5)
37
ジャンパワイヤ:2タイプあります
ラズベリー・パイや
ブレッドボードにさして
回路の配線とします
回路を作るために必要なもの(続き)
ピンピン
ピン
ソケット
LEDをプログラミングしてみよう(6)
38
ラズベリー・パイの40本のピン
をGPIO(ジーピーアイオー)
といいます
この資料で⽤いるピンを
ピンク⾊で塗りました
LEDをプログラミングしてみよう(7)
39
以上の予備知識で作るべき回路
GPIO 17
LED
抵抗330Ω
GND(=0V)
同じ
カソード(ー)
⾜の短い側
アノード(+)
⾜の⻑い側
LEDには
向きがある
(抵抗には
向きがない)
LEDをプログラミングしてみよう(8)
40
回路を組むときの注意 ピン・ソケットタイプの
ジャンパワイヤを使います
こちらを先に差そう
こちらを後に差します
理由:⾦属製のピンが露出している時間が
短いほうがショートのトラブルが
起きにくいからです
LEDをプログラミングしてみよう(9)
41
ここでようやくスクラッチの登場
「制御」セクションの「〜を送る」ブロックで
「新規/編集」をクリックし、メッセージの名前に
キーボードで「gpio17high」などと書きます。
そして、左のようなブロックをあらかじめ
⽤意しておくと後が楽です
gpio17high/gpio17low
はLEDは点灯・消灯に
gpio27high/gpio27low
gpio22high/gpio22low
はモーターの制御に
⽤います
LEDをプログラミングしてみよう(10)
42
GPIOを⽤いるための準備
「編集」→「GPIOサーバーを開始」を
選択してください
これは、スクラッチを起動した後
⼀回だけの実⾏でよいです
GPIOの動作確認 をクリック:LEDが点灯
をクリック:LEDが消灯
LED、モーターを使う前に
この⼿続きが必要になります
LEDをプログラミングしてみよう(11)
43
LEDをチカチカ点滅させよう(Lチカ)
このプログラムでLEDが0.5秒ごとに点滅し続けます
0.5秒待つ
LED消灯
0.5秒待つ
LED点灯
プログラムを作る上での注意
と はコピー(複製)して使おう
「0.5秒待つ」は「1秒待つ」ブロックをキーボードで書き換えて⽤います
これです
LEDをプログラミングしてみよう(12)
44
応⽤:ゲームオーバー時にLEDを点滅させよう
マウスポインタに猫が触れると
ゲームオーバーになるゲーム
はこうでした
ここを追加
します
ゲームオーバー時に
LEDを3回点滅する
プログラム
ゲームオーバー時に処理を追加
距離センサーをプログラミング(1)
45
ここが距離センサー。
⼿などをかざすと、そこまでの
距離に応じた値が得られます
距離センサーとは
距離センサ―を⽤いるには、ラズベリー・パイとPICマイコンを
下記のページに従って準備する必要があります。
http://neuralassembly.blogspot.jp/2016/06/raspberry-piscratch.html
距離センサーをプログラミング(2)
46
距離センサーを⽤いるための回路
横⼀列をそれぞれ3.3V(+)、
GND(0V)(-)としています
図とケーブルの⾊を合わせると、
回路を作るときに間違えにくいでしょう
距離
センサー
このICには
センサーを
読むための
プログラムが
書き込まれて
います
距離センサーをプログラミング(3)
47
まず距離センサーの動作を確認してみよう
「調べる」セクションの「〜センサーの値」を
マウスで右クリックし、
「ScratchBoard監視板を表⽰」を選択
「切」の上でマウスの右ボタンをクリック
「A」の部分の
数字が
センサーの
読みです
距離センサーをプログラミング(4)
48
距離センサーの性質を知ろう
距離
距離
センサーの
読み
25
65
5cm 20cm
およそ25〜65程度が
距離に関係する値として
利⽤できます
距離センサーをプログラミング(5)
49
距離センサーを⽤いてこんなゲームを作ってみよう
ルール:距離センサーの値に応じて猫が左右に動く
(遠ければ右、近ければ左、など)
猫が左右の端にぶつかるとゲームオーバー
プレイヤーは猫が端にぶつからないように、
センサーと⼿のひらの距離を調節し続ける
端につくとゲームオーバー
距離センサーをプログラミング(6)
50
作るべきプログラムはこうです
ちょっと複雑に⾒えるので次のページで解説します
距離センサーをプログラミング(7)
51
マウスを追いかけるプログラムとの違い
ゲーム開始時の猫を
画⾯中⼼、右向きにセット
ゲームオーバー条件を変えています
マウスを追いかけるプログラム
猫の向きを変える部分を
センサーの値に応じて変えるよう
変更しています(次ページでさらに解説)
距離センサーをプログラミング(8)
52
猫の向きを変える左の部分は
次のような意味です
25<センサーの値<45なら
猫を右向き(90度)に
45<センサーの値<65なら
猫を左向き(ー90度)に
プログラミングでは、「25<センサーの値<45」という不等式を
『「25<センサーの値」かつ「センサーの値<45」』と書きます
(ちょっと⾯倒ですが、⽂法上そうなっていることが多いです)
猫の向きを変える部分の意味
距離センサーをプログラミング(9)
53
猫の向きを変えるブロックの作り⽅
下の4種のブロックを⽤います
ブロックの「複製」を
うまく使おう!
数字はキーボードで⼊⼒できます
「抵抗Aセンサーの値」で
距離センサーの値が
とれます
距離センサーをプログラミング(10)
54
完成したらクリックして実⾏してみよう!
この部分の数字を⼤きくすると難易度が上がります
モーターをプログラミング(1)
55
モーターひとつを載せたキャタピラ式模型
スクラッチからモーターを動かして、キャタピラ式模型を操作します
モーターをプログラミング(2)
56
新たに⽤いるモータードライバー
モーターをラズベリー・パイから制御する場合、
通常「モータードライバ」と呼ばれるICを⽤います
電池
ボックス
モーター
GPIO27
GPIO22
モーターを動かす電流は
電池ボックスから流します
ラズベリー・パイはモーターに対する
スイッチとして機能します
モータードライバ
TA7291P
GPIO27とGPIO22の出⼒の組み合わせでモーターの動きが決まります
GPIO27 HIGH
GPIO22 LOW
モーター正転
GPIO27 LOW
GPIO22 HIGH
モーター反転
モーターをプログラミング(3)
57
新たに⽤いる電池ボックス
表 裏
乾電池2本分
=1.5V×2=3V
配線⾚:+側
配線⿊:-側
ここにスイッチ
通常オフに
使うときのみオンに
モーターをプログラミング(4)
58
モーターを⽤いるための回路
電池
ボックス
模型の
モーター
新たに追加するのは
この部分
電池ボックスの
スイッチは、
全て完成してから
ONにしましょう
モーターをプログラミング(5)
59
モーターの動作を確認
「制御」セクションの「〜を送る」ブロックを⽤いて
下記のようなブロックをあらかじめ⽤意しておきます
モーターが回転します(模型前進)
モーターが逆⽅向に回転します(模型後退)
モーターが⽌まります(模型静⽌)
モーターをプログラミング(6)
60
距離センサを⽤いるゲームでキャタピラ式模型も動かそう
モーターをプログラミング(7)
61
距離センサを⽤いるゲームにモーターの動きを追加
モーター回転
モーター逆転
モーター静⽌
ブロックを複製して
距離センサのゲームに
3つ挿⼊するだけです
猫と⼀緒に
キャタピラ式模型が
動きます
⾳を取り扱ってみよう(1)
62
スピーカーを取り付けると⾳を鳴らすことができます
「⾳」セクションに⾳を鳴らす命令があります
例えば…
その名の通り、「ニャー」という
猫の鳴き声が聞こえます
ドラムの⾳です。
「48」の部分のクリックで
⾳⾊を選択できます
「60」の部分のクリックで
⾳の⾼さ(ドレミファ…)
が選択できます
⾳を取り扱ってみよう(補⾜)
63
⾳が出ない場合は?
ターミナルLXTerminalを起動し、
下記のコマンドを⼀回実⾏します
amixer cset numid=3 0
ただし、末尾の数字は環境により下記に変更してください
0:⾃動認識、1:ラズベリー・パイのイヤフォンジャック
2:HDMI接続のディスプレイから出⼒
⾳を取り扱ってみよう(2)
64
⾳を使ってこんな課題を考えてみよう
距離
センサとの距離で、⾳の⾼さ(ドレミファ…)が変わる楽器⾵のプログラム
センサの値
65 60 55 50 45 40 35 30 25
ドレミファソラシド
⾳を取り扱ってみよう(3)
65
使うのはこんなブロック
これらはこのように組み合わせるのでした
ここにはキーボードで数字を書きます
ラズベリー・パイの電源を切ろう
66
「メニュー(Menu)」→
「Shutdown」を選択します
「Shutdown」
ボタンを
押します
最後に電源ケーブルを抜きます
緑⾊のLEDが点灯しっぱなしに
なったら電源ケーブルを抜いてOKです
お疲れ様でした

ラズベリー・パイでプログラミングと電子工作を体験してみよう