Приветствую Вас, Гость
Главная » Статьи » Arduino

Цветомузыка на микроконтроллере Arduino

В этой статье я расскажу как сделать цветомузыку на Arduino своими руками без больших усилий. Несомненно, для многих начинающих радиолюбителей интересно создать свою собственную цветомузыку!Еще в 80-х годах прошлого века на этом самодельном устройстве была помешана вся молодежь в независимости от знаний в области физики и электроники. Кто разбирался в электронике - придумывал, что-то новое, кто не разбирался – копировали уже существующие схемы. И было абсолютно не важно, как это работает, главное, что работает и радует глаз. Сегодня огромный ассортимент светомузыкальных устройств имеется в продаже, кому лень паять микросхемы и транзисторы – можно просто купить! А кому интересно повозиться несколько часов (дней) ради своего самоутверждения или самообразования – эта статья для Вас.
Познания человечества в области электроники за последние десятилетия шагнули далеко вперед. Ламповые транзисторы почти полностью вытеснены полупроводниковым приборами, лампочки со спиралью активно меняются на светодиоды, а огромные монтажные платы заменены на маленькие платки с микросхемой по центру. Так вот, нашу цветомузыку мы будем делать из микроконтроллера Arduino (я использовал Arduino uno) и дешевых белых светодиодов. Каждый светодиод будет реагировать на заданную частоту звука. Количество светодиодов будет ограничиваться лишь количеством свободных пинов микроконтроллера.
Как сказал Юрий Гагарин, поехали!
Всю электронику я размещал на дешевой гетинаксовой макетной плате 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 Ом вполне нормально справляется с задачей.
Вот, что у нас получилось:

Подключаем питание к отладочной плате Arduino, включаем музыку и наслаждаемся плодами своего труда. Прикольно, не правда ли? Прикольно, да не очень. Этому всему нужно, какое ни будь оформление. Я использовал цветной картон. Скручиваем и клеим листы картона в трубки. Посередине каждого «фонаря» крепим светодиод и соединяем все трубки в один ряд:

Ну, вот и все, наша цветомузыка готова и основа для полета творческой мысли у вас есть. Желаю удачи в Ваших самоделках!



Источник: http://arduino-geek.pp.ua/%D1%86%D0%B2%D0%B5%D1%82%D0%BE%D0%BC%D1%83%D0%B7%D1%8B%D0%BA%D0%B0-%D0%BD%D0%B0-%D0%B1%D0%B0%D
Категория: Arduino | Добавил: Hohma (17.06.2017) | Автор: Майкл
Просмотров: 1348 | Теги: светомузыка, Arduino, Цветомузыка | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: