正月にロボット作ったので見て pic.twitter.com/sKuMXJBoA9
— メルセデスベン子 (@nomolk) 2019年1月5日
Amazonとか中国の通販サイトを見ていると、4関節の二足歩行ロボットをちょくちょく見かけるなと思っていたのですが
ELEGOO Arduinoプロジェクト Penguin Bot リモコンロボットキット 説明書付 STEMおもちゃ (赤)
- 出版社/メーカー: ELEGOO
- メディア:
- この商品を含むブログを見る
同タイプのロボットがオープンソースで公開されているのを発見したので作ってみました。
名前はOTTOといいます。こんなかんじです。
あるく
踊る
かわいい……!
公式サイトより。好きな色で作れる
というわけでこのエントリはOTTOの紹介記事です。
↓OTTO公式サイト
www.ottodiy.com
できること
OTTOはこんなことができます。
サンプルプログラムを動かす
まず、あらかじめ用意されたサンプルプログラムを動かすことができます。
これがプログラムの一覧です。歩いていって障害物をよけるプログラム(目の部分が超音波式の距測センサになっています)や、ハッピーバースデーを歌う、Smooth Criminalを踊る、などがあります。これだけで十分遊べる充実度です。
www.youtube.com
障害物をよけるプログラムです。床が滑って歩行がいまいちですが、なんとなく避けてくれてます。
www.youtube.com
こちらはOtto_allmovesというプログラムで、こんな動きができますよ、というカタログ的なパフォーマンスです。最後コケるのがかわいい。
プログラミングする
Scratchベースの環境で動作をプログラミングすることができます。
できるのは前進したり曲がったりの移動のほか、ポーズをとる、音を鳴らす、センサーの値での条件分岐、などなど。後述する拡張機能にも対応しています。
左のブロックを使って真ん中のエリアにプログラムを作ります。右のコード部分は自動生成されます。このキャプチャ内にあるプログラムで
www.youtube.com
こんな動きをします。最後のきめポーズが「LOVE」のポーズらしい。
これはPCからリアルタイムにOTTOをリモートコントロールしているわけではなくて、ロボットのマイコンにプログラムを書き込んでスタンドアローンで動作しています。そのため、一度書き込んでしまえばそのまま持ち出して遊ぶことができます。
もっとプログラミングする
さっき紹介したサンプルプログラムはArduino言語で書かれています。ということは、もちろん自分でもArduino言語でゴリゴリプログラミングすることが可能です。
汎用的な機能はあるていどライブラリ化されているので、そこそこ書きやすそう。
さらに拡張する
今回作ったのはOTTOですが、拡張版としてOTTO+というのもあります。これはBluetoothでスマホから操作できたり、タッチセンサで本体を触るだけで操作できたり、音に反応して動いたりします。
Bluetooth化については試して失敗したので、そのあたりは記事の終盤に。
以上がOTTOの概要です。機能的には以上ですが、なによりフリフリと全身を揺らしながら歩く様子が非常にカワイイです。欲しくなってきましたか?なったあなたに朗報です。なんとOTTOは自作が可能です!
作り方
公式のマニュアルはここっぽいのですが、ぜんぶ英語ですし実際作ってみると注意すべき点などもあったので、そういった情報も含めて、ここでひととおり説明したいと思います。公式マニュアルとあわせて参照してください。
用意するもの
材料
ネット通販を使えば手に入りにくいものはないですが、ブザーやスイッチは日本の定番*1とはちょっと違う形状かも。
- サーボモータ SG90×4
- 出版社/メーカー: 梅本合同会社
- メディア: おもちゃ&ホビー
- この商品を含むブログを見る
- Arduino Nano 今回は互換品を使用
HiLetgo® 3個セット Mini USB Nano V3.0 ATmega328P CH340G 5V 16M マイクロコントローラーボード Arduinoと互換
- 出版社/メーカー: HiLetgo
- メディア: エレクトロニクス
- この商品を含むブログ (1件) を見る
- Arduino Nano I/O拡張シールド
Nano V3.0 I/O 拡張ボード NANO I/Oシールド NANO IOボード Arduinoに対応
- 出版社/メーカー: HALJIA
- メディア: エレクトロニクス
- この商品を含むブログを見る
- 超音波センサ HC-SR04
HC-SR04 超音波距離センサーモジュール For Arduino
- 出版社/メーカー: サインスマート(SainSmart)
- メディア: Wireless Phone Accessory
- この商品を含むブログ (1件) を見る
- 12mm径パッシブ・ブザー
EasyWordMall 10個パッシブブザー 電磁 ユニバーサル インピーダンス 16Ohm AC 2KHZ 3V 5V 12V
- 出版社/メーカー: Apple Trees E-commerce co., LT
- メディア: その他
- この商品を含むブログを見る
- ジャンパ線 メス-メス
EasyWordMall ブレッドボード・ジャンパーワイヤ(メス-メス)(20cm)40本
- 出版社/メーカー: Apple Trees E-commerce co., LT
- メディア: その他
- この商品を含むブログを見る
- 電池ボックス(単3電池4本、2×2のもの)
uxcell 電池ボックス 電池ホルダー 両面電池ホルダー 単3電池ケース 単3形*4本 6V用 電池ホルダー 2個入り
- 出版社/メーカー: uxcell
- メディア:
- この商品を含むブログを見る
- 8mmロックスイッチ
SODIAL(R) 8ミリメートルx8ミリメートル6ピンセルフロックスイッチボタン20個
- 出版社/メーカー: SODIAL(R)
- メディア: その他
- この商品を含むブログを見る
SODIAL(R) 50件のマイクロ触覚の押しボタンスイッチキャップカバー プロテクター 黒 6x10mm
- 出版社/メーカー: SODIAL
- メディア: その他
- この商品を含むブログを見る
- M2のねじ+ナット 各2
六角 ナット M2 100個& 十字穴 ネジ スクリュー M2 8MM 100個 ファスナー クロス パンヘッド プラス
- 出版社/メーカー: ミライエンタープライズ
- メディア:
- この商品を含むブログを見る
工具
はんだづけが必要な個所が少しだけあります。
あとボディは3Dプリンタで出力が必要です。持ってない場合はFablabなどの借りられる施設に行くか、DMM等の出力サービスを使おう。
- 3Dプリンタ
- ミニUSBのケーブル(Arduino書き込み用)
- ドライバー
- 瞬間接着剤
- ヤスリ
- はんだづけ道具一式
キットを買う
買い集めるのが面倒とか、3Dプリンタを使えるあてがどうしてもない場合は、公式サイトで一式そろったキットが買えます。
その場合、上記のリストのうちM2ねじ、ナット、およびドライバー以外の工具は僕が付け加えたものなので入ってません。別途用意しよう。
つくる
組み立て時間はざっくり2時間くらいです。(3Dプリントの時間はのぞく)
1.ボディを3Dプリントする
3Dモデルはここからダウンロードできます。
www.thingiverse.com
太ももと足は同じものが2つずつ必要で、ボディと頭をあわせて計6個です。
こんな感じ。今回は家にウッドPLAのフィラメントが余っていたので使いました。
売り上げランキング: 35,010
ウッドPLAは粉末になった木材の混ざったフィラメントです。写真で見ると段ボールっぽい色ですが、3Dプリントの積層が木の繊維のようなテクスチャになるため、実物を見ると思いのほか木製っぽいです。おもしろい質感のものができるので、普通のフィラメントに飽きた人にはおすすめ。
ただちょっと扱いが難しく、高温では糸を引き、低温ではノズルが詰まります。ウッドフィラメントの商品説明にはよく「温度によって色を変えることができます」というようなことが書いてあるのですが、実際には自由度は低いです。
僕が使ったのは上に貼ったやつですが。もっと評判のいいのがあったので今から買うならこっちの方がいいかも。
……とここまでウッドPLAの魅力を熱弁してしておいてなんですが、可能ならABSで出力した方が、あとあと楽です。
2.サーボのセンター出し
組み立ての前に、サーボモーターのセンター出しをします。
公式マニュアルにはこんな図が出てくるのですが、
要は180度まわるサーボモーターをあらかじめ90度の位置にしてから組み立てよ、ということです。
その割にやり方が書いてないので、ここで説明します。
まずこうしてください。
Arduino nanoを拡張ボードに刺し、USBケーブルでPCにつなぎます。
さらに、4つあるサーボモーターの端子をIOボードの6、8、9、12に挿します。
サーボの端子の向きは、茶色い線がIOボードのG(黒)、黄色がS(青)です。
で、おもむろにPCの方でArduino IDEを立ち上げまして、以下のコードをコピペします。
#include <Servo.h> Servo servo1; Servo servo2; Servo servo3; Servo servo4; void setup() { servo1.attach(6); servo1.write(90); delay(1000); servo2.attach(8); servo2.write(90); delay(1000); servo3.attach(9); servo3.write(90); delay(1000); servo4.attach(12); servo4.write(90); delay(1000); } void loop() { }
これをArduinoに書き込みます。
書き込みの際は、ツール>ボードから「Arduino Nano」を選ぶのを忘れないようにしましょう。また、場合によってはその下のプロセッサのところで、「ATMega328P(Old Bootloader)」を選ぶ必要があるかもしれません。ここは「やってみてダメだったら変えてみる」方式で大丈夫です。
これでプログラム的にはサーボモータのセンタリングが行われるはずなのですが、パソコンのUSBポートだと電流不足でたぶん動きません。
なので書き込みが終わったら、PCにつないでいるUSBケーブルを携帯の充電アダプタとかに繋ぎなおして、Arduinoのリセットボタンを押してください。
サーボモーターが反応したでしょうか?
終わったらいったん全部ばらします。
3.ボディと太ももの固定
いよいよ組み立てです。まずはボディにサーボモーターをはめます。
穴にちょうどサーボのでっぱりがはまるように。はまらない場合はボディの穴をヤスリで整えましょう。(以下ずっと、ヤスリは適宜使ってください)
逆から見るとこんな感じ。はめるだけでなくねじ止めもしてください。サーボ付属のねじの大きい方を、サーボ1個につき2本ずつです。あまりきつく締めるとボディが割れるので、ある程度まででOKです。
次に、付属のサーボアームを加工します。2本分を、以下のようにカットしましょう。がんばればハサミでも切れます。
上が加工前、下が加工後です。まんなかは説明のために切取り部分を塗りつぶしたところ。
これを太ももパーツにはめる……のですが、そのまえに、次の工程の準備をしておきます。
のこりのサーボモーターの線を、太ももパーツの開口部からいれて底板の穴に通し、そのままボディ側の穴にも通します。この工程は公式マニュアルではあとでやることになってますが、かなり大変になるので、先にやっておいた方がいいです。
で、いよいよ太ももをボディに固定します。
右が固定したところ。さっきのサーボアームを、ボディにはめたサーボにグッと押し付けてはめこみます。向きが写真と同じになるように注意してください。はめたら付属の小さい方のねじをサーボアームの真ん中に入れて、固定します。
これをもう片方の足も。
こんな感じになりました。これで太ももの取り付けは完了です。
4.足の取付け
太ももから先、足のパーツを取り付けていきます。
のこり2本のサーボモーターに、サーボアームを付けます。
この形のやつを、この向きで。写真はネジがまだですが、締めちゃってOKです。
そのサーボをこんな感じで太ももパーツにつけて、ねじ止めします。ここはねじ穴が1個しかないので、1個だけ固定します。
ここのねじですが、ねじ穴が1個しかないうえに付属のビスだとどう考えても固定が弱いので、別途用意したM2のボルトを使いましょう。ただし、いまはまだボルトを挿し込むだけにとどめて、ナットはあとで締めます。
で、次がOTTO組み立ての最難関です。足パーツに溝が2つありますよね?
ここに、太ももパーツの突起と、サーボアームを奥までぐっと差し込みます。
コツとしては、
こういう感じでサーボモータを思い切ってググっと傾けてしまいます。(太もものネジ穴が割れない程度に!)
で、太ももパーツの突起側を、とにかく足パーツにはめてしまう。
そのうえで、傾けていたサーボモータを起こしてきて、太ももにグイグイ押し付けて、奥まではめこみます。
以上のような感じやるとうまくいくはず。健闘を祈ります。
なんとかうまくはまったら、ナットを締めます。
下半身の完成!!
5.頭の組み立て
ここまで出来たらもう完成したようなものです。
次は頭パーツに超音波センサの取り付け。
こんな感じ。穴に通すだけです。
裏です。
突然ですが、ここではんだづけタイムです。
まずIOボードの、裏にVINと書かれている穴に適当な銅線をはんだ付けします(写真の緑の線)。ない場合はジャンパ線を切って」作りましょう。
もうひとつ、裏にGNDと書かれているところにも、電池ボックスの黒い線をはんだ付けします。
銅線の空いてるほうの端に、スイッチをはんだ付けします。
スイッチの端子はここです。
線はどっちがどっちでもいいです。
これは主電源スイッチになります。実際に電池を入れてみて、ArduinoのON/OFFができることを確認してください。
配線がすんだら、スイッチをボディに固定します。サーボアームのあまりを使って固定できるようになっていました(見にくいですがサーボアームの下にスイッチがあります)。よくできてる!
写真を撮り忘れましたが、一緒にブザーも差し込んでください。スイッチの反対側(写真でいうと左側)にブザーの固定穴があります。こっちは穴にねじ込むだけです。入らない場合はヤスリで調整しよう。
できたら頭にArduinoを入れます。ねじ穴がありますが、しっかりねじ止めしてしまうとたぶんUSB端子の位置がボディの穴からずれます。調整しつつ固定しましょう。
できたらいよいよ配線です。
図は公式マニュアルより。超音波センサがちょっと複雑なので間違えないようにしましょう。
こんな感じになります。
ここまでできたらいよいよ大詰めです。
電池ボックスはボディのここに収めまして
フタを締めます!!!
中身が配線でぎゅうぎゅうなので、力づくで閉めましょう。
閉める過程で9割方の人は頭パーツについてるツメが折れると思いますが、瞬間接着剤で直しましょう。折れる→直す、を3回くらい繰り返すと、鍛えられて折れなくなります。
できた!!!!!!!!!!!!!!!!!!!!
6.サンプルプログラムの書き込み
ハードウェアが完成したので、今度はソフトウェアです。魂を入れていきます。
GitHubからソース一式をDLします。
ここ。適当な場所に解凍したら、まずはライブラリをインストールします。
解凍したフォルダ/libraries の中身を、Arduinoのライブラリフォルダ(Windowsの場合 C:\Users\ユーザ名\Documents\Arduino\libraries とか)にコピーします。
LICENSE.mdとreadme.txtはコピーしなくていいです。
できたら、解凍したフォルダに戻って、適当なフォルダの適当なinoをArduino IDEで開きます。
Otto_allmoves/Otto_allmoves.ino あたりが動きも音もあってわかりやすいと思います。
開けたらOTTOのUSB端子をPCに接続して、
「書き込み」を押して、書き込みできたら完了です。
USBケーブルを外して、スイッチを押してみましょう。
OTTOが動き出します!
カワイイ……!
プログラミングをする方法
このようにOTTOは見ているだけでもかわいいですが、支配欲の強い人はOTTOを自分で操ってみたくなるかもしれません。
Scratchベースの環境でプログラミングをする方法はこちらに載っています。
ざっくり説明すると、
- mblock3をインストールする(間違って一番上にあるmblock5を入れてしまうと使えないので注意)
- mblock3を起動、Extensions>Manage Extensions>Otto(search)>ottodiy>Download →ブロックのRobotsカテゴリにottodiy用のボタンが追加される
- Edit>Arduino Mode
- (OTTOをUSB接続しておく)Connect>Serial Port>(Ottoの繋がっているポート)
- Boards>Arduino Nano (mega328)
以上で設定は完了です。
あとは好きにプログラムを組んで、右の自動生成コードの上にある「Upload to Arduino」ボタンを押せばArduinoにプログラムが書き込まれます。いったん書き込まれたらUSBケーブルは外してもOKです。
ちなみにOttoのプログラムは「Otto Program」ブロックから実行されるので、処理の最初に入れるようにしましょう。
また、僕は試してませんが、サンプルプログラムの Otto_Mblock_ScratchMode_Serial.ino を使うと、いちいちArduinoに書き込まなくてもリアルタイムでmblockからOTTOを動かせるようです。
拡張する(OTTO+、ほか)
拡張版のOTTO+は、ここにマニュアルがあるので興味があればどうぞ。ボディタッチによるスイッチ操作と音センサ、Bluetoothによるスマホからのコントロールを搭載できます。3Dプリントしたパーツは同じものが使えるようですが、ただでさえ中がギュウギュウなのにこれ以上部品を増やしても大丈夫なのだろうか。
他にも腕を追加したバージョンとかLEDマトリクスを紹介したバージョンなどが、こちらのプロジェクト一覧で見られます。
Bluetoothとの闘い
かくいう僕もBluetoothを搭載しようとして格闘してはみたのですが、結局うまくいかなかったので、以下に経過だけ書き残しておきます。あとに続く人の参考になれば。
- 標準のbluethoothモジュール、HC-05は技適通ってないので日本では使えない。
- HC-05を調べると、どうもbluetoothで受信したものをそのままシリアルで送ってくるだけっぽい
- 代わりにESPr Developer 32を使用することに。ESP32の標準ライブラリにbluetoothSerialというライブラリを発見、サンプルコードがそのまま使えそう。通信速度だけ合わせる。
- Android端末に専用アプリをインストール、ESP32でコマンドを受信できることを確認。
- ESP32、電気食いなので乾電池からArduinoと並列つなぎでは辛くて、別電源がいるかも。
- OttoにBluetooth対応のプログラムをインストール、別電源につないだESP32をシリアル接続する(TX-RX/RX-TX/GND-GNDを接続)も動作せず。シリアル転送のランプはちゃんと点滅するのに。
- デバッグ。Arduino Nano上で、ESP32からのシリアルをSoftwareSerialで別のArduinoに転送。シリアルモニタで確認するとArduinoまでちゃんとコマンドが来ている。
- でもサーボもブザーも反応しない、なぜ??
- (Arduino側5VでESP32が3.3Vなのがちょっと気になったけど、コマンド届いてるのでそこの問題ではなさそう。)
というところで終了です。プログラム側でコマンドのデコードがうまくできてないのかも。これ以上打つ手がなくなったので諦めました。
※追記
未検証ですが下記の方法で動いたという報告がありました。ありがとうございます!
スマホからBluetooth経由での遠隔操作が動くようになりました。
— ごじ (@goji2100) February 3, 2019
Bluetooth通信はESP32のSerialToSerialBTを使いました。
APPの修正箇所は下図の一行のコメントを外すだけです、但し、新規にジェスチャー登録して動作させるとBluetooth通信エラーが発生します・・・(^-^; pic.twitter.com/zTjy8xi1RG
かわいいので作ろう
締めが厳しい話になってしまいましたが気を取り直してまとめです。
OTTOはとてもかわいいロボットですし、自分で作ったとなると愛くるしさもひとしおなので、ぜひ作ってみてください。
大きくカスタマイズしなくても、3Dプリントの色を変えるだけで雰囲気が変わって楽しいと思います!
*1:秋月基準