Для голосового оповещения в квартире понадобился усилитель. Можно конечно обойтись обычным усилителем и кричать им на всю квартиру чтобы было слышно во всех комнатах, но это не наш метод. Разработал для себя зонный усилитель который будет оповещать либо играть нам музыку только в той комнате(ах) где кто то присутствует.
Усилитель построен на базе микросхем PAM8610 и имеет выход на 5 стерео зон.
Микросхема PAM8610 это миниатюрный стерео усилитель класса D, номинальная мощность, при 8’ми Омной нагрузке, 10 Ватт на канал, чего вполне достаточно не только для оповещалки. Питание от 7.5 до 13.5 Вольт.
Усилитель спроектирован под корпус для крепления на DIN рейку.
Для связи с умным домом и для управления усилителем используется протокол MQTT. Организовано управление громкостью каждого усилителя независимо, управление режимом Mute, SHUTDOWN и режимом FADE (плавное включение звука).
Код для усилителя доступен на моей странице GitHub.
Код написан в среде Arduino, микроконтроллер, установленный в усилителе, прошит стандартным бутлоадером от arduino и для обновления прошивки достаточно USB-UART конвертера. Так же на плате выведет стандартный ISP разъем для программирования микроконтроллера с помощью программатора.
JS скрипт для переключения усилителя
var timerAmp;
var count = 30000;
var SubsPos;
var locations = 'javascript.0.Location';
var state = 'mqtt.0.myhome.Audio_Amplifier.';
AllOff();
on({id: 'sayit.0.tts.text', change: 'any'}, function (obj) {
OnAmp(true);
});
on({id: 'sayit.1.tts.text', change: 'any'}, function (obj) {
OnAmp(true);
});
var obj ={
'bedroom': 'zone_1',
'guestroom': 'zone_2',
'kitchen': 'zone_3',
'hall': 'zone_4',
'bathroom': 'zone_5'
};
function OnAmp(sub){
unsubscribe(SubsPos);
if (sub){
clearTimeout(timerAmp);
count = count * 2;
}
var position = getState(locations).val.toString();
log('Время воспроизведения - '+ count + ' : Позиция - ' + position);
for (var key in obj) {
if (key === 'hall'){
key = 'guestroom';
}
if (~position.indexOf(key)){
setState(state + obj[key], true);
} else {
setState(state + obj[key], false);
}
}
if (sub){
timerAmp = setTimeout(function() {
AllOff();
count = 15000;
}, count);
}
SubsPos = on({id: locations, change: 'ne'}, function (data) {
OnAmp(false);
});
}
function AllOff(){
unsubscribe(SubsPos);
clearTimeout(timerAmp);
for (var key in obj) {
setState(state + obj[key], false);
}
}
PS перед загрузкой скетча необходимо в файле C:\Program Files (x86)\Arduino\libraries\Ethernet\src\utility\w5100.h найти строки :
участие в заказе еще актуально?
только платы можно заказать?
Актуально, но цена будет выше