ロボットプログラミング教室 part2: モータの種類と説明
モータの種類
皆さんが「モータ」と言われたとき、多くの方が想像すると思われるものは、DCモータと呼ばれるもので、 直流電源(電圧、電流が一定)によって動きます。学校の授業などで、電池をつなげて動かしたことのある方も多いのではないでしょうか。

▲DCモータ
実はこのDCモータ以外にも、いくつもの種類のモータが存在します。その一つがサーボモータです。
サーボモータの中にも、DCサーボモータやACサーボモータなど種類がありますが、これらについてはあまり詳しく述べません。
回転させ続けることの多い通常のDCモータと異なり、サーボモータは位置(回転角度)や回転速度を制御して動かす場合が多いです。
「3. ロボットアーム制御」で使用するサーボモータ(SG90)は、位置(回転角度)を指定して制御します。サーボモータは、
受け取った信号から目標角度を割り出し、その状態になるよう動きます。

▲サーボモータ(SG90)
では、このサーボモータに対して、どのように角度を指定する信号を送るのでしょうか。
PWM制御
PWM(Pulse Width Modulation)とは、日本語に直すと「パルス幅変調」であり、一定の時間周期内でオンとオフを切り替え、
それらの時間の比率(デューティー比)によって電力の調節や信号の送信を行うことです。
この電圧のオンオフ切り替えを高速で行っているとき、見かけ上の電圧を実効電圧といいます。
この実効電圧によって、Arduinoのボードから、どれくらいの電圧(信号)を出すかを調整できるのです。

本企画の「3. ロボットアーム制御」で使うSG90というサーボモータは、
PWMの周期が20ms(0.020秒)で、そのうちどれだけ長い時間オンになっていたかという情報から、対応する角度になるよう動きます。
0.5msオンであれば-90°、1.45msであれば0°、2.4msであれば90°となるように設計されています。
「3. ロボットアーム制御」では、
ポテンショメータ(可変抵抗)という部品のつまみを手で回し、
その角度によって変化する電圧をArduino UnoもしくはESP32で読み取り(プログラムの"value = analogRead();"という部分)、
その電圧値に対応するアームの角度と対応するPWMの出力値を計算して、サーボモータに送信しています。
以下の値は、下の図のように対応しています。
「3. ロボットアーム制御」でのプログラムは、そのための計算を行い、PWM出力をサーボモータに出力するという動作を指示しているのです。
・ポテンショメータからの入力電圧(Arduino UnoのA5番ピン、ESP32の34番ピン)
Arduino Uno:0~1023, ESP32:0~4095
・それに対応するアーム角度
-90~90
・PWM出力(Arduino Unoの3番ピン、ESP32の25番ピン)
Arduino Uno:<Servo.h>というライブラリによって指定角度から計算
ESP32:0~4095の範囲で出力できるが、サーボモータへの送信信号としては102~491の範囲のものしか成立しない
・20ms周期のPWM出力のオン(High)の時間(図ではx[ms])

▲SG90のPWM制御
以上でモータについての解説は終了です。
他のモータにも興味がある方は、「ステッピングモータ」、「誘導モータ」など のワードで検索して調べてみると面白いかもしれません。
回転の原理も異なるモータはそれぞれ特徴があり、それを活かせる用途に使われています。