M5StackでModule13.2 Servo2 を使う

Using the Module13.2 Servo2 ・ 使用 Module13.2 Servo2

M5StackのModule13.2 Servo2をコントローラーに接続する最小構成。配線とBOMつき。

この構成をエディタで開く・編集する →

部品リスト(BOM)

部品役割ポートリンク・価格
M5Stack CoreS3Controllergrove_i2c, grove_analog, grove_uart, mbus, usb_c, sdcardofficial page — $59.9
Module13.2 Servo2modulei2c, mbusofficial page — $17.5

配線

作り方

M5Stack CoreS3とModule13.2 Servo2をスタックして、サーボモーターを制御するための最小構成の組み立てガイドです。Module13.2 Servo2はM-Bus経由でCoreS3に接続し、PCA9685 PWMドライバーを使って最大16個のサーボを動かせます。このガイドでは、1つのサーボを動かすところまでを説明します。

  1. 部品を用意する — 用意するもの:M5Stack CoreS3本体、Module13.2 Servo2、サーボモーター1個(例:SG90)、サーボ用の外部電源(6~12V、XT60コネクタ対応)、CoreS3とパソコンをつなぐUSB-Cケーブル。
  2. CoreS3とServo2をスタックする — CoreS3の底面にあるM-Busコネクタに、Module13.2 Servo2の上面のM-Busコネクタを合わせて、しっかりと重ねます。ピンが曲がらないように、まっすぐ押し込んでください。
  3. サーボモーターをServo2に接続する — サーボモーターの3ピンケーブル(茶色=GND、赤=電源、オレンジ=信号)を、Servo2のCH0(チャンネル0)の端子台に接続します。茶色をGND、赤をV+、オレンジをS(信号)に差し込み、ドライバーで軽く締めます。
  4. 外部電源をServo2に接続する — サーボ用の外部電源(6~12V)のXT60コネクタを、Servo2のXT60入力に差し込みます。電源はまだ入れないでください。
  5. CoreS3をパソコンにつなぐ — USB-CケーブルでCoreS3をパソコンにつなぎます。これでCoreS3に給電され、同時にプログラムを書き込めるようになります。
  6. MicroPythonコードを書き込む — UIFlow2またはThonnyを使って、CoreS3にMicroPythonファームウェアが入っていることを確認し、下のコードをデバイスにコピーして実行します。
  7. サーボが動くかテストする — コードを実行すると、サーボが0度、90度、180度に順に動きます。動かない場合は配線と電源を確認してください。

サンプルコード(micropython)

# M5Stack CoreS3 + Module13.2 Servo2 (PCA9685)
# Wiring: Servo2 stacked via M-Bus, servo on CH0
# External power 6-12V to Servo2 XT60
import time
from machine import Pin, I2C
from m5stack import lcd

# PCA9685 I2C address (default 0x40)
PCA9685_ADDR = 0x40

# Initialize I2C on CoreS3 (Port.A is default I2C, but M-Bus uses internal I2C)
i2c = I2C(0, scl=Pin(1), sda=Pin(2), freq=100000)  # CoreS3 internal I2C pins

# PCA9685 registers
MODE1 = 0x00
PRESCALE = 0xFE
LED0_ON_L = 0x06

def pca9685_init():
    # Set sleep mode to allow prescale change
    i2c.writeto_mem(PCA9685_ADDR, MODE1, b'\x10')  # SLEEP bit
    # Set prescale for 50 Hz (servo standard)
    # prescale = round(25e6 / (4096 * 50)) - 1 = 121
    i2c.writeto_mem(PCA9685_ADDR, PRESCALE, bytes([121]))
    # Wake up and set auto-increment
    i2c.writeto_mem(PCA9685_ADDR, MODE1, b'\x80')  # RESTART, AI
    time.sleep_ms(1)

def set_servo_pulse(channel, pulse_us):
    # pulse_us: 500-2500 us for typical servo
    # PCA9685 uses 12-bit resolution (0-4095) over 20ms period
    # 20ms = 20000 us, so 1 us = 4096/20000 = 0.2048 counts
    pulse = int(pulse_us * 4096 / 20000)
    reg = LED0_ON_L + 4 * channel
    # ON time = 0, OFF time = pulse
    i2c.writeto_mem(PCA9685_ADDR, reg, bytes([0x00, 0x00, pulse & 0xFF, (pulse >> 8) & 0xFF]))

# Initialize PCA9685
pca9685_init()

# Test: sweep servo on CH0
while True:
    lcd.clear()
    lcd.print('Servo test: 0 deg', 10, 20)
    set_servo_pulse(0, 500)   # 0 degrees (500 us)
    time.sleep(1)
    lcd.print('Servo test: 90 deg', 10, 20)
    set_servo_pulse(0, 1500)  # 90 degrees (1500 us)
    time.sleep(1)
    lcd.print('Servo test: 180 deg', 10, 20)
    set_servo_pulse(0, 2500)  # 180 degrees (2500 us)
    time.sleep(1)

コツ・安全上の注意

この作り方はAIが構成から生成したものです(未検証)。通電前に配線とコードをご確認ください。

この構成はAIが実在するM5Stack部品から設計し、ポート互換をサーバで検証したものです。編集・共有できます。

エディタで開く →

UnitKit は M5Stack® 製品向けの非公式ツール。作りたいものを書くと、部品リストと配線図が出ます。