電気工作の備忘録

Python、Raspberrypi、機械学習、電気工作 の備忘録(初心者)

電子工作 LEDを光らす

本記事は下記に引っ越ししました。
にわか電子工作ファン


こんにちは、ペキです。

電子工作を勉強のために始めました。
”ラズパイ自由自在 電子工作パーツ制御完全攻略”を参考に進めて行こうと思います。立ち読みしていて面白そうだったのでこの本に決めました。17章までありますが部品を揃えたりする必要もあるようなのでできるところから少しずつ進めて行きます。
なお、部品は家にあればそれを利用、プログラムは思いつきで変えたりするので本はあくまで参考としての利用です。ブログにおかしなことが書いてあっても本が原因ではないです。

1章 多様なLEDを光らす

・評価部材

 ・ラズパイ
  ・ディスプレイケーブル、ディスプレイ
  ・キーボード、マウス、wifi環境
  ・電源
  ・ジャンパーケーブルx2
  ・ブレッドボード
 ・抵抗 100Ω
 ・LED(赤) ”OSDR3133A”
 ・LED(3色) ”OSTA5131A-R/PG/B”

・部品の決定

・LED(赤)

  ・本に記載の部品(LED)は無かったのですが家に”OSDR3133A”が転がっていたのでこれで進めます。

  ・”OSDR3133A”の特性
   DC Forward Curent(If):30mA
   DC Forward Voltage(Vf):typ 2.0V
   ※ぐぐるとあった。

・電流制限抵抗の決定

  ラズパイ電源が3.3vなので
  3.3V-2.0V(Vf) = 1.3V
  30mA(If) から、半分の15mAで光らす
  として1.3V/15mA=87Ω
  家に100Ωが転がっているので
  100Ωとした。なので、
  1.3V/100Ω=13mAぐらいで光る予定

動作確認環境

raspberry@raspberrypi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
raspberry@raspberrypi:~ $ python --version
Python 3.9.2

・プログラムの実行

・pigpioデーモンの起動

[実行]
raspberry@raspberrypi:~ $ sudo pigpiod
これを実行しないとpigpiodが使えない。

デーモン?ってなにって思い調べてみると、
バックグラウンドで動く常駐プログラムの事。
MITの開発者が呼び始めたのがもととなっており、
古代ギリシャでは神の使いでいつも自分の近くにいる
ものをデーモンと呼んでいたからみたい。
ウィキペディアより
コンピューターに常駐プログラム(デーモン)を入れる私は神って事か・・?


・プログラム ハードPWM

[led_pwm_hw.py]

import sys
import pigpio 

LED_PIN = 12
LED_PWM_FREQUENCY = 8000
pwm_duty = float(sys.argv[1])

pi = pigpio.pi()
pi.set_mode(LED_PIN, pigpio.OUTPUT)
pi.hardware_PWM(LED_PIN, int(LED_PWM_FREQUENCY), int(pwm_duty * 1e6))

[実行]
raspberry@raspberrypi:~ $ python3 led_pwm_hw.py 0.1
raspberry@raspberrypi:~ $ python3 led_pwm_hw.py 0.5
raspberry@raspberrypi:~ $ python3 led_pwm_hw.py 1.0
0.1<0.5<1.0で強く光る。点灯


・プログラム 別の方法

[led_pwm_sw.py]

import time
import pigpio

LED_PIN = 12
pi = pigpio.pi()
pi.set_mode(LED_PIN, pigpio.OUTPUT)

while True:
    pi.write(LED_PIN, 1)
    time.sleep(0.5)
    pi.write(LED_PIN, 0)
    time.sleep(0.5)

[実行]
raspberry@raspberrypi:~ $ python3 led_pwm_sw.py
0.5秒光り0.5秒消える 点滅

・プログラム 3色LED

[led_pwm_sw_rgb.py]

import sys
import pigpio

LED_R_PIN = 12
LED_G_PIN = 13
LED_B_PIN = 19
LED_PWM_FREQUENCY = 8000
LED_PWM_RANGE = 100
r_pwm_duty = float(sys.argv[1])
g_pwm_duty = float(sys.argv[2])
b_pwm_duty = float(sys.argv[3])
pi = pigpio.pi()
pi.set_mode(LED_R_PIN, pigpio.OUTPUT)
pi.set_mode(LED_G_PIN, pigpio.OUTPUT)
pi.set_mode(LED_B_PIN, pigpio.OUTPUT)
pi.set_PWM_frequency(LED_R_PIN, LED_PWM_FREQUENCY)
pi.set_PWM_frequency(LED_G_PIN, LED_PWM_FREQUENCY)
pi.set_PWM_frequency(LED_B_PIN, LED_PWM_FREQUENCY)
pi.set_PWM_range(LED_R_PIN, LED_PWM_RANGE)
pi.set_PWM_range(LED_G_PIN, LED_PWM_RANGE)
pi.set_PWM_range(LED_B_PIN, LED_PWM_RANGE)
pi.set_PWM_dutycycle(LED_R_PIN, int(r_pwm_duty * LED_PWM_RANGE))
pi.set_PWM_dutycycle(LED_G_PIN, int(g_pwm_duty * LED_PWM_RANGE))
pi.set_PWM_dutycycle(LED_B_PIN, int(b_pwm_duty * LED_PWM_RANGE))

[実行]
raspberry@raspberrypi:~ $ python3 led_pwm_sw_rgb.py 0.0 0.9 0.0
RGBとdutyの組み合わせでいろいろな色を表示できる 点灯

・プログラム 3色LED順次発色

[led_pwm_sw_rgb2.py]

import time
import pigpio

LED_R_PIN = 12
LED_G_PIN = 13
LED_B_PIN = 19
pi = pigpio.pi()
pi.set_mode(LED_R_PIN, pigpio.OUTPUT)
pi.set_mode(LED_G_PIN, pigpio.OUTPUT)
pi.set_mode(LED_B_PIN, pigpio.OUTPUT)

while True:
    pi.write(LED_B_PIN, 0)
    pi.write(LED_R_PIN, 1)
    time.sleep(0.5)

    pi.write(LED_R_PIN, 0)
    pi.write(LED_G_PIN, 1)
    time.sleep(0.5)
    
    pi.write(LED_G_PIN, 0)
    pi.write(LED_B_PIN, 1)
    time.sleep(0.5)

[実行]
raspberry@raspberrypi:~ $ python3 led_pwm_sw_rgb2.py
3色を0.5秒ごとに順に光らせる


とりあえず光らせることができた。

・疑問点など

・pwmのソフトのプログラムがわからない。簡単なプログラムが見つけられない。
・pwmのハード制御がソフト制御より正確って書いてあったけど本当か確かめたい。ある周波数までは精度変わらないとか無いのか❓


ここまで読んでいただきありがとうございました。

にほんブログ村 IT技術ブログへ