header image
  • プログラム・ソフト
  • 物理学・工学
  • ガジェット
  • 当サイトについて
  • お問い合わせ
  • プログラム・ソフト
  • 物理学・工学
  • ガジェット
  • 当サイトについて
  • お問い合わせ
  • HOME
  • ガジェット
  • 【Python】ラズパイでLチカ:LEDの取り扱い~抵抗値の計算

【Python】ラズパイでLチカ:LEDの取り扱い~抵抗値の計算

投稿日:2022年9月7日

  • Tags: [Python], [Raspberry Pi], [回路],

サムネイル

小型PCであるラズベリーパイ (Raspberry Pi, 以下ラズパイ) は、
GPIOが搭載されているため、電子工作に利用できます。
その基本中の基本としてLチカ(LEDチカチカ)をする方法を本記事でまとめました。

ラズパイのGPIOの基本や注意事項は下記の記事にまとめてあるのでご参考に。
>> ラズパイのGPIOの基本・ピン配置と制御方法【Linuxコマンド、Python】

  • LEDについて
    • 極性
    • 電流値(順方向電流 $I_F$)
    • 電圧値(順方向電圧 $V_F$)
  • LEDとの接続回路
    • 必要部材
    • 回路図
    • 抵抗値の計算
  • Pythonコード
    • 前準備・ライブラリの確認
    • サンプルコード
  • まとめ

LEDについて

発光ダイオード (light-emitting diode: LED) を扱う上での注意点は下記です。

  • 極性(電源と接続する向き)がある
  • 電流値が大きすぎると破損する
  • LEDの色によって印加電圧値が異なる

極性

LEDの記号とイメージ図
Fig.1. LEDの記号とイメージ図

LEDには極性があり、直流電源とつなげるときのプラスとマイナスが決まっています。
極性を逆にして接続すると、破損する可能性があるので注意が必要です。
電源のプラスに接続する側をアノード、マイナスに接続する側をカソードと呼びます (Fig. 1)。

  • アノード : 電源のプラスと接続、ピンの足が長い
  • カソード : 電源のマイナスと接続、ピンの足が短い

ピンの足から極性が判断できますが、ピンが切ってあり判断できないときは、
発光部分の形状から判断することもできるかと思います。
金属部分の面積の小さい側がアノードである可能性が高いです (Fig. 1, 下) 。

電流値(順方向電流 $I_F$)

LEDに流す電流値(順方向電流値 $I_F$)が大きいほど、大きく発光します。
しかし定格の電流値よりも電流値を大きくすると、
寿命が急激に短くなり、さらに大きくすると破損(破裂)します。
定格の電流値は、各LEDごとのデータシートに記載されているはずです。

一般的には、2mA以上、20mA以下なので、よくわからない場合はこのぐらいを目安に電流値を設定すると良いでしょう。
ただし、ラズパイのGPIOは1ピンあたり16mA、全ピン合計50mAがMAXの電流値となるので、
ラズパイで光らせる場合には2~10mAあたりに調整しておくのが無難です。

電圧値(順方向電圧 $V_F$)

LEDは色によって必要となる電圧値(順方向電圧値 $V_F$)が異なります。
赤系から青系になっていくにつれて電圧が大きくなる傾向にあります。

  • 赤、黄: 1.8~2.2V程度
  • 緑、白、青: 2.7~3.6V程度

ラズパイのGPIOは3.3Vなので、青系のLEDでは電圧が足りずに光量が弱くなるかもしれません。

LEDとの接続回路

ラズパイのGPIOとLEDを接続して、Lチカするためのシンプルな回路を作ってみます。

必要部材

ラズパイのLチカ時の写真
Fig.2. ラズパイのLチカ時の写真

  • Raspberry Pi(ここではRaspberry Pi 3 Model B+を使用)
  • LED
  • 抵抗器(必要な抵抗値の計算は後述)
  • ジャンパー線
  • ブレッドボード(あると便利)

ラズパイとLEDと抵抗器が必須の部材になります。
回路は、導線のはんだ付けやワニ口クリップの利用で作っても問題ありませんが、
お試しで回路を作る程度の場合はブレッドボードを使うと便利です。
部品の交換や分解も容易に行えます。

回路図

LEDを電源(ラズパイのGPIO)に接続することでLEDを光らせることができますが、
そのまま直結すると電流値が大きすぎるため、LEDが破損します。
これを防ぐため、抵抗器をLEDと直列に接続し、電流値を制限します (左図 or 上図)。
接続する抵抗値の計算は下記になります。

抵抗値の計算

回路に入れる抵抗器の値を決める算出の手順は下記の通りになります。

  1. LEDの電流値(順方向電流 $I_F$)を決める(例 $I_F = 2$mA)
    • LEDの上限:約20mA
    • ラズパイの上限(1ピンあたり):約16mA
    •  → 2~10mAを目安に
  2. LEDの電圧値(順方向電圧値 $V_F$)を決める(例 $V_F = 2.7$V)
    • 赤、黄:1.8~2.2V程度
    • 緑、白、青:2.7~3.6V程度
  3. 抵抗器の電圧値を計算する(例 3.3V – 2.7V = 0.6V)
    • 抵抗器の電圧値:電源電圧 (3.3V) – $V_F$
  4. 抵抗器の電圧値と電流値から抵抗値を算出(例 0.6V / 0.002A = 300$\Omega$)
    • 抵抗器の電流値:$I_F$
    •  → 抵抗値:$(3.3 – V_F)/I_F$

LEDの電流値(手順①)や電圧値(手順②)の定格値がデータシートに記載されている場合は、
その値を使用するとLEDの性能を十分に引き出すことができますが、ラズパイの上限値を超えないように注意が必要です。
結果的に、接続する抵抗器の値は 300~1k$\Omega$ がよく使われるようです。

手順③ではキルヒホッフの第2法則、手順④ではオームの法則を使っています。
ラズパイのGPIOは3.3V出力が標準であるため、ここでは電源電圧が3.3Vになっています。

抵抗器の記号(左上:現、右上:旧)とカラーコードの例
Fig.3. 抵抗器の記号(左上:現、右上:旧)とカラーコードの例

抵抗器は4つまたは5つのラベルの色で抵抗値が表記されています (Fig.3)。
1つ目、2つ目のラベルが抵抗の大きさ、4つ目のラベルが誤差の大きさを示しています。
最初の3つが「橙・橙・茶」のときは330$\Omega$、「茶・黒・赤」のときは1k$\Omega$になります。
今回の回路は、抵抗値の多少の誤差は大した問題にならないので、
きっちりと計算した抵抗値のものを用意する必要はなく、計算値に近いものを使用すれば十分です。
たとえば、計算値が300$\Omega$のとき、100$\Omega$の抵抗器を3つ直列にしてもよいですが、
入手しやすい330$\Omega$抵抗器を使っても問題ありません。

Pythonコード

GPIOにLEDと抵抗器を接続し回路が作れたら、
あとはソフトウェア側からプログラムを走らせることでLチカができます。

前準備・ライブラリの確認

Raspberry Pi OSにはPythonが最初からインストールされているはずなので、
すぐにPythonを利用できます。
今回、GPIOの制御用にpigpioライブラリを使用するので、まだこちらのインストールができていない場合は、
下記の記事を参考にインストールしてください。

>> ラズパイのGPIOの基本・ピン配置と制御方法【Linuxコマンド、Python】

pigpiod -v  # バージョン確認(pigpioがインストール済か確認)

端末(ターミナル)で上記のコマンドを入力したとき、
"command not found"等と出たらまだpigpioがインストールされておらず、
バージョン(数字)が表示されればインストール済みであることが確認できます。

pigpioをインストールしたはずにも関わらず、Pythonコードを実行しようとするとエラーが出る場合は、
デーモンが起動していない可能性があります。
そのときは下記を実行してください。

sudo pigpiod  # pigpioデーモンの起動

サンプルコード

ラズパイのターミナルからのプログラム実行
Fig.4. ラズパイのターミナルからのプログラム実行

ラズパイのターミナルを起動し、Pythonのプログラムファイルを作成、実行してください。
デスクトップ画面の左上のアイコンからターミナル (LXTerminal) が開けます。
(Figure 4では、テキストエディターVimを使ってPythonプログラムを作成しています。
Vimでとりあえずコピペしたい方は下記をどうぞ。
>> Vim (Vi)でコピー&ペーストするコマンドまとめとエディタ外部間で行う方法)

Pythonを使ったLチカのサンプルコードは下記になります。
Ctrl+cを押すとプログラムが停止します。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pigpio
import time

LED_GPIO = 12

if __name__ == '__main__':

    pi = pigpio.pi()
    pi.set_mode(LED_GPIO, pigpio.OUTPUT)  # 出力モードに設定

    try:
        while True:
            pi.write(LED_GPIO, 1)  # High (3.3V) 出力
            time.sleep(1)
            pi.write(LED_GPIO, 0)  # Low (0V) 出力
            time.sleep(1)

    except KeyboardInterrupt:  # Ctrl+c入力時
        print("Interrupt")

    print("end")

上記(左)コードでは、GPIO 12ピンを使用した例となります。
GPIOのピン配置の確認方法や、pigpioの基本的な使い方は下記が参考になるかと思います。
>> ラズパイのGPIOの基本・ピン配置と制御方法【Linuxコマンド、Python】

サンプルコードで行っていることは、指定のピン (GPIO 12)を出力モードに設定し、
出力電圧を1秒おきにスイッチし、3.3Vと0Vを交互に切り替えています。
出力電圧の切り替えをwhileでループし、Ctrl+cを入力すると
ループを脱出するコードとなっています。

まとめ

Lチカを行うための要点は下記になります。

  • 回路構成
    • LED
      • 極性:足の長い方がアノード(電源のプラスに接続)、短い方がカソード(電源のマイナスに接続)
    • 抵抗器
      • 300~1k$\Omega$がよく使われる
      • (ラズパイの電流上限:16mA、LEDの電流上限:約20mAを超えないように設定)
  • プログラムの流れ
    1. GPIOの指定ピンを出力モードに切り替え
    2. High (3.3V) 出力とLow (0V) 出力をある時間間隔で交互に切り替える
    3. 2をループする

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


【Mi Bamd 4】タイマーをすぐに起動できるようにカスタマイズ

PCの不定期なフリーズ、起動しない問題が解決した1つの原因

CPUの型番から性能がわかる?IntelとAMDそれぞれ解説

【作業机】メタルラックで拡張性のあるスタンディングデスクを構築

ELEGOO Neptune 2Sをレビュー!2万円台3Dプリンターの実力を実際に使って評価!

ラズパイのGPIOの基本・ピン配置と制御方法【Linuxコマンド、Python】

【ラズパイ】格安な抵抗式・静電容量式の土壌湿度センサーを実際に使って比較

CPUの性能比較の方法は?ベンチマークの見方

  • プロフィール

  • Yoshiharu

  • 現在、ひよっこ光学系エンジニアをやっている一般人です。我流でプログラムをいじったりしています。備忘録、知識整理を兼ねてアウトプットをしていく予定です。

    • 【ラズパイ】格安な抵抗式・静電容量式の土壌湿度センサーを実際に使って比較

      2022.11.23

      【ラズパイ】格安な抵抗式・静電容量式の土壌湿度センサーを実際に使って比較


    • ELEGOO Neptune 2Sをレビュー!2万円台3Dプリンターの実力を実際に使って評価!

      2022.11.03

      ELEGOO Neptune 2Sをレビュー!2万円台3Dプリンターの実力を実際に使って評価!


    • 自作ラズパイゼロケースを3Dプリンター用にモデリング【FreeCAD】

      2022.10.13

      自作ラズパイゼロケースを3Dプリンター用にモデリング【FreeCAD】


    • 【初心者向け】FreeCADの基本的な使い方と手順の流れ

      2022.10.11

      【初心者向け】FreeCADの基本的な使い方と手順の流れ


    • 【Python】ラズパイでLチカ:LEDの取り扱い~抵抗値の計算

      2022.09.07

      【Python】ラズパイでLチカ:LEDの取り扱い~抵抗値の計算


  • アーカイブ

    • 2022年11月
    • 2022年10月
    • 2022年9月
    • 2022年8月
    • 2022年5月
    • 2022年4月
    • 2022年3月
    • 2022年1月
    • 2021年11月
    • 2021年9月
    • 2021年8月
    • 2021年7月
    • 2021年2月
    • 2021年1月
    • 2020年12月
    • 2020年10月
    • 2020年9月
    • 2020年8月
    • 2020年7月
    • 2020年3月
    • 2020年2月
    • 2020年1月
  • カテゴリー

    • Vim
    • ガジェット
    • プログラム・ソフト
    • 光学
    • 情報処理
    • 物理学・工学
    • プログラム・ソフト
    • 物理学・工学
    • ガジェット
    • 当サイトについて
    • お問い合わせ
    Y Lab Desk

    Copyright © Y Lab Desk, 2022 All Rights Reserved.