IMG_4808

MONOXIT の無線ロボット MI100 に光センサーが付いていたので、ライントレーサーをやってみようと思いました。
ただし、 光センサーの位置が MI100 の上に付いていたので、そのままだと床に引いたラインを追いかけるのは難しいので、懐中電灯の光に向かっていくようにしました。(ライトトレーサー?)

(続きの記事を書きました。
 2014.10.28 追記;
→・無線ロボット MI100改 で(今度こそ)ライントレースをやってみた
 2014.11.25 追記;
→・無線ロボット MI100改 でライントレースをやってみた(決定版?)

光センサーの上部を何かで覆って、正面からの光だけを測るようにします。

実行してみると、反応速度はかなり遅いです。
実行プログラムを MI100 本体に入れるのではなく、PC からBluetooth でデータを送受信して実行する関係上、仕方ないのかも。


以下、参考プログラムです。
なお、プログラムは前回の記事で追加した命令(スピード、ターン)を使っています。
(→・Rubyで動かす無線ロボット MI100 の命令一覧とその追加 - noanoa 日々の日記

(2014.10.15 追記;
mi100 のバージョンが 0.4.0 に上がり、標準でスピード、ターンの命令が使えるようになったので、プログラムの一部修正しました。)
------------------------------------------------------------------------------------------
require "mi100"

robo = Mi100.new "/dev/tty.RNBT-BB24-RNI-SPP"

robo.good
bright_stack = [2, 2, 2, 2]
robo.speed 200
loop do
  bright_ave = bright_stack.inject(:+) * 10 / 4.0
  bright = robo.light
  bright_stack.shift
  new_bright_stack = bright_stack << bright
  new_bright_ave = new_bright_stack.inject(:+) * 10 / 4.0
  puts "#{bright}, #{new_bright_ave}"
  if new_bright_ave >= bright_ave
    robo.turn_left! 50
  else
    robo.turn_right! 50
  end
end

robo.speed
robo.close
------------------------------------------------------------------------------------------


(2014.10.28 追記;
無線ロボット MI100改 で(今度こそ)ライントレースをやってみた
 のプログラムの方が単純でいいのかもしれないので載せておきます。)
------------------------------------------------------------------------------------------
require "mi100"

robo = Mi100.new "/dev/tty.RNBT-BB24-RNI-SPP"  #ブルートゥースの接続COM名は自分のものを

robo.good
puts robo.power

robo.speed 200
dark = 10   #黒と白の閾値は実際に測って決める

loop do
  bright = robo.light
  puts bright
  if bright >= dark
    robo.turn_right! 30
  else
    robo.turn_left! 30
  end
end

robo.speed
robo.close
------------------------------------------------------------------------------------------


⚪︎関連記事;
→・無線ロボット MI100 のファームウェアを書き換えてみた
→・無線ロボット MI100改 のファームウェアでライントレースをやってみた
→・MI100 でライントレースをする設定(Windows編、Mac編)
→・「MI100ロボットでライントレース大会」のスライドを公開しました