\r\n\r\n

サイモンのプレイマットボードを使ったラズベリーレザーの初心者向けガイド

この初心者向けラズベリーパイゲームチュートリアルで、回路構築とPythonコーディングの基本を学びましょう...

テストボードを使えば、ハンダ付けをしなくても回路を作ることができます。電子工作の実験に最適なツールですが、敷居が高いと感じている方も多いのではないでしょうか。モチベーションを保ちながら学べる企画があります。

Raspberry Piの初心者向けプロジェクトに最適な、簡単なゲームがいくつかあります。手軽に始められるゲームとしては、「サイモン」があります。サイモン」は、ランダムに点滅する光の列を記憶していく記憶ゲームです。プレイヤーが上達するにつれて、シーケンスの長さが長くなります。

必要な部品

はじめに、以下のものが必要です。

  1. ラズベリーパイ
  2. Raspbian OSがフラッシュされているmicroSDカード
  3. 4色のカラーLED
  4. 抵抗4本(220Ω~1kΩ)
  5. 4ボタン
  6. テストプレート1枚
  7. すべてをつなぐジャンパケーブル

このプロジェクトでは、どのラズベリーCircumferenceでも使用できますが、Circumference Zeroモデルは、いくつかのハンダ付けの容易さがなければ、ブレッドボードに取り付けられません。どの機種を使うにしても、電源、モニター、キーボード、マウスが必要です。

Raspberry Piをセットアップしたことがない方は、「Raspberry Pi初心者ガイド」で準備する方法をご紹介しています。

このチュートリアルでは、Pythonのコードを書くので、どんなテキストエディタを使っても構いませんが、コードエディタの方が簡単かもしれません。Raspberry PiのOSにはすでにいくつかインストールされていて、Thonnyは初心者向けに設計されているので、それを使ってください。いずれの方法でも、このチュートリアルに従うには、コードの保存と実行ができる必要があります。

テストパネルの紹介

テストボードを使ったことがない方は、テストボードのチュートリアルを読むことから始めるとよいでしょう。テストボードの仕組みを理解することは、回路の作り方を理解することにつながります。

Raspberry Piには、2列のGPIO(General Purpose Input/Output)ピンがあります。これらのピンは、Raspberry Piに部品を接続するためのものです。あるピンは情報を送り、あるピンは電力を供給し、あるピンは電子機器を接地します。

ラボボードにLEDライトを追加するところから始めます。実験台でLEDライトを使ったことがない方は、その仕組みをより深く説明したチュートリアルを読むとよいでしょう。

まず、GPIOピンをマザーボードに接続します。電源やグランド端子ではなく、GPIO端子であれば、どの端子でもかまいません。上記はGPIOピンの図ですが、どのピンを使用するかの判断材料になると思います。このチュートリアルでは、GPIO24とも表記されるピン番号18を使用します。

このピンは、テストボードに電力を供給し、ラズベリーパイがボード上のコンポーネントと通信できるようにします。Piの6番ピンは、テストボードのグランドレールに接続されます。これで基板が接地され、回路を作ることができるようになります。

ラズベリーからの電力はLEDを直接接続するには高すぎる。抵抗を使用することで電力レベルを下げ、LEDの焼損を防ぐことができます。抵抗の片側をGPIOピン**と同じラインに接続し、もう片側をテストボードの反対側に接続します。LEDのプラス端は、抵抗の後ろに配置されます。LEDのマイナス端は、マイナスレールに直接接続することができます。最終的には上図のようになるはずです。配線を十分に確認し、Piの電源を入れます。LEDが点灯するはずです。

Raspberry Piで回路を作ったら、次はコードで制御してみましょう。

PythonコードでLEDを制御する

このチュートリアルでは、コードを順を追って紹介していきますが、完成したコードをいつでも参照したい場合は、Pastebinにあるコードを参照してください。

これでLEDに電源が供給されましたが、LEDの点灯と消灯を制御したいと思います。以下のPythonコードで、ボードと対話することができます。

import RPi.GPIO as GPIOGPIO.setmode(GPIO.BOARD)GPIO.setwarnings(False)red = 18GPIO.setup(red, GPIO.OUT)GPIO.output(red, GPIO.LOW)

最初の数行で、物事が決まっていく。Raspberry PiのGPIOライブラリがインポートされます。as GPIOは、RPi.GPIOファイルをGPIOとして参照させて、少し入力を省くだけです。GPIOピンモードはBOARDに設定します。この設定を使う必要はありませんが、GPIOラインでピンオーダーで参照しやすくするためです。

最後に、警告をfalseに設定します。これにより、不要な警告を出さなくなります。

次の3行はLEDの制御です。赤色LEDはGPIOピン18に接続されています。変数redにはその位置が格納されることを覚えておいてください。次に、GPIO.setupを設定して、赤いピンに情報を送ることをプログラムに伝えます。最後に、GPIO.outputを設定して、赤いピンをローポイントにヒットさせます。このプログラムを実行すると、ランプが消灯します。元に戻すには、GPIO.lowをGPIO.highに切り替えてから、再度プログラムを実行してください。

コードを保存して、実行をクリックすると、実行されます。コードエディタに実行ボタンがない場合は、保存してターミナルウィンドウでpython my filename.pyを実行してください。まず、新しい Python ファイルと同じディレクトリに移動する必要があります。やり方がわからない場合は、Raspberry Piのメモ帳を確認してください。

複数のLEDを追加する

ゲーム「サイモン」を作るには、4色のライトが必要です。赤色LEDの設定方法は、他の3つのLEDと同じです。配線は下図のようになります。

あなたのコードは次のようになります。

import RPi.GPIO as GPIOGPIO.setmode(GPIO.BOARD)GPIO.setwarnings(False)red = 18yellow = 22green = 24blue = 26GPIO.setup(red, GPIO.OUT)GPIO.setup(yellow, GPIO.OUT)GPIO.setup(green, GPIO.OUT)GPIO.setup(blue, GPIO.OUT)GPIO.output(red, GPIO.HIGH)GPIO.output(yellow, GPIO.HIGH)GPIO.output(green, GPIO.HIGH)GPIO.output(blue, GPIO.HIGH)

テスト終了後、GPIO.出力をGPIO.Lowに設定し、各LEDを消灯してください。

使用する配線の色は関係ありませんが、ボードを見やすくするために、自分にとって意味のある色を使うようにしましょう。例えば、黒線はアース線として使われることが多い。この回路では、配線の色とLEDの色を一致させる必要があるかもしれません。

ボタン付きコントロールLED

まず、ボードにボタンを追加します。ボタンは、グランドとGPIOピンに接続する必要があります。

ボタンでLEDを制御するために、コードに追加する必要があります。ボタンの設定は、GPIOピンが出力ではなく、入力として設定されることを除けば、LEDの設定と同様です。このコードは、ボタンを正しく動作させるために必要な、Piの内部プルアップ抵抗の設定も行います。

GPIO.setup(32, GPIO.IN, pull_up_down=GPIO.PUD_UP)

次に、ボタンが押されたかどうかをチェックするコードを用意します。

game = Truewhile game: redButtonState = GPIO.input(32) if redButtonState == 0: GPIO.output(red, GPIO.HIGH) time.sleep(1) GPIO.output(red, GPIO.LOW)

ボタンが押されたかどうかをチェックし続けるプログラムにしたいので、whileループを使用します。ループは決してエラーを起こさないので、ストップボタンを押すか、キーボードショートカットのCtrl+cを使って手動でプログラムを終了するまで、実行とボタンのチェックをし続けます。

次に、ボタンのGPIOピンから送られてくる入力を参照しやすくするために、その情報を変数redButtonStateに格納します。ボタンの入力が0になれば、ボタンが押されたことがわかる。

ボタンが押されると、赤色LEDが点灯します。その後、1秒後にLEDが消灯します。タイミングを計るために、時刻を使います。スリープ(1)機能。これを動作させるには、スクリプトの先頭でタイムライブラリをインポートする必要があります。

1つのボタンが動作した後、各LEDに1つずつ、合計3つのボタンを追加します。

import random import timeimport RPi.GPIO as GPIOGPIO.setmode (GPIO.BOARD)GPIO.setwarnings(False)red = 18yellow = 22green = 24blue = 26GPIO.setup(red, GPIO.OUT)GPIO.setup(yellow, GPIO.OUT)GPIO.setup(green, GPIO.OUT)GPIO.setup(blue, GPIO.OUT)GPIO.setup(32, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(36, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(38, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(40, GPIO.IN, pull_up_down=GPIO.PUD_UP) game = True while game: redButtonState = GPIO.input(32) if redButtonState == 0: GPIO.output(red, GPIO.HIGH) time.sleep(1) GPIO.output(red, GPIO.LOW) yellowButtonState = GPIO.input(36) if yellowButtonState == 0: GPIO.output(yellow, GPIO.HIGH) time.sleep(1) GPIO.output(yellow, GPIO.LOW) greenButtonState = GPIO.input(38) if greenButtonState == 0: GPIO.output(green, GPIO.HIGH) time.sleep(1) GPIO.output(green, GPIO.LOW) blueButtonState = GPIO.input(40) if blueButtonState == 0: GPIO.output(blue, GPIO.HIGH) time.sleep(1) GPIO.output(blue, GPIO.LOW)

ボードはこのようになっているはずです。

すべての電子機器が揃いました。問題がある場合は、コードに誤りがないかを確認してください。そして、もしあなたが行き詰まったら、Pastebinからフルコードをダウンロードできることを忘れないでください。

ゲームを作る

このプロジェクトでは、ラボボードを使い始めるために知っておくべき基本的なことをすべて網羅しました。しかし、そのスキルをゲームに反映させることで、あなたの実力を発揮することができますよ。

サイモン」は、点滅する光の列を見て、そのパターンを記憶していくゲームです。1灯から始められるのも手軽です。各レベルでは、パターンにランダムな光が加わり、ゲームの難易度を高めています。

クリエーションモード

このステップはかなりシンプルです。1つの配列に光のパターンを格納します。2番目の配列は、照明用のGPIOピンを格納します。ゲームサイクルごとに、新しいランダムな光が配列の末尾に追加されます。random.randint()関数を使って、0から3までの数字(4個のLEDを表す)を選択します。

pattern = []lights = [red, yellow, green, blue]while game: pattern.append(random.randint(0,3))

次に、ライトを点灯してパターンを表示させます。

while game: pattern.append(random.randint(0,3)) for x in pattern: GPIO.output(lights[x], GPIO.HIGH) time.sleep(1) GPIO.output(lights[x], GPIO.LOW) time.sleep(0.5)

同じ光が連続して使われているパターンを見やすくするために、2つの光の間で間を取ることが重要です。

プレイヤーの入力を得る

次に、このゲームは、プレイヤーが照明の順番を当てるのを待たなければなりません。プログラムは、パターン内の各ライトをチェックし、プレイヤーがボタンを押すのを待つ必要があります。そのためには、ネストしたループが必要です。

for x in pattern: waitingForInput = True while waitingForInput: redButtonState = GPIO.input(32) yellowButtonState = GPIO.input(36) greenButtonState = GPIO.input(38) blueButtonState = GPIO.input(40) if redButtonState == 0: GPIO.output(red, GPIO.HIGH) waitingForInput = False time.sleep(1) GPIO.output(red, GPIO.LOW) if yellowButtonState == 0: GPIO.output(yellow, GPIO.HIGH) waitingForInput = False time.sleep(1) GPIO.output(yellow, GPIO.LOW) if greenButtonState == 0: GPIO.output(green, GPIO.HIGH) waitingForInput = False time.sleep(1) GPIO.output(green, GPIO.LOW) if blueButtonState == 0: GPIO.output(blue, GPIO.HIGH) waitingForInput = False time.sleep(1) GPIO.output(blue, GPIO.LOW)

上のコードのほとんどは、テストボタンのために書いたコードを再利用しています。

関連:Pythonが未来のプログラミング言語である6つの理由

プレーヤー入力の確認

ここから、プレーヤーが正しいモードであることを簡単に確認することができます。ボタンを押すたびに、そのボタンが正しいかどうかをチェックすることができます。そのために、ボタンの入力ごとに別のif文を追加します。

if redButtonState == 0: GPIO.output(red, GPIO.HIGH) waitingForInput = False if x != 0: game = False time.sleep(1) GPIO.output(red, GPIO.LOW)

forループの変数xには、次のライトの番号が入ります。赤色LEDの位置は1番目、つまり数字の0です。私たちのパターンに0があるときにプレイヤーが赤色LEDのボタンを押せば、その通りになるのですそうでなければ、負けてしまう。変数gameにfalseを設定すると、ゲームループが停止し、プログラムが終了します。

おめでとうございます!あなたはゼロからゲームを作り上げましたね。

ゲームを作ると、LEDやボタンを追加するだけでなく、より多くのコードがこのプロジェクトに追加されます。友達や家族に最終成果物を見せることで、モチベーションを維持することができます。

このゲームはかなりシンプルです。基本設計の改良にチャレンジする。プレイヤーが負けた場合、ライトが点滅することがあります。もしかしたら、チャレンジして音を付けたいのかもしれませんね。あなたの想像力だけが頼りです。

まあ、それと持っていくハードのことですね。

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ