
Tudo começou com ele. Esta foi a minha primeira compra no Aliexpress para a primeira automação no país - eu queria fazer autowater na estufa. O cronômetro chegou em uma caixa amarrotada, com uma tampa protetora rachada, mas funcionando. Ele fez um ótimo trabalho regando pepinos durante todo o verão. Ele foi removido e escondido em um local quente e seco durante o inverno. Mas na temporada seguinte eu estava esperando uma surpresa desagradável - o cronômetro começou a desligar, parou de responder aos botões de controle e abriu a água. No começo, pequei com baterias baratas e as substituí pela Duracell. Eu pensei que o problema era energia e correntes de irrupção. Não ajudou. Peguei um ferro de soldar e soldei tudo o que pude nele, até adicionei alguns capacitores ausentes. Mas ele teimosamente continuou a travar. Infelizmente, o produto não é de fácil manutenção - porque usei uma queda de microcircuito em circuito aberto e, aparentemente, algo foi desmontado precisamente sob o composto com o microcircuito. De alguma forma, a temporada terminou com um tempo tão trêmulo, e comecei a pensar no que deveria substituí-lo.
Meus primeiros pensamentos foram pegar um módulo Arduino Mini, um módulo de relógio, um indicador e enfiar tudo no caso de um temporizador quebrado e usar seu motor e válvula de esfera nativos. Mas, de alguma forma, ele realmente não foi lá, consumiria claramente mais do que o enchimento original (o que significa que você pode esquecer as baterias no gabinete) e era chato e não escalável - eu queria regar não apenas a estufa, mas apenas um temporizador quebrado.
E então, em Ali, me deparei com uma válvula de esfera motorizada normal. Aqui está um homem tão bonito:

Sim, custou dinheiro decente, mas não foi assustador conectá-lo a um abastecimento de água no verão e deixá-lo sem vigilância por uma semana. Geralmente é bastante sólido, embora com uma caixa de engrenagens de plástico - agora algumas dessas torneiras funcionam no meu principal suprimento de água, onde a pressão é de 5 atm.
A ideia foi simples. Um lenço com o módulo WiFi ESP8266 estava esperando na gaveta da mesa. Decidiu-se abandonar a economia de energia em favor de uma bateria de carro usada, que, segundo cálculos, deveria ter sido suficiente para pelo menos um mês de duração da bateria.Para não perder o momento da descarga da bateria, o circuito forneceu um divisor através do qual o ESP8266 ADC embutido media continuamente a tensão de alimentação . O módulo DS3231 com bateria deveria ter servido como relógio no circuito, e um lenço por m / s MP1584EN deveria ter reduzido a tensão de 12V para 3,3V.
Aqui está um diagrama de blocos do protótipo:

E aqui está uma foto de sua implementação
implementação já desmontada - o módulo DC-DC entrou no guindaste, o módulo de relógio na parte traseira da placa de ensaio O controle do motor do guindaste foi feito aqui simplesmente - quais transistores foram encontrados na gaveta da mesa, eles foram instalados. Na realidade, um motor pode ser controlado, por exemplo, via m / s ULN2003, ativando vários canais em paralelo, com transistores de efeito de campo com controle lógico ou, em geral, através de um módulo de relé com opto-isolamento. Só é necessário levar em consideração que o motor, com uma corrente de operação de cerca de 70 mA, possui uma corrente de partida (e corrente no momento do bloqueio da rotação) da ordem de 300-350 mA.
Um esboço rápido seria escrito no Arduino com uma interface da Web simples:

E o protótipo estava em serviço de teste. Encaminhei a interface da web do guindaste através do roteador e o dispositivo estava constantemente disponível online.
E os pensamentos continuaram. Um protótipo é bom, mas eu quero várias dessas torneiras e fazer tudo na tábua de pão não é uma opção. O guindaste foi aberto. E ficou claro que há muito espaço dentro de uma tampa selada e existem até locais de fixação:

Na torneira usada no protótipo, sob a tampa havia uma pequena placa de circuito com um relé, que fornecia lógica de controle. E na foto há uma grua com índice CR05. Não há lógica ou placa de circuito nesses toques. Os fios de controle do motor e os fios da chave limitadora são simplesmente retirados. E você precisa controlar esses guindastes alterando a polaridade da tensão no motor. Ao mesmo tempo, é altamente recomendável controlar os momentos finais de fechamento / abertura nos pontos finais do TC, lembramos que a corrente nesses momentos já é de 300-350mA.
O diagrama de blocos começou a aparecer assim:

Agora pegamos a pinça, uma folha de papel em nossas mãos e começamos a fazer medições, desenhamos o contorno da placa de circuito impresso e tentamos colocar os componentes nela. Uma grande bateria CR2032 foi abandonada e uma pequena CR1220 (ou 1225) foi usada. Por muito tempo, um chip de ponte H foi selecionado para controlar o motor. A escolha parece ser grande, mas muitos desses microcircuitos não podem funcionar com uma tensão de alimentação de 12V ou usam transistores bipolares com uma queda de tensão muito grande, ou o caso é malsucedido. O chip TB6612 a princípio não chamou minha atenção por um longo tempo e, em seguida, pareceu muito redundante e inconveniente para a solda. Mas no final, eu me concentrei nela - é acessível e barato para Ali. A ponte H é construída em transistores de efeito de campo e pode operar em tensões de até 15 volts. O módulo conversor DC-DC (MP1584EN) foi deixado pelo módulo - acabou por ser simplesmente mais barato em detalhes e foi fácil soldá-lo. O principal, para a confiabilidade, é substituir o resistor de sintonização por um constante (27kOhm - ele fornecerá uma tensão de saída de 3,4 V.) O microcircuito do relógio poderia ser usado em um caso mais compacto, mas havia uma ressalva - eu encomendaria todos os componentes para Ali e havia o risco de obter circuitos falsos ou quebrados. Portanto, no estágio inicial, planejava-se comprar todos os microcircuitos como parte dos módulos acabados e soldar à placa desenvolvida. E nos módulos, o relógio era apenas no caso SO16. De fato, apenas um microcircuito de relógio mostrou-se defeituoso ou falso - sua frequência de quartzo era 32727 com 32768 kHz definido.
Depois de todo o trabalho preparatório, pegamos o KiKad, google um pouco em busca de lugares perdidos, desenhamos alguns componentes e começamos a criar o quadro:

Verificamos imprimindo em uma escala de 1: 1. Anexamos peças e módulos e, se todas as correspondências, preparamos os arquivos Gerber para produção e enviamos para a EasyEda. Após 3 semanas, recebemos 10 lenços fofos e os colecionamos.
Restam 5 na foto, o resto funciona
Montagem do móduloOs furos para os prendedores, é claro, não coincidiram um pouco, alguns dos assentos não saíram como queriam, mas, em geral, o produto, após a montagem e o firmware, funcionou imediatamente. As caudas herméticas foram compradas em Ali, passadas através de um selo de pressão padrão no edifício, e o temporizador do guindaste WiFi obteve sua aparência de fábrica:

Aqui estão alguns guindastes em serviço de combate no país:
Mas então o pensamento continuou novamente. Eu queria mais automação no país, e o módulo acabou sendo bastante compacto e universal. Através da ponte H, você pode facilmente controlar um relé convencional. Para a automação de bricolage, muitos usam Sonoff, mas acontece que eu mesmo não posso fazer nada pior.
E aqui começa a transformação de uma simples torneira de Wi-Fi no que tem o codinome
SHAPEsp - abreviação de
S mart Home, baseado em
Esp 8266. Conforme planejado, isso deve se tornar um módulo universal barato para automação residencial. E tudo isso deve ser confiável e parecer um produto acabado após a montagem em um estojo acessível.
Surpreendentemente, verificou-se que, no caso chinês do Aliexpress em 2DIN, a unidade é boa, o corpo no corpo, o popular conversor HiLink AC / DC 220V / 12V (bem ou seu clone), o relé e o conector de alimentação e, é claro, meu módulo ligeiramente convertido com ESP8266, relógio e ponte H.
Faça três
o módulo pode ser instalado no corpo do guindaste e na caixa do rack DIN E temos:

Mudou levemente a forma do módulo. Adicionei conectores de borda a ele para que ele pudesse ficar na posição vertical no pacote 2DIN. Coloquei LEDs indicadores na extremidade superior do painel, que são visíveis à luz em uma caixa de plástico. Bem, eu espalhei a placa da mídia para o relé e a fonte de energia. Para torná-lo mais barato, tudo isso foi enviado para produção com uma placa:

Montei dois desses protótipos e os coloquei na cabana para controlar a inclusão de convectores para as chegadas do inverno:
Em outro post
Um dos módulos no painel, ao lado de um par de contatores que incluem convectores Mas então ele decidiu melhorá-lo ainda mais e torná-lo mais universal. Para um firmware mais confiável e conveniente, coloquei o esquema de firmware do NodeMcu no módulo. Ele deduziu todos os pinos possíveis e adicionou almofadas de contato para a conveniência de conectar diferentes sensores. Todos os pinos das bordas são colocados em incrementos de 2,54 mm, para que o módulo possa ser inserido na tábua de pão. Naturalmente, testei a conexão do termômetro ds1820, o sensor BME280 combinado e o sensor de umidade no comparador. Aconteceu que, além de um temporizador simples com um relé ou um guindaste, você pode facilmente construir uma estação meteorológica ou, por exemplo, um sistema aquastop. Bem, todos os tipos de outros sistemas de notificação e controle ...
Carregado, desenhou um modelo de seu módulo para Fritzing. Assim, você pode avaliar e girar as várias opções de aplicativos virtualmente:

Um link para o modelo GitHub está na parte inferior do artigo.
Bem, então começa a parte mais difícil - suporte de software para o módulo. Inicialmente, testei e testei tudo com meu esboço bastante simples do Arduino. HTML simples, um pouco de script Java, várias maneiras simples de transmitir dados, apenas a funcionalidade de um timer e alguns sensores que eu preciso. Mas rapidamente ficou claro que não seria tão fácil dominar tudo e tudo no mundo moderno da IoT e da construção de casas inteligentes. E também apenas preguiça (aqui está um smiley sorridente). E às vezes não quero reinventar a roda.
Portanto, foi decidido ver o que há de firmware pronto no qual você pode adicionar suporte ao seu módulo. Como ponto de partida, foram adotados firmwares alternativos para os produtos Sonoff: Sonoff-Tasmota, ESPurna, ESPEasy. A pesquisa pode encontrar análises comparativas desses firmware.
Por exemplo:
https://lobradov.imtqy.com/FOSS-Firmware-comparison-overview/
https://lobradov.imtqy.com/FOSS-Firmware-comparison-developers/
Na realidade, de alguma forma, eu percorri o código-fonte nos repositórios desses firmware com meus olhos; percebi que a maneira mais fácil para mim seria adicionar meu módulo ao firmware do ESPurna. O código do firmware foi razoavelmente estruturado e assumiu inicialmente a adição de novos módulos e funções. No firmware estava a funcionalidade de timer que eu precisava, o Sheduler independente. Além disso, pode ser dito imediatamente, simplesmente descrevendo minha configuração com um relé simples no arquivo hardware.h, obtive uma versão funcional do firmware do relé WiFi.
No entanto, meu módulo tinha uma funcionalidade mais rica e complexa. E foi decidido contribuir com o firmware. Por um lado, é bastante simples - escrevemos funcionalidades e fazemos uma solicitação de recebimento, mas, na realidade, é um processo chato e longo, com nem sempre um resultado positivo ou rápido. Esses são os custos do fato de que a funcionalidade proposta em geral é necessária apenas para mim e minha diretoria desconhecida.
Comecei com o apoio do relógio. No firmware do ESPurna, tudo funcionava através do NTP e da biblioteca Time para o arduino - bem, historicamente, você precisa saber a hora, mas os produtos Sonoff não possuem um relógio autônomo e supõe-se que eles sempre tenham acesso à Internet. Para dar suporte ao relógio RTC, escrevi um módulo simples que, se desejado, substituiu a função de provedor de tempo de NTP puro para NTP + RTC. O princípio era simples - se a sincronização NTP não estiver disponível, tentaremos ler a hora no relógio RTC local. Quando o acesso aos servidores NTP aparece, restauramos a sincronização e, se desejado, sincronizamos o relógio local. Então o relógio do meu módulo entrou no trabalho. A solicitação de recebimento foi aceita rapidamente, mas foi para uma ramificação espurna-rtc separada.
O próximo foi um pedido de recepção trivial. Como medi a tensão de alimentação do conversor DC-DC para rastrear a descarga da bateria, eu precisava monitorar não a tensão de alimentação do módulo ESP8266, mas alguma definida pelo usuário. Que eu projetei como uma solicitação de recebimento "adicione suporte para monitoramento VCC personalizado". Mas esse pedido de alguma forma pairou no ar ... e o desejo de contribuir de alguma forma diminuiu.
Além disso, ficou óbvio que adicionar o seu módulo à lista de dispositivos acabados suportados não será tão fácil - ele tem muitas configurações diferentes possíveis. Portanto, foi decidido simplesmente desenvolver seu fork do firmware. E, se possível e desejar manter a sincronização, faça solicitações pull ou ofereça um cherry-pick no repositório principal de firmware.
Após essa decisão, tudo ficou mais simples. No firmware, o sistema de controle do relé foi parcialmente reescrito. O modo de controle da ponte H foi adicionado e tornou-se mais conveniente em termos de adição de modos de operação de relé personalizados.
Um estudo mais aprofundado do código do firmware mostrou que não é possível refatorá-lo. O estilo de escrever e usar recursos em alguns lugares é muito cruel para um microcontrolador (embora seja bastante inteligente de 32 bits). Por exemplo, o sistema para emitir mensagens de depuração devorou a pilha com grande velocidade, mas, ao mesmo tempo, para não descartar todo o sistema, foi bloqueado quando o tamanho da pilha ficou abaixo de 10kB. Eu reescrevi o código no meu segmento um pouco, para que agora todas as mensagens e solicitações de depuração no console sejam exibidas completamente.
Bem, no momento, um subsistema de cálculo foi adicionado ao firmware
Nascer / pôr do sol e um SunriseSensor virtual, para que você possa construir um relé astronômico simples a partir do módulo SHAPEsp. Será necessário ter coragem e se comprometer com o repositório principal. Eu acho que isso é uma funcionalidade útil.
Aqui está uma história da transformação das idéias de bricolage de um protótipo para um produto quase acabado. Talvez um produto em demanda. O mais surpreendente é que ainda não testei nenhum sistema doméstico inteligente - todos os módulos funcionam para mim de maneira completamente autônoma e são simplesmente acessíveis através de interfaces da Web na Internet. E uma vez comprada, a placa PC OrangePi fica em uma gaveta e está esperando nos bastidores para se tornar um controlador doméstico inteligente.
Lista de links:
- Modelo fritzing e como eu me reuno Eu acho que haverá um layout de circuito e módulo no Kikad
- Firmware de teste simples para o módulo
- Forquilha de firmware ESPurna com suporte ao módulo
- O principal repositório de firmware do ESPurna