【Raspberry Pi Pico入門 – 3】LEDを追加してLチカ

2023年12月3日Raspberry Pi Pico入門,基本編

概要

前回は内蔵のLEDを制御してみましたが、今回は自分で追加したLEDを制御してみます。

実行環境

IDE:Arduino IDE 2.1.1
MCU:Raspberry Pi Pico

今回のテーマ

  • LEDの使い方を学ぶ

LEDを追加する

下図のようにブレッドボードにRaspberry Pi Pico、抵抗、LEDを接続します。
抵抗は1kΩ程度を使います。またLEDは極性があるので注意してください。足の長い方に抵抗がつながるようにしてください。

コーディング

「ファイル」→「新規スケッチ」をクリックして新しいスケッチを開きます。開いたら下のコードをコピペしてください。
前回のBlinkとほぼ同じですが、pinMode()とdigitalWrite()の中をPIN_LEDに変更しています。

const int PIN_LED1 = 15;

void setup() {
  pinMode(PIN_LED1, OUTPUT);
}

void loop() {
  digitalWrite(PIN_LED1, HIGH);
  delay(1000);
  digitalWrite(PIN_LED1, LOW);
  delay(1000);
}

動作確認

マイコンに書き込みます。LEDが1秒スパンで点滅したら成功です。

解説

電子回路の基本

「回路」と名の付く通り、電子回路は”1周すること”が重要になります。つまり電池や電源のプラス極から出ていく電流は、必ず電池や電源のマイナス極に帰ってきます。
※厳密には1周していない回路もありますが、かなり高度な回路なのでここでは考えません。

また回路が分岐している場合、分岐に入る電流と分岐から出ていく電流は必ず等しくなります。水道管で考えるとわかりやすいかもしれません。この法則を「キルヒホッフの第1法則」といいます。

LEDの使い方

LEDはダイオードの一種で、電流が流れると電流の大きさに応じて光を出す部品です。
どれだけ電流を流すかは直列に繋いだ抵抗の値で決まります。

回路図は下のようになります。この回路でGP15の電圧を3.3Vにすると、電流がR1を通ってLED1に流れ、GNDに入ることになります。

マイコンの内部も含めて 等価回路 にすると下図のようになります。
プログラムでGP15のHigh/Lowを切り替えるとスイッチに相当する部分が切り替わり、5Vに繋がったり0Vに繋がったりします。

LEDに流れる電流の計算式は下記です。VはGP15の電圧で、Raspberry Pi Picoの場合は3.3Vです。
Vfは順方向電圧と呼ばれているパラメータです。ダイオードは電圧をかけると電流値にかかわらず一定量の電圧降下が発生します。そのため電圧が下がった分、抵抗の電圧が下がるので考慮する必要があります。一般的なLEDだと1.8Vくらいです。

GP15の電圧:V
LEDの順方向電圧:Vf
抵抗値:R
$$電流:I=\frac {V-V_f}{R}=\frac {3.3-1.8}{1000}=0.0015A=1.5mA$$

面倒な場合は下のリンク先で計算できます。

Raspberry Pi PicoのGPIOから出せる電流はMax 4mAなので、1.5mAなら余裕で動かせそうです。

抵抗値の選定

抵抗やコンデンサはすべての値を網羅しているわけではなく、ある法則に従って飛び飛びの値で売られています。
そのため抵抗の理想値を計算した後に、理想値に近い抵抗を探してくる必要があります。
この法則は「系列」とよばれています。一般的にはE12系列がよく使われているので価格が安く、それ以外は生産数が少ないので価格が上がる傾向があります。たとえば500[Ω]の抵抗はどの系列にも存在しないため、入手は非常に困難です。

系列の法則については上手く文章で説明できないので、E12系列の抵抗値一覧表を用意しました。

系列によって係数が異なっており、E12系列は上記の10個となります。桁についてはどの系列も共通です。
※1Ω以下の抵抗もあり、基本的には系列に従って用意されることが多いです。

また、1000Ω=1kΩ、1000kΩ=1MΩと大きい値には接頭辞を追加して呼びます。

回路シミュレーション

ここまで解説した内容を実際に触って確認できるよう、シミュレーションを用意しました。
↓このリンク先にシミュレーション用の回路を作りました。

回路シミュレーション

コードの解説

c言語でも使われる構文は省略します。

  • setup()
    起動後に1回だけ実行される関数です。初期設定などを記述します。
  • loop()
    setup()が終了した後、電源を切るまでこの関数を繰り返し実行します。組み込み系ではメインループと呼ばれます。
  • pinMode()
    GPIOをどのように使うかを設定する関数です。第一引数が設定するピンの番号、第二引数が設定内容になります。
    今回は電圧を出力したいので「OUTPUT」に設定します。
  • digitalWrite()
    第一引数で指定したピンの電圧を変更します。HIGH(3.3V)、LOW(0V)の2種類が選べます。
  • delay()
    引数で指定した時間、プログラムを停止させる関数です。単位は[ms](1000分の1秒)です。

試しにdelay()の引数を500にしてみると、1秒ごとの変化だったのが0.5秒ごとに変わります。