14
Raspberry Pi Scratchコーディング:センサーとモーターの制御
Raspberry Pi スクラッチコーディング
(画像提供:Tom's Hardware)

子供向けに設計されたブロックベースの言語であるScratchは、プログラミングを始めるのに最適な方法です。Scratchを使えば、ゲームを作ったり、Raspberry PiのGPIOを使って電子機器を制御したりする方法を学ぶことができます。Scratch 3は優れたツールですが、GPIOでできることには限りがあり、GPIOはRaspberry Piの最高の機能です。では、Scratch GPIOプロジェクトをさらに発展させるにはどうすればよいでしょうか?そのためには、S3GPIOが必要です。

S3GPIOはScratch 3のGPIOで、Raspberry PiコミュニティのメンバーであるSimon Walters氏によって開発されました。彼は、子供たちがScratchを使ってプログラミングと電子工学を学ぶことを奨励してきました。Walters氏がScratch用GPIOに初めて取り組んだのは、Scratch 1.4をベースにしたScratchGPIOでした。この旧バージョンは現在も利用可能ですが、Scratchの古いバージョンに基づいています。

このプロジェクトに必要なものは 

  • ラズベリーパイ 3/4/400
  • 最新のRaspberry Pi OS
  • HCSR04-P 超音波センサー(HCSR04の3Vモデル)
  • L9110S モーターコントローラー
  • DCモーター
  • モーター用外付けマイクロUSBブレークアウト電源
  • メス-メスケーブル 7 本
  • オス-メスケーブル2本
  • インターネット接続

このプロジェクトの完全なコードは、Github リポジトリからダウンロードできます。 

コンポーネントの接続

Raspberry Pi スクラッチコーディング

(画像提供:Tom's Hardware)

電子部品の接続は比較的簡単ですが、膨大な数の配線に戸惑うかもしれません。そこで、いくつかのセクションに分けて解説します。S3GPIOは、Raspberry Pi Foundationが定めたBCM規格ではなく、物理的なピン番号を使用します。つまり、20本のピンが2列に並んでいます。USBポートを床に向けてRaspberry Piを持つと、左上にピン1、右上にピン2があります。左の列は「奇数」列で、ピンは1、3、5、7、9という奇数パターンで並んでいます。右の列は「偶数」列で、2、4、6、8というように番号が並んでいます。

1. メス-メスのジャンパー ワイヤを使用して、HC-SR04P 超音波センサーを次のように Raspberry Pi に接続します。

Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。

  • GNDをRaspberry Piの任意のGNDピンに接続します
  • Vccから3V(ピン1)
  • ピン11へのトリガー
  • ピン13にエコーします。

2.モーターの端子をL9110SのMOTORA端子(どちら向きでも構いません)に接続し、しっかりと固定されるようにネジで固定します。

3. L9110SのGNDをRaspberry Piの任意のGNDピンに接続します。これにより、プロジェクトの動作に必要な共通のグランドリファレンスが作成されます。

4.外部 5V マイクロ USB 電源の + を L9110Sモーター コントローラーの VCC に接続します。

5.電源の - (GND) ピンを Raspberry Pi の任意の GND ピンに接続します。

6. L9110SのA1-A端子とA1-B端子を、それぞれRaspberry Piのピン8と10に接続する2本のメス-メスのジャンパー線を接続します。これにより、GPIOを使ってL9110Sを制御し、モーターを回転させることができます。 

これで、外部電源のモーターがRaspberry Piに接続され、S3GPIOから制御できるようになりました。また、HCSR04-P超音波センサーも接続し、速度コントローラーとして使用できるように準備しておきます。接続が正しいことを確認するために、このプロジェクトの図を参照してください。

S3GPIOのインストール

1. Raspberry Piの電源を入れ、ターミナルを開きます。以下のコマンドを入力してインストールファイルをダウンロードします。このコマンドはインストーラーをダウンロードするため、通常は本番環境のマシンでは大きなセキュリティリスクとなりますが、この場合は安全です。

wget https://git.io/vMS6T -O isgh8.sh

2.コマンドを実行してS3GPIOをインストールします。

sudo bash isgh8.sh

3.変更を有効にするには、Raspberry Pi を再起動します

4. S3GPIOアイコンをダブルクリックし「ターミナルで実行」を選択すると、3つのアプリケーションが起動します。Webサーバー、ScratchGPIO、そしてS3GPIO拡張機能を搭載したChromiumブラウザが起動します。S3GPIOが表示されるまで少し時間がかかる場合があります。

5. 「See Inside」をクリックして、オンライン S3GPIO エディターを開きます。 

プロジェクトの作成

S3GPIO は Scratch 3 と同じインターフェースを備えていますが、「My Blocks」には、私たちが活用する一連の S3GPIO ブロックも用意されています。

1. イベントセクションから「緑の旗がクリックされたとき」をコーディングエリアにドラッグします。これがコードの開始部分で、HCSR04-P超音波センサーをテストします。

Raspberry Pi スクラッチコーディング

(画像提供:Tom's Hardware)

2. 「マイブロック」からS3GPIOコマンドをドラッグし前のブロックに接続します。白いボックスに「ultra11,13」と入力します。これらはセンサーのトリガーとエコー用のピンです。

Raspberry Pi スクラッチコーディング

(画像提供:Tom's Hardware)

3.コントロールからForever ループをドラッグし、前のブロックに接続します。

Raspberry Pi スクラッチコーディング

(画像提供:Tom's Hardware)

4. 「マイブロック」から「S3GPIO read」をドラッグしforeverループ内に配置します。白いボックスに「ultra13」と入力すると、超音波センサーのエコーピンの値が読み取られ、バックグラウンドでセンチメートル単位の測定値に変換されます。

Raspberry Pi スクラッチコーディング

(画像提供:Tom's Hardware)

5. 「Looks」から「Say Hello!」ブロックをドラッグして前のブロックの下に配置します。「Variables」から「sensor」をドラッグしてHello!」ブロックの上に配置します。これにより、超音波センサーの距離測定値が表示されます。

Raspberry Pi スクラッチコーディング

(画像提供:Tom's Hardware)

6. 「マイブロック」から「S3GPIO set to _ to _」をドラッグし前のブロックの下に配置します。最初の空欄に「Power8」と入力し、 2つ目の空欄に「変数」から別のセンサーブロックを配置します。これにより、ピン8に接続されたモーターピンが、センサーから返された値に設定されます。

Raspberry Pi スクラッチコーディング

(画像提供:Tom's Hardware)

7. コントロールから「1秒待機」ブロックをドラッグし、前のブロックに接続して、0.1秒待機するように編集します。コードは以下のようになります。

Raspberry Pi スクラッチコーディング

(画像提供:Tom's Hardware)

コードが完成したら、緑の旗をクリックしてスタートさせましょう。モーターが動き出すはずです。手をセンサーの2つの「目」に近づけると、モーターの回転速度が遅くなります。停止ボタン(ステージ右上)をクリックしても、モーターは止まりません!ブレーキが必要です。 

コードへの追加:ブレーキの構築

1. 新しいコード セクションの[イベント] にある[スペース キーが押されたとき] ブロックを配置します

Raspberry Pi スクラッチコーディング

(画像提供:Tom's Hardware)

2. 「マイブロック」から、S3GPIO set _ to _ ブロックを2つドラッグし前のブロックに接続します。最初のS3GPIO setをPower8から0に変更し、 2番目のS3GPIO setをPower10から0に変更します。

Raspberry Pi スクラッチコーディング

(画像提供:Tom's Hardware)

3. 「Control」から「Stop all」をドラッグし前のブロックの下に配置します。コードは次のようになります。

Raspberry Pi スクラッチコーディング

(画像提供:Tom's Hardware)

緑の旗をクリックして、センサーがあなたの手に反応するかテストしてください。モーターはあなたの手の位置に応じて速くなったり遅くなったりします。準備ができたら、スペースバーを押してモーターを停止してください。
 

コードへの追加: シーケンスの作成

センサーを使用するだけでなく、一連の命令、つまりシーケンスを使ってモーターを制御することもできます。このシーケンスは、モーターを一方向に回転させ、その後逆方向に回転させ、最後に停止させます。シーケンスは10回繰り返し(ループ)実行されて終了し、ユーザーが再度シーケンスを実行するのを待ちます。

1. 「イベント」から「スペースキーが押されたとき」をドラッグし新しいコードシーケンスを開始します。ドロップダウンを使って、スペースキーを「r」に変更します。

Raspberry Pi スクラッチコーディング

(画像提供:Tom's Hardware)

2. コントロールから、repeat 10 をドラッグし前のブロックの下に配置します。

Raspberry Pi スクラッチコーディング

(画像提供:Tom's Hardware)

3. 「マイブロック」から2つのS3GPIOコマンドブロックをドラッグしループ内に配置します。1つ目のブロックをピン8をオン2つ目のブロックをピン10をオフに変更します。

Raspberry Pi スクラッチコーディング

(画像提供:Tom's Hardware)

4. 「コントロール」から「1秒待ち」をドラッグし、ループ内の前のブロックの下に配置します。

Raspberry Pi スクラッチコーディング

(画像提供:Tom's Hardware)

5.一番上のS3GPIOブロックを右クリックし「複製」を選択します。これで、先ほど作成した3つのブロックが複製されます。これらの3つの新しいブロックをループ内、前のブロックの下に配置します。これらのブロックで、ピン8をオンからオフに、ピン10をオフからオンに変更します。

Raspberry Pi スクラッチコーディング

(画像提供:Tom's Hardware)

6.これらの3つのブロックの複製を繰り返し新たに複製した3つのブロックをループ内に配置します。S3GPIOコマンドを両方ともオフに設定します。

Raspberry Pi スクラッチコーディング

(画像提供:Tom's Hardware)

このプロジェクトは、Linux Format マガジンに初めて掲載されました。

レス・パウンダーは、トムズ・ハードウェアのアソシエイトエディターです。クリエイティブテクノロジストとして、7年間にわたり、老若男女を問わず、教育と啓発のためのプロジェクトを手がけてきました。Raspberry Pi Foundationと協力し、教師向けトレーニングプログラム「Picademy」の執筆・提供にも携わっています。