工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

ELテープとArduinoで作るミュージックビジュアライザー - 音に合わせて光る

必要な部品と材料

部品 数量
Arduino UNO 1
EL Shield for Arduino(SeeedStudio製等) 1
ELテープ 緑 1m 1
ELテープ 赤 1m 1
ELテープ 青 1m 1

プロジェクト概要

Arduino UNOとELシールド、3色のELテープ(電界発光テープ)を使用し、音楽のビートに合わせて発光するビジュアライザーを作ります。ELシールドの4チャンネルのうち3つにELテープを接続し、ProcessingとArduinoライブラリを用いて音声解析を行い、キック・スネア・ハイハットそれぞれに対応する色のELテープを点灯させます。

ELテープとArduinoで作るミュージックビジュアライザー - 音に合わせて光る
ELシールドとコネクター

セットアップ手順

  1. ELテープをELシールドのチャンネル1〜3に接続
  2. ELシールドをArduino UNOに装着
  3. Processing(processing.org)をインストール
  4. Processing用Arduinoライブラリ(cc.arduino)を取得し、Processingのスケッチブックフォルダ内 libraries に配置
  5. 添付のProcessingスケッチ(BeatWrite, BeatListener)を開く
  6. コード内の音楽ファイルパス(song = minim.loadFile(...))を自分のMP3ファイルに変更
  7. Processingで「Run」実行、音楽再生とともにELテープが発光

動作原理

コード

BeatWrite(Processing / Java)

import processing.serial.*;
import ddf.minim.*;
import ddf.minim.analysis.*;
import cc.arduino.*;

Minim minim;
AudioPlayer song;
BeatDetect beat;
BeatListener bl;
Arduino arduino;

int ledPin = 1;   // ELチャンネル1 (キック)
int ledPin2 = 2;  // ELチャンネル2 (スネア)
int ledPin3 = 3;  // ELチャンネル3 (ハイハット)
float kickSize, snareSize, hatSize;

void setup() {
  size(512, 200, P3D);
  minim = new Minim(this);
  // ポート名は環境に合わせて変更(Windows: "COM3" 等)
  arduino = new Arduino(this, "/dev/ttyACM1", 57600);
  song = minim.loadFile("/home/paul/Music/dope.mp3", 2048); // ★自分のMP3パスに変更
  song.play();

  beat = new BeatDetect(song.bufferSize(), song.sampleRate());
  beat.setSensitivity(100); // 300ms感度
  kickSize = snareSize = hatSize = 16;

  bl = new BeatListener(beat, song);
  textFont(createFont("Helvetica", 16));
  textAlign(CENTER);

  arduino.pinMode(ledPin+3, Arduino.OUTPUT);
  arduino.pinMode(ledPin2+3, Arduino.OUTPUT);
  arduino.pinMode(ledPin3+3, Arduino.OUTPUT);
}

void draw() {
  background(0);
  fill(255);

  if(beat.isKick()) {
    arduino.digitalWrite(ledPin+3, Arduino.HIGH);
    kickSize = 32;
  }
  if(beat.isSnare()) {
    arduino.digitalWrite(ledPin2+3, Arduino.HIGH);
    snareSize = 32;
  }
  if(beat.isHat()) {
    arduino.digitalWrite(ledPin3+3, Arduino.HIGH);
    hatSize = 32;
  }

  // 即座にOFF(点滅効果)
  arduino.digitalWrite(ledPin+3, Arduino.LOW);
  arduino.digitalWrite(ledPin2+3, Arduino.LOW);
  arduino.digitalWrite(ledPin3+3, Arduino.LOW);

  textSize(kickSize);  text("KICK", width/4, height/2);
  textSize(snareSize); text("SNARE", width/2, height/2);
  textSize(hatSize);   text("HAT", 3*width/4, height/2);

  kickSize  = constrain(kickSize  * 0.95, 16, 32);
  snareSize = constrain(snareSize * 0.95, 16, 32);
  hatSize   = constrain(hatSize   * 0.95, 16, 32);
}

void stop() {
  song.close();
  minim.stop();
  super.stop();
}

BeatListener(Processing / Java)

class BeatListener implements AudioListener {
  private BeatDetect beat;
  private AudioPlayer source;

  BeatListener(BeatDetect beat, AudioPlayer source) {
    this.source = source;
    this.source.addListener(this);
    this.beat = beat;
  }

  void samples(float[] samps) {
    beat.detect(source.mix);
  }
  void samples(float[] sampsL, float[] sampsR) {
    beat.detect(source.mix);
  }
}

注意点・拡張アイデア

製造プロセス

  1. シニア向けUX設計: 包括的ガイド
  2. 万能ダクトテープ:強度、柔軟性、日常用途
  3. クラシックジュークボックスの遺産と進化
  4. 楽譜:中世写本から現代出版まで——業界概観
  5. バーコードスキャナ:技術、設計、将来動向
  6. セロハンテープ:歴史、製造、環境影響
  7. デジタルメモリが重要な理由
  8. データマトリックスとQRコードの選び方:あなたのビジネスに最適なのはどっち?
  9. CNC Gコード解説:CNCプログラマー必須の基礎知識
  10. ミュージックワイヤースプリングとは:強度・耐久性・用途を徹底解説
  11. C++コメント完全ガイド:読みやすく保守しやすいコードのためのベストプラクティス