3DSの連射機を作ってみた やっすいやつやん

Nintendo 3DSでボタンを連打したいときってありますよね。ドラクエのカジノのスロットとかドラクエのカジノのスロットとか。Youtubeとか見ているとLEGOとかモーターの回転とかで連打するように工夫している方もいらっしゃるようですが、ここで解説するのはアマゾンで買えるやっすいソレノイドを使ったバージョンっていう感じのものです。他に使ってる材料もそこらへんに転がっているものばかりなので皆さんも興味を持っていただけたら参考にしてください。

ソレノイドって何?
↑こんなやつです。
ソレノイドとは、電気を流すと中の棒が動く電磁石を利用した電気部品で、これを使って電気をオン・オフして中の棒を動かし、それでボタンを連打しようという魂胆。
実際に私が買ったソレノイドはアマゾンで317円。安い!

とりあえず、動画にしてみたので、ここに貼っておきます。ソレノイドの動きがどんなもんかわかるかと。。。

電気のオン・オフを自動でやらせたいので、こちらもアマゾンで格安で手に入るArduino Nano互換品を使用します。

↑こんな感じのです。これもアマゾンで400円前後

 

では実際に回路を考えてみます。

考えてみました…。

上記回路図のコメント
・電源はACアダプタでとる
・ソレノイドの定格が12V1Aなのでそれ相当のACアダプタを用意
(こっそり言うと、そんなACアダプタないよって人は昔の重いトランスタイプのACアダプタなら表示以上の電流が出たりするのでそういうのを使うのも手かもです)
・回路図ではトランジスタを使っていますが、FETやフォトカプラのほうが良いかもしれません。今回は、とりあえずそこらへんにあって使えそうなものを採用しました。

実際に部品を用意して基板にハンダしてみました。

続いてArduinoのプログラムを書いて行きます。
Arduinoの開発環境は公式ページから無料でダウンロードできますし、ブラウザ上で開発するWEB EDITORもあります。

詳しくは、解説しているサイトが沢山あるのでググりましょう(๑´ڡ`๑)テヘペロ

それでは実際にArduino Nano(互換品)に書込んで見ます。以下のプログラムをArduino IDEにコピペしてコンパイル、書き込みをしてみてください。

//ソレノイド連射Arduino Nanoプログラム

int statusmode = 0; //0:連射OFF 1:連射ON
int swcount=0;      //SWのチャタリング防止用カウンタ

void setup() {
  // シリアルポートを9600bpsで初期化
  Serial.begin(9600);
  
  pinMode(2, OUTPUT);  //ソレノイドへ出力
  pinMode(12, INPUT);  //SW入力
  pinMode(13, OUTPUT); //LED出力
}

void loop() {
  int val ;
  int inputchar;

  //プッシュSW入力処理
  //プッシュSW入力トグルで切替え(連射中/停止中)
  if(digitalRead(12)==HIGH){
    swcount++;
  }else{
    swcount=0;  
  }
  if(swcount>100){
    swcount=0;      
    if(statusmode==0){ 
      statusmode=1;
    }else if(statusmode==1){ 
      statusmode=0;
    }
  }
 
  //SW入力以外にもパソコンから
  //USBシリアル通信で's'で連射開始、'f'で連射停止も可能
  inputchar = Serial.read();
  switch(inputchar){
    case 's'://start
      statusmode = 1;
      break;
    case 'f'://finish
      statusmode = 0;
      break;
  }

  // 半固定抵抗からの読込み値(連射の速度をアナログで変更)
  val = analogRead(0) ; 

  //ソレノイドのオン・オフ処理
  if(statusmode == 0){
    digitalWrite(13,LOW);
  }else if(statusmode == 1){
    digitalWrite(13,HIGH);  
    digitalWrite(2, HIGH);
    delay(100);
    digitalWrite(13,LOW);
    digitalWrite(2, LOW);
    delay(val);
  }
}
Share on FacebookShare on Google+Tweet about this on Twitter
It's only fair to share...