Как работает схема: подключаете схему к компу, в Arduino IDE открываете монитор последовательной связи (Serial Monitor)- открыть его можно несколькими способами:
– нажать на иконку в верхнем правом углу программы.
– использовать комбинацию клавиш Ctrl+Shift+M.
– выбрать в панели меню: «Сервис» → «Монитор порта».
На мониторе последовательной связи (Serial Monitor) вводите английскую букву а и жмете на кнопку Отправить – начинает проигрываться мелодия.
Если всё соединено правильно, то на мониторе последовательной связи (Serial Monitor) после сообщения “Инициализация SD-карты…” появится “введите символ – > а” – если не появляется переткните USB кабель, проверьте соединенные провода, понажимайте на кнопку reset.
Скачать файлы для данного проекта код, wav файл, ino файл:
– в zip архиве.
– в tar.gz архиве.
SD-карту нужно отформатировать как FAT32 (или FAT16).
Или посмотрите видео как я это делал в Linux Rosa Fresh R12 Plasma, программа “Диспетчер разделов от KDE”:
“rutube.ru/video/9c2979c426e276ce947fd2da9c1ead36/”
Качество воспроизводимой музыки достаточно хорошее (но не идеальное, немого тихо) – это связанно с вычислительными способностями Arduino. Поэтому требования к аудио файлам для Ардуино:
– частота дискретизации: 16000 Гц;
– количество каналов: моно;
– количество бит: 8.
Для подготовки аудиофайлов к вышеуказанным критериям я использую онлайн конвектором аудио файлов.
“audio.online-convert.com/ru/convert-to-wav”
Выбираем файл настраиваем параметры и конвертируем. По моему опыту можно использовать достаточно большие файлы в несколько десятков Мб.
Можно купить Arduino модуль – устройства чтения карт памяти micro-SD
Далее подключаем его к Arduino Nano :
Код:
#include <SPI.h> #include <SD.h> // Подключаем библиотеку SD #define SDPIN 10 // Выбор pin10 для чтения SD // Подключаем библиотеку TMRpcm (управление файлами wav). #include <TMRpcm.h> File myFile; TMRpcm tmrpcm; char caractere; // Настройка символа для управления в последовательной связи void setup(){ Serial.begin(9600); // начало последовательной связи tmrpcm.speakerPin = 9; // Динамик на pin 9 tmrpcm.setVolume(2); // управление громкостью от 0 до 7 tmrpcm.quality(1); // качество звука 0 или 1 // Инициализация SD-карты if (!SD.begin(SDPIN)) { Serial.println("Инициализация SD-карты..."); // Если инициализация SD-карты ещё не произведена, то сообщение "Инициализация SD-карты..." будет отображаться на мониторе return; } Serial.println("введите символ - > а"); } void loop(){ if(Serial.available()){ caractere = Serial.read(); if(caractere == 'a'){ // Если полученный символ по последовательной связи равен "а" Serial.println("Начинаем проигрывание звука!"); // Записывается в последовательный монитор tmrpcm.play("8.wav"); // Воспроизводит звук "8.wav" } } } void playSound(char *file){ tmrpcm.play(file); return; }
Библиотеку TMRpcm можно найти здесь:
“github.com/TMRh20/TMRpcm”
Или установить её непосредственно через Arduino IDE.
Видео
“rutube.ru/video/b4e75d09cc10364c4f686bb929be6eeb/”
Примечание:
Скачать инструкцию №1 в pdf формате
Скачать инструкцию №2 в pdf формате
Подключаем терминал Cutecom и вводим значения через него:
Видео:
“rutube.ru/video/7e5b96abb6cfabcb08a66a52aea8b52a/”
Ещё один код проигрывание музыки с SD карты:
Скачать инструкцию №2 в pdf формате
Требование к аудиофайлам и SD карте как и в примере выше.
На карту заливаем папку sound с файлом 2.wav – можно скачать в исходниках выше.
Код:
#include <SD.h> // необходимо включить SD библиотеку #include <TMRpcm.h> // также необходимо включить данную библиотеку... #include <SPI.h> // Измените это в соответствии с вашей платой расширения или модулем; const int chipSelect = 10; TMRpcm music; // создать объект для использования в данном скетче void setup() { // Открыть последовательное соединение и ждать открытия порта: Serial.begin(9600); Serial.println("Initializing SD card..."); if (!SD.begin(chipSelect)) { Serial.println("initialization failed!"); while (1); } Serial.println("initialization done."); music.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д. music.setVolume(5); // от 0 до 7. Установка уровня громкости music.quality(1); // 1 для 2x передискретизации, 0 for для нормального режима } void loop() { music.play("sounds/2.wav"); Serial.println("Play 2.wav"); delay(30000); music.play("sounds/1.wav"); Serial.println("Play 1.wav"); delay(10000); music.play("sounds/3.wav"); Serial.println("Play 3.wav"); delay(10000); music.play("sounds/4.wav"); Serial.println("Play 4.wav"); delay(3000); music.play("sounds/5.wav"); Serial.println("Play 5.wav"); delay(3000); music.play("sounds/6.wav"); Serial.println("Play 6.wav"); delay(3000); }
Управлять будем через Монитор порта или через Cutecom.
Команды:
1 – воспроизводим трек
2 – воспроизвести трек, начиная с 30-ой секунды
3 – поставить воспроизведение на паузу / продолжить воспроизводить
4 – устанавливает уровень громкости 0 — выключаем.
5 – устанавливает уровень громкости 5 -включаем (макс. 7).
0 – выключаем воспроизведение трека.
Схема соединения такая же.
Скачать скретч:
– в zip архиве.
– в tar.gz архиве.
Примечание №2:
Добавляем кнопку – при нажатии кнопки – будет играть музыка, при её отпускании музыка – не играет.
Код:
#include <SD.h> // необходимо включить SD библиотеку #include <TMRpcm.h> // также необходимо включить данную библиотеку... #include <SPI.h> // Измените это в соответствии с вашей платой расширения или модулем; const int chipSelect = 10; //----------------------------------- const int buttonPin = 2; // the number of the pushbutton pin // variables will change: int buttonState = 0; // variable for reading the pushbutton status //------------------------------------- TMRpcm music; // создать объект для использования в данном скетче void setup() { //---------------------------- // initialize the pushbutton pin as an input: pinMode(buttonPin, INPUT); //--------------------------- if (!SD.begin(chipSelect)) { while (1); } music.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д. music.setVolume(5); // от 0 до 7. Установка уровня громкости music.quality(1); // 1 для 2x передискретизации, 0 for для нормального режима } void loop() { // read the state of the pushbutton value: buttonState = digitalRead(buttonPin); // check if the pushbutton is pressed. If it is, the buttonState is HIGH: if (buttonState == HIGH) { music.play("sounds/1.wav"); delay(10000); music.pause(); delay(3000); music.play("sounds/2.wav"); delay(10000); music.pause(); delay(3000); music.play("sounds/3.wav"); delay(10000); music.pause(); delay(3000); music.play("sounds/4.wav"); delay(10000); music.pause(); delay(3000); music.play("sounds/5.wav"); delay(10000); music.pause(); delay(3000); music.play("sounds/6.wav"); delay(10000); music.pause(); delay(3000); } }
Схема с кнопкой:
Пин 2 соединен с GND резистором 10 кОм. А кнопка стоит между 5В и GND.
Примечание 3:
При нажатии кнопки будет воспроизводится случайная мелодия – рандом из 6 – соединения такое же как и в примечании 2.
Только нужно музыкальные файлы забросить в корневую папку SD карты, так как код читает их не из папки Sound, а из корня.
Код
#include <SD.h> // необходимо включить SD библиотеку #include <TMRpcm.h> // также необходимо включить данную библиотеку... #include <SPI.h> // Измените это в соответствии с вашей платой расширения или модулем; const int chipSelect = 10; //----------------------------------- const int buttonPin = 2; // the number of the pushbutton pin // variables will change: int buttonState = 0; // variable for reading the pushbutton status char fileName[20]; //an array to hold the filename int fileToPlay ; //------------------------------------- TMRpcm music; // создать объект для использования в данном скетче void setup() { //---------------------------- // initialize the pushbutton pin as an input: pinMode(buttonPin, INPUT); //--------------------------- if (!SD.begin(chipSelect)) { while (1); } music.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д. music.setVolume(5); // от 0 до 7. Установка уровня громкости music.quality(1); // 1 для 2x передескритезации, 0 for для нормального режима } void loop() { fileToPlay = random(6); //a random number sprintf(fileName, "%d.wav", fileToPlay); // read the state of the pushbutton value: buttonState = digitalRead(buttonPin); // check if the pushbutton is pressed. If it is, the buttonState is HIGH: if (buttonState == HIGH) { music.play(fileName); delay(10000); music.pause(); delay(3000); } }
Примечание 4:
Добавил светодиод на пин D4, чтобы знать, когда можно нажимать кнопку для воспроизведения следующего аудиофайла – светодиод горит – можно нажимать кнопку. Так как если нажимать до истечения 13 секунд (10+3), то звук не воспроизводится и приходится снова ждать 13 секунд.
Код:
#include <SD.h> // необходимо включить SD библиотеку #include <TMRpcm.h> // также необходимо включить данную библиотеку... #include <SPI.h> // Измените это в соответствии с вашей платой расширения или модулем; const int chipSelect = 10; //----------------------------------- const int ledPin = 4; // the number of the LED pin const int buttonPin = 2; // the number of the pushbutton pin // variables will change: int buttonState = 0; // variable for reading the pushbutton status char fileName[20]; //an array to hold the filename int fileToPlay ; //------------------------------------- TMRpcm music; // создать объект для использования в данном скетче void setup() { //---------------------------- // initialize the pushbutton pin as an input: pinMode(buttonPin, INPUT); // initialize the LED pin as an output: pinMode(ledPin, OUTPUT); //--------------------------- if (!SD.begin(chipSelect)) { while (1); } music.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д. music.setVolume(5); // от 0 до 7. Установка уровня громкости music.quality(1); // 1 для 2x передескритезации, 0 for для нормального режима } void loop() { fileToPlay = random(6); //a random number sprintf(fileName, "%d.wav", fileToPlay); // read the state of the pushbutton value: buttonState = digitalRead(buttonPin); // check if the pushbutton is pressed. If it is, the buttonState is HIGH: if (buttonState == HIGH) { // turn LED off: digitalWrite(ledPin, LOW); music.play(fileName); delay(10000); music.pause(); delay(3000); digitalWrite(ledPin, HIGH); } }
Схема:
Примечание 5:
Создавать и редактировать звуки для данного проекта можно с помощью программы Audacity
“rutube.ru/video/4bc4ddf670da4dfba8535994ea00b51b/”
Примечание 6:
Устройство “Алиса скажи что-нибудь приятное”
Записал 44 фразы для данного устройства, в которых Алиса говорит что-нибудь приятное, вот некоторые из них:
Ты как кофе с тобою каждое утро добрее…
Таю от тебя как масло от кашки
С тобой я сияю от счастья
Я по тебе скучаю как лимончик по чаю
Ты как кактус – а я люблю каждую твою колючку
Ты всегда делаешь мой день ярче
Когда ты рядом времени всегда мало
Каждый раз когда вижу тебя – влюбляюсь ещё больше
У нас тобой любовь и ласка как у хлебушка с колбаской
Ты меня заряжаешь свом ласковым голосом – не останавливайся
Ты как сладкая булочка
Ты делаешь этот мир ещё прекраснее
Ты как чистое золото
Скучаю по тебе как печенька по чаю
Люблю тебя больше, чем пожрать (зарядиться)
Ты мой космос
Ты мастер спорта по обнимашкам – давай обнимимся
Давай грется друг об друга
Хочу смотреть с тобой мультики
Ты рыба моей мечты
Хочется чего-то такого же сладкого как и ты
Скучаю по тебе каждую минуту
Твой голос самая прекрасная музыка
Я обожаю тебя от луны и обратно
Скачать звуки Алисы можно здесь в формате wav – частота дискретизации: 16000 Гц;- количество каналов: моно;- количество бит: 8.:
– скачать 44 звука Алисы в формате zip
– скачать 44 звука Алисы в формате tar.gz
Код скретча Ардуино Нано и схема – взята из Примечание 4, только рандом будет уже не из 6 звуковых файлов, а из 44:
#include <SD.h> // необходимо включить SD библиотеку #include <TMRpcm.h> // также необходимо включить данную библиотеку... #include <SPI.h> // Измените это в соответствии с вашей платой расширения или модулем; const int chipSelect = 10; //----------------------------------- const int ledPin = 4; // the number of the LED pin const int buttonPin = 2; // the number of the pushbutton pin // variables will change: int buttonState = 0; // variable for reading the pushbutton status char fileName[20]; //an array to hold the filename int fileToPlay ; //------------------------------------- TMRpcm music; // создать объект для использования в данном скетче void setup() { //---------------------------- // initialize the pushbutton pin as an input: pinMode(buttonPin, INPUT); // initialize the LED pin as an output: pinMode(ledPin, OUTPUT); //--------------------------- if (!SD.begin(chipSelect)) { while (1); } music.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д. music.setVolume(5); // от 0 до 7. Установка уровня громкости music.quality(1); // 1 для 2x передескритезации, 0 for для нормального режима } void loop() { fileToPlay = random(44); //a random number sprintf(fileName, "%d.wav", fileToPlay); // read the state of the pushbutton value: buttonState = digitalRead(buttonPin); // check if the pushbutton is pressed. If it is, the buttonState is HIGH: if (buttonState == HIGH) { // turn LED off: digitalWrite(ledPin, LOW); music.play(fileName); delay(10000); music.pause(); delay(3000); digitalWrite(ledPin, HIGH); } }
Также это устройство может работать без Ардуино Нано, а просто на микросхеме Atmega328p, вот hex файл для неё
– скачать hex файл для Atmega328p в zip формате
– скачать hex файл для Atmega328p в tar.gz формате
– схема соединения и фьюзы для прошивки – “gameforstreet.ru/atmega328p-vosproizvodim-zvuk-s-sd-karty/” – только нужно добавить ещё кнопку, светодиод и резистор – аналогично данной схеме:
картинка в помощь:
Примечание 7: Также хочу добавить табло к данному устройству – на котором будет пульсировать сердечко, когда будет играть мелодия, а когда будет происходить процесс ожидания – светодиод ещё не загорелся – будет светится значок поиска или загрузки!
Примечание 8: Чтобы увеличить звук – можно подключить устройство к 9 В (например использовать сетевой блок или батарейку) по следующей схеме:
На схеме нарисован MOSFET транзистор (MOSFET — это обычный полевой транзистор) IRF1010N, но в своём устройстве использовал IRF1010E:
Если используете динамик больше 2 Вт, то резистор R перед динамиком вообще не нужен.
Стабилизатор 78L05 будет нагреваться, так что лучше использовать его в корпусе ТО220: