SlideShare a Scribd company logo
1 of 33
円滑なRumicar開発をするためのtips
井上 稔(@henjin01_Fab)
RumiCar 会議(conference)
2021/12/12
自己紹介
名前: 井上 稔(Minoru INOUE)
出没先: コミュニティ“ゆるメカトロ”
Facebook: minoru.inoue.90
Twitter : @henjin01_Fab
Rumicarしょしんしゃです。
I’m beginner.
今回は、Rumicarを作る際に実施した工夫をまとめました
ざっくりとしたアジェンダ
1. ハードウェアな工夫
2. ソフトウェアな工夫
ハードウェアな工夫
大まかな概要
メカは一発で作ろうとするとほぼ確で失敗する
「試行錯誤」するためにおこなった工夫を話します。
試行錯誤するには
試行錯誤する≒可変にする
今回のRumicarでは下記の要素を可変にした
センサー
位置
ラジコンカー
配線
配線について1
センサー、マイコン、車体の結線はあえて基板化しない
→走らせた結果次第で仕様が変わる可能性がある
ToFセンサーの交換やマイコンの変更は頻繁に発生したが
おおよそ2分足らずで対応できた
センサ用自作ケーブル
先端をジャンパっぽくした
ピンヘッダそのまま
配線について2
モータードライバはこちらを使用した
安価&小型、薄い
燃やしてもうまい棒5本程度の出費
センサー位置について1
LEGOテクニック部品に互換させた
センサーの角度・高さ調節が即座にできた。
かつ、センサー数を増やすなどの新しい取り組みが容易になった
https://github.com/henjin0/GeekBaggy
こちらで自作する方法もアリ:https://github.com/henjin0/HolePlateMaker
センサー位置について2
組付けの自由度を増やすべくフラットベッド化した
レーザーカッターで3mmのアクリル or MDFをカットして作成
https://github.com/henjin0/DAISO-radio-control-racing-car-plate
車体について1
今回はダイソーラジコン(600円)を使用した
ただ、フリーマーケットではもっと安く手に入ることも
タイミングを狙えばmerucariだと送料込みで400円前後でゲットしやすい
アフターコロナであれば、大井競馬場フリマなどもオススメ
(下手すると100円切ることも。。。)
https://trx.jp/hallDetail.xhtml?hallId=1
車体について2
いっそのこと3Dプリンタで作ってしまえ!
そんな方にKari-Kurumaはオススメです。
ステアやフレーム部品は3Dプリンタで作ればいいだけ
3Dプリンタさえ稼働していれば壊しても無問題
https://github.com/henjin0/Kari-Kuruma
ハードウェアの工夫に関するまとめ
長く話したけども、結局コレに尽きる
容易なスクラップ&ビルド 低コスト
素早く失敗&即座に再挑戦できる状態をつくる
ソフトウェアな工夫
大まかな概要
Arduino IoT Cloudを有料プランにして
Node-REDでデータを扱えるようにした
今回はRumicarと呼ばれる自律走行ラジコンを
Node-REDを介してネットへつなぐ
ToF1:123
ToF2:456
ToF3:789
ToF1:123
ToF2:456
ToF3:789
大まかな概要(補足)
Q. なんでNode-REDを使う必要があるの?
A. 受信データの操作・保存ができない
Arduino IoT Cloudは基本的にデータの仲介と表示のみ
受信データのロギングやフィルタリングなどは現状不可能
→別のサービス(Node-RED)に頼る必要あり。
今回つかうもの
今回使うもの
enebular
Entry Plan
(年$23.88)
※2021/12/11(土)確認
サービスとRumiCarの説明
Arduino IoT Cloudについて
ESP32などを含め、ネットにつながるArduinoボードを
簡単にネット上から操作できるサービス
上に示すようなダッシュボードで見える化できる
また、課金プランでHTTP(POST/GET)で制御可能
Node-REDとenebularついて
• Node-REDはノードという部品を結線して構成するビジュアルプログラミング言語
• enebularはUhuru㈱が提供しているNode-REDプラットフォーム
メアドの登録だけでクラウド上でNode-RED環境を使わせてくれる
一部制限はあるが、基本無料。超太っ腹!
Herokuについて
• アプリケーションを動かすためのクラウド環境(PaaS)。基本機能は無料
• AWSやAzureよりも非常に抽象的。中身よりも機能にフォーカスされている感じ。
一部制限はあるが、基本無料。超太っ腹!(2回目)
https://jp.heroku.com/home
RumiCarについて
3基の距離センサの値をもとに車体を制御する
自律走行プログラム開発のためのプラットフォーム
基本形はArduino nanoとToFセンサの組み合わせ
ネットを介した制御は特に無し
https://github.com/RumiCar-group/RumiCar
Arduino nanoと
モータードライバ
ToFセンサ
(左右と正面)
今回のNode-REDの取り扱い
enebularを用いてherokuにデプロイして使用 &
Arduino IoT Cloud用外部フローをインストール
rumicar.herokuapp.com/
デプロイ
@arduino/
node-red-contrib-arduino-iot-cloud
skipシート
実装について
skipシート
今回の構成
rumicar.herokuapp.com/
HTTP
(GET/POST) HTTP
(GET/POST)
Arduino IoT Cloudをインターフェースに
RumiCarのToFセンサの値をNode-REDへ渡す
Arduino IoT Cloud(Thing)設定
見える化だけできればいいのでToFセンサ値を定義
今回のRumicar
- ToFセンサ:VL53L0x
- モータードライバ:DRV8833
- 制御ボード:Arduino MKR WIFI 1010
- いけにえ車体:ダイソーの600円ラジコン
- フレーム:MDF/アクリルをレーザーカットして作成
Rumicar本体に書き込むメインコード
Arduino IoT Cloudへの接続コードは自動作成
かつ、コードの中身は通常Rumicarと大差なし
#include "RumiCar.h"
int before_s1;
int s0, s1, s2;
int ibound;
#include "thingProperties.h"
void setup() {
Serial.begin(9600);
delay(1500);
initProperties();
ArduinoCloud.begin(ArduinoIoTPreferredConnectio
n);
RC_setup();
ibound = 250;
before_s1 = 0;
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
}
int sat_value(unsigned int num){
if(num >= 255){
return 255;
}
return num;
}
void loop() {
ArduinoCloud.update();
s0=sensor0.readRangeSingleMillimeters();
s1=sensor1.readRangeSingleMillimeters();
s2=sensor2.readRangeSingleMillimeters();
Serial.print("Sensor0:");
Serial.print(s0);
vl53L0x_1_measure=s0;
Serial.print(" Sensor1:");
Serial.print(s1);
vl53L0x_2_measure=s1;
Serial.print(" Sensor2:");
Serial.println(s2);
vl53L0x_3_measure=s2;
if(s1<=100){
if(s0 < s2-10 ){
RC_steer(LEFT);
}else if(s0 > s2+10){
RC_steer(RIGHT);
}
RC_drive(REVERSE,sat_value(300-s1));
return;
}else if (s1<=150){
RC_drive(FORWARD,sat_value(s1+50));
}else if (s1<=250){
RC_drive(FORWARD,sat_value(s1*4/5));
}else{
RC_drive(FORWARD,255);
}
if(s0 < s2+10 && s0 > s2-10){
return;
}
if(s0>s2){
RC_steer(LEFT);
}else if (s2>s0){
RC_steer(RIGHT);
}
}
void onVl53L0x3MeasureChange() {}
void onVl53L0x1MeasureChange() {}
void onVl53L0x2MeasureChange() {}
Green Code:自動作成コード
Blue Code :Rumicar追記コード
Red Code :Arduino IoT Cloudに値を渡すコード
Node-REDフロー(つなぐだけ)
サジェストされる!
できあがったもの(chart)
できあがったもの(gauge)
まとめ
既存コードを流用しつつRumicarをネットに繋げられた
- Arduino IoT Cloudは基本クリック操作のみ
- Node-REDフローはサジェストされた設定をそのまま選択するだけ
herokuダッシュボードにそのままつないで終わり
- 自分から加えたArduinoコードは3行だけ
とにかく手軽すぎる。
手軽なのに可用性ヤバい
- APIキー取得後はHTTP経由で別サービスと連携可能
- 既存のArduinoコードはほぼ流用可能
できたら嬉しいなぁと思っていること
- Websocketなどで通信を確立できたらリアルタイム性上がりそう
- WebRTCで映像とか送れたらいいなぁ
ご清聴ありがとうございました

More Related Content

More from MinoruInoue2

motionbitとml5jsで非接触ロボット操作!
motionbitとml5jsで非接触ロボット操作!motionbitとml5jsで非接触ロボット操作!
motionbitとml5jsで非接触ロボット操作!MinoruInoue2
 
M5ATOM S3とShiftr.ioで 非接触温度センサの値をネットに流してみた
M5ATOM S3とShiftr.ioで 非接触温度センサの値をネットに流してみたM5ATOM S3とShiftr.ioで 非接触温度センサの値をネットに流してみた
M5ATOM S3とShiftr.ioで 非接触温度センサの値をネットに流してみたMinoruInoue2
 
STM32H745を四足歩行させる話
STM32H745を四足歩行させる話STM32H745を四足歩行させる話
STM32H745を四足歩行させる話MinoruInoue2
 
HL2022 MAリーグ決勝 ProtoLotus クリック操作で自作LEGOパーツやユニバーサルプレートを作ってみよう
HL2022 MAリーグ決勝 ProtoLotus クリック操作で自作LEGOパーツやユニバーサルプレートを作ってみようHL2022 MAリーグ決勝 ProtoLotus クリック操作で自作LEGOパーツやユニバーサルプレートを作ってみよう
HL2022 MAリーグ決勝 ProtoLotus クリック操作で自作LEGOパーツやユニバーサルプレートを作ってみようMinoruInoue2
 
HL2022予選:ProtoLotus (クリック操作で自作LEGOパーツやユニバーサルプレートを作ってみよう)
HL2022予選:ProtoLotus (クリック操作で自作LEGOパーツやユニバーサルプレートを作ってみよう)HL2022予選:ProtoLotus (クリック操作で自作LEGOパーツやユニバーサルプレートを作ってみよう)
HL2022予選:ProtoLotus (クリック操作で自作LEGOパーツやユニバーサルプレートを作ってみよう)MinoruInoue2
 
enebular(cloud)からeduじゃないtelloをうごかしてみたよ~改行コードには気をつけよう~
enebular(cloud)からeduじゃないtelloをうごかしてみたよ~改行コードには気をつけよう~enebular(cloud)からeduじゃないtelloをうごかしてみたよ~改行コードには気をつけよう~
enebular(cloud)からeduじゃないtelloをうごかしてみたよ~改行コードには気をつけよう~MinoruInoue2
 
自作ユニバーサルプレート&LEGO互換パーツ作成ツールのなかみのはなし
自作ユニバーサルプレート&LEGO互換パーツ作成ツールのなかみのはなし自作ユニバーサルプレート&LEGO互換パーツ作成ツールのなかみのはなし
自作ユニバーサルプレート&LEGO互換パーツ作成ツールのなかみのはなしMinoruInoue2
 
Atom motion+arduino iot cloud+node-redで非接触ボックスを作る
Atom motion+arduino iot cloud+node-redで非接触ボックスを作るAtom motion+arduino iot cloud+node-redで非接触ボックスを作る
Atom motion+arduino iot cloud+node-redで非接触ボックスを作るMinoruInoue2
 
Arduino Cloud IoTとNode-RedでRumiCarを見える化する
Arduino Cloud IoTとNode-RedでRumiCarを見える化するArduino Cloud IoTとNode-RedでRumiCarを見える化する
Arduino Cloud IoTとNode-RedでRumiCarを見える化するMinoruInoue2
 
Aliexpressで買ったエンドスコープが思いの外使えた話
Aliexpressで買ったエンドスコープが思いの外使えた話Aliexpressで買ったエンドスコープが思いの外使えた話
Aliexpressで買ったエンドスコープが思いの外使えた話MinoruInoue2
 
ユニバーサルプレートをnumpy-stlで自作する(Make DIY universal plate with numpy-stl)
ユニバーサルプレートをnumpy-stlで自作する(Make DIY universal plate with numpy-stl)ユニバーサルプレートをnumpy-stlで自作する(Make DIY universal plate with numpy-stl)
ユニバーサルプレートをnumpy-stlで自作する(Make DIY universal plate with numpy-stl)MinoruInoue2
 
MaixduinoにObniz OSを入れて エッジAIとenebularをつなげてみる
MaixduinoにObniz OSを入れて エッジAIとenebularをつなげてみるMaixduinoにObniz OSを入れて エッジAIとenebularをつなげてみる
MaixduinoにObniz OSを入れて エッジAIとenebularをつなげてみるMinoruInoue2
 
Simulinkを用いたtoioラジコン
Simulinkを用いたtoioラジコンSimulinkを用いたtoioラジコン
Simulinkを用いたtoioラジコンMinoruInoue2
 
M5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなし
M5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなしM5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなし
M5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなしMinoruInoue2
 
第1回 Jetsonユーザー勉強会 AIoTをお手軽に試した話
第1回 Jetsonユーザー勉強会 AIoTをお手軽に試した話第1回 Jetsonユーザー勉強会 AIoTをお手軽に試した話
第1回 Jetsonユーザー勉強会 AIoTをお手軽に試した話MinoruInoue2
 
ObnizとNode-REDでダンボール金庫システムを作った話
ObnizとNode-REDでダンボール金庫システムを作った話ObnizとNode-REDでダンボール金庫システムを作った話
ObnizとNode-REDでダンボール金庫システムを作った話MinoruInoue2
 

More from MinoruInoue2 (16)

motionbitとml5jsで非接触ロボット操作!
motionbitとml5jsで非接触ロボット操作!motionbitとml5jsで非接触ロボット操作!
motionbitとml5jsで非接触ロボット操作!
 
M5ATOM S3とShiftr.ioで 非接触温度センサの値をネットに流してみた
M5ATOM S3とShiftr.ioで 非接触温度センサの値をネットに流してみたM5ATOM S3とShiftr.ioで 非接触温度センサの値をネットに流してみた
M5ATOM S3とShiftr.ioで 非接触温度センサの値をネットに流してみた
 
STM32H745を四足歩行させる話
STM32H745を四足歩行させる話STM32H745を四足歩行させる話
STM32H745を四足歩行させる話
 
HL2022 MAリーグ決勝 ProtoLotus クリック操作で自作LEGOパーツやユニバーサルプレートを作ってみよう
HL2022 MAリーグ決勝 ProtoLotus クリック操作で自作LEGOパーツやユニバーサルプレートを作ってみようHL2022 MAリーグ決勝 ProtoLotus クリック操作で自作LEGOパーツやユニバーサルプレートを作ってみよう
HL2022 MAリーグ決勝 ProtoLotus クリック操作で自作LEGOパーツやユニバーサルプレートを作ってみよう
 
HL2022予選:ProtoLotus (クリック操作で自作LEGOパーツやユニバーサルプレートを作ってみよう)
HL2022予選:ProtoLotus (クリック操作で自作LEGOパーツやユニバーサルプレートを作ってみよう)HL2022予選:ProtoLotus (クリック操作で自作LEGOパーツやユニバーサルプレートを作ってみよう)
HL2022予選:ProtoLotus (クリック操作で自作LEGOパーツやユニバーサルプレートを作ってみよう)
 
enebular(cloud)からeduじゃないtelloをうごかしてみたよ~改行コードには気をつけよう~
enebular(cloud)からeduじゃないtelloをうごかしてみたよ~改行コードには気をつけよう~enebular(cloud)からeduじゃないtelloをうごかしてみたよ~改行コードには気をつけよう~
enebular(cloud)からeduじゃないtelloをうごかしてみたよ~改行コードには気をつけよう~
 
自作ユニバーサルプレート&LEGO互換パーツ作成ツールのなかみのはなし
自作ユニバーサルプレート&LEGO互換パーツ作成ツールのなかみのはなし自作ユニバーサルプレート&LEGO互換パーツ作成ツールのなかみのはなし
自作ユニバーサルプレート&LEGO互換パーツ作成ツールのなかみのはなし
 
Atom motion+arduino iot cloud+node-redで非接触ボックスを作る
Atom motion+arduino iot cloud+node-redで非接触ボックスを作るAtom motion+arduino iot cloud+node-redで非接触ボックスを作る
Atom motion+arduino iot cloud+node-redで非接触ボックスを作る
 
Arduino Cloud IoTとNode-RedでRumiCarを見える化する
Arduino Cloud IoTとNode-RedでRumiCarを見える化するArduino Cloud IoTとNode-RedでRumiCarを見える化する
Arduino Cloud IoTとNode-RedでRumiCarを見える化する
 
Aliexpressで買ったエンドスコープが思いの外使えた話
Aliexpressで買ったエンドスコープが思いの外使えた話Aliexpressで買ったエンドスコープが思いの外使えた話
Aliexpressで買ったエンドスコープが思いの外使えた話
 
ユニバーサルプレートをnumpy-stlで自作する(Make DIY universal plate with numpy-stl)
ユニバーサルプレートをnumpy-stlで自作する(Make DIY universal plate with numpy-stl)ユニバーサルプレートをnumpy-stlで自作する(Make DIY universal plate with numpy-stl)
ユニバーサルプレートをnumpy-stlで自作する(Make DIY universal plate with numpy-stl)
 
MaixduinoにObniz OSを入れて エッジAIとenebularをつなげてみる
MaixduinoにObniz OSを入れて エッジAIとenebularをつなげてみるMaixduinoにObniz OSを入れて エッジAIとenebularをつなげてみる
MaixduinoにObniz OSを入れて エッジAIとenebularをつなげてみる
 
Simulinkを用いたtoioラジコン
Simulinkを用いたtoioラジコンSimulinkを用いたtoioラジコン
Simulinkを用いたtoioラジコン
 
M5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなし
M5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなしM5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなし
M5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなし
 
第1回 Jetsonユーザー勉強会 AIoTをお手軽に試した話
第1回 Jetsonユーザー勉強会 AIoTをお手軽に試した話第1回 Jetsonユーザー勉強会 AIoTをお手軽に試した話
第1回 Jetsonユーザー勉強会 AIoTをお手軽に試した話
 
ObnizとNode-REDでダンボール金庫システムを作った話
ObnizとNode-REDでダンボール金庫システムを作った話ObnizとNode-REDでダンボール金庫システムを作った話
ObnizとNode-REDでダンボール金庫システムを作った話
 

円滑なRumicar開発をするためのtips Rumicar Conference