概要
M5BALA + M5Stack FIRE に赤外線のライン検出センサーを接続しライントレースをさせてみました。
- M5Stack FIRE に赤外線のライン検出センサーを接続
- 線の検出によって左右の回転を制御することでライントレースを行う
環境
- M5BALA + M5Stack FIRE
- M5UI.Flow (Firmware 0.8.2 で確認)
- ライン検出センサー Seeed Studio Grove Line Finder v1.1
ライン検出センサーの実装
ライン検出センサーを PORT B に接続し、輪ゴムで固定。センサーの重みで前のめりになるので後ろにも付属のレゴの部品でバランスを取りました。
実行例
バランスを取りながらでは、あまり複雑な線のトレースは難しいので、単純なコースですが。
M5BALAでライントレース、前回よりもちょっと難しく(単純な楕円がひょうたん型になった程度ですが)してみましたが、プログラムはシンプルなものです。左右の動きのパラメータの調整が微妙なところ。
— 稲澤祐一 (@inasawa) 2018年11月8日
「M5BALAでライントレース」https://t.co/CxOklcLnfH#M5Stack #M5BALA pic.twitter.com/e2HI0E2eOm
M5BALA制御用プログラム
以下のプログラムを M5UI.Flow から実行しました。
m5bala_line_trace.py
from m5stack import *
from m5bala import M5Bala
import i2c_bus
import machine
m5bala = M5Bala(i2c_bus.get(i2c_bus.M_BUS))
# ライン検出センサーを PORT B に接続
ir_rx = machine.Pin(36, machine.Pin.IN)
# スレッドを使うと不安定(途中で止まってしまう)だったので
# スレッドを使わずに動かしました。
# m5bala.start(thread=True)
# 左右の動き&前進のためのパラメータは実際の動きに合わせて要調整。
line_trace = [15, 50]
while True:
# センサーの値が 1 (反射無し=黒線上)
# センサーの値が 0 (反射有り=黒線から外れた)
# センサーが黒線上にあれば左へ、黒線から外れたら右へ
# 黒線の左側に沿って進む仕組みです
rx = ir_rx.value()
if rx == 1:
m5bala.left = line_trace[0]
m5bala.right = line_trace[1]
else:
m5bala.left = line_trace[1]
m5bala.right = line_trace[0]
m5bala.balance()