<Raspberry Pi-43>
GPIOのPWMは<Raspberry Pi-39>でも紹介しましたが、ここではpython3を使ったやり方を
紹介します。
下の3つのプログラムは、p = GPIO.PWM(outpin, 100)で周波数を100Hzにする(オシロで確認 T=10ms f=1/Tで100Hz)
デューティ比は、1がp.start(10)で10%、2がp.start(50)で50%、3がp.start(90)で90%です。
オシロの波形を見れば分かるように、周波数一定でパルス巾が変化していることが分かります。
従って、p.start(10)のデューティ比を連続で変化させれば、LEDの明るさを可変、またモーターの
回転速度などを可変することが出来ます。
取り合えずPWMのプログラム1
-------------------------------------------------
# coding: utf-8 #1
import RPi.GPIO as GPIO #2
GPIO.setmode(GPIO.BCM) #3
outpin = 14 #4
GPIO.setup(outpin, GPIO.OUT, initial=GPIO.LOW) #5
p = GPIO.PWM(outpin, 100) #6
p.start(10) #7
-------------------------------------------------
取り合えずPWMのプログラム2
-------------------------------------------------
# coding: utf-8
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
outpin = 14
GPIO.setup(outpin, GPIO.OUT, initial=GPIO.LOW)
p = GPIO.PWM(outpin, 100)
p.start(50)
-------------------------------------------------
取り合えずPWMのプログラム3
-------------------------------------------------
# coding: utf-8
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
outpin = 14
GPIO.setup(outpin, GPIO.OUT, initial=GPIO.LOW)
p = GPIO.PWM(outpin, 100)
p.start(90)
-------------------------------------------------
<上記プログラム1について>
#1 文字コードの指定
#2 GPIOを制御するモジュールのインポート
#3 GPIOポートの指定をGPIO番号にする
#4 outpin=14 outpin変数に14を代入(GPIO14用)
#5 GPIO14を出力モードにして初期値をL(0)にする。
#6 PWMオブジェクトのインスタンスを生成、GPIO14を100Hzにする
#7 PWMをデューティ比10%で出力する。
<LEDの明るさの連続可変> (プログラムの中の<は半角にして下さい)
-------------------------------------------------
# coding: utf-8
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
outpin = 14
GPIO.setup(outpin, GPIO.OUT, initial=GPIO.LOW)
p = GPIO.PWM(outpin, 100)
def dc1():
global dc
dc=dc+10
return
def dc2():
global dc
dc=dc-10
return
p.start(0)
dc=0
flug=0
while True:
p.ChangeDutyCycle(dc)
time.sleep(1)
if dc<100 and flug==0:
dc1()
if dc==100:
flug=1
if flug==1 and dc<=100:
dc2()
if dc==0:
flug=0
-------------------------------------------------
下の動画はLEDの明るさが変化しているのですが、光の関係で動画では分かりませんが
オシロを見ればデューティ比が変化しているのが分かります。
(0%→10%ステップで100%→10%ステップで0%までの繰り返し)
<PWMオブジェクトについて>
PWMオブジェクトのインスタンス作成をする
p=GPIO.PWM(port,frq) port:GPIOピン frq:周波数 p:任意の名前
PWM信号を出力する
p.start(dc) dc:デューティ比
周波数を変更
p.ChangeFrequency(frq) frq:周波数
デューティ比を変更
p.ChangeDutyCycle(dc) dc:デューティ比
PWM信号停止
p.stop()
周波数100Hz、デューティ比50%のPWMをGPIO番号14に出力させて、3秒後周波数を200Hz、デューティ比10%に
変更、そして5秒後に停止させるプログラム
-------------------------------------------------
# coding: utf-8
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM
outpin = 14
GPIO.setup(outpin, GPIO.OUT, initial=GPIO.LOW)
# PWM オブジェクトのインスタンスを作成(出力ピン:14 番、周波数:100Hz)
p = GPIO.PWM(outpin, 100)
p.start(50) # PWM信号を出力(デューティ比50%)
time.sleep(3)
p.ChangeFrequency(200) # 周波数を200Hzに変更
p.ChangeDutyCycle (10) # デューティ比を10%に変更
time.sleep(5)
p.stop() # PWM信号の停止
GPIO.cleanup() # GPIOの開放
-------------------------------------------------
Raspberry Pi-44に続く・・・
Raspberry メニューに戻る