見出し画像

ArduinoでLEDを光らせる(初心者がコーディング)

今回は、生徒と授業で学べるように、ArduinoをつかってLEDを点灯させるにはどうしたらいいのかを、基礎基本から学んでみようかと。

Tinkercad をつかって学ぶ

何もないところから学ぼうとすると大変ですし、生徒といっしょにってなったら難しいものです。なので、何かツールは使えないだろうかと調べてたらありました。Tinkercadです。

3DのCADだけかと思っていたら、回路設計もできるんですね。便利です。シミュレーター的にも使えるので、興味をもったら遊んでみるといいのかもしれません。

このTinkercadにはチュートリアルがあって、コツコツと学ぶことができます。

今回はLEDを光らせるProjectを進めてみます。

Tinkercadのチュートリアルから

概要から、日本のテキストではあまり見かけないような書き方なのかなと感じます。

このプロジェクトでは、あなたのArduinoがSF映画の主役を務めます!
電子回路の基本を理解した今、Arduinoを使って物を制御することを始めてみましょう。このプロジェクトでは、ボタンを押すとコントロールパネルが点灯します。
このプロジェクトでは、デジタル入力と出力、変数、および基本的なArduinoコードを使用します。

Tinkercadチュートリアル Project 2: Spaceship Interface を翻訳

ということだそうです。で、順番としては、

  1. Introduction

  2. Setting Up the Circuit

  3. Writing the Code

  4. How to Read Resistor Color Codes

  5. Spaceship Template

となっていて、順を追って、読み解いていくと、作れるようになるという仕組みでした。最初に説明があって、道具の接続方法が書かれていて、Codeをつくって、抵抗器の識別の仕方と、紙箱で外を加工テンプレートの説明があった。ということなので、ここでは、Setting Up the Circuit と Writing the Code について、紹介。

Setting Up the Circuit

使った道具としては以下の通り

  1. Arduinoボード:ブレッドボードの近くに配置し、ジャンパーワイヤで接続します。

  2. ボタン(スイッチ):ブレッドボード中央の「溝」をまたぐように設置します(スイッチの脚が異なる行に配置されるように)。

  3. LED(緑1つ、赤2つ):各LEDの長い脚(アノード)をArduinoのデジタルピン(例: ピン3、ピン4、ピン5)に接続。短い脚(カソード)は抵抗を介してGNDに接続します。

  4. 抵抗(220Ωまたは330Ω);各LEDとGNDの間に接続して、電流を制限します。

  5. プルダウン抵抗(10kΩ):ボタンの片側をArduinoのデジタル入力ピン(例: ピン2)に接続し、もう片側をGNDに接続。これにより、ボタンが押されていないときに信号が確実にLOWになるようにします。

  6. ジャンパーワイヤ:必要に応じて、Arduinoとブレッドボード間の接続に使用します。

そして、ついないだらこんな感じ

LEDは接続するときに向きがあるので注意が必要でして、

  1. 長い脚が正極(アノード)

    • LEDの脚が長い方が「正極(アノード)」で、プラスに接続します。

  2. 短い脚が負極(カソード)

    • 短い脚が「負極(カソード)」で、マイナス(GND)に接続します。

これは、その通りつないでいくといいのかなという感じですね。慣れるまでは。慣れたらブレッドボードがどんなものなのか理解できるけど、最初から説明してもよくわかんないんですね。自分も、触りながら、ブレッドボードがどんなものなのかを理解していった感じです。

Writing the Code

接続したらArduinoに命令するために、コードを書きます。Arduinoでは、プログラミングを「絵を描く」ように自由にアイデアを試す感覚を大切にしているため、コードのことを「Sketch(スケッチ)」と呼んでいるそうです。

Sketchはこんな感じで記載する

Arduinoを動かすには、Arduino IDEのインストールか、Arduino Cloud Editor が必要。どちらも基本無料で利用可能。

チュートリアルの指示通り書いてみたのは以下のSkech

//define variables and constants

  int switchState = 0;

//setup 
// the setup routine runs once when upload the sketch:
void setup() {
  pinMode(3, OUTPUT); 
  pinMode(4, OUTPUT); 
  pinMode(5, OUTPUT); 
  pinMode(2, INPUT); 
}

//loop
// the loop routine runs over and over again forever: 

void loop() { 
  switchState = digitalRead(2);
  
//if the button is not pressed 
  if (switchState == LOW) { 
    digitalWrite(3, HIGH); // green LED on 
    digitalWrite(4, LOW); // red LED off 
    digitalWrite(5, LOW); // red LED off 
  }

//if the button is pressed 
  else { 
    digitalWrite(3, LOW); 
    digitalWrite(4, LOW); 
    digitalWrite(5, HIGH);
    delay (1000); //wait a quarter second 
  //toggle the red LEDs 
    digitalWrite(4, HIGH); 
    digitalWrite(5, LOW); 
    delay (1000); 
  } //end of else statement 
} //end of loop()

と、書いたものの、よくわかんないので、ちょっと自分の頭の整理も兼ねて説明を添えておく。

int switchState = 0; // ボタンの状態を記録する変数

まず、ボタンの状態(HIGHまたはLOW)を記録するための変数を定義しています。

void setup() {
  pinMode(3, OUTPUT); // 緑のLED
  pinMode(4, OUTPUT); // 赤いLED1
  pinMode(5, OUTPUT); // 赤いLED2
  pinMode(2, INPUT);  // ボタン入力
}

まずは、setup()関数。これは、プログラムの最初に一度だけ実行されます。今回は、ピンモードの設定をしています。なので、pinMode()を使ってLEDをつないであるPIN3から5はアウトプット、ボタンをつないでいるPIN2はインプットに設定。

void loop() { 
switchState = digitalRead(2); // ボタンの状態を読み取る

次に、loop()関数。これは、プログラムの終了まで繰り返し実行されます。実際の動作(今回でいうと、LEDの点灯・消灯など)を記述します。switchState = digitalRead(2) は最初に指定した変数を、PIN2の情報を読み取ろうねという指示。

//if the button is not pressed
if (switchState == LOW) {
digitalWrite(3, HIGH); // green LED on
digitalWrite(4, LOW); // red LED off
digitalWrite(5, LOW); // red LED off
}

ボタンが押されていないとき(LOW)のときの設定。押されてなかったら、緑のLEDは点灯、2つの赤のLEDは消灯という指示

//if the button is pressed 
  else { 
    digitalWrite(3, LOW); 
    digitalWrite(4, LOW); 
    digitalWrite(5, HIGH);
    delay (1000); //wait a quarter second 
  //toggle the red LEDs 
    digitalWrite(4, HIGH); 
    digitalWrite(5, LOW); 
    delay (1000); 

こちらは、ボタンが押されたとき(HIGH)のときの設定。1秒間隔で赤いLED1とLED2を切り替える動作をするための設定。delay()は時間の感覚を指定している。単位はミリ秒。1000ミリ秒=1秒の意味。

慣れないうちは、ChatGPT先生にサポートしてもらいながら、書いていくのがいいと思います。うまくいかなくても「エラー出たんだけど?」って聞いていると解説してくれて、わからないなりにやっていくと、そのうちぼんやり理解できるようになります。

やってみた

ボタン押す前
押したら1つ赤LEDが点灯し
1秒後に隣の赤LEDが点灯

まあ、こんな感じになる。

実際にやってみたら「あれ、こんなこともできるんじゃない?」って思うようになるのが不思議なところ。

私がふと思ったのが、「ここにスピーカーを連動させたら、スターターになるんじゃないだろうか・・・」だった。

というわけで、次回はスピーカーを合わせてみたところについて紹介します。

最後に

このnoteの記事の筆者は音声配信をVoicyで行っています。

また、筆者についての情報やお問い合わせは

をご覧ください。

いいなと思ったら応援しよう!

のざたん|会いに行けるセンセイ
いただいたサポートは、誰でも教員と会って話せる『会いに行けるセンセイ』の活動に利用させていただきます。