Вот уже много лет в самом укромном и скромном по своей площади месте в нашей квартире стоит старенький аналоговый радиоприемник. Стоит неприметно, на шкафу. Но стоит только войти в это маленькое, но часто посещаемое помещение, как он оживает и радует посетителя музыкой, обычно это "Радио на 7 холмах". Устроено все очень просто: свет включается автоматически, с использованием светильника со встроенным датчиком движения.
Включившись, светильник запускает вытяжной вентилятор и это самое радио. Вероятно годы берут свое и внутри "почти японского" маленького чуда высохли какие-то конденсаторы или что-то еще начало приходить в негодность и настройка на радиостанции стала все чаще сбиваться, вынуждая искать стул и крутить ручку настройки.
И вот тут-то и попался на глаза второй динамик, оставшийся от нашего большого железного робота. Решено было сделать незатейливую замену отжившему свое устройству, способную продолжить радовать нас музыкой в автоматическом режиме.
Итак динамик, Supra SSB-5, автомобильный, пять дюймов, 40-140 Вт.
В качестве воспроизводящего устройства мы будем использовать DFPlayer Mini, он имеет на борту 3Вт усилитель и поддерживает microSD карты объемом до 32 Гб.
Казалось бы всего 3 Вт усилитель и такой мощный динамик - это бред, но практика показало обратное. Звучит эта связка вполне приятно, громкости для задуманного сценария использования хватает с избытком, а динамик выдает довольно сочный бас, в отличии от полуваттного спикера в старом радио.
Чтобы добавить дополнительную функциональность нашему устройству, воспользуемся Arduino Pro Mini (можно использовать любой аналог).
Плата нам понадобится для запуска музыкальных треков в случайном порядке, для управлению режимами эквалайзера и громкостью. Не секрет, что в разное время суток, фоновый шум в городской квартире заметно отличается, поэтому мы добавим в нащу схему часы реального времени, чтобы включать музыку в разное время суток с разной громкостью, кроме этого ночью мы будем немного прибирать басы на эквалайзере. Модуль часов реального времени мы использовали вот такой, DS1302:
Питаться устройство будет от USB, в качестве источника питания мы использовали зарядку мобильного телефона, 5В 1А. Общая схема соединения всех компонентов такова:
Для работы с DFPlayer Mini потребуются библиотеки DFPlayer library V2.0 и SoftwareSerial. Для работы с часами DS1302 также потребуется соответствующая библиотека.
Платы мы закрепили на кусочке утеплителя, это самое быстрое и ленивое крепление, которое нам приходилось до этого делать. В тоже время оно вполне надежно для домашнего стационарного использования.
В качестве корпуса мы использовали ведерко из под шпатлевки, вышло довольно мило и герметично.
Код в скетча для Arduino у нас такой:
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#include <stdio.h>
#include <DS1302.h>
namespace {
const int kCePin = 7; // Chip Enable
const int kIoPin = 6; // Input/Output
const int kSclkPin = 5; // Serial Clock
DS1302 rtc(kCePin, kIoPin, kSclkPin);
} // namespace
SoftwareSerial mySerial(10, 11); // RX, TX
void setup () {
Serial.begin (9600);
mySerial.begin (9600);
mp3_set_serial (mySerial);
randomSeed(analogRead(4));
delay(300); //wait 1ms for mp3 module to set volume
Time t = rtc.time();
// ночь, громкость на минимум, бас убираем
if (t.hr < 5) {
mp3_set_EQ (0);
delay(100);
mp3_set_volume (10);
delay(100);
mp3_play (1);
}
// поздний вечер
if (t.hr >= 22) {
mp3_set_EQ (2);
delay(100);
mp3_set_volume (15);
delay(100);
mp3_play (4);
}
// раннее утро
if (t.hr >= 5 && t.hr < 8) {
mp3_set_EQ (2);
delay(100);
mp3_set_volume (15);
delay(100);
mp3_play (2);
}
// позднее утро
if (t.hr >= 8 && t.hr < 11) {
mp3_set_EQ (2);
delay(100);
mp3_set_volume (18);
delay(100);
mp3_play (2);
}
// вечер
if (t.hr >= 20 && t.hr < 22) {
mp3_set_EQ (2);
delay(100);
mp3_set_volume (20);
delay(100);
mp3_play (4);
}
// день
if (t.hr >= 11 && t.hr < 17) {
mp3_set_EQ (2);
delay(100);
mp3_set_volume (22);
delay(100);
mp3_play (3);
}
// ранний вечер
if (t.hr >= 17 && t.hr < 20) {
mp3_set_EQ (2);
delay(100);
mp3_set_volume (20);
delay(100);
mp3_play (4);
}
delay(500);
while (analogRead(A0) < 430) {
delay(100);
}
}
void loop () {
mp3_play (int(random(5,1024)));
delay(100);
while (analogRead(A0) < 430) {
delay(100);
}
}
При подаче питания по часам определяется текущий временной промежуток, "скрипучим голосом робота" произносится одна из фраз "Доброе утро", "Добрый день", "Добрый вечер", "Доброй ночи", заранее записанных в виде mp3 на карте microSD, предварительно громкость устанавливается в соответствующее времени суток значение. Далее играются музыкальные треки в случайном порядке до тех пор, пока есть питание (его отключит датчик движения, когда человек выйдет из помещения).
В итоге получилась вот такое вот поющее ведро, которое заняло почетное место на шкафчике вместо старого радиоприемника и уже радует нас музыкой и наличием "электронных мозгов", способных вместить в себя новые, придуманные в будущем "фишки".
Если вы захотите повторить наш проект, то есть вариант не завязываться на внешний датчик движения, в корпус можно встроить модуль для Arduino, способный определять движение в ИК-диапазоне:
Из дополнительных возможностей, которые в скором времени уже хочется добавить:
- Плавное повышение громкости с 0 до разрешенного в данный временной промежуток значения
- Разная музыка в разное время суток, ночью - только спокойная классика, никакого металла!
- Ваш вариант?
Комментариев нет:
Отправить комментарий