Gearさんが投稿したArduino・トイラジコン・Wii・方向指示器に関するカスタム事例|車のカスタム情報はCARTUNE
Gearさんが投稿したArduino・トイラジコン・Wii・方向指示器に関するカスタム事例

Gearさんが投稿したArduino・トイラジコン・Wii・方向指示器に関するカスタム事例

2021年03月26日 19時11分

Gearのプロフィール画像

ゲーム機Wiiのコントローラを使って、操縦桿のイメージでトイラジコンのステアリング操作が出来るか試しました。

ついでに方向指示器もバージョンアップしておきました。

上の動画は、動作の概要を示すため8倍速くらいにしてあります。

方向指示器のクローズアップとそのためのスケッチ(プログラム)は以下のとおりです。

余談ですが、ディスプレイ上部のケーブルは、ディスプレイ本体を吊り下げるために取り付けたものです。電源と信号線はディスプレイ下部に取り付けられています。

// Turning(L293D,Max7219)

const int ENABLE = 7;
const int CH1 = 5;
const int CH2 = 3;

#include <Wire.h>
#include "nunchuck_funcs.h"

int loop_cnt=0;
int delay1 = 0;
byte accx,accy,accz,joyx,joyy,zbut,cbut;
int ledPin = 13;

#include <MaxMatrix.h>
const char CH[] PROGMEM ={

3, 8, B0000000, B0000000, B0000000, B0000000, B0000000, // space(32)
3, 8, B0010000, B0101000, B1000100, B0000000, B0000000, // < (33)
3, 8, B1000100, B0101000, B0010000, B0000000, B0000000, // > (34)
};

int DIN = 8;
int CS = 9;
int CLK = 10;
int maxInUse = 1; //change this variable to set how many MAX7219's you'll use
MaxMatrix m(DIN, CS, CLK, maxInUse);
byte buffer[10];

void setup() {
Serial.begin(19200);
nunchuck_setpowerpins();
nunchuck_init(); // send the initilization handshake
Serial.print("WiiChuckDemo ready\n");

//Pinの定義
pinMode(ENABLE,OUTPUT); // 7番ピンをOUTPUT指定
pinMode(CH1,OUTPUT); // 5番ピンをOUTPUT指定
pinMode(CH2,OUTPUT); // 3番ピンをOUTPUT指定

//コマンド説明
Serial.println("1:Slow Left Turning");
Serial.println("2:Slow Right Turning");
Serial.println("0:STOP");

// 初期化
digitalWrite(ENABLE,LOW); // disable
delay(delay1);

m.init();
m.setIntensity(1);
}

void loop() {

nunchuck_get_data();
joyx = nunchuck_joyx();
joyy = nunchuck_joyy();
accx = nunchuck_accelx(); // ranges from approx 70 - 182
accy = nunchuck_accely(); // ranges from approx 65 - 173
zbut = nunchuck_zbutton();
cbut = nunchuck_cbutton();

delay(delay1);
char val; // データ型
if ( accx < 100 ) { // left
val = '1';
Serial.print(" accx = "); Serial.println( accx );
Serial.print(" val = "); Serial.println( val );
}else{
if ( accx > 140 ) { // right
val = '2';
Serial.print(" accx = "); Serial.println( accx );
Serial.print(" val = "); Serial.println( val );
}else{
val = '0'; // center
Serial.print(" accx = "); Serial.println( accx );
Serial.print(" val = "); Serial.println( val ); } }

uint8_t i;

// 1 左回転 (CH1:High CH2:LOW)
if (val == '1')
{
Serial.println("1:Slow Left Turning");
L();
L();
delay(delay1);

digitalWrite(ENABLE,HIGH); // enable
analogWrite(CH1,255); // 回転のきっかけ
for (i = 207; i < 255; i++) {
analogWrite(CH1,i); // CH1パルス変調(+)
delay(delay1);
}
for (i=255; i!=0; i--) {
analogWrite(CH1,i); // CH1パルス変調(-)
delay(delay1);
}
digitalWrite(CH2,LOW); // CH2はLow
delay(delay1); // 継続時間
digitalWrite(ENABLE,LOW); // disable
}

// 2 右回転 (CH1:LOW CH2:High)
else if (val == '2')
{
Serial.println("2:Slow Right Turning");
R();
R();
delay(delay1);

digitalWrite(ENABLE,HIGH); // enable
for (i = 207; i < 255; i++) {
analogWrite(CH2,i); // CH2パルス変調(+)
delay(delay1);
}
analogWrite(CH2,255); // 回転のきっかけ
for (i=255; i!=0; i--) {
analogWrite(CH2,i); // CH2パルス変調(-)
delay(delay1);
}
digitalWrite(CH1,LOW);
digitalWrite(CH2,HIGH);
delay(delay1); // 継続時間
digitalWrite(ENABLE,LOW); // disable
}

// 0の場合 停止
else if (val == '0')
{
Serial.println("0:STOP");
STOP();
delay(delay1);

digitalWrite(ENABLE,LOW); // disable
}
}
void L(){
byte c = 33;
Serial.println(c, DEC);
printCharWithShift_L(c, 100);
delay(delay1);
}
void R(){
byte c = 34;
Serial.println(c, DEC);
printCharWithShift_R(c, 100);
delay(delay1);
}
void STOP(){
byte c = 32;
Serial.println(c, DEC);
printCharWithShift_R(c, 100);
delay(delay1);
}
void printCharWithShift_L(char c, int shift_speed) {
if (c < 32){
return;
}
c -= 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(8, 0, buffer);
m.setColumn(8 + buffer[0], 0);
for (int i=0; i<buffer[0]+1; i++){
delay(shift_speed);
m.shiftLeft(false, false);
}
}
void printCharWithShift_R(char c, int shift_speed) {
if (c < 32){
return;
}
c -= 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(0, 0, buffer);
m.setColumn(8 + buffer[0], 0);
for (int i=0; i<buffer[0]+1; i++){
delay(shift_speed);
m.shiftRight(true, false);
}
}
void printStringWithShift_L(char* s, int shift_speed){
while (*s != 0){
printCharWithShift_L(*s, shift_speed);
s++;
}
}
void printStringWithShift_R(char* s, int shift_speed){
while (*s != 0){
printCharWithShift_R(*s, shift_speed);
s++;
}
}

Gearさんが投稿したArduino・トイラジコン・Wii・方向指示器に関するカスタム事例の投稿画像4枚目

コネクターを自作しました。

USBのコネクター端子によく似ています。

USBが片面4端子なのに比べて、Wii コントローラは両面6端子です。6端子のうち外側4端子を使用します。

そのほかのカスタム事例

ヴェロッサ JZX110

ヴェロッサ JZX110

静岡県沼津市(ぬまづ)の「セブンイレブン沼津三津シーパラダイス前店」にて。なにやらチラッと目に入ったので、寄ってみると、まさかのセブンイレブンの津波救命艇...

  • thumb_up 5
  • comment 0
2025/02/18 18:24
LS UVF45

LS UVF45

ローアングルショット難しい😓😓😓

  • thumb_up 4
  • comment 0
2025/02/18 18:23
A1 1.4 TFSI

A1 1.4 TFSI

今年は雪が少ないと思いきや、帳尻合わせてきましたなぁ…早く夏仕様にしたい!気温もマイナス15℃を超えますと、綺麗な霧氷の出来上がり笑白樺も真っ白に。

  • thumb_up 4
  • comment 0
2025/02/18 18:23
レパード UF31

レパード UF31

F31レパード誕生39周年所有して丸6年で少しずつ直しながら状態良くなってます。スカイラインは所有して丸5年主治医のおかげで調子良く頑張ってくれています。...

  • thumb_up 13
  • comment 0
2025/02/18 18:21
エクストレイル NT32

エクストレイル NT32

雪まみれになったエクストレイル。投稿してなかったのは忙しいとかではなく。。アプリの存在を忘れるという大事件でした😂少しづつ投稿出来たらなと思います。

  • thumb_up 7
  • comment 0
2025/02/18 18:20
プリウス ZVW30

プリウス ZVW30

いつもいいねありがとうございます。ただいまの時間、本州の玄関口、山口県下関市にきております。壇ノ浦SA。お袋方の実家である鹿児島に墓参りの道中です。既に東...

  • thumb_up 11
  • comment 0
2025/02/18 18:19
スイフト ZC71S

スイフト ZC71S

島原城行ってきました✌展望台からの眺め。綺麗✨帰り、魚フライもボリューミーで美味しかった🐟お腹いっぱいです(´,,-ㅿ-,,`)フゥ-CR-Z君とスイフト...

  • thumb_up 9
  • comment 0
2025/02/18 18:19
バモスホビオ HM4

バモスホビオ HM4

栃木県、日光湯元温泉♨️でパシャリ📸🚗³₃東北道・宇都宮ICから🚗³₃〜日光線に入って🚗³₃〜いろは坂を一気に駆け上って🚗³₃中禅寺湖✨湖畔を疾走して🚗³...

  • thumb_up 18
  • comment 0
2025/02/18 18:14
WR-V DG5

WR-V DG5

WR-V購入前からやりたかった、フロントグリルのブラック化。やっと出来ました✨Z+の中古のグリルを入手して、メッキ部分をバラシてグロスブラックのカッティン...

  • thumb_up 17
  • comment 0
2025/02/18 18:14

おすすめ記事