PWMとは

PWMは「Pulse Width Modulation」の略で、日本語では「パルス幅変調」と訳されます。本記事ではPWMについて解説します。

まず、アナログとデジタルって?

デジタルとは飛び飛び(離散的)な値のことを指し、アナログは連続的な値を指します。ラズパイのGPIOの汎用入出力ピンを考えると、出力は0Vか3.3Vという離散的な値のみしか出力できないので、「デジタルな信号」といいます。逆に「0~3.3Vの間だったら、どの電圧でも出力できるよ!」という場合であれば、それは「アナログ信号」といいます。
例えば、圧力を電気信号に変える「圧力センサー」は、圧力の変化に応じて、電気信号の値が連続的に変化するので、「アナログ信号」です。多くのセンサー類は「アナログ信号」です。

PWMとは

PWMは電力を制御する方式の1つで、出力のHIGHとLOWを高速で切り替えることで、出力される電力を制御します。
他の記事にも記載したとおり、ラズパイの出力はHIGH(3.3V)かLOW(0V)しか選べません。いわゆるデジタルな出力です。ですが、PWMで、高速でHIGHとLOWを切り替えることで、疑似的に出力電圧をコントロールすることができます。これを使って、LEDの明るさ調整をすることが可能になります。

PWMを使用する時に出てくる用語

・周期・・・一回のHIGHとLOWにかかる時間です。小学校あたりで出てきましたかね。懐かしいものです。
・周波数・・・1秒あたりに何回HIGH-LOWを繰り返すかです。「周波数=1/周期」で計算できます。
デューティー比・・・PWMでは、1周期中のHIGHとLOWの時間の比を変えることができます。この比をデューティー比といいいます。例えば、デューティー比70%であれば、1周期中のHIGHの時間が70%を占めます。

PWMで周波数を制御

PWMで高速でHIGH、LOWが切り替えられるので、出力信号の周波数をコントロールすることができます。
周波数のコントロールができると、「圧電スピーカー」が使えます。「圧電スピーカー」は、電圧をかけると圧電帯が膨らみます。このふくらみによる振動で音を鳴らすので、与える電気信号の周波数を操作することで、振動ペースが変わり、音の高さが変わります。
ラズパイでは、GPIO.PWMという専用のメソッドがあるので、これを使いましょう。

pwm = GPIO.PWM(4,440) #(GPIOピンの指定,周波数)

これで、4番のGPIOピンが使えるようになります。引数は一番目がGPIOピンの指定、二番目が周波数です。

#PWM出力スタート
pwm.start(50) #(デューティー比)

#PWM出力ストップ
pwm.stop() #かっこを忘れずに

#周波数の変更
pwm.ChangeFrequency(460) #(変えたい周波数)

#デューティー比の変更
pwm.ChangeDutyCycle(70) #(変えたいデューティー比)

以上でPWMの使い方の紹介を終わります!