Raspberry Pi とブレッドボードを使用して Simon ゲームを作成するための初心者ガイド

ブレッドボードを使用すると、何もはんだ付けせずに回路を作成できます。これは電子機器を実験するのに最適なツールですが、少し怖いかもしれません。プロジェクトを作成すると、学習中のモチベーションを維持するのに役立ちます。

初心者向けに素晴らしいプロジェクトを作成するのに役立つシンプルなゲームがたくさんあります。 ラズベリーパイ。簡単に始められるゲームの 1 つが Simon です。サイモンのゲームは 記憶ゲーム 一連のライトがランダムな順序で点滅し、プレイヤーはその順序を覚えておく必要があります。プレイヤーが進むにつれて、シーケンスの長さは長くなります。

必要なコンポーネント

開始するには、次のものが必要です。

  • ラズベリーパイデバイス。
  • microSD カードがオペレーティング システムにフラッシュされました ラズビアンOS 彼女に。
  • 4 x 異なる色のLEDライト。
  • 4 x 電気抵抗器 (220 オームから 1 キロオームまで)。
  • ボタン×4。
  • 1×ブレッドボード。
  • すべてを接続するパッチケーブル。

このプロジェクトには任意の Raspberry Pi モデルを使用できますが、Pi Zero モデルははんだ付けをしないとブレッドボードに簡単に接続できません。どのモデルを使用する場合でも、電源、モニター、キーボード、マウスも必要です。

これまでに Raspberry Pi をセットアップしたことがない場合は、このチュートリアルですべての準備を整える方法を学ぶことができます。 Raspberry Pi の初心者ガイド.

このチュートリアルでは Python コードを作成します。任意のテキスト エディタを使用して作成できますが、コード エディタの方が簡単かもしれません。これらの多くは Raspberry Pi OS にすでにインストールされており、Thonny は初心者にとって使いやすいように設計されています。何を使用する場合でも、このチュートリアルに従うには、コードを保存して実行できる必要があります。

ブレッドボードを使い始める

Raspberry Pi には 2 列の汎用入出力 (GPIO) ピンがあります。これらのピンを使用すると、さまざまな外部コンポーネントを Raspberry Pi に接続できます。一部のピンは情報を送信し、他のピンは電力を供給し、一部は電子デバイスを接地します。

ブレッドボードに LED を追加することから始めます。

まず、GPIO ピンをボードに接続します。電源ピンやグランド ピンではなく GPIO ピンである限り、どのピンでも構いません。上は GPIO ピンの図であり、どのピンを使用するかを決定するのに役立ちます。このチュートリアルでは、GPIO 18 とも呼ばれるピン ID 24 を使用します。

このピンはブレッドボードに電力を供給し、Raspberry Pi がボード上のコンポーネントと通信できるようにします。次に、Pi のピン 6 をブレッドボードのグランド リードに接続します。これにより基板が接地され、電気回路が作成できるようになります。

Raspberry からの電力が高すぎるため、LED を直接接続できません。抵抗を使用すると電力レベルが低下し、LED の焼損が防止されます。抵抗の一方の側を GPIO ピンが接続されているのと同じラインに接続し、抵抗の端をボードのもう一方の側に接続します。次に、LED のプラス側を抵抗の後に配置します。 LEDのマイナス端子をマイナス側に直接接続することも可能です。最終結果は上のグラフのようになります。配線を注意深く確認し、Pi の電源を入れます。ランプが点灯するはずです。

これで、コードを使用して制御できる回路を Raspberry Pi で作成しました。

Python コードを使用して LED を制御する

このチュートリアルではコードを段階的に説明しますが、最終コードに戻りたい場合は、次の場所から入手できます。 ペーストビン.

現時点では LED に電力が供給されていますが、いつオンまたはオフになるかを制御したいと考えています。次の Python コードにより、ボードと通信できるようになります。

RPi.GPIO を GPIO としてインポートします。GPIO.setmode(GPIO.BOARD) GPIO.setwarnings(False) red = 18 GPIO.setup(red, GPIO.OUT) GPIO.output(red, GPIO.LOW)

最初の数行で設定が行われます。 Raspberry Pi GPIO ライブラリがインポートされます。それが私たちに許すところでは GPIOとして 入力の手間を省くために、変数 RPi.GPIO を GPIO として参照します。 GPIO ピン モードは ON に設定されています ボード。この設定を使用する必要はありませんが、GPIO 行の順序でピンを参照する方が簡単な場合があります。

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

最後の 18 行は LED を制御します。赤い LED は GPIO ピン XNUMX に接続されています。それを記憶する代わりに、変数を保存します。 場所。その後、彼はこう言います GPIO.セットアップ 私たちのプログラムは情報を赤いピンに送信します。最後に、GPIO.output を赤いピンに設定します。 低いです。このプログラムを実行するとライトが消えます。再びオンにするには、切り替えます GPIO.LOW 私に GPIO.HIGH をクリックして、プログラムを再度実行します。

コードを保存して、 ت<XNUMXxDXNUMX><XNUMXxBXNUMX><XNUMXxBXNUMX><XNUMXxDXNUMX><XNUMXxDXNUMX>ييل 実際に動作している様子を見るためです。コードエディターに「実行」ボタンがない場合は、任意の名前 (myfilename) で保存し、コマンドを実行します。 Python私のファイル名.py ターミナルウィンドウ内。まず、新しい Python ファイルと同じディレクトリに移動する必要があります。

複数の LED を追加する

Simon ゲームを作成するには、異なる色の 4 つのランプが必要です。赤色 LED のセットアップに使用したのと同じ手順を使用して、他の 3 つの LED をセットアップできます。配線は次の図のようになります。

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

RPi.GPIO を GPIO としてインポートします。GPIO.setmode(GPIO.BOARD) GPIO.setwarnings(False) red = 18 yellow = 22 green = 24 blue = 26 GPIO.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)

LED をテストしたら、調整します。 GPIO.出力 こんにちは GPIO.LOW 各 LED を再度消灯します。

使用するワイヤーの色は問題ありませんが、ボードを読みやすくするために意味のある色を使用するようにしてください。たとえば、アース配線には黒い線がよく使用されます。この回路では、ワイヤーの色を LED ライトの色と一致させることができます。

ボタンで照明を制御

まず、パネルにボタンを追加します。ボタンは接地コネクタと GPIO ピンの両方に接続する必要があります。電気回路は次のようになります。

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

GPIO.setup(32, 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)

ボタンが押されたことをプログラムで継続的にチェックしたいので、repeat コマンドを使用する必要があります。 while。反復が false になることは決してないため、コードは実行を続け、停止ボタンを押すかキーボード ショートカットを使用してプログラムを手動で終了するまでボタンをチェックします。 Ctrlキー+ C.

次に、GPIO ピンが送信する入力を参照しやすくするために、この情報を変数に保存します。 赤ボタンの状態。ボタンの入力が 0 に変化すると、ボタンが押されたことがわかります。

ボタンを押すと赤色LEDが点灯します。 1 秒後に LED が消えます。この期間を追加するには、次の関数を使用します。 タイムスリープ (1)。これを機能させるには、コードの先頭にある時間ライブラリをインポートする必要があります。

1 つのボタンがトリガーされると、各 LED に 1 つずつ、さらに 3 つを追加できます。コードは次のようになります。

インポート ランダム インポート時間 インポート RPi.GPIO を GPIO としてインポート GPIO.setmode (GPIO.BOARD) GPIO.setwarnings(False) red = 18 yellow = 22 green = 24 blue = 26 GPIO.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: 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) GPIO.input(40) if blueButtonState == 0:GPIO.output(blue, GPIO.HIGH) time.sleep(1) GPIO.output(blue, GPIO.LOW)

ブレッドボードは次の図のようになります。

これですべての電子機器の準備が整いました。問題がある場合は、コードにエラーがないか確認してください。完全なコードは次からダウンロードできることに注意してください。 ペーストビン 行き詰まったら!

ゲームを作成する

このプロジェクトでは、ブレッドボードを使い始めるために知っておく必要のある基本をすべて網羅しました。しかし、これらのスキルをゲームに変えると、何ができるかを実際に示すことができます。

Simon ゲームでは、プレイヤーは一連のライトが点滅するのを見て、そのパターンを覚えなければなりません。ライト1つで簡単に始動。各レベルではパターンにランダムな光が追加され、ゲームがより難しくなります。

パターンを作成する

この手順は非常に簡単です。 1 つの配列にはライト パターンが保持されます (パターン)。 2 番目のアレイには LED の GPIO ピンが保存されます (ライト)。ゲームを繰り返すたびに、新しいランダムなライトがパターン セットの最後に追加されます。関数を使っていきます ランダム。 0 つの LED を表す 3 ~ 4 の数字を選択します。

pattern = [] lights = [赤、黄、緑、青] ゲーム中: pattern.append(random.randint(0,3))

次に、ライトをオンにしてパターンを表示する必要があります。

ゲーム中: 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つの信号の間で停止することが重要です。同じライトがパターン内で連続して使用されているかどうかを簡単に確認できます。

プレイヤーの入力を取得する

次に、ゲームはプレーヤーがライトの配置を推測するまで待たなければなりません。プログラムはパターン内の各ライトをスキャンし、プレーヤーがボタンを押すまで待機する必要があります。これにはネストされた反復が必要です。

time.sleep(1) GPIO.output(red, GPIO.LOW) の場合 yellowButtonState == 0 の場合: GPIO.output(yellow, GPIO.HIGH) 待機中入力 = False time.sleep(1) GPIO.output(yellow, GPIO.LOW) の場合 greenButtonState == 0 の場合: GPIO.output(green, GPIO.HIGH) 待機中入力 = False time.sleep(1) GPIO.output(green, GPIO.LOW) の場合 blueButtonState == 0 の場合: GPIO.output(blue, GPIO.HIGH) 待機中入力 = False time.sleep(1) GPIO.output(blue, GPIO.LOW)

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

プレーヤーの入力を確認する

ここから、プレーヤーが正しいパターンを入力したかどうかを確認するのは非常に簡単です。ボタンを押すたびに、ゲームはそれが正しいボタンであるかどうかを確認します。これを行うには、ステートメントを追加します if 各ボタンエントリのその他:

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

変数 x 繰り返しの 彼は次の光の番号を持っています。赤い LED は最初の位置、つまり 0 番にあります。パターンに 0 があるときにプレイヤーが赤い LED ボタンを押すと、そのプレイヤーは正しいことになります。そうでなければ、彼はゲームに負けます。これにより変数が作成されます ゲーム こんにちは false ゲームループを停止し、プログラムを終了します。

おめでとう!ゲームを一から作りました!

ゲームを作成すると、LED やボタンを追加するだけでなく、さらに多くのコードがこのプロジェクトに追加されます。友人や家族に見せられる最終プロジェクトに向けて取り組むと、モチベーションを維持するのに役立ちます。

このゲームはかなりシンプルです。基本設計の改善に挑戦してください。おそらくプレイヤーが負けた場合にライトが点滅する可能性があります。ゲームにサウンドを追加することに挑戦したいと思うかもしれません。あなたの想像力だけが限界です!

まあ、想像力とどのデバイスを使用するかはあなたの想像力次第です。今、あなたは見ることができます Raspberry Pi を使用してスマート TV を作成するための最高のプロジェクト

トップボタンに移動