プログラミング

プレステコントローラでピンクロータを動かしてみた

今日は,プレステコントローラでピンクロータを動かしてみます.

えっと,NHKロボコンでプレステコントローラでロボット動かさないといけない的なことがあって,そこでたまたまピンクロータを持っていたので,ちょっとやってみたくなりました.

準備物

  • Arduino Uno

f:id:McG:20160205121219p:plain

  • Arduino USBホストシールド

f:id:McG:20160205121141j:plain:w300

  • プレーステーション3コントローラ

f:id:McG:20160205121300p:plain:w300

  • ピンクロータ

  • トランジスタとか抵抗とかジャンパーピンとか

ピンクロータを分解してみる

f:id:McG:20160205120635j:plain:w300

なるほど,可変抵抗が付いていて,つまみを回すと電流量が変化するからブルブルの刺激が変化するということか.

ピンクロータをArduinoに繋ぐ.

回路に関しては,こちらのスライドに載っているのを参考にさせていただきました.

これの8ページ目に回路が載っています.
トランジスタと抵抗さえ用意できればあとは繋ぐだけ.

プレステコントローラを使う準備

github.com

githubに,USBホストシールドを使うためのヘッダファイルが落ちているので,それを落としてくる.
そして,ArduinoのIDE側「ライブラリをインクルード」→「zip形式のライブラリをインストール」を選ぶ.

すると,PS3USB.hとspi4teensy3.hが使えるようになるのでそれをコード側でinclude.

ソースコード

PS3.getButtonPress(TRIANGLE)のようにしてあげれば,プレステコントローラが押されている時に1, 押されてなければ0が返ってきますので,それを利用して,押されていればピンクロータを動かすというようなことをやっていきます.

#include <PS3USB.h>
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
USB Usb;
PS3USB PS3(&Usb);
void setup() {
Serial.begin(9600);
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start"));
while (1); //halt
}
Serial.print(F("\r\nPS3 USB Library Started"));
}
void loop() {
if (PS3.getButtonPress(TRIANGLE)){
Serial.print("三角ボタンが押されています\n");
}
if (PS3.getButtonPress(CIRCLE)){
Serial.print("丸ボタンが押されています\n");
}
if (PS3.getButtonPress(CROSS)){
Serial.print("バツボタンが押されています\n");
}
if (PS3.getButtonPress(SQUARE)){
Serial.print("四角ボタンが押されています\n");
}
if (PS3.getButtonPress(UP)) {
Serial.print("上ボタンが押されています\n");
}
if (PS3.getButtonPress(RIGHT)) {
Serial.print("右ボタンが押されています\n");
}
if (PS3.getButtonPress(LEFT)) {
Serial.print("左ボタンが押されています\n");
}
if (PS3.getButtonPress(DOWN)) {
Serial.print("下ボタンが押されています\n");
}
}

こんな感じで書いてあげれば,シリアルにプレステコントローラの入力情報を表示できるはず.

僕は,とりあえず動作確認のためなので,反応してたら1,反応してなかったら0を表示させてみました.

では,あとは…
void setup()のところに,ピンクロータをつないだピンを指定します.上のスライドの回路だと,2番目のピンにつないでいるので,pinMode(2, OUTPUT);'として,2番目のピンを出力ピンとして,指定します.
そして,丸ボタンを押した時にピンクロータがオンになって,バツボタンを押した時にオフになるようにしてみます.
digitalWrite(2, HIGH);`とすると,2番ピンにつながったピンクロータが振動し始めます.

#include <PS3USB.h>
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
USB Usb;
PS3USB PS3(&Usb);
void setup() {
Serial.begin(9600);
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start"));
while (1); //halt
}
Serial.print(F("\r\nPS3 USB Library Started"));
pinMode(2, OUTPUT);
}
void loop() {
if (PS3.getButtonPress(CIRCLE)){
Serial.print("丸ボタンが押されています\n");
digitalWrite(2, HIGH);
}
if (PS3.getButtonPress(CROSS)){
Serial.print("バツボタンが押されています\n");
digitalWrite(2, LOW);
}

これでめでたくピンクロータをプレステコントローラから制御することができるようになりました.

みためは結構ごっついですね.

f:id:McG:20160205140149j:plain:w400

さらに発展

PWM出力で,ピンクロータの振動の強さをいろいろ変えてみたり,あらかじめ振動の強弱パターンを変えてみてボタンをおすことによって複雑なロータの動きをさせてみたり.
Arduinoをwi-fiにつないで,遠隔地においてあるピンクロータを動かしてみたり.
夢が広がりますね!

公式LINEに登録してビジネスを学ぼう
無料LINEマガジンへの登録で、5つの豪華特典をプレゼント!
  1. 日本一わかりやすい「経済的自立を果たす人生攻略の10ステップ」(33分23秒)
  2. 見るだけで売上3倍は確実。「時給10円から年商10億」に至るまでの全ての道のり(39分15秒)
  3. 有料講演会の内容を公開。最短最速で0→1を立ち上げる起業術(1時間08分35秒)
  4. 起業初心者へ向けた即金で10万円を稼ぐ具体マニュアル(PDF24ページ)
  5. 資本主義社会においてお金持ちになる5つのルール(17分36秒)
その他、有益なコラムを完全無料で閲覧し放題!
\豪華特典を今すぐゲット/