Samples_PWM - gfd-dennou-club/mrubyc-esp32 GitHub Wiki
はじめに
PWM クラスのメソッドについては,Class_PWM を参照されたい.
PWM の基礎
電圧の HIGH と LOW を繰り返すことで, 実効的な電圧を変化させることができる.デューティー比が実効的な電圧比に対応する.
本ライブラリはデューティー比は比率 (%) で与える.
圧電ブザー
圧電ブザーを鳴らすプログラムの例.
# インスタンスの作成. スピーカの接続されているピン (GPIO 15) を使う設定に.
pwm0 = PWM.new( 15 )
pwm0.freq(440) # 周波数の設定.440Hz に
pwm0.duty(50) # デューティー比を 50% に
sleep 5 # 5 秒鳴らし続ける
pwm0.duty(0) # デューティー比を 0% に = 消音
LED の明るさ変化
LED (GPIO 13) の明るさを 10 秒間隔で変化させる
#インスタンスの作成. LED の接続されているピン (GPIO 13) を PWM で利用.
pwm = PWM.new(13)
while true
10.times do |i|
pwm.duty( 10 * i ) # LED の接続されているピンのチャネルのデューティ比を変える
sleep 1
end
sleep 0.1 # 少し休む
end
サーボモータ
サーボモーターからは3本の端子が出ており,赤は電源のプラス,黒あるいは茶色はグランド(電源のマイナス)に接続する.オレンジあるいは黄色には制御信号を接続する.
サーボモータを制御するためには周期を 20 ms (周波数 50 Hz) にするのが基本だが,50 ~ 100 Hz 程度は許容される.またパルス幅は 1 ms から2 ms の間で変化させ,パルス幅が 1 ms の時にサーボモーターの軸の角度が 0 度となる.また 2 ms の時にサーボモーターの軸の角度は 180 度となる.半分の 1.5 ms の時は 90 度となる.この様にパルス幅を微妙に変えることによって,サーボモーターの軸の角度を 0 度から 180 度の間で制御することができる.
servo = PWM.new(27, timer:2, channel:3, frequency:50) # 周波数は 50 に.timer と channel はオプション
loop do
servo.pulse_width_us( 1000 )
sleep 1
servo.pulse_width_us( 1500 )
sleep 1
servo.pulse_width_us( 2000 )
sleep 1
end