Samples_PWM - gfd-dennou-club/mrubyc-esp32 GitHub Wiki
PWM クラスのメソッドについては,Class_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 (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](github.com/user-attachments/assets/fc61216c-91ce-4d9e-9070-bc0f31743dc4)
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 )
end