воскресенье, 20 ноября 2016 г.

Проект выходного дня "Поющее ведро"

Вот уже много лет в самом укромном и скромном по своей площади месте в нашей квартире стоит старенький аналоговый радиоприемник. Стоит неприметно, на шкафу. Но стоит только войти в это маленькое, но часто посещаемое помещение, как он оживает и радует посетителя музыкой, обычно это "Радио на 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 до разрешенного в данный временной промежуток значения
  • Разная музыка в разное время суток, ночью - только спокойная классика, никакого металла!
  • Ваш вариант?


Комментариев нет:

Отправить комментарий

Самое популярное