Samples_PWM - gfd-dennou-club/mrubyc-esp32 GitHub Wiki

はじめに

PWM クラスのメソッドについては,Class_PWM を参照されたい.

PWM の基礎

電圧の HIGH と LOW を繰り返すことで, 実効的な電圧を変化させることができる.デューティー比が実効的な電圧比に対応する.

image

本ライブラリはデューティー比は比率 (%) で与える.

圧電ブザー

圧電ブザーを鳴らすプログラムの例.

# インスタンスの作成. スピーカの接続されているピン (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