技術メモ: Arduino オーディオレベルメータ  (モヒカン頭装着用)

技術メモ: Arduino オーディオレベルメータ  (モヒカン頭装着用)

akira_you
akira_you (ID197) 公認maker 2014/09/17
0

モヒカン搭載用オーディオレベルメータを作ろう

音楽フェスで知り合った、友人が二十歳の誕生日を迎える事になった。
誕生日プレゼントが必要だ。そうだ、彼のモヒカンに電飾を付けよう。

https://www.youtube.com/watch?v=MkCIxXPLP1s

アナログ回路

ジョークグッズとはいえ、一応はまともに動くのが欲しいです。Arduinoにオーディオ入力をつなぐだけだとどうしても高音が取れません。しょうがないので、アナログ回路でオーディオ電圧を取ります。

アナログ回路

これだけの部品で、オーディオ信号から電圧ピークを読み取って、ピーク電圧を出力する回路になっています。

注意深い人なら、入力信号の電圧と出力信号の電圧の値が少しズレている事に気がつくかもしれません。
通常の業務用オーディオ信号は4dBu(±1.737V)なのを基準にして7dB(11dBu=±3.89V)ぐらいまで見ます。なので±3.89VをArduinoで扱い安いように2.5V程度に変換するようになっています。

(注意:dBuとdBは違います。ここでは0dB=4dBu)

なんで2.5Vがmax?というのも理由があります。arduinoのanalogreadでは通常電源を基準として1024段階に電圧をとりますが、今回は電池駆動なので電池がへたると相対的に入力信号が大きく見えてしまい都合が悪いです。analogReference関数にINTERNALを指定すると電源電圧のふらつきに関係なく、電圧が取れます。私が普段使っているArduino Da Vinchi (Leonard / Micro等32u4系Arduino)ではその電圧は2.56Vがmaxです。なので、2.5Vが最大入力になるようにしてあります。

http://www.musashinodenpa.com/arduino/ref/index.php?f=0&pos=2180


ちなみにAD値からdB値への変換は以下の式になります。
dB= 8.685889638065*log(0.0035670795070152* AD値)-4

回路図

LEDについて

LEDは配線を簡単にするため、3本線を繋げば何個でもLEDを制御できる素敵なリボンを使います。最近では秋月でも売っていますが、WS2812Bで検索すると色んな形の基板やリボンに実装されたWS2812Bを買うことができます。量をまとめて買う場合はAliexpress等中国通販サイトのほうが安いです。(商習慣が異なるので、通販サイトの使い方が独特ですが、慣れれば難しくないです。)

http://akizukidenshi.com/catalog/faq/goodsfaq.aspx?goods=M-08414

arduinoで使うには以下のサイトからライブラリをコピーしてくる必要があります。
(右側の download zipというアイコンからダウンロードしてarudinoのLibrariesフォルダにつっこむ)
https://github.com/pololu/pololu-led-strip-arduino

使い方:
#include <PololuLedStrip.h>
PololuLedStrip<ポート番号> LED; //WS2812Bを繋いだポート番号の指定
const int nofLED= 14;       //WS2812Bが繋がっている数
rgb_color rgb_buf[nofLED];   //それぞれに指定する色

void loop(){
unsigned char r,g,b;
for(int i=0;i<nofLED;i++){
hsv2rgb(色 (0-252) ,色の濃さ(0-255),明るさ(0-255),&r,&g,&b); //HSVからRGBに変換
rgb_color col = (rgb_color){ r, g, b };
rgb_buf[i]=col;
}
LED.write(rgb_buf, nofLED);// 書き込み
}

void hsv2rgb(byte h/*0-252*/,byte s/*0-255*/,byte v/*0-255*/, unsigned char *r, unsigned char *g, unsigned char *b) //省略(ソースコードをダウンロードしてください)

WS2812BはRGBで色を指定しますが、同じ明るさで色を変えるという処理が難しいのでHSVで内部処理して、最後にRGBに変換するのがお勧めです。HSVなら色・色の濃さ(彩度)・明るさの3つを指定してLEDを制御できます

ソースはこちら

ソースは以下にあります。
回路図を見るにはKiCAD(フリー)が必要です。
https://drive.google.com/folderview?id=0B2MvWvAFndBdU1F3SE9YWmZOY28&usp=sharing

参考にしてくれた記事

記事が登録されていません。
この記事を参考にして、新しく記事を投稿しよう!

違反について