memorandums

日々のメモです。

ダイソーの3LEDプッシュライトミニをボタンにしてみた

digisparkにプログラムを書き込むたびに抜き差しするのが面倒。

ダイソーにスイッチ付きのUSBコネクタがあるので使うと便利という情報を聞きつけたので、休みの日に近所のダイソー2軒回ってみたんですが。。。ありませんでした。

結局、USBコネクタはネットで購入したんですが。。。そのときに以下の商品に目が止まりまして。

f:id:ke_takahashi:20180806194100j:plain

これって音ゲーのボタンに使えるんじゃね?と思ったわけです。

実は、3年生のゼミで2チームにわかれて音ゲーを開発してもらっているんですね。そのため以下のようなホンモノ?のボタンを購入しまして。。。それでダイソーのライトの形状が似ているな。。。と思ったんでしょうね。

f:id:ke_takahashi:20180806194320j:plain

ちなみにこのホンモノのボタンは千石さんで売っているやつで定価で1400円もするんですね。。。耐久性なんかもあるんでしょうね。
www.sengoku.co.jp

で、本日、臨時試験2コマを終えてから、ちょこちょこっと分解してみました。

分解の細かいことは別にいいな。。。と思い写真は撮りませんでしたが、やったことは以下の2つです。

  • 内蔵のスイッチがトグル式だったのでスイッチを分解してワイヤーを1つ取り除いてプッシュボタンにしました。
  • この内蔵スイッチから2本の線を外部に引き出して、その線が閉じたらボタンが押されたこととして認識させます。

あとは以下のようなプログラムをちょこちょこっと書きました。載せるまでもないようなプログラムですが。。。とりあえず。

Arduino

int b1 = 0;
int b2 = 0;

const int b1_pno = 5;
const int b2_pno = 6;

void setup() {
  Serial.begin(9600);
  pinMode(b1_pno, INPUT_PULLUP);
  pinMode(b2_pno, INPUT_PULLUP);
}

void loop() {
  int b1_cur = digitalRead(b1_pno);
  int b2_cur = digitalRead(b2_pno);
  if (b1 == HIGH && b1_cur == LOW) {
    Serial.print(1);
  }
  if (b2 == HIGH && b2_cur == LOW) {
    Serial.print(2);
  }
  b1 = b1_cur;
  b2 = b2_cur;
  delay(100);
}

Processing

import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.effects.*;
import ddf.minim.signals.*;
import ddf.minim.spi.*;
import ddf.minim.ugens.*;
import processing.serial.*;

Minim minim;
AudioPlayer b1, b2;
Serial myPort;

void setup() {
  fullScreen();
  minim = new Minim(this); 
  b1 = minim.loadFile("Cut04-1.mp3"); //音素材はhttp://musicisvfr.com/free/index.htmlから頂きました。ありがとうございます。
  b2 = minim.loadFile("Hit08-1.mp3");
  myPort = new Serial(this, "/dev/tty.wchusbserial1420", 9600);
  frameRate(10);
  noCursor();
}

int c = 0;

void draw() {
  int inByte = 0;
  if (myPort.available() > 0) {
    inByte = myPort.read();
    if (inByte == '1') {
      println("1");
      b1.rewind();
      b1.play();
      c = 5;
    }
    else if (inByte == '2') {
      println("2");
      b2.rewind();
      b2.play();
      c = 5;
    }
  }
  if (inByte == '1') 
    background(100, 255, 100);
  else if (inByte == '2') 
    background(255, 100, 100);

  if (--c <= 0) {
    c = 0;
    background(0);
  }
}

そんでできたのが以下のような感じです😁

youtu.be

なかなか壊れそうな音がしていますが。。。なんか使えそうな気がしませんか?