Цветомузыка на Arduino UNO
В этой статье я расскажу как сделать цветомузыку на Arduino своими руками без больших усилий. Несомненно, для многих начинающих радиолюбителей интересно создать свою собственную цветомузыку! Еще в 80-х годах прошлого века на этом самодельном устройстве была помешана вся молодежь в независимости от знаний в области физики и электроники. Кто разбирался в электронике — придумывал, что-то новое, кто не разбирался – копировали уже существующие схемы. И было абсолютно не важно, как это работает, главное, что работает и радует глаз. Сегодня огромный ассортимент светомузыкальных устройств имеется в продаже, кому лень паять микросхемы и транзисторы – можно просто светомузыку купить! А кому интересно повозиться несколько часов (дней) ради своего самоутверждения или самообразования – эта статья для Вас.
Познания человечества в области электроники за последние десятилетия шагнули далеко вперед. Ламповые транзисторы почти полностью вытеснены полупроводниковым приборами, лампочки со спиралью активно меняются на светодиоды, а огромные монтажные платы заменены на маленькие платки с микросхемой по центру. Так вот, нашу цветомузыку мы будем делать из микроконтроллера Arduino (я использовал Arduino uno) и дешевых белых светодиодов. Каждый светодиод будет реагировать на заданную частоту звука. Количество светодиодов будет ограничиваться лишь количеством свободных пинов микроконтроллера. Интересней, конечно, было бы сделать цветомузыку на светодиодной ленте, но выходы микроконтроллера нам 12 Вольт никак напрямую не дадут. Нужны какие нибудь усилители, например микросхема ULN2003. Схемку с использованием такой микросхемы мы рассмотрим чуть позже.
Как сказал Юрий Гагарин, поехали!
Всю электронику я размещал на дешевой гетинаксовой макетной плате 5см*6см с отверстиями. В примере паять не будем, а просто все подключим к Arduino uno посредством разъемов на плате.
Микроконтроллер Arduino будет у нас и блоком питания и усилителем сигнала и анализатором звука.
Так же нам понадобится аудиоразъем 3,5мм или штекер от наушников, много проводов (отлично подойдет витая пара), светодиоды 0,1Вт – 0,5Вт, цветной картон или любой другой светофильтр, две руки и немного энтузиазма…
Начну со скетча, заливаем в МК этот код:
long vl,v1,v2,v3,v4,v5,v6,v7,v8,v9,v10;//Промежутки времени между колебаниями на аудиовходе
long hz=0;//Частота при последнем измерении
long hzprev=0;//Предварительная частота
long tout=0;//Таймаут измерения частоты
void setup() {
pinMode(2, OUTPUT);//Светодиод
pinMode(3, OUTPUT);//Светодиод
pinMode(4, OUTPUT);//Светодиод
pinMode(5, OUTPUT);//Светодиод
pinMode(A0, INPUT);//Аудиовход
}
void loop() {
tout=millis()+600;//Задаем таймаут измерения
while (tout>millis() && digitalRead(A0) > 10 );//Цикл с выходом при окнчании времени ожидания или при значении на А0 больше 10
v1 = micros();//Задаем начало измерения
while (tout>millis() && analogRead(A0) < 1);//Ждем падения напряжения на входе А0
v2 = micros();//Отбиваем первый отрезок времени и т.д....
while (tout>millis() && analogRead(A0) > 0 );
v3 = micros();
while (tout>millis() && analogRead(A0) < 1 );
v4 = micros();
while (tout>millis() && analogRead(A0) > 0 );
v5 = micros();
while (tout>millis() && analogRead(A0) < 1 );
v6 = micros();
while (tout>millis() && analogRead(A0) > 0 );
v7 = micros();
while (tout>millis() && analogRead(A0) < 1 );
v8 = micros();
while (tout>millis() && analogRead(A0) > 0 );
v9 = micros();
while (tout>millis() && analogRead(A0) < 1 );
v10 = micros();
hzprev=1000000/(((v2-v1)+(v3-v2)+(v4-v3)+(v5-v4)+(v6-v5)+(v7-v6)+(v8-v7)+(v9-v8)+(v10-v9))/9);//Получаем среднее зачение между колебаниями
if (tout>millis()&&sq((hz+hzprev)/2-hzprev)>1000){
hz=(hz+hzprev)/2;//Если измерение вложилось в таймаут, то усредняем новое значение частоты с предыдущим (чтоб огоньки бегали)
}
else{
hz=0;//Если не вложились - обнуляем значение частоты
}
//Перед тем, как зажечь нужный светодиод - тушим все
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
if (hz>20 && hz<100){//И зажигаем тот, который сооветствует заданной частоте
digitalWrite(2, HIGH);
}
if (hz>100 && hz<300){
digitalWrite(2, HIGH);
}
if (hz>300 && hz<700){
digitalWrite(4, HIGH);
}
if (hz>700 && hz<1500){
digitalWrite(5, HIGH);
}
}
Подводим аудиосигнал к аналоговому пину A0 и земле (GRD).
Светодиоды подключаем к пинам 3, 4, 5, 6 (для наглядности хватит). Ограничивающие резисторы для светодиодов не ставил, так как Ардуино большой ток на них и не даст, а вот резистор между А0 и GRD придется поставить чтоб избавиться от наводок. Резистор подбирал методом научного тыка… 10 Ом вполне нормально справляется с задачей.
Вот, что у нас получилось:
А вот схема, на которой все это разборчиво…
Ну, вот и все, наша цветомузыка на ардуино готова и основа для полета творческой мысли у вас есть. Желаю удачи в Ваших самоделках!