PWM (MicroPython + Jupyter)
圧電ブザーを鳴らすプログラムの書き方
音は波であるため, 音を出したい時には電圧の HIGH と LOW を繰り返すことで, プログラム的に下記に示すような特定の周波数を持つ波 (矩形波) を作れば良い. HIGH と LOW の持続時間の和が波の周期に対応する.
プログラムの書き方については Quick reference for the ESP32 の PWM(パルス幅変調) [日本語版] を参照して欲しい.
なお, デューティー比は比率 (%) で与えるのではなく, 下図でいうところの「閾値」として与える.
なお, ESP32 のクロックは 80 MHz = 12.5 μs で動作するため, 分解能をそれよりも小さくすることはできない. 逆に言うと, タイマの解像度によって表現できる最大波長が決まる. 1 bit ならば 1 / (12.5e-6 * 2) = 40 MHz, 8 bit ならば 1 / (12.5e-6 * 256) = 312.5 kHz, 13 bit ならば 1 / (12.5e-6 * 8192) = 9765 Hz, である.
圧電ブザー
Jupyter notebook において以下のようにプログラムを作成して実行する.
1 from machine import Pin, PWM 2 from time import sleep 3 pwm0 = PWM(Pin(15)) 4 pwm0.freq(5000) 5 pwm0.duty(512) 6 sleep(10) 7 pwm0.deinit() # PWM を無効化
- 1~2 行目: 必要なライブラリの読み込み
- 3 行目: スピーカの接続されているピン (GPIO 15) を使う設定.
- 4 行目: 周波数の設定
- 5 行目: デューティー比の設定. 512 /1024 = 50%
- ドキュメントにタイマーの解像度が明示的に書かれていないが, おそらく 10 bit と思われる. micropython で ESP8266 がそうなっているので.
- 6-7 行目: 音を 10 秒鳴らして止める.
課題
LED, スイッチ, ブザーを用いたプログラムを作成してみよ.
- スイッチを入れたら音が鳴る
- スイッチを入れると, ブザーで「ドレミファソラシド」が鳴る.
- LED の点灯に合わせてブザーから曲が流れる.
- その他