Quantas vezes já desejamos ajustar o brilho de uma determinada lampada interna ou externa. Ou para fazer a lâmpada externa brilhar mais para a prática de esportes, ou a interna brilhar menos para que você possa dormir com a lampada ligada sem ela atrapalhar o sono.
No tutorial de hoje aprenderemos a como automatizar sua lampada utilizando a assistente pessoal da Amazon chamada Alexa, onde, utilizando sua voz você poderá comandar a lâmpada a desligar, ligar, e ainda poder controlar o brilho dela.
Se você acompanha nosso blog, você deve ter visto vários tutoriais nossos utilizando a Alexa, e hoje iremos aprender um pouco sobre eletrônica de potência e acrescentar a funcionalidade de dimmerização na tomada ou lâmpada, para controle da potência nos nossos equipamentos.
Essa funcionalidade é extremamente útil para diversos circuitos. Inclusive, é possível controlar a potencia de motores AC, e abordaremos isto no fim deste tutorial.
Este tutorial também pode ser utilizado como fundamentos para fazer um dimmer controlado com o Arduino.
Observação:
Este tutorial será uma sequência direta do tutorial Automação Residencial com a Alexa e o NodeMCU, caso você não tenha visto, leia este tutorial e depois volte aqui.
Para este projeto iremos precisar dos seguintes materiais e serviços:
Para entender a eletrônica por trás deste projeto, antes precisamos explicar um pouco sobre alguns componentes primordiais, que serão novidade para muitos aqui no blog.
O optoacoplador é um componente largamente utilizado para proteger circuitos. Ele faz transmissão de uma parte para outra do circuito sem fios serem conectados fisicamente, apenas com a luz. Isso garante que se aconteça um curto circuito, um surto de tensão, etc, a outra parte está protegida.
O Diac DB3, na eletrônica, é um componente utilizado para lidar com corrente alternada. Normalmente ele funciona como um diodo zener em polaridade reversa, onde ele barra o fluxo de corrente até um determinado nível de tensão. Após este nível de tensão ele permite a corrente passar por ele.
Neste projeto usaremos o foto-diac, que funciona como o DIAC, permitindo a corrente passar por ele, mas além do nível de tensão pré-estabelecido, ele também depende do acionamento por luz internamente, que ocorre quando acionamos o LED dele.
Dessa forma, se não dermos um pulso de luz, ele não permite a luz passar.
O TRIAC é o coração deste circuito. Ele também um tiristor, voltado para controle de cargas em AC, e ele é analogo a um transistor em corrente continua.
Ele possui 3 terminais, onde 2 deles é para deixar a correte AC passar (como o transistor, em DC) e o terceiro é o acionamento. O acionamento do TRIAC deve ser feito em AC para ser efetivo, e a corrente do gate é bastante pequena.
Assim como um transistor pode substituir um relé em DC (corrente continua), um TRIAC consegue substituir um relé em AC (corrente alternada), e a vantagem dele em relação ao relé é que ele pode comutar muito rápido, podendo ser usado como dimmer (que é analogo ao controle PWM, em DC).
No fim deste artigo terá uma série de referências para que você aprenda mais sobre esses novos componentes.
Monte em sua Protoboard o circuito abaixo, com bastante atenção, e abaixo será explicado um pouco do circuito.
A primeira parte para o entendimento é o circuito de ponte de diodo, que pode ser visto aqui:
Este circuito serve para retificar a tensão AC. Isto é, um circuito que possui a tensão alternada, passa a ficar em DC, isto é, passa a funcionar apenas com tensões positiva, como pode ser vista na imagem abaixo:
Dessa forma, podemos utilizar essa nova forma de onda que é obtida nesses pontos indicados no circuito para fazer um detector de cruzamento de zero. Isto é, quando a tensão é literalmente zero, ou igual ao neutro.
Para fazer o circuito para detectar o zero é bem simples. Basta utilizar um resistor no optoacoplador para limitar a corrente no LED (já que a tensão da rede chega a picos de 180V). Para fazer o calculo, basta pegar o pico, que é 180V, e dividir pela corrente máxima admitida no LED do optoacoplador.
Segundo o datasheet do produto, a corrente máxima é de 60mA. Fazendo as contas, o resistor deverá ser de no mínimo 3K.
Para ficar em uma margem segura e aumentar a vida útil do componente, e reduzir a potencia dissipada no resistor, iremos usar um resistor equivalente de 25K.
O leitor mais observador vai perceber que não usamos de fato um resistor de 25K, e sim 4 resistores de 100K em paralelo, cujo a resistência equivalente é de 100k.
Nós fizemos isso porque para utilizar apenas um resistor, ele precisará ser um resistor maior (chamado resistor de potencia), já que a potência ficará na casa dos 0,6W para um resistor de 25K. Caso tivessemos optado por um resistor de 3K, a potencia dissipada no resistor seria superior a 5W, e precisaria ser um resistor enorme. Por isso a importância de saber dimensionar corretamente os componentes.
O custo de dimensionar o resistor com este valor, será que o brilho do LED será menor, e a informação poderá sofrer distorções do outro lado. Para corrigir isso, usaremos um resistor de maior valor no fototransistor do optoacoplador, para que ele consuma pouca energia no resistor, e assim possamos obter um sinal melhor.
O funcionamento básico é: Enquanto o LED estiver brilhando, ele enviará 0V para o outro lado. Quando o LED apagar, o outro lado terá VCC, que é a alimentação do outro lado, como analogo a este circuito abaixo.
Dessa forma conseguimos criar um detector de cruzamento de zero, uma vez que a informação só será passada quando o sinal da rede estiver muito proximo a GND.
O próximo ponto deste circuito é enviar essa informação ao NodeMCU, e fizemos isso nessa etapa aqui:
Onde o jumper branco tem a função de transmitir essa informação dos pulsos que diz quando o zero da rede foi detectado.
Por que isso é importante saber quando o zero foi detectado? È importante porque o acionamento do TRIAC precisa ser feito sempre sincronizado em relação ao zero, para que a carga seja homogenea. Uma caracteristica do TRIAC é que uma vez acionado, ele só “desarma” quando a tensão passa pelo zero. Por isso, não é possível fazer como no PWM e funcionar com várias frequencias específicas. Aqui, o circuito só funcionará com uma frequencia especifica, que é definida pela frequencia da rede. E por isso é importante saber a detecção do zero.
Após saber a detecção do zero, é hora de acionar o DIAC para que ele acione o TRIAC. Essa parte do circuito está aqui:
Onde o jumper roxo está ligado na porta do ESP que faz o acionamento do MOC3021, e o MOC3021 dispara o TRIAC. Por que não podemos acionar o TRIAC diretamente? Porque o TRIAC é sempre acionado em AC.
Como precisamos regular a corrente que vai fazer o disparo no Gate do TRIAC, precisamos colocar um resistor para limitar essa corrente. Neste projeto utilizamos um resistor de 1K, mas outros valores são admitidos.
E assim funciona o projeto, onde a gente “ceifa” a senóide de entrada para que a potencia na carga reduza da forma que quisermos.
Um detalhe importante é saber que sabendo o zero, calcular o fim do ciclo é bastante fácil, uma vez que a frequencia da rede no Brasil é de 60Hz, e que a cada ciclo a senóide passa pelo zero 2 vezes, o tempo entre um zero e outro é de 8333 microssegundos, assim iremos manipular o NodeMCU para disparar o TRIAC em tempos especificos após a detecção do zero, e assim controlaremos a placa.
O primeiro passo a se fazer é, no site da Sinric Pro e fazer login (ou criar uma conta, caso você não possua).
Na aba “dispositivos”, adicione um novo dispositivo e coloque o nome dele da sua escolha. O meu foi escolhido como “Lampada”.
O mais importante é o tipo do dispositivo. Escolha o tipo “Switch with Dimming”.
Utilize as configurações do outro post, e termine de adicionar o dispositivo.
Obtenha o suas credenciais de API Sinric, e o ID do dispositivo, e coloque no código abaixo, e carregue para a sua placa NodeMCU.
Para entender o melhor entendimento do código, deixei uma série de comentários no código.
/* * Quando for copiar, dê os creditos a Eletrogate * Gustavo Nery - Eletrogate * Créditos a Sinric por disponibilizar o exemplo de chamada ao servidor */ #include <ESP8266WiFi.h> #include <SinricPro.h> #include <SinricProDimSwitch.h> #define WIFI_SSID "Coloque_Aqui_o_nome_do_seu_WiFi" #define WIFI_PASS "A_Senha_do_seu_WiFi" #define APP_KEY "Coloque aqui a chave do app, que você acha lá no site do Sinric Pro" // O seu App Key é algo como "de0bxxxx-1x3x-4x3x-ax2x-5dabxxxxxxxx" #define APP_SECRET "Coloque o senha do app, está na parte de credenciais" // O seu App Secret é algo como "5f36xxxx-x3x7-4x3x-xexe-e86724a9xxxx-4c4axxxx-3x3x-x5xe-x9x3-333d65xxxxxx" #define LAMPADA_ID "Copie e cole aqui O ID do seu dispositivo" // Algo como "5dc1564130xxxxxxxxxxxxxx" #define BAUD_RATE 115200 // CONFIGURE O SEU SERIAL PARA 115200 #define Disparo 12 // Pino que fará o acionamento do triac #define Detector 14 // Pino que fará a detecção de cruzamento de zero volatile int ajuste = 0; volatile bool Aux = 0; unsigned long time1; // A estrutura para guardar todos os estados e valores de ajuste do Dimmer. struct { bool powerState = false; int powerLevel = 0; } device_state; bool onPowerState(const String &deviceId, bool &state) { Serial.printf("O dispositivo %s esta %s \r\n", deviceId.c_str(), state ? "ligado" : "desligado"); device_state.powerState = state; device_state.powerState == 0 ? ajuste = 0 : ajuste = device_state.powerLevel; return true; // request handled properly } bool onPowerLevel(const String &deviceId, int &powerLevel) { device_state.powerLevel = powerLevel; Serial.printf("O nivel do dispositivo %s foi alterado para %d\r\n", deviceId.c_str(), device_state.powerLevel); ajuste = device_state.powerLevel; return true; } bool onAdjustPowerLevel(const String &deviceId, int &levelDelta) { device_state.powerLevel += levelDelta; Serial.printf("O nivel do dispositivo %s foi alterado para %i to %d\r\n", deviceId.c_str(), levelDelta, device_state.powerLevel); ajuste = device_state.powerLevel; levelDelta = device_state.powerLevel; return true; } void setupWiFi() { Serial.printf("\r\n[Wifi]: Conectando"); WiFi.begin(WIFI_SSID, WIFI_PASS); while (WiFi.status() != WL_CONNECTED) { Serial.printf("."); delay(250); } IPAddress localIP = WiFi.localIP(); Serial.printf("Conectado!\r\n[WiFi]: O endereço IP e %d.%d.%d.%d\r\n", localIP[0], localIP[1], localIP[2], localIP[3]); } void setupSinricPro() { SinricProDimSwitch &meuDimmer = SinricPro[LAMPADA_ID]; meuDimmer.onPowerState(onPowerState); meuDimmer.onPowerLevel(onPowerLevel); meuDimmer.onAdjustPowerLevel(onAdjustPowerLevel); SinricPro.onConnected([]() { Serial.printf("Conectado ao servidor SinricPro\r\n"); }); SinricPro.onDisconnected([]() { Serial.printf("Disconectado do servidor SinricPro\r\n"); }); SinricPro.begin(APP_KEY, APP_SECRET); } void setup() { Serial.begin(BAUD_RATE); Serial.printf("\r\n\r\n"); // Iniciando a comunicação Serial pinMode(Detector, INPUT_PULLUP); // Setando o Detector como entrada pinMode(Disparo, OUTPUT); // Saída para controle do disparo attachInterrupt(digitalPinToInterrupt(Detector), interrupt, RISING); // Configurando a interrupção setupWiFi(); // Configurações padrões da Sinric setupSinricPro(); } void loop() { if (Aux && ((micros() - time1) >= (100 - ajuste) * 76)) { // Controle do tempo de disparo do TRIAC digitalWrite(Disparo, HIGH); // Dispara o TRIAC attachInterrupt(digitalPinToInterrupt(Detector), interrupt, RISING); // Ligando a interrupcao novamente (isso desabilita o timer) Aux = 0; SinricPro.handle(); // Uma chamada para o servidor Sinric para obter o valor de ajuste } } ICACHE_RAM_ATTR void interrupt() // Rotina de interrupcao { digitalWrite(Disparo, LOW); // Desliga o pino de disparo para que so ligue depois do tempo determinado detachInterrupt(digitalPinToInterrupt(Detector)); // Desativa a interrupcao para que seja possivel usar o timer time1 = micros(); Aux = 1; }
Após carregar a placa, abra o seu app Amazon Alexa e atualize os dispositivos Sinric. até aparecer o dispositivo novo.
Após isso, energize o circuito.
ATENÇÃO: ESTE CIRCUITO TRABALHA COM A TENSÃO DA REDE. VERIFIQUE BEM O CIRCUITO ANTES DE ENERGIZAR, E FAÇA TESTES PRÉVIOS. SE VOCÊ FOR CRIANÇA OU NÃO POSSUIR EXPERIÊNCIA, PEÇA AJUDA DE UM PROFISSIONAL. A TENSÃO DA REDE É PERIGOSA E PODE CAUSAR ACIDENTES SEVEROS.
Após o carregamento, seu circuito deverá se comportar como o meu no vídeo.
A resposta é não. Neste vídeo estou usando uma lâmpada incandescente.
Qualquer lâmpada incandescente pode ser utilizada, e existem lâmpadas halogenas e de LED que são dimerizáveis.
Comprar uma lampada dimerizável é bem simples, basta pesquisar por: lâmpada dimerizável, que você terá um resultado como este, que encontrei na Amazon.
Para utilizar motor basta incluir na etapa entre o MOC3021 e o TRIAC estes componentes.
Os capacitores irão fazer a regulação para que a tensão da rede não sofra oscilações do motor e prejudique a medição na detecção de zeros.
Dessa forma, você poderá incluir agora no controle: ventiladores, maquinas rotativas, etc.
De forma alguma utilize este circuito como um transformador, para fazer um circuito eletronico 220V se comportar como 127V, como um computador, por exemplo, porque como foi visto lá em cima, este circuito não rebaixa a tensão, e sim faz “cortes” na senóide da rede.
Dessa forma, diversos circuitos eletrônicos são extremamente sensíveis e poderão ser danificados com essa metodologia.
Hoje aprendemos algo bem legal, que é fazer o controle inteligente da iluminação de casa com a Alexa.
Você pode agragar este conhecimento e automatizar a sua casa de uma forma bastante interessante, com sua iluminação inteligente.
Caso tenha gostado do post de hoje, e resolveu montar, grave um vídeo e nos marque lá no Instagram: @eletrogate
Caso tenha ficado alguma dúvida ou queira fazer uma correção, utilize os comentários abaixo. Não esqueça de avaliar o post.
Muito obrigado por ler até aqui, abraços!
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!