Às vezes, às sextas-feiras, a ficção é considerada aceitável aqui. Hoje, é claro, não é sexta-feira, mas não é ficção, mas três mini-romances que têm algo a ver com a minha vida.Um leitor apressado também pode se perguntar que relações podem realmente conectar o interfone e o provedor de Internet. E estará certo, porque eu também não vim imediatamente a isso.Mas sobre tudo (Arduino, hacks banais, brigas telefônicas) em ordem.Sim-sim, abra!
Para ser sincero, o controle remoto do interfone de acordo com a minha versão é quase inútil, e eu percebi isso antes mesmo de começar. Portanto, para justificar o empreendimento, tive que usar todo o poder da imaginação para apresentar alguns casos, como se costuma dizer.Para começar, decidi que dessa maneira deixaria os convidados se aquecerem na varanda, se ainda não tivesse conseguido correr para casa. Ou não me incomodo particularmente em obter as chaves com antecedência - afinal, você pode configurar o telefone para que ele dê um comando para abrir a porta quando chegar em casa.Para as pessoas comuns, isso parece bastante selvagem, mas, como eles dizem, per aspera ad astra.E eu realmente queria, de alguma forma, usar alguns relés no gabinete, que estavam ociosos no controlador central desde o início de sua operação. A situação, de fato, é ridícula: naquela época havia apenas um bloco para 4 relés em mãos, dos quais apenas dois eram necessários. E como não queria esperar mais um mês pelo bloco de dois revezamentos, peguei o que estava à mão e imediatamente comecei a me preocupar com redundância.No entanto, para os interfones. Em geral, a abertura automática de um sistema de interfone não é uma coisa exclusiva. Por exemplo, aqui no Geektimes, camarada Em 2013 (quando o dólar tinha 30 anos), o Cluster fazia não apenas um controle remoto, mas também uma secretária eletrônica para os hóspedes .Essa é de longe a coisa mais legal que eu já vi nessa classe.Mas muito antes, os visitantes do RadioKota e muitos outros fóruns temáticosse divertiu com dispositivos como "abridor" - desbloqueando o interfone imediatamente em uma chamada.Eu não ia repetir um ou outro. O primeiro - porque é difícil, e porque eu já tinha um controlador em funcionamento, que planejava dar novos poderes. A segunda, por razões mais óbvias: muitos detalhes e muito pouco senso, peço desculpas se ofendi os autores.Sentido, é claro, para mim, e de maneira nenhuma. Ou seja, categoricamente não gosto do esquema, que hospitalamente abre a porta para quem disca um número de apartamento.Daí os requisitos básicos para o meu abridor:1) Usando um controlador central para controlar via Internet e rádio2) Proteção mínima contra acesso não autorizado3) Interferência mínima no interiorIniciar
Comecei familiarizando-me com o princípio de operação do interfone, que peguei emprestado aqui :O tubo funciona de maneira muito simples: quando o tubo é colocado, ele tem uma resistência de 50 Ohms, quando o tubo é removido, a resistência é de aprox. 400 Ohm, quando o botão de liberação da trava é pressionado, a resistência é medida em quilo-ohms ... Quando não há chamada, não há tensão na linha. Quando uma chamada é recebida e o telefone monta uma corrente grande e a tensão acaba sendo pequena de 5-7 V, quando o telefone está ausente e a resistência é chamada ao infinito e a tensão é máxima aprox. 15V quando o aparelho estiver desligado, aproximadamente 10V. Quando o botão de tensão é pressionado, o máximo é de aprox. 15V - pressionar o botão significa quebra de linha.
No caso da Digital, isso é um pouco diferente, já que a documentação do aparelho, mas eu tinha o KM-2NO (a propósito, expresso minha gratidão à Digital por publicar o esquema) indica:1. Consumo de corrente no modo "Talk" 18-22 mA
2. Tensão da linha com um tubo instalado na caixa 1,5–2,5 V
3. Tensão da linha com um tubo acima de 5,8-6,5 V
Portanto, me familiarizei com mais detalhes com o diagrama de circuitos do meu tubo:
e descobri que tudo é exatamente o mesmo em termos de resistência e, provavelmente, o restante da lógica do Digital dificilmente é diferente da Visita.Chamo a atenção para o fato de que minha modificação é sem LED. Mas isso acabou sendo correto, pois esse fato facilita a transmissão de informações de chamada para o controlador central.Ou seja: a chamada soa, o LED "acende", o acoplador óptico liga, no pino do controlador, temos uma mudança de nível de alto para baixo.Então, em vez do LED, instalei meu acoplador óptico 4N35, cuja saída eu enviei diretamente para o Arduino. De acordo com o esquema padrão da mesma Internet:
E como eu queria me familiarizar com o mínimo de detalhes e recursos disponíveis do controlador, dos quais os pinos digitais eram os mais valiosos (o Uno não era suficiente para eles), em vez de um resistor de pull-up de 10K, usei o resistor pull-up embutido do Arduino.Quando conectado a um pino digital, fica assim:#define ringPin _
pinMode(ringPin, INPUT_PULLUP);
Quando conectado a um pino analógico:#define ringPin _
pinMode(ringPin, INPUT);
digitalWrite(ringPin, HIGH);
Eu decidi colocar o optron do microcontrolador. Não posso justificar, mas achei que havia menos risco de falsos positivos de possíveis capturas. É possível que ele esteja errado, mas até agora tudo está normal com dicas eles não são.Quanto à terra no exemplo acima, você precisa entender: embora a terra pareça ser comum no diagrama, isso não é verdade - na verdade, existe realmente um isolamento optoeletrônico. Bem, por isso ele é um exemplo.Livre-se de mim!
A decisão de se livrar completamente dos circuitos de intercomunicação não veio imediatamente, mas inevitavelmente. A propósito, lembrei-me muito do caso de seis anos atrás, quando vi como um momento constrangedor com uma trava eletromagnética se formou durante a instalação de um ACS.Não sei como aconteceu, mas o castelo funcionou de alguma forma. Aquele "rastreamento", então nada, e os próprios instaladores já quebraram a cabeça. Porém, no final, foi sugerido que eles tivessem um curto-circuito inesperado em algum lugar (ou algo parecido) nos circuitos de controle. Obviamente, verificamos tudo, é claro, sem muito sucesso, pois eles foram definidos claramente de acordo com as instruções.O óleo foi adicionado ao fogo pelo fato de que exatamente a mesma trava estava exatamente na mesma configuração, mas funcionou muito bem no outro andar.Por quanto tempo, brevemente, eles decidiram que o assunto estava na própria porta, na qual a fechadura está presa. Na minha opinião, eles sugeriram que, quando foi instalado, eles grudaram na armadura, que, por sua vez, foi aterrada, o que levou a efeitos inesperados na trava (que, possivelmente, tinha uma trava de controle no gabinete).Em geral, eles resolveram muito tempo e tediosamente. E eu não queria repetir a mesma coisa em casa.Portanto, não salvei os fios e conectei os contatos do relé da maneira mais simples:1) Normalmente um relé fechado - em série com o botão para cima SW1 (porque este botão está fechado no estado normal)2) Normalmente abra outro relé - em paralelo com o botão de abertura da porta SB1 ( porque este botão está normalmente aberto)Os contatos de controle do relé, é claro, conectados aos pinos digitais livres (hooray, eles ainda eram) do microcontrolador.No total, é fácil imaginar que foram necessários seis fios: dois para o acoplador óptico e mais quatro para o relé.Peço desculpas pelo primitivismo da ilustração:Do intercomunicador

Por Arduino
Os relés aqui são mostrados exclusivamente esquematicamente. Como repito, usei módulos de relé prontos com enchimento completo - optoacopladores, transistores, diodos e assim por diante. Eu recomendo fortemente não conectar relés nus ao Arduino.... e não me ligue mais!
Já nessa fase, eu era capaz de abrir com facilidade o interfone via Internet ou rede local a partir de um computador ou smartphone, de acordo com o seguinte princípio:1) No momento em que o interfone toca, o controlador entra no modo de permissão para abrir a porta por 40 segundos. O tempo é selecionado com base na documentação do interfone digital, onde é indicado que a duração do sinal de chamada é exatamente 40 segundos.I.e. por mais tempo, não faz sentido permanecer aberto condicionalmente.2) Após o recebimento de um comando aberto via Internet (HTTP POST), o controlador alterna seqüencialmente o relé. Primeiro, ele abre o relé do tubo, que simula sua ascensão. Depois de uma breve pausa, o relé do botão de abertura se fecha, simulando sua pressão. Depois - "libera" o botão e "desliga" o telefone.A bancada de testes era muito primitiva:
Seria possível parar com isso se eu, como orgulhoso proprietário do KTsDV-12-2, não soubesse o quão inconveniente é - correr pelo controle remoto ou pelo telefone toda vez que precisar ativar / desativar algo.E, em particular, se eu não tivesse terminado recentemente uma estação meteorológica de mesa com uma tela sensível ao toque e, ao que parece, não tivesse um potencial totalmente desenvolvido.
Em suma, rapidamente adicionei à estação meteorológica o transmissor de 433 MHz mais comum e vulgar com modulação de amplitude, cujas toneladas são vendidas no Aliexpress por dinheiro ridículo.Como resultado, a estação meteorológica se tornou outro ponto de controle para o interfone e, portanto, se uma campainha tocar e você se sentar ao lado dela, não faz sentido interromper o telefone, pois diretamente na tela você pode:1)
2) ( 1,5 40 ) , — ,
3) «» ( «» «» )
, , , , ( — , ).
, HAL. , , . : , , , material , :
Essa tela substitui os dados climáticos quando o interfone toca: neste momento, o controlador central emite um comando de rádio, ao qual a tela meteorológica responde.Pode ser um pouco ilógico aqui, mas a campainha no centro informa principalmente sobre a chamada de interfone. Pressioná-lo (ilógico aqui) silencia o som do interfone da maneira mais bárbara - imitando o processo de levantar e abaixar o telefone.O castelo à esquerda é a abertura do castelo. Telefone à direita - pegue o telefone para simular o início de uma conversa.A tela muda para a principal após 40 segundos desde o início da chamada e não imediatamente pressionando o botão ícone. Isso permite que você pressione várias vezes se o controlador de repente não "ouviu" um comando, o que não é incomum, dado o tipo de canal de rádio usado.Algoritmos
Como mencionei, no começo eu era modesto e queria apenas uma coisa: abrir o interfone sob comando pelo telefone e no momento da ligação.Mas, depois de alguns dias, percebi que ficar na frente do interfone e cutucar a tela é uma tarefa bastante chata, e é muito mais interessante permitir uma abertura "atrasada" quando você se aproxima da entrada. Resta apenas discar o número do apartamento no painel do interfone e pronto, a porta está aberta.Por fim, pensei que, nessa situação, provavelmente faz sentido proibir a abertura - em geral.Mas então ele se recompôs, depois se soltou, pegou uma ferramenta mais útil, popularmente chamada de navalha de Occam, e rapidamente se livrou de entidades desnecessárias. Ou seja: desde que eu estava fazendo o controle remoto, não era para desligá-lo. Portanto - o desligamento não é necessário.Em segundo lugar, de acordo com o pensamento sóbrio (e não como de costume), descobriu-se que não havia diferença especial entre a abertura por um comando imediatamente no momento da chamada ou por um determinado comando.Finalmente, voltando à ergonomia do controle, quero dizer que quanto mais modos - menos pessoas comuns os usarão. Sim, sou aborrecido, mas como imaginei ter três modos para diferentes ocasiões, percebi que ainda usaria um.Portanto, o modo é um e o comando é um, e existem dois processadores:1) Se o interfone tocar, o controlador permitirá a abertura dentro de 40 segundos desde o início da chamada.2) Se o comando de abertura é recebido primeiro, o controlador permite a abertura e aguarda uma chamada dentro de N minutos a partir do momento em que o comando foi recebido (isto é, para preparar o interfone para abertura no caminho para a casa).Pode haver duas fontes do comando de abertura:1) HTTP POST- uma solicitação por meio de uma rede local ou da Internet (por exemplo: myserver.com/?sim-sim-openup ), ou seja, você pode abrir pelo menos a partir de Kuala Lumpur2) O comando de rádio nos painéis ou botões da casa (na minha implementação, através da biblioteca RC-Switch )E como toda a estrutura está conectada ao aparelho sem afetar seu funcionamento, o intercomunicador pode continuar a ser usado da maneira usual (botão do fone de mão com oi-oi-oi), ou seja, doméstico, incapaz de apreciar os méritos do progresso tecnológico e não precisa se aprofundar nos detalhes.Bônus repentinos
Mesmo que você não use a função de abridor de portas, agora o controlador notifica regularmente que alguém está arranhando a porta da entrada pelo interfone. Para mim, como pessoa curiosa, essa informação não é de interesse - e agora eu a recebo regularmente.Mais importante, essa função continua funcionando mesmo que você desligue o fone do interfone com o interruptor. Potencialmente, isso significa que agora há menos chances de deixar o intercomunicador desativado, se você precisar excluir temporariamente a possibilidade de suas chamadas.Infelizmente, o circuito do intercomunicador é tal que, quando desligado, torna-se impossível controlar remotamente a trava (parece que a unidade central considera que, nesse caso, o telefone está “desligado”, independentemente de sua posição atual).E paisagismo
Como eu estava buscando uma interferência mínima no interior, tive que tomar uma decisão sobre como me conectar ao controlador central, com base no fato de que o controlador e o interfone estavam em lados diferentes da porta e o controlador tinha eletricidade, mas o interfone não.
No final, decidi que seria melhor esticar o cabo atrás da moldura da porta e fechar seus fragmentos com painéis decorativos impressos em uma impressora 3D do que ocupar outra tomada com uma fonte de alimentação, não está claro como puxar o fio para o monofone do interfone e bloquear o canal de rádio entre o monofone e o controlador.
E acho que nas minhas condições essa é a melhor opção. Sim, e o revezamento entrou no negócio, mas com um canal de rádio - novamente teria permanecido em reserva.Remapeando a Nextion
Falando sobre a exibição do tempo na área de trabalho (estação meteorológica, se você quiser), mencionei que durante o processo de acabamento, consegui danificar o componente principal - a própria tela de toque do Nextion.A falha não afetou a operação do microcontrolador de bordo e a exibição de dados, mas o painel de toque quase falhou. No entanto, experimentalmente, descobri que, mesmo que você não exerça muita pressão no painel do Nextion em um determinado local, dessa maneira você pode restaurar a sensibilidade da metade esquerda (aproximadamente) da tela.Esse truque funciona instável e nem sempre, mas com frequência suficiente para que eu possa atendê-lo, pensando em pedir uma nova tela.Claro, isso me deixou feliz e triste. Por um lado, foi possível obter operabilidade parcial. Por outro lado, eu gostaria de jogar um pouco mais com as paradas. E, de repente, percebi em que armadilha idiota caí: por algum motivo, fiquei obcecado em usar toda a área da tela, quando podia transferir livremente os botões "não funcionantes" para a área de trabalho.Entendo que, para muitos, é realmente uma decisão banal. Mas gostaria de compartilhar alegria inocente com aqueles que, como eu, gostam de ir ao extremo.Então, eu descobri, mudei um pouco o tamanho dos botões, desenhei um novo circuito de controle virtual na minha cabeça e pronto! Restauramos quase completamente a funcionalidade de uma tela parcialmente morta.Foi:
Tornou-se:
Ao longo do caminho, no entanto, tive que matar um perfeccionista em mim e refazer a tela de controle do interfone da tela original para uma minimamente funcional:
Ao vivo
Quando o suporte técnico não é ale
Parece que, em todos esses altos e baixos, seria possível concluir, se não fosse um detalhe: de repente, descobri que o interfone (e atrás dele o restante da automação) deixou de ser controlado ao acessar a partir de redes externas.Ou seja, todos os comandos funcionavam perfeitamente quando conectados à Internet através da rede doméstica e a endereços externos (e não de acordo com o tipo interno 192.xxx.xxx.xxx), mas eles se recusavam igualmente a ser executados a partir das redes de outros operadores (tentei dois).Você deve entender imediatamente que os comandos são transmitidos por meio de uma solicitação HTTP para uma porta externa específica do roteador e, a partir daí, eles já são redirecionados para o IP e a porta internos necessários.E esse esquema funcionou sem os menores problemas desde o seu lançamento em 2013 até que algo quebrou no atual. E ainda tenho certeza de que não é minha culpa. Mas não sei como verificar.Na verdade, no começo eu queria xingar a Beeline, porque inicialmente pensei que o problema estava na Internet móvel. Mas então eu me recompus, encontrei outro provedor, tentei e descobri que através dele o mesmo problema.Então liguei para Onlaym e, como pude, expliquei a essência das alegações. E em resposta, eles me explicaram popularmente que::
TCP/25 – -;
TCP/135-139, TCP/445 UDP/135-139 – , MS Windows;
TCP/23, TCP/161, UDP/69 UDP/161– .
, , .
Por sua vez, insisti que minha porta a) não se enquadra nesse intervalo, b) não funciona como esperado ec) não mudei nada.Que tal uma parede de ervilhas.Bem, o que devo fazer, expliquei educadamente que, embora entenda que meus infelizes 450 rublos por mês não causam o tempo para eles, vou de tal absurdo procurar o mesmo absurdo, mas pelo menos funciona.Em resposta, eles murmuraram novamente que estavam me fornecendo IP e todos os meus problemas. Bem meu, decidi, depois meu. E por uma decisão decidida, verifiquei primeiro a operabilidade do sistema em outra porta (transferida para uma unidade) - funciona. E então ele fez uma configuração flexível do número da porta no Tasker, através do qual, de fato, o volante é automático.Na verdade, ao que descrevo meus sofrimentos: objetivamente, eu realmente queria entender quem estava errado em tal situação. Porque me sinto um completo idiota - reiniciei o roteador e verifiquei as configurações (além disso, por minha própria iniciativa, e não por solicitação de "especialistas"), e ainda assim eles me mandaram para o inferno, sugerindo minhas mãos tortas.Fora da tela
Em conclusão, que usei para a construção do século:1) KTSDV-12-2 - 1 pc.2) Telefone portátil Digital KM-2NO - 1 pc.3) Optoacoplador 4N35 - 1 pc.4) Cabo plano de 10 núcleos (usado seis, mas coloque tudo - apenas no caso) - 3 m.5) Conectores ao cabo - 2 peças. pais e mães6) Monitor climático caseiro com tela sensível ao toque Nextion - 1 pc.7) transmissor de 433 MHz ( de um kit como este ) para modificar a exibição do tempo - 1 pc.8) Resistor de 1 kΩ para o acoplador óptico - 1 pc.Opções:interface atualizada para o NextionCódigo de teste (antes da integração com o KTSDV-12-2 e um conjunto completo de funções de serviço, apenas para entender a linha de raciocínio)#include <RCSwitch.h> // http://code.google.com/p/rc-switch/
#define ringTimeOut 40000
#define openTimeOut 300000
#define handsetPin A3
#define openPin A4
#define ringPin 7
#define ringCode 360500
#define doorBell 3395840
#define openCode 255899
#define openDelay 1500
#define handsetDelay 2500
#define txPin 8
unsigned long ringTime, openTime;
boolean ring = false;
boolean ringRepeat = false;
boolean allowOpen = false;
RCSwitch mySwitch = RCSwitch();
void openDoor() {
digitalWrite(handsetPin, LOW);
delay(handsetDelay);
digitalWrite(openPin, LOW);
delay(openDelay);
digitalWrite(openPin, HIGH);
digitalWrite(handsetPin, HIGH);
ring = false;
allowOpen = false;
}
void setup() {
Serial.begin(9600);
mySwitch.enableTransmit(txPin);
mySwitch.enableReceive(0);
pinMode(handsetPin, OUTPUT);
pinMode(openPin, OUTPUT);
pinMode(ringPin, INPUT_PULLUP );
digitalWrite(handsetPin, HIGH);
digitalWrite(openPin, HIGH);
Serial.println("Ready");
}
void loop() {
if (digitalRead(ringPin) == LOW && ring == false) {
ring = true;
ringTime = millis();
mySwitch.send(ringCode, 24);
Serial.println("Sent ringCode");
if (ringRepeat == true) {
mySwitch.send(doorBell, 24);
Serial.println("DoorBell repeat");
}
Serial.println("Ring-ring!");
}
if ((millis() - ringTime) > ringTimeOut && ring == true) {
ring = false;
Serial.println("Ring reset");
}
if (ring == true && allowOpen == true) {
openDoor();
Serial.println("Door opened via net");
}
if (ring == false && allowOpen == true) {
if ((millis() - openTime) > openTimeOut) {
allowOpen = false;
}
}
if (mySwitch.available()) {
int value = mySwitch.getReceivedValue();
if (value != 0) {
Serial.println(mySwitch.getReceivedValue());
switch (mySwitch.getReceivedValue()) {
case openCode:
if (ring == true) {
mySwitch.disableReceive();
openDoor();
Serial.println("Door opened via radio");
mySwitch.enableReceive(0);
}
break;
}
mySwitch.resetAvailable();
}
}
}
Tirei as fotos para a interface no maravilhoso site Pixabay .