Nintendo Switch Labo で 球探し『DLABON RADAR Z』
最近、NINTENDO LABOで遊ぶのにハマってまして
なんかもっといいの作れないかなぁ〜と考えてて 思い立ったよね
そうだレーダ作ろうって
目次
DLABON RADAR Z
ドラボンレーダZ
概要
SWITCH本体をレーダ指示器としてモータでコントローラを回してボールを探します。
SWITCH側 (レーダ指示器)
SWITCHのモニタをレーダに見立ててON/OFFスイッチとレータ方向を示す棒を表示します。
ケースはLABOらしくダンボールで作りました。スイッチと後ほどで説明するCdSセル用の穴を開け、レーダ表示部には緑色のカラーセロハンを貼っています。
なんかヤバイことになってきた。。。#ラボ作品 #NintendoLabo #NintendoSwitch pic.twitter.com/W1C3vSspKi
— HomeMadeGarbage (@H0meMadeGarbage) 2018年8月19日
ノードの結線は説明不可能なほどにグチャグチャです。。。。
レーダ回転部
いい塩梅#ラボ作品 #NintendoLabo #NintendoSwitch pic.twitter.com/Q2936EyDTm
— HomeMadeGarbage (@H0meMadeGarbage) 2018年8月19日
モータ2個使ってコントローラ2個を回しています。コントローラL (青)はレーダ指示器のバーを回す用、コントローラR(赤)はIRカメラを使ってボールの位置を探します。
回路図
部品
- マイコン Arduino UNO
- モータドライバ DRV8830
- ギアドモータ
- CdSセル
組み立て
モータは回転軸がそれぞれ上と横を向くように 木片に固定します。
ギアドモータ用のタイヤにダンボールホイールを作ってネジで固定。
コントローラ用の箱もダンボールで作ってそれぞれダンボールタイヤホイールに固定しました。
CdSセル
SWITCH本体の小さな穴はレーダONのとき光って、OFFのときに消えます。そこにCdSセルを固定してONと同時にモータが動いてOFFで止まるようにしています。
Arduinoコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#include <Wire.h> //モータドライバのアドレスは重複しないように設定 const int DRV8830L = 0x64; const int DRV8830R = 0x60; int state = 0; void setup() { Serial.begin(9600); Wire.begin(); } void writeMotorResister(int DRV, byte vset, byte data1){ int vdata = vset << 2 | data1; Wire.beginTransmission(DRV); Wire.write(0x00); Wire.write(vdata); Wire.endTransmission(true); } void loop() { Serial.println(analogRead(A0)); if(analogRead(A0) < 700 && state == 0){ //CdSセル光検出 state = 1; //モータ回転 writeMotorResister(DRV8830L, 0x10, 0x01); writeMotorResister(DRV8830R, 0x10, 0x01); delay(50); writeMotorResister(DRV8830L, 0x06, 0x01); writeMotorResister(DRV8830R, 0x09, 0x01); }else if(analogRead(A0) > 700 && state == 1){ state = 0; //モータ回転 writeMotorResister(DRV8830L, 0x00, 0x00); writeMotorResister(DRV8830R, 0x00, 0x00); } } |
ボール
ボールは反射材を貼っただけですw
ボールの位置によってIRカメラに映る場所が変わるのでスポイトノードで距離をうまいこと検出しています(近い、中くらい、遠いの3分解能)。
なぜ2個モータ使ったのか。。。
当初は赤コントローラでIRカメラ測定と回転角検出も行おうと思ったのですが。。。
NINTENDO LABO Toy-Conガレージでは重力方向軸に対する回転角は取得できないことが判明。。。
しかたないので震えながらレーダ指示棒回転用にコントローラL(青)を増やすことを決意しました。。。
しかし!回転角が得られる方向についても、表から裏で値が1.0〜0.0、裏から表で0.0〜1.0に値が変化します。これを画面ひかる出力ノードをまわるバージョンで使うと表から裏で1周して、裏から表で逆転します。つまりコントローラ1回しで2周しちゃうのです。。。
更に考えてコントローラL(青)が表から裏(もしくは裏から表)に回転して逆転するタイミングでNOTノードで逆転せず回るようにしました。
かつ青コントローラのモータ回転速度を赤用モータの半分になるように電圧調整しました。
動作
ひとまず動いた。要調整。。。
『 ド○ゴンレーダー』#ラボ作品 #NintendoLabo #NintendoSwitch pic.twitter.com/8ixSGf1mLg— HomeMadeGarbage (@H0meMadeGarbage) 2018年8月19日
紆余曲折ありつつもなんとかレーダ実現できました。こんなの発明したあの女性博士はやっぱり天才だなぁ。。。