Как делалась светомузыка на Ардуино
Кому интересно вот пост со светомузыкой
http://pikabu.ru/story/rgb_svetomuzyika_arduino_3869046
Для светомузыки нам понадобиться
1 Ардуинка
3-4 светодиода. Можно один 3х цветный, но цвета будут смешиваться и будет не красиво.
Аудио кабель 3,5,который не жалко порвать.
Да и все вроде.
Для начало рвем аудио кабель примерно как на фотке
Красный и Белый провод это Левый и Правый канал, а черный это общий (-). Красный и белый провод можно скрутить вместе в один провод.
Теперь можно присоединить (+) светодиодов к 12,8,7,2 пинам, а минус можно в GND.
Теперь с аудио кабелем. После скручивание красного и белого, провода засуньте в разъем А0 а черный провод в GND, а потом в ноутбук или телефон. По нему будет передаваться аудио сигнал. Если не понятно ниже есть схема подключения.
Теперь про возникающей проблеме. При включенном аудио кабеле, на компьютере звук не слышен, но передается в ардуино. Для того чтобы услышать его и продолжить передавать звук в ардуино нужно для тех у кого звуковая Realtek.
1. Зайдите в Диспетчер Realtek. (он в панели управление находится)
2. В Дополнительных настройках включите режим многопоточности
3. Качаем программу Virtual Audio Cabel. Эта программа соединяет несколько каналов в один. После установки у вас появится 3 программы. Audio Reapeter (MME), Audio Reapeter (KS), Control Panel. Для работы нам понадобится 1-я. Вот видео показывающее как пользоваться программой
Теперь вернемся к Арудуино. Для начало вам надо скачать библиотеку FFT. Она работает с преобразованием Фурье
https://github.com/TJC/arduino/tree/master/sketchbook/librar...
Ссылка на скетч будет в описании т.к Пикабу блочит.
Заливаем скетч. Врубаем музычку и наслаждаемся.
Если не понятно, рад помочь
#include <fix_fft.h>
char im[128], data[128];
char data_a[14]; // Массив из 14 значений для аналоговых выводов
char data_d[14];
int i=0, val, vd=0; // Переменные для циклов
int vmin=30000; // Минимальное значение аудиосигнала
int vmax=0; // Максимальное значение аудиосигнала
const int DLeds[] = {1, 0, 2, 4, 7, 8, 12, 13, 3, 5, 6, 9, 10, 11}; // Номера выводов 6x-digital 6x-PWM
void setup()
{
for (i=0; i<14; i++)
{
pinMode(DLeds[i],OUTPUT);
digitalWrite(DLeds[i], LOW);
}
Serial.begin(9600);
}
void loop()
{
vmin = 30000;
vmax = 0;
for (i=0; i < 128; i++)
{
val = analogRead(AUDIOPIN);
data[i] = val; // усиливаем входящий сигнал
im[i] = 0;
}
fix_fft(data,im,7,0);
for (i=0; i< 128; i++)
{
data[i] = sqrt(data[i] * data[i] + im[i] * im[i]);
// получаем абсолютное значение от значения из массива, дальше имеем дело только с положительными числами
}
for (i=0; i<8; i++)
{
// усредняем соседние значения
data_a[i] = (data[i*16] + data[i*16 + 1] + data[i*16 + 2] + data[i*16 + 3] + data[i*16 + 4] + data[i*16 + 5] + data[i*16 + 6] + data[i*16 + 7]
+ data[i*16 + 8] + data[i*16 + 9] + data[i*16 + 10] + data[i*16 + 11] + data[i*16 + 12] + data[i*16 + 13] + data[i*16 + 14] + data[i*16 + 15]);
vmax = max(vmax, data_a[i]); // запоминаем максимальное значение
vmin = min(vmin, data_a[i]); // запоминаем минимальное значение
// масштабируем значения под аналоговый вывод
data_d[i] = map(data_a[i], 0, 20, 0, 1); //цифровые
// dataavg[pin] = map(data_a[pin], vmin+1, vmax, 255, 0); // аналоговые
// Выводим сигнал
digitalWrite(DLeds[i], data_d[i]);
// analogWrite(9, dataavg[pin]);
}
}
Подскажи, а в машину если к выходу магнитолы подклчить работать будет?
Здравствуйте! Правильно ли я понимаю, что у вас в скетче используется много светодиодов, т.к вывод идёт на следующие пины 1, 0, 2, 4, 7, 8, 12, 13, 3, 5, 6, 9, 10, 11
А вот на схеме подключено всего 4? Или я что-то не так понял?
не работает пишет compilation terminated
exit status 1
ошибка компиляциидля платы Arduino/Genuino Uno
Вот что получилось на Arduino UNO с указанным алгоритмом. ФОТО
https://vk.com/album47226798_239079833?z=photo47226798_456239041%2Falbum47226798_239079833
Видео
https://vk.com/video?z=video47226798_456239019%2Fpl_cat_updates