ScratchとRaspberry Piの遊び方

Tomoki Imai

2014/09/11

この文書について

目的

この文書は、Raspberry Piおよびプログラミング言語ScratchまたはPythonを用いて子供たちに情報教育を行う際のイントロダクションとして作成されました。
ただし、筆者は情報を専門とする学生であり、基本的に教育に関しては素人であることを念頭に置いてください。

また、その性質上よく書き変わるものであり、筆者の主義,主張が色濃く表れる文書であります。
よって、この文書を鵜呑みにするのではなく、読者が自分の主義,主張を持つことを推奨します。

書いた人について

今井 朝貴(いまい ともき)です。東京でプログラミング言語を研究する大学生です。
何かあれば までご連絡ください。

参考文献

この文書は以下の文書を参考にして書かれています。

この文書、および筆者の思想について

今後の情報教育は、筆者は従来のPCを使った教育とは本質的に違う目的を持つと考えています。

従来、少なくとも筆者が受けた教育はMicrosoft Officeを使って何かを作るなどといったものでした。
これは、"便利な道具"としてのコンピュータの一面です。
大人の事情を純粋な子供に教えたくはありません。
もっと自由な発想でコンピュータを使ってほしいと願っています。

筆者は以下の事柄をこの文書を使った教育を通して子供達に会得してほしいと思っています。

逆に、目的としていないことは以下の通りです。

この文書中では、Raspberry Pi/Scratch/Pythonを"なぜ"使うのか、を強調します。
それらもやはり、ある種のツールであり、使い方を教えるだけであればそれは従来の教育と変わりません。
重要なのは、Raspberry Pi/Scratch/Pythonの使い方ではなく、その先にある思想だと考えています。

また、重要なこととして、プログラミング、ハードウェア遊びは楽しいことです。積み木遊びや、ゲームが楽しいのと同じように。
その、"楽しさ"を教えるというのもまた目標の一つです。
大人が一から教えるのではなく、子供の主体性に任せるの"が"良いと思いますし、子供同士が教えあう形が一種の理想だと思います。
大人は子供に遊具の遊び方を一から十まで教えたりしませんよね。そういうことです。コンピュータは、子供にとって、遊具なのです。(筆者にとっても)

もう一つ重要なことですが、プログラミングには向き不向きがありますし個人が作りたいものは、みなちがいます。
ゲームを作りたい子もいれば、音楽が好きな子もいるでしょう。
がっちりしたカリキュラムを組んで何かを作るというよりも、好きなものを作れるほうが筆者はたのしいと考えています。

子供と同じ目線で、一緒に楽しみましょう。

Raspberry Piについて

ここのセクションにはほとんど「Raspberry Piをなぜ子どもたちに与えるのか」と同じことが書いてあります。

教育向の比較的安価なコンピュータです。本質的には通常のPCと同等の能力を持っています。
普段Windows/Macで行っている作業は全てできると考えてください。
当然インターネットにも接続できますし、良くないサイトへもアクセス可能です。(Linuxを使用しているという性質からウイルスに対しては強いですが、フィッシングについては無力です。)
「自由には責任が伴う」というフレーズがあります。
Raspberry Piを使用するということは、自由を手にすることであると考えます。
通常のPCと違うところを列挙します。

安価なため、筆者は子供一人に対し、一つずつ子供の所有物とする(=購入させる)ことを推奨します。
従来のように、USBメモリ等で個人のデータを管理していたのとは対照的です。
USBメモリのように学校に置いておくのではなく、個人の所有物として、筆箱等と同じ扱いとします。
そうすることで、愛着も湧きますし、家でも学校とまったく同じ環境で遊ぶことができます。
本当の意味で、Personalなコンピュータです。その上で自分の作ったプログラムが動く、それがとてもたのしいのです。

後に述べますが、HDMI接続のできるTV/モニタがある家庭では追加投資は少なく済みます。
リビングのTVでのみやるという約束にすれば、親と一緒に、プログラミングを楽しむこともできると思います。
これには、自由を一部制限するという意味もあります。親の監視下に置くということですから。

iPadを使うという選択肢

2014/09/12現在,ScratchJrやPyonkeeが出てきたことでRaspberry PiではなくiPadを使用するという選択肢もあります.
この文書はこれらが出る前に初版を書いたので,Raspberry Piを使用しています.

iPadを使う利点としては
- キーボード/マウスを使用する必要がない

ことが挙げられます.
逆に欠点としては

ことがあります.
例えば小学生未満ならばiPad,小学生高学年からはRaspberry Piを使う,という選択肢も十分にありえると考えます.

バージョンについて

Raspberry Piには二つのバージョンが存在します。Model AとModel Bのふたつです。
Raspberry Piには三つのバージョンが存在します.Model A,ModelB,ModelB+です.
二つの主な違いを列挙します。

このドキュメントでは、Model Bを使うこととします。ただし,新しく買う場合にはB+を買ってください.同じ値段で上位互換です.
理由はこの二つのモデルの価格差は$10(=1000円程度)であり、他のメリットがそれに対して大きいと判断したからです。
特に、普通にPersonal Computerとして使う上では、USBポートの数,イーサネットは必須だと考えます。
なぜなら,キーボード、マウスを繋げるだけですでにポートを二つつかうことになります。
また、既に現代社会にはインターネットの存在はなくてはならないものであり、その付き合い方を教えるのもまた、情報教育に必須なものと考えるからです。
また、後述するScratchを使う際には、画像をインターネットからダウンロードして使うということも視野にいれています。
絵を書きたくない子もいますから。(昔の筆者がそうであったように)

Wikipedia: Raspberry Pi

ネットワーク

Raspberry Piは、後述しますが、MacでもWindowsでも"ありません"。
よって、今まで使用していたWindows環境の設定が使えなくなり、ネットワークに接続できなくなることが考えられます。

そこで、その問題に対してどう付き合っていくのかについて考えます。
このセクションは、学校、塾、固有の問題であり、ここで述べることは基本的には筆者がどうすると良いと"思う"かです。
このセクションに必ずしも従う必要はありません。くりかえしですが、筆者は教育の専門家ではありませんから。

ここで、インターネット、と言うときには言わゆるインターネット、外部のサーバにアクセスできるネットワークを指します。
ネットワークは必ずしもインターネットに接続するというわけではありません。
例えば、Raspberry Piだけでネットワークを構築して、個々のRaspberry Piは通信可能ではあるが、インターネットに接続していないということもありえます。

そもそもインターネットを使うべきなのか

子供にインターネットを使わせるべきなのかどうかは、議論されるべき問題だと考えています。
筆者の考えとしては、フルのアクセスを許容すべき、です。
遅かれ早かれ、フルのアクセスをする時がくるからです。

ただし、いくつかの約束事をするべきです。例えば。

だとか、色々考えられます。
ただし、どうするのが最適解なのか、筆者にはわかりません。これは個々の判断に任せます。
"自由には責任を伴う"ということを子供達にも教えるべきだと考えます。

インターネットが使えなくなると、何が困るか

ここでは、仮にインターネットがなかったとしたらどうなるのか、について記述します。

ことがあります.

Scratchについて

Scratchはプログラムをつくるための、もしくはプログラムを実行するプログラムです。
このようなプログラムを一般にプログラミング言語,それを取りまくプログラム群をプログラミング環境と呼んでいます。
Scratchは以下のように作者らによって紹介されています。
(JOHN MALONEY, MITCHEL RESNICK, NATALIE RUSK,BRIAN SILVERMAN, and EVELYN EASTMOND,The Scratch Programming Language and Environment,2010から引用)

Scratch is a visual programming environment that allows users (primarily ages 8 to 16)
to learn computer programming while working on personally meaningful projects
such as animated stories and games.

Scratchは子供向けにプログラミング学習のためにデザインされたプログラミング言語(環境)です。
大きな特徴として従来のプログラミング言語は文字ベースでしたが、Scratchはブロックを組み合わせてプログラムを表しています。
また、動きや音をすぐに扱えるように工夫されたプログラミング言語であり、例えばゲームを作るのに適しています。
「プログラミングをする」ということをかたくるしく考えないでください。これはパズルであったり、ゲームだと思ってしまって構いません。

Scratchには大きくわけて二つのバージョンがあり、1.4系列と、2.0系列があります。
2.0のほうが一応新しいバージョンですが、Raspberry Piでは1.4系列を使用することになります。
これは2.0系列がAdobe Flashで作成されており(=Raspberry PiではFlashが動作しません)、ローカルへのアクセスが制限されている(=モーターを操作したりはできない)ことが理由です。

他の教育向け言語

ここで、Scratch以外の教育向け言語を紹介し、その比較を行います。

この文書ではScratchを採用することにしていますが、筆者はScratchが最適解であるとは思っていません。
これからより良い言語が生まれることを願っています。また、そのような言語を筆者も作りたいと思っています。

ただし、色々な条件下において、現実的な回答としてのScratchをここでは使っています。

Viscuit

教育向け言語として、筆者が有望視している一つがViscuitです。
Viscuit
Viscuit ビスケット〜コンピュータを粘土のように〜とはより

ビスケットは絵でプログラムを作り、実行すると絵が動きます。難しいことを覚えなくても、プログラムの楽しさを知ることができるのです。ビスケットを使うと、アニメーション、ゲーム、動く絵本などを簡単に作ることができます。
「めがね」がプログラム (車が前に進む、という意味)の基本となり、「変化」の仕方をコンピュータに教えます。ビスケットは基本的にこのめがねで全ての動きをつくります。
一見単純そうなうごきしかできないように感じますが、実はいろいろな動きをつくる事が可能で、無限の可能性を秘めているツールのです。

ビスケットとは より

Viscuitは非常にシンプルなルール(めがね)を扱う使うプログラミング言語です。
Scratchは、いわば命令型のプログラミング言語をブロックという形にしたものであり、根幹は従来のプログラミング言語とそれほど変わらないものです。
Viscuitは、従来のプログラミング言語とはだいぶ違うプログラミング言語になっています。

筆者が教育において、一番大事だと思うものは、その思想です。Viscuitの思想を見てみます。

ビスケットが伝えたいメッセージは、プログラミング入門ではありません。プログラミング入門のツールだと、現在主流のプログラミング言語に近いことを簡単にできるようにする方法がとられるでしょう。これがScratchやプログラミンといったブロック型のビジュアルプログラミング言語です。

ビスケットは、コンピュータってこういうものなんだよ、というのを直感的に知ってもらうために作りました。

ビスケットとは より

筆者はこの考え方を素晴しいものだと思っています。
プログラミングを皆ができるということがこの文書の目的ではないという観点からも、Viscuitは良い解に見えます。
また、キーボードを必要としないのも良いと思います。これにより、文字が読めなくても、キーボードがつかえなくても遊ぶことができます。
Scratchでは、文法は抽象化されているものの、パラメータ等をキーボードから入力しなくてはなりません。
また、x軸,y軸という概念は、小学校入学以前の幼児には難しすぎます。

しかしながら、採用しなかったのは以下の理由からです。

どれも本質的な問題とは言えないと思いますが、ハードウェアとソフトウェアの関係を教える、ということをしたいと思ったときに、Viscuitが使えないということです。

また、Viscuitの作者である原田 康徳さんは以下の文書を書いています。
教育の現場でScratchを採用する上で、読んでおくべきだと筆者は考えています。

Pyonkee

PyonkeeはiPadで動くScratchです.
Pyonkee
2014/08/26にリリースされたのでこれを書いている時点ではかなり新しい環境です.

ScratchJr

ScratchJrは主に5~7歳を対象にした"Scratchのようなもの"のようです.
ScratchJr

これもiPadで動くアプリですが,PyonkeeはオリジナルのScratchそのままなのに対し,ScratchJrは基本的に別物です.
個人的にはブロックが文字ではなく記号なのが好感触です.
使ってみて比べてください.

Raspberry Piのセットアップ

用意するもの

最後のHDMIのモニタは、最近のものであればTVが使用可能です。地上デジタルに対応しているような新しいものであれば対応しているかと思います。
知ってなっとく接続規格 > HDMI
その場合にはHDMIケーブルが必要ですが、DVDプレイヤー等を使用している場合には、すでにあるかもしれません。

上記に加え、ネットワークハブが必要になるかもしれません。
教室のように、多くのRaspberryPiが相互接続する場合には必須だと思われます。

個人的には以下のものを使用しています。比較的安価で品質が高いと思うものです。

また、Raspberry Piの設置場所ですが、金属"以外"の上に置いてください。
金属の上に置くとショートする可能性があります。

その他用意すると嬉しそうなもの

Scratchは録音およびカメラが扱えますが、通常、Raspberry Pi Type BにはUSBの口が二つしかないので、USBハブが必要かもしれません。
Raspberry PiではUSB周りの電流が足らないことがあるので、ACアダプタの付いているUSBハブをお勧めします。

OSのインストール

このプロセスは多少難しく、またいわゆる"母艦"が必要なため、ここは教育者がやるべきかもしれません。

以下ではWindows7を使用した場合についてを説明していきます。Vista,8,Macを使用している場合も同じようなプロセスを踏んでインストール可能です。

NOOBSのインストール

このセクションはhttp://www.raspberrypi.org/wp-content/uploads/2012/04/quick-start-guide-v2_1.pdf を日本語にしたものです。
ここではWindowsを前提とした説明をしますが、Macも基本的には同じやりかたが可能です。
NOOBS(New Out Of Box Software)はRaspberry PiにOSをインストールする一番簡単な方法です。
http://downloads.raspberrypi.org/NOOBS_latest からzipファイルをダウンロードしてください。
ブラウザによりますが、下のようになるはずです。好きなところに保存して構いません。
Download
(1.3GB程あるため、結構時間がかかるので次の作業を先にやっておきます。)

SDカードのフォーマット

ダウンロードを待っている間にSDカードのフォーマットを行います。
以下のリンクからSDカードフォーマッタをダウンロードします。
https://www.sdcard.org/downloads/formatter_4/
ちょっと下にいった、Download SD Formatter for Windowsをクリックします。
(Macの場合は、右です。)
Download
ダウンロードがおわったら、大体以下のように表示されますので、普通はデフォルトで「次へ」を選択していけば大丈夫です。
Install1
Install2
Install3
Install4

起動はスタートメニューから行ってください。
Start

起動直後は以下のような画面になります。
Start1
ここで、Driveが正しいことを確認してください。
さらに、オプションから、論理サイズ調整ONにします。
Macの場合には、"Overwrite Format"をオンにしてください。
Option

フォーマットボタンを押してフォーマットしてください。
クイックフォーマットに関して警告が出るかもしれませんが、恐らく問題ありません。
Format Complete

これでフォーマット完了です。

Noobsのインストール

Noobsのダウンロードがおわったら、右クリックして全て展開を選択します。適当なところに一度展開してください。
Dカードに直接コピーしても良いですが、時間がだいぶかかります。
Extract

展開したファイルを全てSDカードにコピーします。
Copy

以上でWindowsを使用した作業は終了です。
以降はRaspberry Piを使用した作業になります。

Raspbianのセットアップ

Raspbianについては次に説明することにして、インストールを済ませてしまいます。
Raspberry PiにHDMI端子を接続して、SDカードを挿し、電源を接続してください。
最初のインストールでは以下のような画面になるはずです。
noobs select

OSの再インストールをしたいときには、電源を接続して、"hold shift"という表示が出てからshiftを押しっぱなしにすることで同じ画面に移行できます。

Raspbianのチェックボックスを付けて、下のメニューで「日本語」と「jp」を選択して、左上のインストールを押します。
するとインストールがはじまります。これにはしばらくかかります。
noobs_process

デフォルトのユーザ名はpi,パスワードはraspberryです。
OKを押すと再起動がはじまります。
noobs_end

設定画面になります。
menu
この画面では、矢印キーでメニューを選択し、エンターで選択、ESCで戻るです。

このとき、日本語設定にしていると、下が文字化けすることがありますが、左が「はい」で右が「いいえ」です。
終了するにはTABキーを押して"Select" "Finish"に移動して、Finishを選択します。

ここで、Enable Boot to Desktop/Scratchを選択します。
この設定で、Desktopを選択します。この設定をすると、電源を入れたときに自動的にデスクトップ画面になります。
(初期ではCUI(Character User Interface),黒い画面になるはずです。)
select_desktop

Finishを選択すると、さらに再起動が始まり下図のようになるはずです。設定は以上です。
desktop

もし、この設定をやりなおす場合には、後述するraspi-configを使用してください。

Raspbian(らずびあん)について

上記の項では、OSのインストールについて説明しました。ここではインストールしたOSについての基礎を説明します。

Operating System

そもそもOSとは、Operating Systemの略で、日本語だと基礎ソフトと呼ぶこともありますが、ここではOSで統一します。
OSはインストール中にも少し説明がでていましたが、Raspberry Piを使えるようにする基本的なソフトウェアの集合を示しています。
普通、ソフトウェアはOSの上の階層で走ることになっています。
他のOSには、Windows7やMac OS等があります。

Raspbianは、WindowsやMac OSとは違い、Linuxです。
Linuxは、厳密にはカーネル(OSの心臓部)のみを指す単語で、それ自体はOSとは普通言いません。
カーネルと、その周りのツールを合わせてOSと言うことが多いです。

WindowsやMac,Linuxどちらが良いということはないですが、大きな違いとして無償で使用可能な、オープンソースなOSであることがあります。
RaspbianはDebianというLinuxディストリビューション(Linuxは、普通他のツールと一緒に配布されていて、それをディストリビューションと呼びます)をベースにしています。
オープンソースとは、プログラムのソースコード、設計書が公開されているということです。
また、Raspbianには教育向のソフトウェアが複数提供されています。(ex.Scratch,Mathematica,Minecraft Pi等)
Raspberry Pi FoundationとしてはRaspbianをお勧めとしているので、今回はRaspbianを使用します。

ユーザー

Linuxは、MacやWindowsと同様に複数のユーザーが使用できるようになっています。
ここでは特に設定しなかったため、ユーザー名はpi,パスワードはraspberryとなっています。
子供達にユーザ名等を設定させるかは微妙なところだと思います。パスワードがわからなくなったりすることがあるからです。
とはいえ、自分の物と強く意識できるようにユーザ名を設定しても良いとは思います。

このイントロダクションではデフォルトのユーザー名、パスワードを使用することとします。
2014/09/11現在,Raspberry Piのデフォルトユーザ,パスワードに対する攻撃が発生しているようです.
よってユーザ名,もしくはパスワードを変えるべきです.

ルート(root)権限

いわゆる管理者権限と呼ばれるものです。Super Userとも呼びます。Raspbianでは、デフォルトユーザpiは管理者の一人となっています。
管理者だからといって、危険だということはあまりないと考えます。(もちろん、システムファイルの削除とかをやらない限りは)
ソフトウェアのインストールも、Windowsと違い、後述するレポジトリという場所からインストールする場合には安全です。
ここを制限するべきかですが、しないべきだと考えています。普通、学校のPCというものはソフトウェアのインストールは禁止となっています。
ですが、Raspberry Piが個々の所有物である以上、個々がその管理者であるべきであると思います。
必要であれば、ペイントソフトのインストールの仕方等を教えても良いでしょう。

ターミナル

Linuxでは必要に応じて、ターミナルと呼ばれる文字ベースのソフトウェアを使用することになります。
Windowsでは、コマンドプロンプトというソフトウェアが入っていますが、これを使ったことがある人は少数派だと思います。
ターミナルの使い方を教えるかどうかは任意ですが、高学年には教えても良いと思います。
Raspberry Piが裸のコンピュータならば、ターミナルはそのコンピュータに自由にアクセスするためには必須となると言っても良いです。
特に、上で述べたルート権限を使用する場合には、ターミナルを使うことがほとんどです。
Raspbianでは、デスクトップ上、もしくは左下のメニューのアクセサリからLXTerminalを起動して使用することができます。

ソフトウェアのインストール

ここは、低学年の子供には少し難しいと考えています。が、いつかは必要になると思います。
また、このセクションを試すにはインターネットへのアクセスが必須です。

ソフトウェアのインストールについてです。ソフトウェアのインストールはWindowsと違い、公式サイトに存在しているレポジトリという場所からダウンロードすることになっています。
レポジトリというのは、OS専用に作られたソフトウェアを集めている場所です。普通、aptコマンドというコマンドでアクセスします。
Synatpicという簡単に使えるGUIもありますが、ここではコマンドを使用します。Synapticを使用する場合でも、コマンドを一度は使わなければなりません。(Synapticをインストールするため)

LXTerminalを起動して、以下のコマンドを打ってください。(以下では、コマンドを表すときには最初に$マークをつけます。)

$ sudo apt-get update

apt-get update
これは、レポジトリの情報を更新するコマンドです。最初のsudoは、このコマンドはroot権限で実行するという意味です。
次に、ここではペイントソフトであるtuxpaintをインストールしてみることにします。

$ sudo apt-get install tuxpaint

apt-get install
続行しますか?と聞かれるので、yキーを押し、エンターを押します。
apt-get yes-or-no

すると、レポジトリからソフトウェアのダウンロード、インストールまで自動的に行われるので、しばらく待ちます。

終わると、tuxpaintが左下のメニューの教育、教養から起動できるようになります。
右クリックからデスクトップに追加すると、Scratchと同じようにデスクトップからアクセスできるようになります。
add-to-desktop

また、たまにはシステム全体のアップデートもしましょう。以下のコマンドで全てのアップデートをします。

$ sudo apt-get upgrade

システムに大きな変更をともなうアップデートは以下のコマンドです.

$ sudo apt-get dist-upgrade

たまには行うと良いです.

raspi-config

Raspberry Pi特有の設定をやりなおすときには、LXTerminalをクリックして、

$ sudo raspi-config

と書いてエンターを押すと、ターミナル上で設定が起動します。

GPIO

GPIOは簡単にフィジカルコンピューティング(物理的に何かをプログラムで動かすこと)ができますが、電子部品の取扱には十分注意してください。
尖った部品が多いため、口にいれると非常に危険です。
小学生くらいなら大丈夫かもしれませんが、小さい子供のいる家庭に持ち帰る等の場合には、手が届かないようにする注意が必要です。

また、あやまってショートさせたりした場合には、電子部品が壊れるということも考えられます。
かならず、特に低学年の場合には大人が見守れる範囲で行うことを推奨します。
焦げ臭いなと感じたり、バチっという音がしたら、Raspberry Piへの電源を抜いてください。

以下の記事によると、小学生でも十分に電子部品の取扱いはできると考えられます。
悪の電子工作を子供に教える。

それに、コンピュータの中だけではおもしろくないですから。
コンピュータで物を動かすというのは、現代では当たり前であり、その基礎を教えるのも情報教育の一つとして必要だと考えます。

コマンドラインからGPIOを制御する方法については以下を参照してください.
Raspberry PiのGPIO制御方法を確認する(GPIO制御編その1)

MZTX-PI-EXTの繋ぎ方

MZTX-PI-EXTはRaspberry Pi向の小さい液晶です.
くっつけた状態で持ちあげるときには,Raspberry Pi側を持って,負担をかけないように注意してください.

用意するもの

同種のデバイスは色々種類があるようですが,今回は以下のものを使用します.

ソフトウェア

320x240で表示する

まず,通常通りHDMIで画面を繋いでターミナルを立ち上げるか,sshでRaspberry Piにログインしてください.

次に以下のコマンドを入力してください.

$ cd ~
$ wget https://s3.amazonaws.com/tontec/24usingmanual.zip
$ unzip 24usingmanual.zip
$ cd mztx-ext-2.4/src
$ make

以上で,~/mztx-ext-2.4/src直下にmztx06aという実行ファイルが生成されます.
さらに,以下の作業で画面の解像度を固定します.

$ sudo nano /boot/config.txt
#framebuffer_width=1280
#framebuffer_height=720

と書かれたところがあるはずです.これを

framebuffer_width=320
framebuffer_height=240

に変更します.これによって画面の解像度を固定します.
この設定はHDMIのときにも維持されます.戻したいときには,この二つの行をコメントアウト(最初に#をつける)してください.

再起動してから,以下のコマンドを実行します.

$ sudo ~/mztx-ext-2.4/src/mztx06a

MZTX-PI-EXTに画面が表示されれば成功です.

自動で起動するようにする

$ sudo nano /etc/rc.local

以下のように書かれた行があるはずです.

exit 0

この行の上に

sudo /home/pi/mztx-ext-2.4/src/mztx06a

を書きます.これ以降,起動の最後にmztx06aが実行されるようになります.
(もし,ユーザ名がpiでない場合はそのように変更してください.)

640x480で表示する

ここまでの手順では320x240の解像度で表示する方法を示しました.
MZTX-PI-EXTには,640x480を擬似的に表示する方法が用意されています.
ただし,あくまで擬似的なものであるため,文字が潰れて読めなくなる可能性が高いです.
Scratchをまともに使うためにはこちらのモードにする必要があります.

まず,mztx06aのソースコードを修正します.

$ nano ~/mztx-ext-2.4/src/mztx06a.c
    loadFrameBuffer_diff_320();

という行が最後のほう(2014/09/12現在,1308行目)にあるはずです.
これを消して

    loadFrameBuffer_diff();

に変更してください.さらに,mztx06aを生成しなおします.

$ cd ~/mztx-ext-2.4/src/
$ make

さらに,/boot/config.txtを修正します.

framebuffer_width=320
framebuffer_height=240

framebuffer_width=640
framebuffer_height=480

とします.再起動後は,MZTX-PI-EXTが640x480の振舞をします.

Scratch

すでにデスクトップ上にショートカットがあります。以下の書籍をお勧めします。

小学生からはじめるわくわくプログラミング

GPIO連携

ex
接続例です。ショートしないようにRaspberry Piの下に電気を通さない,かつ静電気の起きない物を引いておくと安全です。

用意するもの

筆者のオススメは以下です。

以上です。大体2500円程度で揃えられるかと思われます。
ここで紹介したものは、Raspberry Piではじめるどきどきプログラミングで紹介されているものよりもだいぶ安いです。
特に、ジャンパワイヤは1/9程度です。もし、秋葉原が近いのであれば、足を運んでみると良いと思います。
ブレッドボードも、電源,GNDラインが付いているもののほうが使いやすいです。
紹介したテスタは導通チェックがとても便利で、1000円程度なのでおすすめです。

Raspbrry Piの準備

ここでは、Raspberry Piではじめるどきどきプログラミングと同様にScratch GPIOを使ってGPIOを使用する方法を示します。
ScratchGPIO – Installingを使用しますが、注意があります。

2014/03/11現在では、Version5が最新版なのですが、Version4と大きな違いがあります。
(入力ピンのpull up/downが反対になっている。version5では入力ピンとGNDを接続する。)
ここでは、Raspberry Piではじめるどきどきプログラミングに従ってVersion4を採用することにします。
ここではRaspberry Piではじめるどきどきプログラミングと違いVersion5を採用することにします.

$ sudo wget http://goo.gl/Pthh62 -O isgh5.sh
$ sudo bash isgh5.sh

デスクトップにScratch GPIOとScratch GPIO Plusができていると思います。
Plusは拡張ボード用なので、普通にLEDを光らせるくらいであればScratch GPIOを使います。

入出力

ここからは実際にGPIOを使って入出力を試します。
実際に繋ぐ前に、必ずもう一度確認してください。
LEDは高いものではないですし、焼いてしまっても大丈夫です。(むしろ、一度くらいは良い経験だと考えます)
しかし、Raspberry Piは焼いてしまうとショックなので気をつけてください。(データはSDカードに入っているのでおそらく大丈夫です)
Scratch GPIOを起動してください。起動時に、「遠隔センサと接続しました」と出たならば、GPIOとの接続が確立しています。
Pinの番号は以下を参照してください。
http://elinux.org/RPi_Low-level_peripherals

http://elinux.org/images/2/2a/GPIOs.png
http://elinux.org/images/2/2a/GPIOs.png

出力

LEDを光らせる場合には、あまり電流が必要ないので、今回は外部の電源を使用しません。
ただし、LEDと出力ピン、および入力ピンのみで繋げないでください。
電流が無制限に流れてしまうため(抵抗=0),ショートを起こします。
これだけで壊れてしまうことは考えづらいですが、ここでは100Ωの抵抗を使用することとします。

Raspberry Piの場合,GPIOピンに流れても良い電流は16mA程です.
また,GPIOピンの電圧は3.3Vなので,ここでは1kΩの抵抗を使用します.

3.3V / 1000Ω = 0.0033A = 3.3mA

よって制限を満たします.

TODO:かく

入力

ここでは、ダンボールを使ってスイッチをつくるということをやってみます。
必要なものは以下の通りです。

以上の材料を、大体こんな感じにつけます。
switch-open
この画像では、ジャンブワイヤを一つ皮を剥いてつかっています。
はさみでうまくやればできると思います。
閉めると、二つのアルミ箔がくっつき、電通します。
(もうすこし線の位置を変えるべきでした。左と右に。)
線は裏側にセロテープでつけても良いです。ただし、両面テープは電気を通さないので気をつけてください。
switch-close

スイッチの配線はを参考にしてください.

TODO:かく,抵抗について追記

モータ制御

ここではRaspberry Piを使ってモータを制御する方法について書きます.
使用するものについては

モータの速度を変えられるようにしたい場合,PWM(pulse width modulation)を使う必要があります.
Raspberry Pi Model A/Bには一つしかPWMピンがありません.Model B+には二つのPWMピンがあります.
よってたとえば最後にお話するライントレーサを作る場合にはModel B+を使う必要があります.

なおPWMのピンは

配線

Arduinoの記事ですが,非常に良い記事があります.これに従って接続してください.
Arduino 小型DCモータ/TA7291P
制御用PWMは3.3Vですので,モーター用の電圧は本来3.3V以上ないとダメですが,単三電池二本(1.5V*2)でもうまく行くことを確認しています.

TODO:かく

プログラム

まずはコマンドラインから動かしてみます.

制御用(ここではGPIO 23,24),PWM用のピン(GPIO 18)をexportして

$ sudo echo 18 > /sys/class/gpio/export
$ sudo echo 23 > /sys/class/gpio/export
$ sudo echo 24 > /sys/class/gpio/export

出力用にして

$ sudo echo out > /sys/class/gpio/gpio18/direction
$ sudo echo out > /sys/class/gpio/gpio23/direction
$ sudo echo out > /sys/class/gpio/gpio24/direction

電圧をかける(ここではPWMを使わずに3.3Vかけます)

$ sudo echo 1 > /sys/class/gpio/gpio18/value
$ sudo echo 1 > /sys/class/gpio/gpio23/value
$ sudo echo 0 > /sys/class/gpio/gpio24/value

ここで,23,24にはそれぞれ3.3V,0Vをかけます.
これを反転すると逆向きに
0,0にするとストップ
3.3V,3.3Vにするとブレーキになります.
詳細はデータシートを参照してください.

Scratchで制御する場合には,前述のScratch GPIOを使って以下のように書けます.
モータを制御

プロジェクトファイル

作例

ここではTAMIYAから出ている歩くトリケラトプス工作セットのモータをRaspberry Piから制御できるようにしてみます.

  1. スイッチ以外を取り付けず,それ以外は説明書通りに組み立てる
  2. 最初にモータに接続されているリード線を除去する.(これにはハンダゴテが必要です.)
  3. モータ,および電池ボックスに片側にピンヘッダを付けた長いリード線を取り付ける
  4. 先程のArduinoの作例に従って配線する

ピンヘッダをとりつけるのはブレッドボードに挿しやすくするためです.
Walking Triceratops
Wallking Scrach

コミュニティ

情報教育において、ネットワーク上のコミュニティは扱い方を教えるべきものの一つです。
Scratchの素晴しいところの一つとして、コミュニティがあります。見ていると世界の小学生、中学生が数多くいるようです。

Scratchのメニューに、"Webにアップロード"という項があります。

TODO:かく

その他のソフトウェア達

ここでは、その他の便利な、あるいはおもしろいソフトウェアの紹介をします。

Epiphany(インターネットブラウザ)

従来のMidoriに代わり,デフォルトになるブラウザです.
Raspberry Pi本体に、イーサネットケーブルを差し込むことでインターネットにアクセスすることができます。
特に理由がなければこちらを使うことを推奨します.

sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install epiphany-browser

Midori (インターネットブラウザ)

Windowsでいう、InternetExplorerにあたるものです。
Raspberry Pi本体に、イーサネットケーブルを差し込むことでインターネットにアクセスすることができます。
初期状態では検索エンジンがDuck Duck Goになっていますが、左上の検索エンジンの管理からGoogleに切り替えられます。
Select Engine

また、Adobe Flashはインストールできないので、Flashを要求するアプリケーションは使用できません。

TuxPaint

このソフトウェアもScratchと同様に、子供向けに作成されたペイントソフトで、お勧めです。
このソフトウェアで作った絵をScratchにいれることもできます。
が、背景が白になってしまうので、背景をつくる場合か、もしくはScratchの側で白い部分を消しゴムで消す必要があります。
TuxPaint

TuxPaintの設定

標準の状態では、tuxpaintは画像を隠しディレクトリに保存します。
これを変更するには、設定を変えなければなりません。以下のコマンドを実行してください。
これで~/tuxpaint/savedに保存されるようになります。

$ echo "savedir=~/tuxpaint" >> ~/.tuxpaintrc

本来は、TuxPaintの設定ツールがあるのですが、日本語設定にしていると文字化けしていて使えませんでした。
一応下のコマンドで英語設定にして起動できます。

$ LANG=C tuxpaint-config

LXDE

LXDEはstartxだとか、Boot to Desktopオプションを有効にしていた場合に最初に起動するソフトウェアです。
ウィンドウの管理や、左下のメニューボタンはLXDEによって提供されています。

キーボード設定

なんらかの原因でキーボード設定がUK(イギリス配列)になる場合があります.
ここでは日本語配列,もしくは他の設定にする方法を示します.

$ sudo dpkg-reconfigure keyboard-configuration

1
2
3
4
5

一旦再起動して日本語になっているか確かめてください.

日本語入力

ここではuimとanthyの組み合わせを使うことにします.

$ sudo apt-get install uim uim-anthy

終わったら一度再起動してください.
右下に見慣れないアイコンが出ていることをチェックしてください.
うまくいっていれば,[全角/半角]キーで入力の切り替えができます.
tray

フォントについて

初期状態のフォントは日本語があまり綺麗ではありません.
これは日本語に一部,中国語のフォントが使用されてしまっているからです.

Python

PythonはScratch同様にプログラミング言語の一つです。
Scratchが教育向けのプログラミング言語として、絵を動かしたりするのに特化しているのと対照的に、Pythonは"いわゆるプロ向けのプログラミング言語"です。
Scratchを、はさみに例えるのであれば、Pythonは十徳ナイフであり、大体のことはできます。
ただ、Pythonを教えるとしても、小学生の高学年、もしくは中学生レベルが必要になると思います。
子供を舐めすぎているかもしれませんが、最初はScratchからで良いと考えています。

Scratch同様に、Pythonには2.x系列と、3.x系列がありますが、特に理由がない限り、3.x系列を使用してください。
学習用途にはRaspbian上では、デスクトップに配置されているidle3を使用すると良いと思います。
ここでは、有益な資料へのリンクを示します。

何ができるのか

ここまでセットアップのことについて記述しました。
ここからは実際のところ、何ができるのかについて記述します。

信号機

弟にほとんど作ってもらいました。
Scratch GPIOを使用して、画面上の信号機とLEDが同期します。

しんごうき
Scratchの公式サイトのものはLED機能抜きのものです。
http://www.youtube.com/watch?v=v9IO9MXaruM

さくらさくら

これは、母にScratchを教えてつくってもらったものです。
さくらの部分は筆者がプログラミングしました。
母によると、音楽はすこし難しいようです。幼児や小学生の多くは(筆者もですが)拍の調整や、鍵盤が読めないためです。
Raspberry PiとWindowsで音が違ったり、さくらの量を調整したりしなければなりませんでした。

さくらさくら2

あっちむいてほい(これは自分の作品ではありません)

カメラと録音をつかっているみたいです。

あっち向いてホイ
親子でできるプログラミング!?

これはとても良くできていて、体験記もあわせてお勧めです。

ライントレーサ

ロボットについて少しだけお話します.
世の中には,"ライントレース"というものがあります.
ライントレーサ
http://www.cct.ac.jp/mech/yume2/yume2.htmさんより

これは黒のテープが光を反射しづらいことを利用して,下が黒かどうかをチェックするものです.
もし,小学生でもこれが作れたとしたら下の学年の子と遊べるのではないかと考えています.

TODO:かく

Changelog

2014/09/12

2014/09/10

2014/03/15