Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Tenho trabalhado na criação de sensores de movimento caseiros que enviam uma mensagem de e-mail quando acionados. Existem muitos exemplos de instructables e outros exemplos de como fazer isso. Recentemente, precisei fazer isso com um sensor de movimento PIR operado por bateria e um ESP-01. O ESP-01 é muito funcional e tem todos os recursos necessários, então por que não usar o mínimo e menos caro necessário? Adicionado à mistura foi outro módulo ESP-01 separado e remoto que acionou uma campainha quando o sensor de movimento foi acionado.
O código e o eventual layout do circuito foram reunidos de várias fontes na web e não acho que posso identificá-los especificamente. A ideia de enviar e-mails via gmail veio de uma fonte instrutível e de outras fontes e o código final é um amálgama dessas fontes. O sono profundo para trabalhar me levou a muitos caminhos que muitas vezes se revelaram infrutíferos. O engraçado é que, uma vez que um caminho se mostra fecundo, você para de procurar mais caminhos. Por isso, agradeço a todos aqueles que contribuíram para o meu sucesso e ainda são desconhecidos.
Tive o mesmo problema para fazer o sensor PIR funcionar no disparo do sono profundo ESP-01. Muitos caminhos até que houvesse um que funcionasse.
Desnecessário dizer que houve alguns obstáculos interessantes ou talvez mais relevantes, um melhor entendimento da eletrônica que eu precisava. Você continua aprendendo até que algo funcione e então você não precisa mais aprender.
O ESP-01 tem sono profundo, bem como qualquer outro módulo ESP8266, desde que você não precise de um sono cronometrado. Se você deseja que o módulo seja ativado após um determinado período de tempo decorrido, o ESP-01 não é o módulo a ser usado. Mas não era isso que eu queria. O tempo decorrido não faz sentido ao usar um PIR. Eu queria que o ESP-01 acordasse apenas quando acionado pelo movimento detectado pelo PIR. Se nenhum movimento for detectado por horas ou dias, o ESP-01 permanece inativo usando o mínimo de energia da bateria.
Você verá muitos circuitos que usam GPIO16 conectado ao ESP8266 Reset porque GPIO16 é o sinal de ativação. Isso é verdade, mas é o sinal de despertar do sono cronometrado. Podemos ignorar esse PIN, o que é bom porque ele não está disponível no ESP-01.
Basicamente, tudo o que precisamos é obter o sinal do PIR para acionar o pino de reinicialização do ESP-01. A primeira dificuldade que você vai supor é que o Reset é disparado em um sinal LOW e o PIR envia um sinal HIGH quando disparado. A reinicialização também precisa ser HIGH ou flutuante na inicialização. Então, para manter isso curto, depois de tentar alguns circuitos diferentes, decidi usar um transistor NPN com um resistor pull-up para manter o pino RESET HIGH durante a inicialização. A saída do PIR é mínima, mas fornece corrente de base suficiente para ligar o transistor.
Como você verá no diagrama de circuito abaixo, o ESP-01 foi despertado do sono profundo toda vez que o PIR detectou movimento.
Mas havia outro problema. O reset do ESP-01 só aconteceu depois que o PIR parou de detectar movimento e voltou a um sinal baixo desligando o transistor e retornando o pino de reset para HIGH por causa do resistor pullup. Isso significaria que o e-mail não seria enviado, nem a campainha seria ativada até DEPOIS que o PIR parasse de detectar movimento. Eu queria que o gatilho acontecesse assim que o movimento fosse detectado.
O que eu determinei a partir desse comportamento é que o ESP-01 realmente dispara na borda de subida do sinal. Manter o pino Reset no aterramento não ativa o ESP-01 do sono profundo, mas no momento em que a tensão sobe para o sinal HIGH, a reinicialização acontece.
Minha resposta muito simples para esse comportamento foi adicionar um capacitor à linha entre a saída do PIR e a base do transistor. Isso fez com que o transistor só ligasse enquanto o capacitor estava carregando. Uma vez carregado, não havia mais corrente e o transistor desligou. O resistor de 5k permite que a corrente seja drenada para o aterramento. Testei isso com um LED no lugar do ESP-01 e pude ver o LED piscar por uma fração de segundo antes de desligar. Este pequeno pulso foi suficiente para puxar o pino de Reset para o solo momentaneamente e por tempo suficiente para acionar o Reset do sono profundo.
Etapa 1: Módulo de Sono Profundo ESP-01
O módulo de sono profundo usa duas tensões de trabalho. O 5v + aleatório da bateria para o PIR e também uma placa reguladora de 3,3 volts para o ESP-01. Eu também incorporei um diodo no circuito para evitar peças danificadas por tensões reversas. Isso usa um pouco de energia extra e diminui a tensão da bateria em 0,7 volts. O diodo pode ser deixado de fora do circuito se você tiver certeza de que nunca inverterá os cabos da bateria. Um switch também é adicionado por conveniência.
Este módulo é uma pequena atualização do meu layout original de sono não profundo. Na configuração de sono não profundo, o PIR é conectado diretamente ao pino RX do ESP-01. Estou usando o pino RX do ESP-01 como o pino de entrada do PIR por alguns motivos. O GPIO0 não funcionou porque na inicialização o PIN de saída do PIR seria BAIXO, fazendo com que o ESP-01 entre no modo flash. Não usei o GPIO2 porque não poderia usar o LED integrado para feedback visual. Os pinos RX e TX são frequentemente descritos como pinos IO extras, mas minha experiência é que RX é um pino INPUT extra e TX é um pino OUTPUT extra.
Na configuração de sono profundo, a conexão RX não é estritamente necessária. Estou usando-o apenas para monitorar por quanto tempo o PIR é acionado ligando o LED enquanto a entrada está HIGH. Como mencionado antes, se você limpar a função de loop e usar apenas a rotina de configuração, a conexão RX será desnecessária.
Aqui está a lista de peças para o módulo de sono profundo ESP-01:
Placa de protótipo PCB de 1 - 5 x 7 cm
Conector de 1 - 2 pinos
2 - 1 x 3 cabeçalhos femininos
1 - AMS1117 - 3.3 placa de circuito regulador de tensão
1 - pino de cabeçalho macho de ângulo reto 1 x 3
1 - 1 pino de conector fêmea de 3 x 3
1 - 1 x 4 pino de encaixe fêmea
Cabeçalho feminino 1 - 2 x 4
Capacitor 1 - 1uf
1 - Sensor de movimento PIR HC-SR501
1 - 2N2222 Transistor
1 - Resistor de 10k
1 - Resistor de 4,7k
1 - 1k resistor
1 - diodo 1N4148
1 - switch SS12D00G4 SPDT
1 - ESP-01
1 - Pacote de bateria 4AA
Observe que no vídeo a placa de circuito usa um adaptador de placa de ensaio ESP-01 em vez do conector 2 x 4. Embora este adaptador seja mais fácil de soldar, o conector 2 x 4 funciona bem e se encaixa melhor.
Etapa 2: Código de sono profundo ESP-01
O código Deep Sleep executa duas funções. Envie uma mensagem de e-mail (via gmail como padrão) e envie uma solicitação da web http para o módulo de campainha ESP-01 associado para acionar a campainha.
Quando acionado, este módulo oferece duas opções de notificação e pode ser especialmente útil quando você não está prestando atenção às mensagens de e-mail.
Você precisará atualizar seis linhas de código com seus valores específicos para fazer o esboço funcionar:
const char * ssid = "xxxxx"; // Seu WiFi SSIDconst char * password = "xxxxx"; // Sua senha WiFi String Senders_Login = "xxxxx"; // login do provedor de e-mail String Senders_Password = "xxxxx"; // a senha do seu provedor de e-mail
Para = "xxxxxx"; De = "xxxxxx"; // Gmail geralmente prefere que seja o mesmo que Senders_Login e pode substituir
Descobri que o módulo de sono profundo funcionou de forma imprevisível quando o sensor PIR foi definido para menos de 10 segundos para a duração do evento de disparo. Eu tenho o meu definido para 20 segundos. Isso tem se mostrado muito confiável, mas também significa que os eventos de disparo podem acontecer com essa frequência.
Também adicionei um código à função de loop para manter o led ESP-01 aceso enquanto o PIR ainda estiver detectando movimento. Todo o código na função de loop pode ser removido e a chamada para o sono profundo movida para o final da função de configuração.
Eu uso a função de piscar para um indicador visual de atividade com o módulo ESP-01.
Embora eu tenha usado e testado a conectividade com o gmail, outros provedores de e-mail também funcionam. Eu tentei alguns. Na verdade, eu achei o gmail mais problemático. O Gmail requer que você tenha sua conta configurada para acesso por aplicativos menos seguros. Esta configuração de conta está DESATIVADA por padrão, portanto, certifique-se de encontrá-la e alterá-la para menos segura. O Gmail NÃO funcionará de outra forma.
Se você optar por ter mais de um módulo de campainha, basta adicionar chamadas extras do cliente http (repita as três linhas de código, mas altere o endereço IP usado e também defina a variável httpCode como int uma vez!
Observe que o endereço IP da campainha está codificado neste módulo. Você não precisa usar o endereço IP que escolhi, mas precisa combinar o endereço IP da chamada da web neste módulo com o endereço IP da configuração do servidor da web no próximo módulo.
Etapa 3: Módulo Buzzer ESP-01
O módulo de campainha tem uma configuração bastante simples. Ele usa um conector USB em vez de uma bateria porque não acho que este módulo seja adequado para uma bateria. Ele deve permanecer ligado e conectado em rede / wi-fi o tempo todo, porque nunca sabe quando uma solicitação da web será feita. Isso requer mais energia contínua do que as baterias são úteis.
Módulos de campainha podem ser colocados convenientemente em vários locais, fornecendo notificação de um evento de acionamento do sensor de movimento, não importa onde você esteja!
O buzzer é conectado aos 5v do conector USB e há outra placa reguladora de 3,3v que fornece energia para o ESP-01.
O módulo de campainha funcionará usando TX, GPIO0 ou GPIO2 para a saída. Na minha configuração estou usando GPIO0. (Na imagem do módulo, o fio está conectado ao GPIO2, mas eu o movi desde então.) Embora o GPIO0 não funcione para o módulo de hibernação (como INPUT), ele funciona bem com esse layout como OUTPUT. Não é puxado para o solo na inicialização, o que causará problemas. Eu usei GPIO2, mas não pude usar o LED integrado para qualquer feedback, mas usando GPIO0 para OUTPUT posso usar o LED integrado.
Tentei usar um transistor NPN para alimentar a campainha do circuito quando o ESP-01 colocou um sinal HIGH no pino GPIO0, mas os resultados foram terrivelmente inconsistentes. A campainha parecia querer tocar o tempo todo, mesmo com pouca energia. Então, em vez disso, usei um MOSFET de canal N (2n7000) e o resultado foi excelente. O pino IO aciona o Gate conforme necessário.
Embora precisemos apenas de dois pinos do conector USB Vcc (+) e Gnd (-), eu uso um conector de 5 pinos para conectar à placa PCB para estabilidade extra e para soldar antes de conectar o USB ao regulador. Minha placa reguladora de 3.3v veio com os pinos pré-instalados e em minha mente, de cabeça para baixo. Então, para colocar o regulador nos pinos do conector, você pode ver que a placa de circuito está oculta, mas pior do que isso, vcc e gnd no regulador estão invertidos de vcc e gnd no conector USB. Então os fios se cruzam.
Observe também que a alimentação + para a campainha ativa vem dos 5v do USB. Além disso, um conector de soquete fêmea de 4 pinos funciona bem com o posicionamento dos pinos da campainha.
Lista de peças do módulo de campainha ESP-01:
Placa de 1 - 5 x 7 PCB
1 - Mini conector USB com cabeçalhos de pinos (7 pinos)
2 - 1 x 3 cabeçalhos femininos
1 - placa reguladora de tensão AMS1117-3,3 V
Cabeçalho feminino 1 - 2 x 4
2 - 1 x 4 conectores de soquete fêmea
1 - 2N7000 N-channel MOSFET
1 - resistor de 10 ohms
Campainha ativa de 1 - 5v
Etapa 4: Código do Módulo Buzzer ESP-01
O módulo de campainha atua como um servidor da web ESP-01 simples. Ele responde com uma mensagem simples a uma solicitação de root e, quando recebe a solicitação de buzz, aciona a campainha. GPIO0 é usado para o pino GPIO para o sinal da campainha.
Observe que o ESP-01 está configurado com um endereço IP codificado. Isso é necessário para que o módulo de hibernação seja acoplado ao endereço da campainha.
Como no módulo anterior, você terá que atualizar duas linhas de código com seus valores específicos:
// SSID e senha do seu roteador WiFiconst char * ssid = "xxxxxxx";
const char * password = "xxxxxxxx";
Se você tiver vários módulos de campainha criados, cada um deve ser carregado com seu próprio endereço IP exclusivo.
Você também pode adicionar diferentes métodos de campainha que produzem diferentes melodias de campainha. Por exemplo, se você tiver um sensor PIR na porta da frente e outro na porta dos fundos, cada um deles pode fazer uma solicitação da web para cada um dos seus módulos de campainha, mas um sensor pode ter um esboço que chama buzz e o outro esboço pode chamar buzz2 para que você possa dizer pelo som qual sensor foi acionado. E assim por diante! A função buzz2 não existe, apenas copie a função buzz e altere os valores de atraso.
Para o servidor da web, você só precisa adicionar uma linha de código como esta:
server.on ("/ buzz2", buzz2);
Etapa 5: considerações finais
Este é meu primeiro instrutível, então posso ter perdido algumas coisas práticas que deveria ter incluído. A placa reguladora AMS1117-3.3 que usei inclui um minúsculo LED que acende quando ligado. Para o módulo de sono profundo, eu não queria que este led estivesse aceso e drenando energia desnecessariamente. Então, tirei a solda de um lado do led do quadro e usei uma faca para cortar a linha de traço. Foi mais fácil do que pensava e evita que o LED acenda. Não fui capaz de determinar qual é o consumo de energia quando o ESP-01 está em sono profundo, mas posso ter uma resposta em algumas semanas. Um colega meu estava executando o sensor (não em sono profundo) e encontrou as baterias descarregadas (5AA) em cerca de uma semana. Acho que essa configuração deve dar um mês ou até mais. Veremos.
O módulo de hibernação custou cerca de $ 8 CDN em peças (baterias não incluídas!) E o módulo de campainha $ 5.