今から始める電子工作 ④ まずはLチカ その3 回路図を読み解く

回路図記号は新旧入り乱れている

 前回、D12ピンにLEDをつなぎました。

 この回路図では、抵抗はMIL記号です。米国の軍用規格でした。その後、規格で張り合っているヨーロッパの規格が割と標準になっており、横滑りでJIS規格になる場合が多いようです。

 LEDの記号は、たぶん次の形が最新だと思います。EUに輸出する機器の回路図でこれが使われているものと思われますが、一般にはあまり見かけません。

  JIS規格の抵抗です。

集大成: LEDをたくさんつないで点灯させる

 ディジタル用のピンは、D0~D13、D18/D19です。合計16本のLEDがつなげられます。

 アナログ用のピンは、入力用です。Arduino UNO3にはアナログ出力はPWM出力が用意されていますが、D-Aコンバータによるアナログ出力はありませんでした。UNO4ではD-Aコンバータが一つ利用でき、A0ピンをアナログ出力に設定できます。

 AIに、「Arduino analogピンはディジタル出力に使える」と聞くと、できないと答えます。

 前回掲載したI/Oピンの図を見ます。

 アナログ・ピンのところに、D14~D19のディジタル・ピンの記号が書かれています。6本あります。Arduino UNO3の時代からアナログ入力をディジタル用にも使えていました。

 ものはためし、D12につないでいたLEDの配線をA0/D14につなぎ、スケッチを変更して実行します。

 最初の行にあるD12をD14に変更しただけです。D12のときと同様に点滅しました。

 この確認から、16本から6本増え、合計で22本のディジタル出力が利用できそうです。違いました。

  • A4/D18とD18/SDA
  • A5/D19とD19/SCL

 この2ピンは同じですね。UNOの初期ごろのモデルではSCL/SDAのピンは存在しませんでした。I2Cバスを利用するときはA4/A5ピンを使っていました。その後、I2Cバス専用の2ピンが追加されました。ピンは追加されましたが、独立しているわけではなくアナログ信号の入力ができる、というか、つながっています。互換性を維持したためのようです。

 したがって、ディジタルI/Oで利用できるピン数は20本になります。

 
#define redLED D14

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED as an output.
  pinMode(redLED, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(redLED, HIGH);  // turn the LED on (HIGH is the voltage level)
  delay(1000);                 // wait for a second
  digitalWrite(redLED, LOW);   // turn the LED off by making the voltage LOW
  delay(1000);                 // wait for a second
}

20本の配線は大変

 ディジタル出力全部にLEDをつなぐ配線も大変ですが、スケッチはどうしましょう。

 LEDは緑色、電流制限抵抗は1.2kΩです。1kΩでも1.5kΩでもかまいません。回路図を書き終わって気が付いたのですが、抵抗とLEDが逆でした。逆になっていても動作上問題はありません。

 ディジタル・ポートはD12のように記述していましたが、ただの数字でも同様に指定ができます。

 for文で、0~19ポートを指定しています。intは整数型を表します。i++は、ループが1回終わったらインクリメントする記述です。

 実行すると、LEDの光が端から端へ流れるように見えます。

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize All digital pin as an output.
  for (int i = 0; i < 20; i++){
    pinMode(i, OUTPUT);
  }
}

// the loop function runs over and over again forever
void loop() {
  for (int i = 0; i < 20; i++){
    digitalWrite(i, HIGH);  // turn the LED on (HIGH is the voltage level)
    delay(10);                 // wait for a second
    digitalWrite(i, LOW);   // turn the LED off by making the voltage LOW
    delay(10);                 // wait for a second
  }
}

前へ

今から始める電子工作 ③ まずはLチカ その2 D13でない別のピンでLEDを点滅させたい

次へ

今から始める電子工作 ⑤ ディジタル入力 その1 スイッチ1個の基本