PicoRubyを使ってかにロボを制作し「第1回 Matz葉がにロボコン」に出場しました


My Redmine

黒谷です。2024年1月6日(土)、松江テルサのテルサホールにて開催された「第1回Matz葉がにロボコン」のオープン部門に出場しました。残念ながら初戦で敗退してしまいましたが、かにロボの制作過程を紹介して、多くの方にMatz葉がにロボコンに出場していただくきっかけになればと思います。

Matz葉がにロボコンとは

Matz葉がにロボコンとは、スモウルビーや軽量Rubyを活用したこども向けプログラミングコンテストです。かにをモチーフにしたロボットを指定のコースで走行させて競います。福井の越前がにロボコンから始まり全国各地で開催されているご当地こどもロボコンのひとつです。

昨年、小学生を対象としたコンテストとしてプレ大会が開催されました。今年は第1回として、小学生部門に加えて、中学生以上も参加できるオープン部門が新設されました。

「第1回 Matz葉がにロボコン」の様子はこちら

Matz葉がにロボコンで使用できるロボット

Matz葉がにロボコンで使用できるロボットのルールは、大きさ(縦、横、高さいずれも25cm以下)、多足歩行型も車輪型もOK、という比較的ゆるいルールになっています。

小学生は、松江高専さんが主催する講習会に参加すると、松江高専さんによって設計・制作されたマイコン基板など、ロボット組み立てに必要なキット一式が提供されます。講習会で、ロボットの組み立てとプログラム作成を指導してもらいます。家に持ち帰って、ロボットにかにのデコレーションを施して完成です。

松江高専さんのキットで使われるロボットのベースはタミヤの「2チャンネル リモコン・インセクト (6足歩行タイプ)」です。2個のモーターで右足と左足を別々に動かすことができます。このモーターをマイコンで制御するようになっています。

私は講習会のアシスタントとしてお手伝いをしました。松江高専さんが設計されたマイコン基板は良くできていて、配線を間違えずに取り付ければ、すぐに動き出します。

このキットを使わせてもらえば、大人もすぐに出場できそうです。しかし大人として、ちょっとかっこいいところを見せたい。

家に子供が作って遊ばなくなったタミヤの「2チャンネル リモコン・クワガタムシ」があったので、これを使うことにして、松江高専さんのキットを使わずに自分で部品を調達してロボットを制作することにしました。

Raspberry Pi Pico と PicoRuby

使用するマイコンとファームウェアは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のおかげです。プログラムの作成は以下の繰り返しでした。

  1. R2P2のシェル環境でプログラムを数行実行する
  2. うまくいかない
  3. シェルの履歴をたどってプログラムを直して実行する
  4. うまくいったら、動いたプログラムをファイルにコピペして保存する

ちょっと試してモノが動いて楽しい、という環境をR2P2が実現してくれます。 シェルでロボットの動きを確かめながらプログラム開発ができるんじゃないかという考えは想定通り、うまくいきました。 R2P2の環境が無かったらモチベーションが続かなかったかもしれません。 皆さんもぜひ一度R2P2を試してみてください。

Matz葉がにロボコンに興味を持たれた方、第2回大会に出場しましょう!

【スタッフ募集中】
弊社ではAWSを活用したソリューションの企画・設計・構築・運用や、Ruby on Rails・JavaScriptフレームワークなどを使用したアプリケーション開発を行うスタッフを募集しています。採用情報の詳細
弊社での勤務に関心をお持ちの方は、知り合いの弊社社員・関係者を通じてご連絡ください。

My Redmine

こちらの記事もオススメです!
こども向けプログラミングコンテスト「第1回 Matz葉がにロボコン」が開催!ファーエンドテクノロジーもスポンサーとして協力
ご当地こどもロボコンのひとつ「Matz葉がにロボコン」の第1回が開催され、ファーエンドテクノロジーも協賛。
旅行の移動をスムーズに!Googleマップと交通系ICカードの利用
Googleマップで目的地を保存し、移動中に検索する手間を省く方法を紹介します。
Rails Girls Matsue 5thのオーガナイザーをやりました
さまざまな課題を乗り越えて、無事イベントを開催。今回のイベントを通して、イベント運営の大変さを知りました。
日本シーサート協議会 Annnual Conference2023 に現地参加しました
Annual Conferenceは毎年NCAが開催するイベントです。
My Subversionのリニューアルに伴い、AWS WAFを使用しました
AWS WAFを使用して良かった点を紹介します。
ファーエンドテクノロジーからのお知らせ(2024/04/24更新)
入門Redmine 第6版 出版記念企画セミナー「Redmineのアクセス制御」【2024/5/30開催】
入門Redmine 第6版(2024年3月23日発売)の書籍から「Redmineのアクセス制御」について解説します。
My Redmine 初回ご契約で「入門Redmine 第6版」プレゼントのお知らせ
Redmineのクラウドサービス「My Redmine」を初めてご契約いただいたお客様にRedmine解説書「入門Redmine 第6版」を進呈いたします。
2024年度ブランドパートナーに島根県在住のモデル ユイさんを継続起用
ユイさん(モデルスタジオミューズ所属)をファーエンドテクノロジーの2024年度ブランドパートナーとして継続して起用します。
My Redmine スタンダードプランおよびAdminサポートデスクプランの料金改定のお知らせ【2024年4月ご利用分より】
2024年4月ご利用分より、My Redmine スタンダードプラン(民間企業・個人向け及び官公庁向け)とAdminサポートデスクプランの料金を改定いたします。
Redmineの最新情報をメールでお知らせする「Redmine News」配信中
新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け