-
Notifications
You must be signed in to change notification settings - Fork 4
m5_bala2
Ko-ichiro Sugiyama edited this page Jan 11, 2025
·
8 revisions
BALA2 の DC モータとサーボモータは ESP32 マイコンで直接制御されているのではなく,コントローラ (STM32F030C8T6) を介して制御される.ESP32 とコントローラ間は I2C で通信する.コントローラの I2C アドレスは 0x3a.
コントローラの仕様の詳細が分かる資料が見つからず,結局 GitHub 上のコードを読みながら何となく動くようにした.
- https://docs.m5stack.com/en/app/bala2fire
- https://github.com/m5stack/M5-ProductExampleCodes/blob/master/Application/Bala2/bala.cpp
# モーターの制御.スピードは 0 ~ 3 の 4 段階で設定する.マイナスを付けると反転する.
def set_motor(i2c, wheel_left, wheel_right)
data = Array.new
data[0] = 0x00
data[1] = [wheel_left, 0x03].min
data[2] = 0x00
data[3] = [wheel_right, 0x03].min
data[4] = 0x00
i2c.write(0x3a, data)
end
# サーボモータの制御.pos はサーボモータの ID (1~8).angle は角度.
def set_servo(i2c, pos, angle)
if pos < 1
pos = 1
elsif pos > 8
pos = 8
end
pos = pos - 1
i2c.write( 0x3a, [0x20 | pos, angle * 2 & 0xFF] )
puts "Servo #{pos + 1} angle set to: #{angle}"
end
# 初期化
i2c = I2C.new()
sen = ADC.new( 36 )
# サーボ 1 の角度を 0 度に.
set_servo( i2c, 1, 0 )
sleep 0.1
# 約 10 秒間ライントレース
100.times do
$val = sen.read_raw
if $val > 300
# set_motor( i2c, -2, 0 ) # right course
set_motor( i2c, 0, -2 ) # left course
else
# set_motor( i2c, 0, -2 ) # right course
set_motor( i2c, -2, 0 ) # left course
end
sleep 0.02
end
set_motor( i2c, 0, 0 ) # DC モーター停止
sleep 0.5
set_servo( i2c, 1, 90 ) # サーボモータの角度を 90 度に
sleep 1
set_servo( i2c, 1, 0 ) # サーボモータの角度を 0 度に
基本
- はじめの一歩 (Hello World)
- クラス定義
- サンプルプログラム
開発者向け
その他