黒谷です。2024年1月6日(土)、松江テルサのテルサホールにて開催された「第1回Matz葉がにロボコン」のオープン部門に出場しました。残念ながら初戦で敗退してしまいましたが、かにロボの制作過程を紹介して、多くの方にMatz葉がにロボコンに出場していただくきっかけになればと思います。
Matz葉がにロボコンとは、スモウルビーや軽量Rubyを活用したこども向けプログラミングコンテストです。かにをモチーフにしたロボットを指定のコースで走行させて競います。福井の越前がにロボコンから始まり全国各地で開催されているご当地こどもロボコンのひとつです。
昨年、小学生を対象としたコンテストとしてプレ大会が開催されました。今年は第1回として、小学生部門に加えて、中学生以上も参加できるオープン部門が新設されました。
Matz葉がにロボコンで使用できるロボットのルールは、大きさ(縦、横、高さいずれも25cm以下)、多足歩行型も車輪型もOK、という比較的ゆるいルールになっています。
小学生は、松江高専さんが主催する講習会に参加すると、松江高専さんによって設計・制作されたマイコン基板など、ロボット組み立てに必要なキット一式が提供されます。講習会で、ロボットの組み立てとプログラム作成を指導してもらいます。家に持ち帰って、ロボットにかにのデコレーションを施して完成です。
松江高専さんのキットで使われるロボットのベースはタミヤの「2チャンネル リモコン・インセクト (6足歩行タイプ)」です。2個のモーターで右足と左足を別々に動かすことができます。このモーターをマイコンで制御するようになっています。
私は講習会のアシスタントとしてお手伝いをしました。松江高専さんが設計されたマイコン基板は良くできていて、配線を間違えずに取り付ければ、すぐに動き出します。
このキットを使わせてもらえば、大人もすぐに出場できそうです。しかし大人として、ちょっとかっこいいところを見せたい。
家に子供が作って遊ばなくなったタミヤの「2チャンネル リモコン・クワガタムシ」があったので、これを使うことにして、松江高専さんのキットを使わずに自分で部品を調達してロボットを制作することにしました。
使用するマイコンとファームウェアはRaspberry Pi PicoとPicoRubyに決めていました。PicoRubyの開発者@hasumikinさんが開発したR2P2を見たとき、シェルでロボットの動きを確かめながらプログラム開発ができるんじゃないかと思ってました。
最初は、マイコンのピンにLEDをつないだらチカチカするんだから、モーターもピンにつないだら動くだろう、くらいに考えていました。モーターを動かすためには十分な電圧と電流をかける必要があり、それを実現するモータードライバーと呼ばれる部品が存在することがわかりました。モータードライバーに電圧をかけ、マイコンから信号を送るとモーターを回転させることができます。 Raspberry Pi Picoで動かしている事例を探しながら、モーターを2個制御できるものとしてDRV8833 モータドライバコントローラボードを購入しました。
かにロボは、白と黒で描かれたラインをトレースして移動する必要があります。そこでライントレースに使えるセンサーを調べました。Raspberry Pi Picoで動かしている事例を探しながら、TCRT5000赤外線反射センサーモジュール IR用バリアライントラック光電スイッチを購入しました。
Matz葉がにロボコンの競技ルールには、ピンポン玉くらいの大きさのボールを運び、所定のエリアで落とすと加点される、というルールがあります。松江高専から提供されるロボットでは、サーボモーターを使って実現しています。私もサーボモーターを使おうと思い、SG90 9gマイクロサーボモーターを購入しました。
松江高専さんのキットでは、ロボットをアルカリ電池4本で動かします。 そんなに必要なのかと思って調べてみると、今回調達したモータードライバーの入力電圧は「3ボルトから10ボルト」でした。 アルカリ電池2本で3ボルトですが、使い始めるとすぐに落ちてしますので、2本ではダメそうです。 また、サーボモーターやマイコンの電源も必要です。 結局、マイコンの動作に影響を与えないようにするためマイコン用とモーター用に分けることにして、マイコン用に電池2本、モーターとサーボモーター用に電池3本の電池ボックスを用意しました。 少しでも軽くするため単4電池を使うことにしました。
リモコンクワガタにマイコンやセンサーを取り付けるために、松江高専さんのキットと同様にタミヤのユニバーサルプレートとユニバーサルアームを使うことにしました。ユニバーサルアームはカーブユニバーサルアームにして少し見た目を変えてみました。
取り付けるとき、配線を通したり高さを調節したりする必要があるだろうと考え、ナイロン製の六角スペーサーを使うことにしました。
配線は、動くようになるまで何度も配線をやり直すことになると思ったので、ブレッドボードとジャンパー線で配線することにしました。
調達した部品をまとめました。参考金額は購入時のおおよその金額です。
部品名 | 数量 | 参考金額 |
---|---|---|
Raspberry Pi Pico | 1 | 800円 |
リモコン・クワガタムシ | 1 | 2,728円 |
モータードライバー | 1 | 470円 |
ライントレース用センサー | 2 | 260円 |
サーボモーター | 1 | 250円 |
電池ボックス(2本用) | 1 | 260円 |
電池ボックス(3本用) | 1 | 260円 |
六角スペーサー | 適量 | |
ジャンパー線 | 適量 |
Matz葉がにロボコンでは、ロボットをかにっぽくデコレーションすることになっています。工作が苦手なので、本物のかにの甲羅を使うことにしました。 年末にかにを食べる機会がありましたので、甲羅を残しておいて、きれいに洗い、しっかり乾かして使いました。
かにの目の部分をくり抜いて、赤色LEDを入れて光らせることにしました。
配線などを隠すボディをかぶせ、その上に甲羅を載せる目論見でしたが、手が回らず、配線の上に甲羅を載せるだけになってしまいました。
マイコンのファームウェアは前述の通りR2P2を使います。プログラムはRubyで作成します。
出場したロボットに搭載したプログラムを以下に置きますので、興味のある方はご覧ください。
https://github.com/kurod1492/kani-robo-r2p2/blob/c1628d092301afed76b7ae036837022f79c6cc1d/app.rb
この記事ではいくつかポイントをご紹介します。
Raspberry Pi Picoのピンと部品側の制御信号入力端子との接続を対応表にしました。
ピン番号 | GPIO番号 | 接続先の部品 |
---|---|---|
1 | GPIO0 | サーボモーター |
2 | GPIO1 | かに右目LED |
4 | GPIO2 | かに左目LED |
21 | GPIO16 | モータードライバーIN1 |
22 | GPIO17 | モータードライバーIN2 |
24 | GPIO18 | モータードライバーIN3 |
25 | GPIO19 | モータードライバーIN4 |
31 | GPIO26(ADC0) | 右センサー |
32 | GPIO27(ADC1) | 左センサー |
モータードライバーの制御信号出力端子とモーターの接続の対応表です。
モータードライバー | モーター |
---|---|
OUT1 | 右足モーターの青 |
OUT2 | 右足モーターの黄 |
OUT3 | 左足モーターの白 |
OUT4 | 左足モーターの赤 |
サーボモーターとモータードライバーへの電源は、電池ボックス(3本用)から供給しました。
Raspberry Pi Pico、ライントレースセンサーは電池ボックス(2本用)から供給しました。
かにの目のLEDはRaspberry Pi Picoから供給しました。
DRV8833というモータードライバーは、INに以下のような組み合わせで信号を送るとモーターに力がかかります。
IN1 | IN2 | モーターにかかる力 |
---|---|---|
LOW | LOW | 無 |
HIGH | LOW | 正転 |
LOW | HIGH | 逆転 |
HIGH | HIGH | ブレーキ |
R2P2では、以下のプログラムを実行するとOUT1/OUT2に繋がっているモーターが正転します。
in1 = GPIO.new(16, GPIO::OUT) in2 = GPIO.new(17, GPIO::OUT) in1.write 1 in2.write 0
これで、両足を正転させると前進、右足だけ正転させて左転回など、ロボットを進ませることができるようになります。
ライントレースセンサーからの信号をRaspberry Pi PicoのADCに対応したピンで受信します。 R2P2ではADCライブラリを使用すると信号を取り出せます。 以下のようなプログラムで、GPIO26(ADC0)に接続したセンサーの値を出力できます。
require "adc" ref = ADC.new(26) puts ref.read
事前に白色や黒色にセンサーを当てて、refの値を記録しておき、その値をモーターの制御に利用することでライントレースできるようになります。
サーボモーターを制御するにはPWM信号を送信する必要があります。このロボットを制作を開始した当初はPicoRubyにその機能が無かったんですが、@hasumikin さんがPWMライブラリ作ってくださいました!
以下のようなプログラムで、GPIO0に接続したサーボモーターを動かすことができます。
require "pwm" servo = PWM.new(0, frequency:50, duty:7.25) servo.duty(2.5)
サーボモーターが動いたとき動画を撮りました。興味のある方は以下のリンク先をご覧ください。
https://twitter.com/kurod1492/status/1735231040174891303?s=20
サーボモーターの使途は所定の位置までボールを運ぶことです。 サーボモーターにユニバーサルアームと箱を取り付け、ボールを入れ、アームを倒すことでボールを落とす、という機構を作成しました。
かにの目にLEDを入れて、パイロットランプのような役目をさせることにしました。 右目と左目を別々のGPIOにつなぎ、プログラムの実行している場所によって点灯パターンを変えることにしました。 本番では、点灯パターンを覚えていなかったことと、ロボットがまともに動かずLEDを見る余裕がなく、あまり活用できませんでした。
プログラムのポイントを書いていくと、あれ、たったこれだけだったかという気がしますが、期待通りに動くようになるまで何度も試行錯誤しました。それができたのはR2P2のおかげです。プログラムの作成は以下の繰り返しでした。
ちょっと試してモノが動いて楽しい、という環境をR2P2が実現してくれます。 シェルでロボットの動きを確かめながらプログラム開発ができるんじゃないかという考えは想定通り、うまくいきました。 R2P2の環境が無かったらモチベーションが続かなかったかもしれません。 皆さんもぜひ一度R2P2を試してみてください。
Matz葉がにロボコンに興味を持たれた方、第2回大会に出場しましょう!
【スタッフ募集中】
弊社ではAWSを活用したソリューションの企画・設計・構築・運用や、Ruby on Rails・JavaScriptフレームワークなどを使用したアプリケーション開発を行うスタッフを募集しています。採用情報の詳細
弊社での勤務に関心をお持ちの方は、知り合いの弊社社員・関係者を通じてご連絡ください。
![]() |
ご当地こどもロボコンのひとつ「Matz葉がにロボコン」の第1回が開催され、ファーエンドテクノロジーも協賛。 |
![]() |
Googleマップで目的地を保存し、移動中に検索する手間を省く方法を紹介します。 |
![]() |
さまざまな課題を乗り越えて、無事イベントを開催。今回のイベントを通して、イベント運営の大変さを知りました。 |
![]() |
Annual Conferenceは毎年NCAが開催するイベントです。 |
![]() |
AWS WAFを使用して良かった点を紹介します。 |
![]() |
社員研修に伴うサポート体制変更・休業のお知らせ(5/20〜23) 社員研修に伴い、5月20日〜23日はサポート体制の変更および休業とさせていただきます。 |
![]() |
オープンソースカンファレンス2025 Nagoyaに弊社代表の前田が登壇(ブース出展あり) オープンソースカンファレンス(OSC)2025 Nagoyaに弊社代表の前田が登壇。『Redmineの意外と知らない便利な機能(Redmine 6.0 対応版)』をテーマに発表します。 |
![]() |
エンタープライズプラン向け「優先サポート」を開始 My Redmineでは、エンタープライズプランをご契約のお客様向けにサポート対応を優先的に行う「優先サポート(プライオリティサポート)」を開始いたしました。 |
![]() |
プロジェクト管理ツール「RedMica」バージョン 3.1.0をリリース Redmine互換のオープンソースソフトウェア ファーエンドテクノロジー株式会社は、2024年11月19日(日本時間)、Redmine互換のプロジェクト管理ソフトウェア「RedMica 3.1.0」をリリースしました。 |
![]() |
Redmineの最新情報をメールでお知らせする「Redmine News」配信中 新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け |