.. note:: こんにちは!SunFounder Raspberry Pi & Arduino & ESP32 愛好者コミュニティへようこそ!Facebookで、Raspberry Pi、Arduino、ESP32をより深く学び、仲間と一緒に楽しみましょう。 **参加する理由** - **専門的なサポート**: アフターサービスや技術的な問題を、コミュニティやチームの助けを借りて解決します。 - **学びと共有**: スキルを向上させるためのヒントやチュートリアルを交換しましょう。 - **限定プレビュー**: 新製品の発表や予告をいち早く知ることができます。 - **特別割引**: 新製品に対して、特別な割引をお楽しみください。 - **フェスティブプロモーションとプレゼント**: プレゼントやホリデープロモーションに参加しましょう。 👉 私たちと一緒に探求し、創造する準備はできましたか?[|link_sf_facebook|]をクリックして、今すぐ参加しましょう! 7. 信号機を作ろう! ============================== .. .. image:: img/5_traffic_light_pic.png .. :width: 400 .. :align: center このレッスンへようこそ!この魅力的なレッスンでは、理論的な概念と電子工学やプログラミングにおける実践的な応用との間のギャップを埋めます。私たちは、擬似コード(簡略化されたプログラミング言語)を機能するArduinoスケッチに変換するプロセスに取り組みます。この演習では、信号機の操作をシミュレートし、プログラミングと回路設計に関する実践的な経験を提供します。擬似コードの解釈と実装を学ぶことで、コードを使って電子デバイスを制御するための論理を深く理解することができます。 .. raw:: html このレッスンで学ぶこと: * 電子回路の機能を計画するための擬似コードの記述と解釈を学びます。 * 擬似コードをArduinoスケッチに変換して信号機のシミュレーションを制御します。 * LEDとArduinoボードを使用して信号機システムを構築し、プログラムします。 これらのスキルをマスターすることで、基本的な電子システムの設計、プログラム、トラブルシューティングができるようになり、より複雑なプロジェクトへの道が開かれます。 信号機の準備をしましょう ------------------------------------------ こんにちは!Arduinoで自分だけの信号機を作る準備はできましたか?ここで必要なものを確認しましょう。 **必要なコンポーネント** .. list-table:: :widths: 25 25 25 25 :header-rows: 0 * - 1 * Arduino Uno R3 - 1 * 赤色LED - 1 * 黄色LED - 1 * 緑色LED * - |list_uno_r3| - |list_red_led| - |list_yellow_led| - |list_green_led| * - 1 * USBケーブル - 1 * ブレッドボード - 3 * 220Ω抵抗器 - ジャンパーワイヤー * - |list_usb_cable| - |list_breadboard| - |list_220ohm| - |list_wire| **ステップバイステップで組み立てる** レゴセットを組み立てるように、すべてを一緒に組み立てましょう! .. image:: img/7_traffic_light.png :width: 600 :align: center 1. 220Ωの抵抗をブレッドボードに接続します。一方の端を負極端子に、もう一方の端を1Bに接続します。 .. image:: img/7_traffic_light_resistor.png :width: 600 :align: center 2. 緑色LEDをブレッドボードに追加します。LEDのアノード(長いリード)は1Fに、カソード(短いリード)は1Eに挿入します。 .. image:: img/7_traffic_light_green.png :width: 600 :align: center 3. 緑色LEDをArduino Uno R3のピン3にワイヤーで接続します。ジャンパーワイヤーを1Jに挿入し、もう一方の端をArduino Uno R3のピン3に接続します。 .. image:: img/7_traffic_light_pin3.png :width: 600 :align: center 4. 別の220Ω抵抗を用意し、一方の端を負極端子に、もう一方の端を6Bに接続します。 .. image:: img/7_traffic_light_yellow_resistor.png :width: 600 :align: center 5. 黄色LEDを用意します。LEDのアノード(長いリード)は6Fに、カソード(短いリード)は6Eに挿入します。 .. image:: img/7_traffic_light_yellow.png :width: 600 :align: center 6. 黄色LEDをArduino Uno R3のピン4に接続します。 .. image:: img/7_traffic_light_pin4.png :width: 600 :align: center 7. 同じ方法で赤色LEDを接続し、赤色LEDをArduino Uno R3のピン5に接続します。 .. image:: img/7_traffic_light_red.png :width: 600 :align: center 8. おっと!回路を接地するのを忘れていました。ブレッドボードの負極側を黒いワイヤーでArduino Uno R3のGNDピンに接続します。これで準備完了です! .. image:: img/7_traffic_light.png :width: 600 :align: center .. note:: Arduino Uno R3にはGNDピンが3つあります。どれを使っても同じように機能します。 これで、信号機のセットアップが完了しました!各色のライトはR3上のスイッチによって制御され、車に「停止」「待機」「進行」を指示する準備が整いました。本物の信号機のように動作するものを作るのはすごく楽しいですね!お疲れ様でした! 信号機のための擬似コードの作成 ------------------------------------------- 次は、LEDに目的を持たせましょう。このアクティビティでは、LEDを信号機として機能させ、交通の流れを制御するプログラムを作成します。 信号機は、3つの色を厳密な順序で切り替えるため、Arduinoプログラミングに取り組む理想的なプロジェクトです。信号機を完璧にするには、Arduinoにタスクを明確に指示する必要があります。 人間同士のコミュニケーションは、聞く、話す、読む、書く、ジェスチャー、表情などで行います。マイクロコントローラー(Arduinoボードに搭載されているもの)とのコミュニケーションは、コードを書くことによって行います。 自然言語で「信号機を作れ」とArduinoに指示することはできませんが、実際のArduinoコード開発の補助として、自然言語を使って「擬似コード」を書くことができます。 .. note:: 擬似コードの作成において、正しいも間違いもありません。擬似コードが詳細であればあるほど、実際のプログラムに変換するのが容易になります。 あなたの回路が信号機のように機能するために、何が必要かを考えてみてください。ログにあるスペースに、あなたの信号機がどのように動作するかを記述する擬似コードを書きましょう。平易な英語を使ってください。 擬似コードを書く際のガイドとなる質問をいくつか示します: * 複数のライトが同時に点灯するべきですか? * ライトの順序はどうなりますか? * 1つのライトが点灯したとき、他のライトはどうなりますか? * 3つ目のライトが消えた後はどうなりますか? * 各ライトはどのくらいの時間点灯するべきですか? 以下は、いくつかの擬似コードの例です: .. code-block:: 1) すべてのLEDピンを出力として設定します。 2) メインループを開始します。 a) すべてのライトを消します。 b) 緑色のライトを10秒間点灯します。 c) すべてのライトを消します。 d) 黄色のライトを3秒間点灯します。 e) すべてのライトを消します。 f) 赤色のライトを10秒間点灯します。 3) ループの最初に戻ります。 .. code-block:: 設定: すべてのLEDピンを出力として定義します メインループ: 緑色のライトを点灯します 赤色と黄色のライトを消します 10秒待ちます 黄色のライトを点灯します 赤色と緑色のライトを消します 3秒待ちます 赤色のライトを点灯します 緑色と黄色のライトを消します 10秒待ちます 擬似コードには厳格な形式はなく、考えを整理し、論理的に構成するのに役立ちます。この論理的な順序がアルゴリズムと呼ばれます。アルゴリズムは、日常生活の中でおそらく無意識に使っているもので、プログラミングにおいては、キーワードやコマンドが材料であり、調理手順がアルゴリズムです。 アルゴリズムは一連のステップや指示の集合です。擬似コードからArduinoプログラミング言語に変換されたアルゴリズムは、Arduinoボードに何をいつ行うべきかを正確に指示します。 .. note:: 擬似コードを書く際に、付箋やインデックスカードを使うと便利です。アルゴリズムの各ステップを別々のメモに書くことで、ステップを簡単に並べ替えたり、挿入したり、削除したりすることができます。 擬似コードをArduinoスケッチに変換する ---------------------------------------------- これまでに書いたコードを改良し、必要に応じて ``digitalWrite()`` や ``delay()`` コマンドを追加していきましょう。ここでは、コードの構造化のためのガイドラインを示します。 ``void loop()`` 関数は、緑、黄、赤の各LEDに対して個別のセグメントを持ち、それぞれに異なる遅延時間を設定します。すべての遅延が同じ長さである必要はありません。コードのコメントを更新して、各行が何を達成するかを明確にしましょう。 1. 以前保存したスケッチ ``Lesson6_Blink_LED`` を開きます。「ファイル」メニューから「名前を付けて保存」を選び、スケッチの名前を ``Lesson7_Traffic_Light`` に変更して「保存」をクリックします。 2. 次に、擬似コードに従って、 ``void setup()`` で3つのピンすべてを出力に設定します。 ``pinMode()`` コマンドを2回コピーして下に貼り付け、各ピン番号を調整します。 .. code-block:: Arduino :emphasize-lines: 4,5 void setup() { // 初期設定をここに記述します。最初に1回だけ実行されます: pinMode(3, OUTPUT); // ピン3を出力に設定 pinMode(4, OUTPUT); // ピン4を出力に設定 pinMode(5, OUTPUT); // ピン5を出力に設定 } 3. ``void loop()`` では、まず緑色のLEDを点灯し、他の2つのLEDを消灯します。 ``digitalWrite()`` コマンドを2回コピーして、ピン番号を4と5に変更し、消灯させたいLEDの ``HIGH`` を ``LOW`` に変更して、コメントを現状に合わせて更新します。修正後のコードは以下のとおりです。 .. code-block:: Arduino :emphasize-lines: 4,5 void loop() { // メインコードをここに記述します。繰り返し実行されます: digitalWrite(3, HIGH); // ピン3のLEDを点灯 digitalWrite(4, LOW); // ピン4のLEDを消灯 digitalWrite(5, LOW); // ピン5のLEDを消灯 delay(3000); // 3秒待機 } 4. 緑色のLEDをより長く点灯させたい場合があります。通常の交通システムでは約1分ですが、ここでは10秒間にシミュレートします。 .. code-block:: Arduino :emphasize-lines: 6 void loop() { // メインコードをここに記述します。繰り返し実行されます: digitalWrite(3, HIGH); // ピン3のLEDを点灯 digitalWrite(4, LOW); // ピン4のLEDを消灯 digitalWrite(5, LOW); // ピン5のLEDを消灯 delay(10000); // 10秒待機 } 5. 次に、黄色のLEDを点灯し、他の2つのLEDを消灯させます。再び、 ``void loop()`` 内の4行をコピーして貼り付け、ピン4をHIGHに、他のピンをLOWに設定します。黄色のLEDの遅延時間を3秒に変更します。 .. code-block:: Arduino :emphasize-lines: 7-10 void loop() { // メインコードをここに記述します。繰り返し実行されます: digitalWrite(3, HIGH); // ピン3のLEDを点灯 digitalWrite(4, LOW); // ピン4のLEDを消灯 digitalWrite(5, LOW); // ピン5のLEDを消灯 delay(10000); // 10秒待機 digitalWrite(3, LOW); // ピン3のLEDを消灯 digitalWrite(4, HIGH); // ピン4のLEDを点灯 digitalWrite(5, LOW); // ピン5のLEDを消灯 delay(3000); // 3秒待機 } 6. 最後に、赤色のLEDを10秒間点灯させ、他の2つのLEDを消灯させます。完成したコードは次のようになります。 .. code-block:: Arduino void setup() { // 初期設定をここに記述します。最初に1回だけ実行されます: pinMode(3, OUTPUT); // ピン3を出力に設定 pinMode(4, OUTPUT); // ピン4を出力に設定 pinMode(5, OUTPUT); // ピン5を出力に設定 } void loop() { // メインコードをここに記述します。繰り返し実行されます: digitalWrite(3, HIGH); // ピン3のLEDを点灯 digitalWrite(4, LOW); // ピン4のLEDを消灯 digitalWrite(5, LOW); // ピン5のLEDを消灯 delay(10000); // 10秒待機 digitalWrite(3, LOW); // ピン3のLEDを消灯 digitalWrite(4, HIGH); // ピン4のLEDを点灯 digitalWrite(5, LOW); // ピン5のLEDを消灯 delay(3000); // 3秒待機 digitalWrite(3, LOW); // ピン3のLEDを消灯 digitalWrite(4, LOW); // ピン4のLEDを消灯 digitalWrite(5, HIGH); // ピン5のLEDを点灯 delay(10000); // 10秒待機 } **質問** 自宅周辺の交差点を見てみましょう。通常、信号機はいくつありますか?それらはどのように連携していますか? **まとめ** レッスン7の完了おめでとうございます!擬似コードを完全に機能するArduino制御の信号機システムに翻訳することに成功しました。以下は、あなたが達成したことの簡単なまとめです: * 擬似コードの習得: 擬似コードを使って電子システムの動作をアウトライン化する方法を習得し、論理的思考と計画スキルを向上させました。 * 擬似コードから実際のコードへ: 構造化された擬似コードのアプローチが、効果的かつ正確なArduinoプログラミングにどのようにつながるかを体験しました。 * 実践的応用: 信号機システムを組み立ててプログラムすることで、知識を実践的に応用し、ソフトウェアがハードウェアを直接制御する方法を示しました。 このレッスンで技術的な能力と分析的な思考力が向上し、エレクトロニクスとプログラミングのより複雑なプロジェクトに取り組むための準備が整いました。これらのスキルをさらに発展させ、技術統合の可能性を広げていきましょう!