Using the Module13.2 Servo2 ・ 使用 Module13.2 Servo2
M5StackのModule13.2 Servo2をコントローラーに接続する最小構成。配線とBOMつき。
この構成をエディタで開く・編集する →| 部品 | 役割 | ポート | リンク・価格 |
|---|---|---|---|
| M5Stack CoreS3 | Controller | grove_i2c, grove_analog, grove_uart, mbus, usb_c, sdcard | official page — $59.9 |
| Module13.2 Servo2 | module | i2c, mbus | official page — $17.5 |
M5Stack CoreS3とModule13.2 Servo2をスタックして、サーボモーターを制御するための最小構成の組み立てガイドです。Module13.2 Servo2はM-Bus経由でCoreS3に接続し、PCA9685 PWMドライバーを使って最大16個のサーボを動かせます。このガイドでは、1つのサーボを動かすところまでを説明します。
# 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® 製品向けの非公式ツール。作りたいものを書くと、部品リストと配線図が出ます。