この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
1 はじめに
IoT事業部の平内(SIN)です。
今回は、Arduinoを使用してM5Stack Core2 for AWSでサーボモーターを操作してみました。
最初に、動作確認している様子です。0度から180度の間で45度づつ回転させています。
2 SG90 9 g Micro Servo
使用したサーボモーター は、SG90 9g Micro Servoです。
こちらは、50HzのPWMで、Duty Cycleを0.5〜2.4msに設定することで、-90度から+90度までの180度の範囲に回転させることができます。
https://akizukidenshi.com/download/ds/towerpro/SG90_a.pdf
3 ledcモジュール
ledcモジュールを使用するとPWM出力を簡単に行うことができます。
下記で、周波数50Hz、解像度16ビットで初期化し、GPIO 32にアタッチしています。
#define SERVO_PIN 32
#define SERVO_CH 0
#define PWM_HZ 50
#define PWM_RESOLUTION 16
ledcSetup(SERVO_CH, PWM_HZ, PWM_BIT);
ledcAttachPin(SERVO_PIN, SERVO_CH);
初期化後は、HIGHにする期間を指定します。
ledcWrite(SERVO_CH, duty_cycle);
なお、duty_cycleは、0.5/20msから2.4/20msで指定しています。
#define MAX 7800 // 65535 / 20 * 2.4 ≒ 7864
#define MIN 1700 // 65535 / 20 * 0.5 ≒ 1638
int duty_cycle = map(angle, 0, 180, MIN, MAX);
duty_cycleを変えている様子をオシロで確認しています。
3 コード
コードは、以下の通りです。
#include <M5Core2.h>
#include <stdio.h>
#define SERVO_PIN 32
#define SERVO_CH 0
#define PWM_HZ 50
#define PWM_BIT 16 // 16bit(0~65535)
#define MAX 7800 // 65535 / 20 * 2.4 ≒ 7864
#define MIN 1700 // 65535 / 20 * 0.5 ≒ 1638
void setup() {
M5.begin(true, true, true, false); // I2C無効(PORTA をGPIOで使用するため)
ledcSetup(SERVO_CH, PWM_HZ, PWM_BIT);
ledcAttachPin(SERVO_PIN, SERVO_CH);
M5.Lcd.setBrightness(200);
M5.Lcd.setTextSize(2);
M5.Lcd.setTextFont(7);
M5.Lcd.setTextColor(GREEN);
}
void loop() {
char str[128];
for (int angle = 0; angle <= 180; angle += 45) {
int duty_cycle = map(angle, 0, 180, MIN, MAX);
ledcWrite(SERVO_CH, duty_cycle);
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setCursor(80, 80);
sprintf(str,"%3d", angle);
M5.Lcd.drawCentreString(str, 150, 70, 7);
delay(1000);
}
}
4 最後に
今回は、M5Stack Core2 for AWSで、サーボモーターを操作してみました。 なお、サーボモータへの給電は、M5Stackから吸い出すことはできません。Groveの5Vを接続すると、すぐに再起動がかかってしまて安定動作できないので、注意が必要です。
GPIOでM5Stack外部のデバイスを制御しだすと、少し、応用が広がってくるようで楽しめます。
5 参考リンク
Visual Studio Code + PlatformIO 環境で M5Stack Core2 for AWS でHello Worldしてみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用してLEDを光らせてみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用してディスプレイに表示してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用して仮想ボタンの動作を確認してみました
[M5Stack Core2 for AWS] LVCLを使用してディスプレイ上のボタンの動作を確認してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用して電源を操作してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用してスピーカーを操作してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用して静電容量式タッチパネルを操作してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用してジャイロセンサーを操作してみました
[M5Stack Core2 for AWS] PlatformIO を使用して、ArduinoでHello Worldしてみました
[M5Stack Core2 for AWS] ArduinoでLED (Adafruit NeoPixel フルカラーLED) を点灯してみました
[M5Stack Core2 for AWS] Arduinoで仮想ボタンを作成してみました
[M5Stack Core2 for AWS] ArduinoでMQTT接続してみました
[M5Stack Core2 for AWS] Arduinoでオーディオファイルを再生してみました
[M5Stack Core2 for AWS] Arduinoでマイクの利用方法を確認してみました
[M5Stack Core2 for AWS] ArduinoでGroveポートのGPIOを使用しててみました