Scratchでネコを動かしてみよう

前回、とりあえずのプログラムとして計算ゲームを紹介しましたが、やはりここはキャラクターが動くゲームを作りたいところです。Scratchはむしろそういうゲームを作るのに向いています。

これからスクラッチ最初から用意されているScratchを使って、少しずつゲームを作っていきましょう。

  1. スプライトとは?
    スプライト(sprite)は直訳すれば「妖精」ですが、Scratchの中ではプログラムによって動くキャラクターのことを言います。
    スプライトは同じステージの中に複数配置することができ、それぞれ独立したプログラムに従って動きます。そして、スプライト同士が衝突した場合はどうするか、というようなことをそれぞれのプログラムに書いていくことによって、ゲームができていくわけです。

  2. ネコをカーソルキーで動かす
    では実際にネコを動かしてみましょう。
    「制御」ブロックから「ずっと」を、「動き」ブロックから「10歩動かす」を持ってきて、下のように組んでみましょう。

    f:id:tomaberry:20170213105646p:plain

    これで「10歩動かす」をずっと繰り返すプログラムの出来上がりです。
    では、この組みあがったブロックをクリックしてみましょう。

    f:id:tomaberry:20170213211903p:plain

    ネコが画面の端まで移動して止まります。
    では次に、右のカーソルキーを押している間だけ移動するようにしてみましょう。

    f:id:tomaberry:20170214213023p:plain
    これでOK。
    「もし右向き矢印キーが押されたら10歩動かす(そうでなければなにもしない)」をずっと繰り返すという意味になります。
    でも、これでは右に行くだけで戻れないので、さらに左にも行けるプログラムにしてみましょう。

    f:id:tomaberry:20170214213857p:plain

    戻る場合は「-10歩動かす」になります。

  3. コスチュームを変える
    ネコがカーソルキーで左右に動けるようになりましたが、このままでは戻るときも同じ方を向いたままです。
    今度は戻るときに後ろを向かせるようにしましょう。これはスプライトの「コスチューム」を変えることで実現できます。
    画面上部のコスチュームタブをクリックすると、そのスプライトが持っているコスチュームが表示されます。
    f:id:tomaberry:20170218215955p:plain
    ネコのスプライトでは、2つのコスチュームが最初からあるのがわかりますね。ただ、どちらも右向きなので、ここでは左向きのネコを作りましょう。
    まず、"costume1"を右クリックしてコスチュームを複製します。

    f:id:tomaberry:20170218221620p:plain
    次に、複製したコスチュームを反転させます。
    画面右上の方に反転ボタンがあるので、クリックしましょう。

    f:id:tomaberry:20170218221710p:plain

    これで左向きのコスチュームができました。
    あとはスクリプトタブに戻り、プログラムでコスチュームを変更しましょう。

    f:id:tomaberry:20170218222011p:plain

    これで右に移動するときは右を向き、左に移動するときは左を向くようになりました。
    さらに"costume2"の反転コピー"costume4"を作り、
    "costume1"と"cosutume2"、"costume3"と"costume4"が交互に表示されるようにしてみましょう。(ついでに、旗がクリックされたときにプログラムを起動するようにイベントブロックを頭につけておきます。)

     f:id:tomaberry:20170218224851p:plain

    これでネコが走っているように見え、、、ますよね?
    なんか目玉が上下して落ち着かない感じではありますが、、、


    これで走るネコの完成です。
    次回はジャンプに挑戦です。

コマンドラインからGPIOを操作する

  1. GPIOについて
    Raspberry Piで何かを動かしたり、センサーからデータを取り込んだりする場合、基板上に並んだ40本(旧モデルでは26本)のピンに信号を送ったり、信号を読み取ったりすることでできるようになります。
    つまり現実世界とのインターフェースで、言うところのIoT的なことができるようになります。
    このピンには番号が振られており、Raspberry Piに付属のカードにも記載されております。
    f:id:tomaberry:20170212141136j:plain
    このうち、GPIO xx と記載されているピンが実際にデータの入出力に使用できるピンになります。GPIOというのは"General-Purpose Input/Output"の略で、入力にも出力にも使用することができます。
    なかでも後ろに()がついているピンはさらに特殊用途に使えるものですが、とりあえずは何もついていないピンから使いましょう。
    ちなみに番号は「GPIO xx」のxxにあたるGPIO番号と、基板上の物理的な位置に対応した番号(上の図の緑の部分)の両方で指定することができます。

  2. gpioコマンド
    ではまず、コマンドラインから現在のGPIOの状態を見てみましょう。
    コマンドラインからは、"gpio"コマンドでGPIOを操作することが可能で、
    $ gpio readall
    と入力すると、現在のピンの状態が一覧表示されます。f:id:tomaberry:20170212144148p:plainここで真ん中の"Physical"という部分が物理的な番号で、両端の"BCM"がGPIO番号になります。
    さらに"Mode"の部分に現在のピンのモード(IN/OUT)が、"V"の部分にピンの値(1ならON、0ならOFF)が表示されます。

  3. GPIOからの入力
    個々のGPIOの値(先の"V"の部分)を読み取る場合は以下のようにコマンドを入力します。
    $ gpio -g read 3
    1
    ここで"-g"は番号種別、"read"は操作種別、"3"はピン番号になります。
    つまり、このコマンドの意味は「GPIO番号3のピンの値を読む」ということになります。
    ピン番号を物理番号で指定したい場合は、オプションが"-1"(数字の1)になります。つまり、以下でも同じ結果が得られます。
    $ gpio -1 read 5
    1
  4. GPIOへの出力
    GPIOに信号を出力する場合は以下のようになります。
    $ gpio -g write 17 1
    "17"がピン番号、"1"が値(1がONで0がOFF)、つまりこのコマンドの意味は「GPIO番号17のピンを1(ON)にする」ということです。
    $ gpio -g read 17
    1
    とすれば、実際に値が"1"に変わっていることが確認できます。

  5. GPIOのモード変更
    次にピンのモード変更について説明します。
    最初の"gpio readall"コマンドの出力より、GPIO番号3のモードは"IN"、GPIO番号17のモードは"OUT"であることがわかります。
    "IN"になっているピンは入力モード、つまり各種センサーなどから値を取得するためのピンで、"OUT"は出力モード、つまりLEDやモーターなどに信号を送信するためのピンということになります。
    この「モード」も、gpioコマンドによって変更することができます。
    $ gpio -g mode 3 out
    とすると、GPIO番号3のピンのモードが"OUT"に変わります。
    もとに戻す場合には、
    $ gpio -g mode 3 in
    とすればOKです。

ラズパイローバーのデモ動画

さて、Raspberry Piで何ができるかですが、
これまでに挑戦したことは以下の通り。

  • LEDの点灯(いわゆるLチカ)
  • モーターを動かす
  • Webカメラとスピーカーを接続
  • 日本語音声合成
  • 日本語音声認識
  • タクトスイッチによるシャットダウンボタン
  • 赤外線LEDによる対物センサーの作成
  • 温度センサーによる温度検知
  • 光センサーによる明るさ検知
  • フルカラーLEDの点灯

とまあ、いろいろやりましたが、とりあえずこちらが完成形のデモになります。

youtu.be

ローバーの形はITproの記事そのままで、機能の実装もお手本通りに進めましたが、音声認識あたりからは(なぜか記事が見れなかったこともあって)、いろいろなサイトを参考にしつつ、独自に工夫しております。

これから完成形までの道のりを順番に説明していきたいところですが、そのためには一回ローバーを解体する必要があるので、なかなか踏み切れません。。

 

Scratchでゲーム作成

最近更新が滞ってますが、今回はScratchについて書いてみます。

ScratchはMITメディアラボが開発した子供向けの教育用プログラミング言語で、ブロックを積み上げるようにプログラミングします。
「ビジュアルプログラミング」と言うそうです。

単純なゲームなら、本当に簡単に出来てしまいます。
例えばこんな感じ。
タイトルは「けいさんゲーム」 。足し算と引き算をするだけのゲームです。
Flashなので、スマホからは見れません)

プログラムの中身はこちにアクセスすれば見れます。
けいさんゲーム on Scratch

Scratch2.0はウェブアプリケーションとして提供されているため、特にソフトウェアのインストールは必要ありません。

下のリンクからScratchのサイトに行けば、作ることも、公開することも、他の人が作ったプログラムを見ることも自由にできます。上の例のように、自分のブログやホームページに埋め込むこともできます。

scratch.mit.edu

 

Raspbianの初期設定

OSのインストールに続いて初期設定を行います。

まずはモニタ、キーボード、マウスを取っ払い、作業用PCからネットーワーク経由でアクセスできるようにしたいところです。その他、タイムゾーンと日本語入力環境も設定しておきます。

  1. 無線LANの設定
    Raspberry Pi3は無線LAN内蔵なので、まずはこれを有効にします。
    画面右上のインジケータエリアに、無線LANのアイコンが表示されています。(設定前は接続できていないので、未接続の表示になっています)

    f:id:tomaberry:20161225083814p:plain

    ここをクリックして表示される「Turn On Wi-Fi」をさらにクリックすると接続可能なSSIDの一覧が出てくるので、接続するSSIDをクリックしてパスワードを入力すれば、あっさり繋がります。

    f:id:tomaberry:20161225085539p:plain

  2. SSHVNCの有効化
    タスクバーのランチャーよりLXterminalを起動し、
    f:id:tomaberry:20161225101747p:plain

    sudo raspi-config"コマンドを実行します。f:id:tomaberry:20161225101928p:plain
    カーソルを移動して「7 Advanced Options」でEnterキーを押します。f:id:tomaberry:20161225102115p:plain

     「A4 SSH」を選択し、Enterキーを押します。f:id:tomaberry:20161225102955p:plain
    以降、下記の通り画面に表示されるので、そのままEnterキーを押して進めます。

    Would you like the SSH server to be enabed?
       <はい>
    The SSH server is enabled   <了解>

    同様の手順で「A6 VNC」も有効化します。
    これでリモート接続ができるようになりました。Raspberry Piに繋いでいたモニター、キーボード、マウスを取っ払ってしまいましょう。

  3. パソコン側の設定
    次に、パソコン側にリモート接続するためのソフトをインストールします。必要なソフトは以下の通り。(代表的なもののご紹介)

    Tera Term・・・SSHでターミナルに接続する
    WinSCP・・・SSHでファイルを転送する
    RealVNC・・・VNCでデスクトップに接続する
    Bonjour Print Services for Windows・・・IPアドレスではなく、ホスト名でアクセスするためのツール
    (そろそろ面倒になってきたので)インストール手順は割愛します.

    なお、最後のBonjourIPアドレスを固定する場合は不要です。
    Bonjourが何者かいまいち把握していないのですが、Zeroconfというほぼ設定なしでネットワークを使えるようにするための仕様があり、そのAppleによる実装、とのことです。なので、Macでは標準で利用可能であり、WindowsでもiTunesがインストールされている場合は同時にインストールされているので不要です。

  4. タイムゾーンの設定
    既にリモートで接続できる状態になっているので、Tera TermでRaspberry Piに接続して管理者権限で raspi-configを実行します。
    $ sudo raspi-config

    実際の画面はこんな感じ。
    f:id:tomaberry:20161225131652p:plain
    以降、下記の順で設定すれば日本時間に切り替わります。
    4 Internationalisation Options を選択
    I2 Change Timezone を選択
    アジア を選択
    Tokyo を選択

  5. 画面解像度の設定
    そのままVNCで接続すると、画面サイズがやたら大きくなったり小さくなったりします。(この辺の条件はよくわかりません)
    あまり大きいとVNCのレスポンスが悪くなるし、逆に小さ過ぎると使いづらくなるので、程々なところで固定しておきたいところです。
    管理者権限で/boot/config.txtを編集します。
    $ sudo vi /boot/config.txt
    以下の設定を追記します。
    hdmi_group=2    <- HDMI
    hdmi_mode=23 <- 1280x768 60 Hz
    ネットで調べて拾った設定ですが、ウチの環境ではこの辺が最適でした。
    再起動後に反映されます。

  6. 日本語入力環境の導入
    標準ではデスクトップ環境で日本語入力ができないため、日本語入力ソフトとしてGoogleが開発した”Mozc”をインストールします。
    $ sudo apt-get update    <- パッケージリストの更新
    $ sudo apt-get upgrade <- パッケージの更新
    $ sudo apt-get install ibus-mozc
    インストールが終わったらRaspberry Piを再起動します。
  7. $ sudo reboot
    再起動後VNCでデスクトップに接続し、日本語入力をONにします。

    f:id:tomaberry:20161225175306p:plain
    「US」となっているアイコンをクリックし、「日本語-Mozc」を選択すると日本語入力モードになります。

    f:id:tomaberry:20161225175415p:plain
    これで「半角/全角」キーで入力モードの変更ができるようになります。

これでとりあえずの初期設定は完了です。
あとは用途によっていろいろ設定することになりますが、共通の設定としてはこんなところかと思います。

Raspbian(OS)のインストール

Raspberry Piが届いたら、まずはOSをインストールします。

OSのインストールというと何やら大変な作業を想像しますが、とても簡単にインストールできる仕組みが出来上がっています。

  1. OSイメージのダウンロード
    Raspberry Piの公式サイトからOSイメージをダウンロードします。
    https://www.raspberrypi.org/downloads/

    f:id:tomaberry:20161223195543p:plain

    インストールするのは推奨OSの「Raspbian」ですが、ここでは「NOOBS」を選択します。NOOBSを使えばmicroSDカードに簡単にRaspbianがインストールできます。

    f:id:tomaberry:20161223195554p:plain

    NOOBSの「Dowload ZIP」をクリックしてzipファイルをダウンロードします。

  2.  microSDカードのフォーマット
    インストールの前にmicroSDカードをフォーマットします。
    OSの標準機能によるフォーマットではなく、SDアソシエーション(SDカードの規格策定団体)が配布している「SD Formatter 4.0」 を使用することが推奨されています。
    ダウンロードはこちらから。

    https://www.sdcard.org/jp/downloads/formatter_4/

    f:id:tomaberry:20161223194652p:plain
    ダウンロードしたファイルをインストールし、SDフォーマッターを起動します。

    f:id:tomaberry:20161223215011p:plain
    「オプション設定」で「クイックフォーマット、論理サイズ調整ON」に設定し、ドライブが正しいことを確認して「フォーマット」ボタンをクリックすれば、フォーマットが開始されます。

  3. microSDカードにNOOBSをコピー
    1.でダウンロードしたzipファイルを解凍し、2.でフォーマットしたmicorSDカードにコピーします。

    f:id:tomaberry:20161223213733p:plain

    これで作業用PCでの準備は完了です。
    次はいよいよRaspberry Piを起動してOSのインストールを行います。 

  4. Raspberry Piを起動
    3.でNOOBSをコピーしたmicroSDカードを挿してRaspberry Piを起動します。
    この時、HDMIディスプレイとUSBキーボードおよびマウスを接続しておいてください。
  5. インストールの実行
    Raspberry Piの起動後にインストール設定画面が表示されるので、「Raspbian[RECOMMENDED]」を選択し(それ以外選択できませんが)、言語を「日本語」、Keyboardを「jp」として「Install」ボタンをクリックします。
    (しばらくハードコピーが取れないので見づらい画面が続きますが、ご容赦ください)f:id:tomaberry:20161224220915j:plain
    警告が表示されますが、「はい」で続行。f:id:tomaberry:20161224221723j:plain
    microSDカードのスピードにもよりますが、10~30分程度でインストールが完了します。f:id:tomaberry:20161224222035j:plain
    「OK」ボタンをクリックして続行すると、デスクトップが起動します。f:id:tomaberry:20161225083223p:plainこれでRaspbianのインストールは完了です。

インストールされたRapbianバージョンは8.0で、Raspbian単独のバージョンではなく、ベースとなっているDebian GNU/Linuxのバージョンでカウントするようです。
8.0のコードネームは「Jessie」となっており、ネットで検索する場合はこのコードネームで検索するとよいかもしれません。(結構バージョンによって挙動が変わってくるので)

ちなにみ今回、ブログに書くために半年ぶりに再インストールしているのですが、半年前とはすでにかなり違っていて、いろいろ戸惑ってます。。
デスクトップ環境が「PIXEL」というRaspbian独自のものに入れ替わってますので、ネット検索の際はこの辺もキーワードにすると良いかもしれません。

まずはRaspberry Piを購入

いくつかモデルがあるようですが、現時点での最新モデルは「Raspberry Pi 3」。

ITproの記事では「Raspberry PiモデルB+」を使っていましたが、「3」は無線LANが内蔵されているとのことだったので、迷わず「3」を購入しました。

その他にRaspberry Piを使うために最低限必要なのは以下の通り。

  • microSDカード(4Gバイト以上必須、Class10以上推奨)
  • USB ACアダプター(2.5A推奨)
  • USBケーブル(A to microB)

ちなみに、microSDカードは読み書き速度が速いものの方が断然おすすめです。

はじめ昔ガラケーで使っていたClass4のものを使ったのですが、OSインストールやインストール後の動作も遅く、話になりませんでした。

それと、USB ACアダプターはRaspberry Pi 3」では2.5A推奨となっていますが、こちらは程々な使い方であれば2Aのもの(スマホの急速充電対応のものは大体このあたり)でもとりあえず問題ありません。

一応、microSDカードとUSB ACアダプターは、私が使っているものを紹介しておきます。 

 

USBアダプタ 5V/2.5A Raspberry Pi 3 Model B用

USBアダプタ 5V/2.5A Raspberry Pi 3 Model B用

 

 また、少なくともセットアップ時には以下の機材が必要になります。

  • USBキーボード
  • USBマウス
  • HDMIケーブル
  • HDMIで接続可能なモニタorTV
  • 作業用PC(イメージファイルのコピー用)

キーボード、マウス、モニタについては作業用PCのものでも構いません。(少々挿し換えが面倒ですが)

また、イメージファイルのコピーはMacでも出来ると思いますが、私はWindows10のPCを使いました。

ここまでの出費:¥8,720