Arduino + ECM
Updated: 2026-05
本記事は2020年以前に執筆したものです。バックアップとして掲載していますが内容は古く、リンクも切れている可能性があります。
様々なLEDキャンドル
LEDと電子回路を利用して、ロウソクの炎に似せた照明効果を実現した製品が多数販売されている。1oo円ショップで販売されているものから数千円するものまで様々なものがある。息を吹きかけると消えるものなどインタラクティブな仕掛けを施すなど遊びココロのあるものも多い。
ECMとは
息を吹きかけると消えるLEDキャンドルの原理には、風センサや湿度センサの回路も考えられるが、本演習では100円ショップのLEDキャンドルと同じECM(Electret Condenser Microphone)を利用する。ECMは音の空気振動を静電容量変化により電気信号に変えるもので、様々なマイクロフォン(コンデンサーマイク)に利用されている。ここでは息を吹く「ブォッ」という音を判定するために利用する。ECMは信号が小さいのでアンプ回路で増幅してArduinoに入力する必要がある。本演習では、MAX4466を使ったマイクアンプモジュール(下図)を利用する。

ECMの実装
使用部品
・ECMアンプモジュール(MAX4466)
・ジャンパ線 赤1本、黒1本、白1本
回路図

実装図
ECMアンプモジュールを青点線の位置に取り付ける。

ECMと加速度センサーを利用したLEDキャンドル
①Arduinoスケッチの準備
空のスケッチを作成して、以下のコードをコピー&ペースト後、スケッチを保存する。
// LEDキャンドル
// 2017.12 nakayasu
int led = 3; // LEDピンの指定
int brightness = 0; // LEDのPWM値のための変数
int sensorValue[4]; // 3軸加速度センサー、ECM
int ledStatus = 0; // LEDのON/OFF切り替え用
int counter = 0; // 手の揺れ戻しを無視するためのインターバルカウンター
void setup()
{
pinMode(led, OUTPUT);
for(int k=0; k<4; k++) sensorValue[k] = 0; //配列の初期化
}
void loop()
{
//アナログ値の取得
sensorValue[0] = analogRead(0); //A0 connect to ECM
delay(10); //変換処理時間の確保
sensorValue[1] = analogRead(1); //A1 connect to Z(7pin) on KXM52-1050
delay(10);
sensorValue[2] = analogRead(2); //A2 connect to Y(6pin) on KXM52-1050
delay(10);
sensorValue[3] = analogRead(3); //A3 connect to X(6pin) on KXM52-1050
delay(10);
//センサー値10bit(0〜1023)からLEDのPWM制御値8bitへ(0〜255)に変換する
//Z方向の加速度をLEDの揺らぎにそのまま利用
brightness = map(sensorValue[1], 1000, 1023, 0, 255);
if(counter > 22) {
if(sensorValue[2]<420 || sensorValue[3]<420 || sensorValue[0]<80) {
//X方向またはY方向の加速度が閾値を超えたとき、またはECMの入力が閾値を超えたときにLEDをON/OFFする
//デフォルトの420や80は実験から求めた値で、数字が大きくなれば感度が良くなる。
ledStatus = !ledStatus;
counter = 0;
}
} else {
counter++;
}
if(ledStatus==1) analogWrite(led, brightness); else analogWrite(led, 0);
}スケッチデータのダウンロード
Arduino_6-4_LedCandle_Arduino.zip(公開停止中)
②Arduinoスケッチの書き込み
コンパイル、書き込みを行う。
③動作確認
アクリルボードをXY方向に振る、もしくはECMに息を吹きかけることでLEDが点灯する。もう一度XY方向に振るもしくは息を吹きかけることで消灯する。LEDの瞬きは、Z方向の揺れの反応するようプログラムしているので、手を触れない状態が一番穏やかな瞬きとなり、持ち上げようとするとZ方向の揺れが大きくなるのに連動して激しく明るさが変動する。
さらに、完成度を高めるためには、Arduino Pro Mini、8pinoなどの小型のArduinoを電池駆動すれば、回路を作品自体の内部に入れることができる。フルカラーLEDを用いる事で、本物のロウソクの色に近づけたり、揺れ方に応じて色を変化させることも考えられる。
