Olá a todos!
Hoje eu tenho um artigo sobre como você pode abrir uma porta conectada a um intercomunicador usando alto-falantes Yandex Alice e Arduino. Se você estiver interessado, por favor, em gato.
Muitas vezes acontece que alguém liga para o interfone e, neste momento, você está ocupado com alguma coisa, ou com preguiça de subir e abrir a porta. Situação familiar, não é?
E meu interfone não abre a porta sem tirar o fone do gancho e, se você não tirar o fone do gancho 30 segundos após a chamada, o botão de abertura da porta deixará de estar ativo até que uma nova chamada chegue. Como o interfone não é barato (naquela hora), o sapo me engasgou para trocar para outro. E decidi lutar contra isso.
A primeira ideia para simplificar a minha vida surgiu há 10 anos, decidi fazer um adaptador de interfone para que a chamada do interfone fosse duplicada para o meu telefone residencial. Desenhei um diagrama, montei um protótipo em uma placa de ensaio. Tudo funcionou, mas nunca passei desse protótipo. Tudo ainda está jogado no lixo até hoje.
O segundo projeto foi implementado em um roteador TL-MR3020 com firmware CyberWRT e software BareSIP para telefone SIP. Quando você pressionava o botão do painel externo, o roteador, em paralelo com a chamada do intercomunicador, ligava para o celular e era possível até mesmo em outra cidade falar com a pessoa que estava perto da porta do seu apartamento, mas o soft phone ou o próprio roteador funcionavam extremamente instáveis e tiveram que ser abandonados.
Mas aqui, para minha felicidade, no ano passado eles me deram uma assistente de voz Alice no meu aniversário e eu tive uma nova ideia - abrir a porta com a minha voz, através de uma coluna do Yandex.
E hoje chegou o dia em que me comprometi a implementar minha ideia.
Um pouco sobre o funcionamento da estação de vídeo porteiro
O painel externo é conectado ao monitor de intercomunicação usando GND de 4 fios, +12 V, áudio e vídeo.
Se estiver no painel de chamada, feche o fio de áudio através de um resistor de 100 Ohm para GND, então um sinal de chamada será ouvido. E se +12 V for aplicado ao fio de Áudio, o relé para abrir a fechadura eletromagnética funcionará.
A imagem abaixo mostra o diagrama de conexão do painel externo com o interfone.

Se você usar um cabo especial de intercomunicação para conectar a estação externa ao monitor, então ele normalmente é conectado de acordo com as seguintes instruções:
GND - trança
+ 12V - fio vermelho
Áudio - fio azul
Vídeo - núcleo central do cabo coaxial

Esquema
Pode-se ver no diagrama que para conectar o dispositivo do Arduino ao intercomunicador, é necessário conectar apenas 2 fios. Para conectar esses fios, usei o que tinha em mãos. Em vez de um relé, você pode usar uma chave em um transistor NPN ou optoacoplador PC817.
Usei um receptor infravermelho, o primeiro que me chamou a atenção, que uma vez tirei de uma TV velha e que estava jogado na minha prateleira no lixo por muitos anos.

Componentes usados
Módulo Arduino Nano Relay
receptor IR 38 kHz
Fios Dupont
Em vez do Arduino nano, você pode usar qualquer outro microcontrolador da linha Arduino. Usei o Arduino nano porque tenho muitos deles.
Fonte para Arduino
O código é bastante simples e direto.
Para receber e salvar o código do botão pressionado, você precisa colocar o controlador Arduino no modo de adicionar um botão remoto. Você precisará definir um jumper nos pinos D2 e GND e pressionar o botão reset no Arduino, após o que o LED do sistema na placa do controlador acenderá e o controlador aguardará que o botão no controle remoto seja pressionado.
Recomendo usar o controle remoto da TV, para que, além do controle de voz, você possa abrir a porta do controle remoto sem se levantar do sofá. No controle remoto, é melhor escolher um botão que você raramente usa, geralmente quatro botões coloridos para teletexto. Após receber o código, o Arduino piscará alegremente com um LED e voltará ao modo de espera.
Você pode pressionar os botões o quanto quiser, mas o Arduino só se lembrará do último pressionamento. Para sair do modo de memorização de código, basta retirar o jumper e pressionar o botão “Reset” do microcontrolador.
Código para Arduino
#include <IRremote.h>
#include <EEPROM.h>
//#define TOLERANCE 35 //
#define IR_RECEIVE_PIN 11 //
#define RELAY_PIN 12 //
#define SET_PIN 2 //
IRrecv irrecv(IR_RECEIVE_PIN);
decode_results results;
void setup()
{
irrecv.enableIRIn(); //
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
pinMode(SET_PIN, INPUT_PULLUP); //D10 , « »
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
// Serial.begin(115200);
while(!digitalRead(SET_PIN)) // D2 GND
{
set_command();
}
}
void loop()
{
if (irrecv.decode(&results)) //
{
if(LoadEEPROM()==results.value) // (ir_command==results.value)LoadEEPROM();
{
digitalWrite(RELAY_PIN, HIGH); //
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(RELAY_PIN, LOW); //
}
irrecv.resume(); //
}
}
void set_command() //
{
digitalWrite(LED_BUILTIN, HIGH);
if (irrecv.decode(&results))
{
digitalWrite(LED_BUILTIN, LOW);
SaveEEPROM(results.value); // EEPROM
irrecv.resume(); //
}
delay(100);
}
void SaveEEPROM(unsigned long ir_code) // EEPROM
{
EEPROM.write(0, ir_code & 0xFF);
EEPROM.write(1, (ir_code & 0xFF00) >> 8);
EEPROM.write(2, (ir_code & 0xFF0000) >> 16);
EEPROM.write(3, (ir_code & 0xFF000000) >> 24);
}
unsigned long LoadEEPROM() // EEPROM
{
byte val = EEPROM.read(3);
unsigned long ir_code=val;
val = EEPROM.read(2);
ir_code= (ir_code << 8) | val;
val = EEPROM.read(1);
ir_code= (ir_code << 8) | val;
val = EEPROM.read(0);
ir_code= (ir_code << 8) | val;
return ir_code;
}
#include <EEPROM.h>
//#define TOLERANCE 35 //
#define IR_RECEIVE_PIN 11 //
#define RELAY_PIN 12 //
#define SET_PIN 2 //
IRrecv irrecv(IR_RECEIVE_PIN);
decode_results results;
void setup()
{
irrecv.enableIRIn(); //
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
pinMode(SET_PIN, INPUT_PULLUP); //D10 , « »
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
// Serial.begin(115200);
while(!digitalRead(SET_PIN)) // D2 GND
{
set_command();
}
}
void loop()
{
if (irrecv.decode(&results)) //
{
if(LoadEEPROM()==results.value) // (ir_command==results.value)LoadEEPROM();
{
digitalWrite(RELAY_PIN, HIGH); //
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(RELAY_PIN, LOW); //
}
irrecv.resume(); //
}
}
void set_command() //
{
digitalWrite(LED_BUILTIN, HIGH);
if (irrecv.decode(&results))
{
digitalWrite(LED_BUILTIN, LOW);
SaveEEPROM(results.value); // EEPROM
irrecv.resume(); //
}
delay(100);
}
void SaveEEPROM(unsigned long ir_code) // EEPROM
{
EEPROM.write(0, ir_code & 0xFF);
EEPROM.write(1, (ir_code & 0xFF00) >> 8);
EEPROM.write(2, (ir_code & 0xFF0000) >> 16);
EEPROM.write(3, (ir_code & 0xFF000000) >> 24);
}
unsigned long LoadEEPROM() // EEPROM
{
byte val = EEPROM.read(3);
unsigned long ir_code=val;
val = EEPROM.read(2);
ir_code= (ir_code << 8) | val;
val = EEPROM.read(1);
ir_code= (ir_code << 8) | val;
val = EEPROM.read(0);
ir_code= (ir_code << 8) | val;
return ir_code;
}
Ao colocar publicamente o código que postei acima - indique o link para a fonte.
Conectando-se a Yandex.Station Alice
Para conectar a um alto-falante inteligente, você precisa do Yandex Smart Remote.

Não é necessário comprá-lo de um mecanismo de busca e parceiros russos, o controle remoto pode ser comprado no Aliexpress um pouco mais barato. Mas a diferença não é grande o suficiente para jogar na loteria comprando um controle remoto dos chineses. Não vou te dizer como conectar o controle remoto à estação, já que existem muitas instruções detalhadas sobre esse assunto na Internet, você pode encontrá-las facilmente no mesmo Yandex. Vou apenas dizer a você como configurar a interação entre Yandex.Station e o abridor do Arduino.
Para fazer isso, você precisa ir para o aplicativo Yandex.Browser - Todos os serviços - Dispositivos - Gerenciamento de dispositivos - Controle remoto - Adicionar um dispositivo - Configurar manualmente - insira o nome "Porta" - Adicione um comando - insira o nome do comando de voz "Abrir" - pegue o controle remoto de qualquer eletrodoméstico, envie-o para Yandex. e pressione o botão necessário. Depois que o LED azul no controle remoto apaga, a coluna está pronta para executar este comando. Agora você pode conferir, diga a frase "Alice abre a porta", ela, depois de pensar um pouco, irá realizar seu pedido.
Conclusão
Usar o controle remoto Yandex em uma casa inteligente permitirá que você controle todos os eletrodomésticos, incluindo um controle remoto. E também é bastante fácil, tendo montado o circuito mais simples no Arduino, integrar o controle de quaisquer outros dispositivos que não tenham controle remoto. É simples, confiável e não requer que esses dispositivos estejam conectados à internet.
Se gostou do meu artigo, pode se inscrever no meu canal para não perder a próxima publicação.
Se você tiver alguma dúvida, pode colocá-la nos comentários.