[M5Stack Core2 for AWS] Arduinoでサーボモータを操作してみました
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を使用しててみました