この記事はmrubyファミリー Advent Calendar 2023の12/21の記事です。
しまねOSS協議会の黒谷です。
しまねOSS協議会は、松江高専が主催する「第1回Matz葉がにロボコン」に共催団体として参画しております。Matz葉がにロボコンとは、スモウルビーや軽量Rubyを活用したこども向けプログラミングコンテストです。かにをモチーフにしたロボットを指定のコースで走行させて競います。詳しくは公式サイトをご覧ください。
この大会は小学生部門とオープン部門に分かれています。オープン部門は中学生以上の方はどなたでもご参加いただけます。ということで私も挑戦することにしました。そう、PicoRubyで!
この大会で使用するロボットは、多足歩行型もしくは車輪型で、大きさの制限(縦、横、高さが25cm以内)、火気はNGですが、他に細かいルールはあまりありません。小学生部門向けに開催される松江高専の講習会では、松江高専で開発されたESP32のマイコンを使った基板、センサー、タミヤのインセクトシリーズのロボットが提供されます。私はRaspberry Pi PicoとPicoRubyを使って挑戦することにしました。
ベースになるロボットは、私の子供が作って、飽きて、放置していたタミヤ ロボクラフトシリーズ 2チャンネル リモコン・クワガタムシをもらって使うことにしました。
モーターを動かすためにはモータードライバーが必要だと聞き、DRV8833 スマートカーロボット用1.5A 2チャンネルHブリッジDCギヤモータドライバコントローラボードを購入しました。
ライントレースのために必要なセンサーとして、TCRT5000赤外線反射センサーモジュール IR用バリアライントラック光電スイッチ ジャンパー線付き 、Arduinoスマートカーロボット用を購入しました。
Matz葉がにロボコンの競技ルールには、ピンポン玉くらいの大きさのボールを運び、所定のエリアで落とすと加点される、というルールがあります。松江高専から提供されるロボットでは、サーボモータを使って実現しています。私もサーボモータを使おうと思い、SG90 9gマイクロサーボモーター180°RCロボットヘリコプター飛行機制御カーボートロボット制御ケーブル付き DIYエレクトロニクス デュポンケーブルを含む 5点セットを購入しました。
Raspberry Pi Pico用に3V電池ボックスを、モータとサーボ、センサー用に4.5V電池ボックスをそれぞれ用意することにしました。Raspberry Pi Pico、ブレッドボード、タミヤのユニバーサルなどは家にあるものを使って、写真のようなロボットを組み立てました。
ロボットを動かすプログラムは、残念ながらまだ完成していませんが、現時点で動作を確認できていることを書いておきます。
- モータードライバーに信号を送ってモーターを正転・逆転させる
モータードライバ DRV8833はモーターを2個制御できます。ひとつのモーターをIN1,IN2につなぎ、OUT1,OUT2をRaspberry Pi PicoのGPIOにつなぎます。IN1、IN2とモーターの動作は以下のような関係になっています。
IN1 | IN2 | モーターにかかる力 |
---|---|---|
LOW | LOW | 無 |
HIGH | LOW | 正転 |
LOW | HIGH | 逆転 |
HIGH | HIGH | ブレーキ |
ですので、以下のようなコードでモーターを正転させることができます。
in1.write 1
in2.write 0
もうひとつのモーターをIN3,IN4につなぎ、OUT3, OUT4をGPIOにつないで左右の足を動かせるようになりました。4.5V電池ボックスから電源を取り、ロボットを歩かせることができています。
- 赤外線反射センサーモジュールで値が読み取れる
PicoRubyのADCライブラリを使って値の読み取りができています。センサーをRaspberry Pi PicoのGPIO26(ADC0)につないで以下のようなコードで読み取れました。
require 'adc'
adc = ADC.new(26)
while true
puts adc.read
sleep 1
end
センサーを左右2つ取り付け、それぞれの値によって右に曲がったり左に曲がったりするプログラムのテストもうまくいっています。
- サーボモータが動く
このロボットを作り始めた当初はPWMライブラリはありませんでしたが、天才・羽角さんが作ってくださいました!
以下はR2P2のIRBでサーボモータを動かす実験の動画です。
https://x.com/kurod1492/status/1735231040174891303?s=20
まだプログラムとして組み込むところまでできていないのですが、以下のようなコードで90度→0度→90度→180度→0度と動かすことはできています。
https://gist.github.com/kurod1492/645169d4987116fbaba226dd6a3da203
羽角さんから他のコード例を教えていただいているので、動作を確認し、動きが良さそうなプログラムを作りたいと思います。
かっこよくライントレースをキメている動画を掲載したかったのですが、このブログ記事には間に合いませんでした。がんばって作成を進めたいと思います。
Matz葉がにロボコンの本戦は、2024年1月6日に島根県松江市の松江テルサで開催します。興味をお持ちになった方はぜひ観戦においでください。