狠狠撸

狠狠撸Share a Scribd company logo
円滑な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(土)確認
サービスと搁耻尘颈颁补谤の説明
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フロー(つなぐだけ)
サジェストされる!
できあがったもの(肠丑补谤迟)
できあがったもの(驳补耻驳别)
まとめ
既存コードを流用しつつRumicarをネットに繋げられた
- Arduino IoT Cloudは基本クリック操作のみ
- Node-REDフローはサジェストされた設定をそのまま選択するだけ
herokuダッシュボードにそのままつないで終わり
- 自分から加えたArduinoコードは3行だけ
とにかく手軽すぎる。
手軽なのに可用性ヤバい
- APIキー取得後はHTTP経由で別サービスと連携可能
- 既存のArduinoコードはほぼ流用可能
できたら嬉しいなぁと思っていること
- Websocketなどで通信を確立できたらリアルタイム性上がりそう
- WebRTCで映像とか送れたらいいなぁ
ご清聴ありがとうございました

More Related Content

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