こんにちは。
電子工作を勉強のために始めました。
”ラズパイ自由自在 電子工作パーツ制御完全攻略”を参考に進めて行こうと思います。立ち読みしていて面白そうだったのでこの本に決めました。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のハード制御がソフト制御より正確って書いてあったけど本当か確かめたい。ある周波数までは精度変わらないとか無いのか❓
ここまで読んでいただきありがとうございました。