この記事をシェアしよう!

【第3回】まで”Lピカ”で引っ張っておきながら今更の”Lチカ”が、ただの”Lチカ”では面白くないので、蛍のようにやさしく明滅する”Lチカ”をやろうとしたのですが、残念ながら「Scratch 2」にはPWM出力がサポートされていませんでした。

以前のバージョン「Scratch 1.4」のGPIOサーバーにはPWM出力の機能があるので、今回はそれで”蛍のようなLチカ”を実現することにしました。

今回使った部品

  • Raspberry Pi 3 Model B × 1
  • 40Pinフラットリボンケーブル
  • 40Pin T型GPIO拡張ボード
  • ブレットボード × 1
  • LED × 1
  • 抵抗 220Ω × 1
  • ジャンプワイヤー(オス/オス) × 2

実体配線図

Raspberry Piとブレッドボードは【第2回】で紹介したT型GPIO拡張ボードで接続します。

今回は、【第3回】での”Lピカ”と同じ回路で”Lチカ”します。

Scratch 1.4 のGPIOサーバーを開始する

タスクバー左端のメニューアイコンから「プログラミング」→「Scratch」をクリックして「Scratch 1.4」を起動します。

「Scratch 1.4」のメニューバーから「編集」→「GPIOサーバーを開始」をクリックします。

Scratch 1.4 でLピカする

画面左上のブロックカテゴリーから「制御」ボタンをクリックします。

ブロック「 (  ▼ ) を送る」の”▼”をクリックして現れる「新規/編集」をクリックします。

現れた「メッセージの名前:」画面の入力蘭に”gpio17on”と入力して「OK」ボタンをクリックします。

できたブロック「 ( gpio17on▼ ) を送る」をブロックパレットに置いたままでクリックすれば、LEDが点灯します。Lピカはこれでおしまいです。

LEDが点灯したままでは困るので、ブロック「 ( gpio17on▼ ) を送る」の”▼”をクリックして現れる「新規/編集」をクリックします。

現れた「メッセージの名前:」画面の入力蘭を”gpio17off”で上書きして「OK」ボタンをクリックします。

できたブロック「 ( gpio17off▼ ) を送る」をブロックパレットに置いたままでクリックすると、LEDは消灯します。

変数「pwmout」を作る

ブロックカテゴリーの「変数」ボタンをクリックします。

「新しい変数を作る」をクリックします。

現れた「変数名?」画面の入力蘭に”pwmout”と入力して「OK」ボタンをクリックします。

ブロックパレットに新しいブロックが5つできると共に、画面右上のステージにも「pwmout ( 0 ) 」の表示が現れるので、クリックして出るメニューから「スライダー」をクリックします。

ステージの「pwmout ( 0 ) 」の下にできたスライダーのつまみをマウスで右端にスライドすると、「pwmout ( 0 ) 」の”0″が”100″になります。

もう一度、「pwmout ( 100 ) 」をクリックすると、メニューに「スライダーの最小値と最大値を設定」ができているので、これをクリックします。

Raspberry PiのPWMは10ビットの分解能があるので、現れた「スライダの範囲:」画面の「最大値:」に”1023″と入力して「OK」ボタンをクリックします。

ステージの「pwmout ( 100 ) 」のスライダーのつまみをマウスで右端にスライドすると、今度は (  ) 内の数値が”1023″になります。

GPIO17の出力を変数「pwmout」に結び付ける

ブロックカテゴリーの「演算」ボタンをクリックします。

ブロック「 ( ハロー ) と ( ワールド ) 」の”ハロー”をクリックして”gpio17pwm”で上書きします。

ブロック「 ( gpio17pwm ) と ( ワールド ) 」をスクリプトエリアにドラッグアンドドロップします。

カテゴリーの「変数」ボタンをクリックして、ブロック「 ( gpio17pwm ) と ( ワールド ) 」の”( ワールド )”にブロック「pwmout」を当て嵌めます。

カテゴリー「制御」のブロック「 (  ▼ ) を送る」をスクリプトエリアに引出し、ブロック「 ( gpio17pwm ) と ( pwmout ) 」を”(  ▼ )”に当て嵌めます。

できたブロック「{ ( gpio17pwm ) と ( pwmout ) }を送る」をクリックすると、LEDが点灯します。

画面右上「 pwmout ( 1023 ) 」のスライダーのつまみをマウスで左端にスライドさせます。

この状態で、ブロック「{ ( gpio17pwm ) と ( pwmout ) }を送る」をクリックすると、LEDが消灯します。

LEDの明滅スクリプトを組み立てる

カテゴリー「制御」のブロック「 ( 1 ) 秒待つ」をブロック「{ ( gpio17pwm ) と ( pwmout ) }を送る」の下に繋ぎます。

カテゴリー「変数」のブロック「  ( pwmout▼ ) を ( 1 ) ずつ変える」をブロック「 ( 1 ) 秒待つ」の下に繋ぎます。

カテゴリー「制御」のブロック「 ( 10 ) 回繰り返す」の内側に全てのブロックを抱え込ませます。

PWMの0~1023の1024ステップを32ステップづつ変化させる為、ブロック「  ( pwmout▼ ) を ( 1 ) ずつ変える」の”1″を”32″で上書きします。

PWMの0~1023の1024ステップを32ステップづつ32回で変化させる為、ブロック「 ( 10 ) 回繰り返す」の”10″を”32″で上書きします。

ブロック「 ( 32 ) 回繰り返す」を右クリックして出るメニューから「複製」をクリックします。

複製したスクリプトを繋ぎます。

複製したスクリプトの後半でLEDの明るさを下げる為、ブロック「  ( pwmout▼ ) を ( 32 ) ずつ変える」の”32″を”32″で上書きします。

全体をひとつのスクリプトにまとめる為、カテゴリー「制御」のブロック「ずっと」の内側に全てのブロックを抱え込ませます。

スクリプトの頭でLEDをリセットさせる為、カテゴリー「変数」のブロック「 ( pwmout▼ ) を ( 0 ) にする」をブロック「ずっと」の上に繋ぎます。

カテゴリー「制御」のブロック「 (  ▼ ) を送る」の”▼”をクリックして出る「新規/編集」をクリックします。

現れた「メッセージの名前:」画面の入力蘭に、GPIO17の出力をPWMに設定する為、”config17outputpwm”と入力して「OK」ボタンをクリックします。

できたブロック「 ( config17outputpwm ) を送る」をスクリプトの上に重ねます。

LEDの明滅サイクルを ( 32×2×0.02=1.28秒 ) とする為、2つのブロック「 ( 1 ) 秒待つ」の”1″を”0.02″で上書きします。

カテゴリー「制御」のブロック「緑の旗がクリックされたとき」をスクリプトの上に重ねます。

画面右上の「緑の旗」をクリックすると、LEDが蛍のように明滅します。

画面右上の「赤丸」ボタンをクリックすると、クリックした瞬間にスクリプトが停止し、LEDはその瞬間の明度を保ちます。

LEDの消灯スクリプトを割り込ませる

スクリプトを停止したときにLEDも消灯させる為、カテゴリー「制御」のブロック「もし<  >なら」をスクリプトエリアに引出します。

カテゴリー「調べる」のブロック「<  ( スペース▼ ) キーが押された >」をブロック「もし<  >なら」の”<  >”に当て嵌めます。

カテゴリー「変数」のブロック「 ( pwmout▼ ) を ( 0 ) にする」をブロック「もし<  ( スペース▼ ) キーが押された >なら」の内側に抱え込ませます。

カテゴリー「制御」のブロック「すべてを止める🔴」をブロック「 ( pwmout▼ ) を ( 0 ) にする」の下に割り込ませます。

ブロック「もし<  ( スペース▼ ) キーが押された >なら」の上で右クリックして出るメニューから「複製」をクリックします。

2つのブロック「 ( 32 ) 回繰り返す」の内側に複製した2つのスクリプトを割り込ませます。

画面右上の「緑の旗」をクリックするとLEDが蛍のように明滅し、「スペース」キーを押すとスクリプトが停止してLEDも消灯します。

LEDの明滅プロジェクトを保存する

メニューバーの「ファイル」→「名前をつけて保存」をクリックします。

現れた「プロジェクトを保存」画面の右にある「pi」ボタンをクリックして表示されるフォルダから保存するフォルダを選択します。この例では、【第3回】で作ったフォルダ「Scratch_GPIO」を選択しました。

画面上中央に選択したフォルダが表示されていることを確認し、「新しいファイル名」の入力蘭にファイル名を入力して「OK」ボタンをクリックします。

次回は、今回のようにキーボードやマウスによる操作ではなく、外部デバイスからGPIOへの入力でScratchのスクリプトを制御する基本的な事例を紹介したいと思います。

この記事をシェアしよう!