A Automação seja ela residencial ou industrial é uma área que vem sendo bastante explorada neste século, sistemas robóticos e outras tecnologias vieram para dar confiabilidade, agilidade e eficácia em todos os processo da industrial.
Nas residências a automação contribui no conforto e no bem-estar diário de quem depõem dessas tecnologias.
Este projeto tem como objetivo criar um circuito DIMMER, capaz de variar a intensidade de luz em um ambiente conforme preferência do usuário através de toques em um sensor touch capacitivo.
Irá funcionar assim:
– 2 toques no sensor desligam os LED’s
– 3 Toques no sensor ligará os LED’s com intensidade máxima.
– Ao manter o dedo no sensor touch, o display mostrará a subida gradativa em porcentagem da luminosidade 0 – 100%.
Montando o projeto
Para o desenvolvimento desse projeto será necessária uma placa Arduino Uno, onde ela será responsável por receber os sinais do Sensor Touch Capacitivo TTP23b e controlar o microcontrolador para variação na saída PWM.
O sinal PWM do Arduino Uno irá controlar a base de um transistor BD135 que com sua variação de corrente controlará a intensidade de luz dos 5 x LED’s de Alto Brilho.
Uma fonte externa será necessária neste projeto, uma fonte +12V que será conectada aos LED’s.
Componentes Utilizados:
– Sensor Touch Capacitivo TTP23b
– Display LCD 16×2 BackLight Azul
– Transistor BD135
A montagem do protótipo pode ser observada pela figura abaixo:
OBS: O Plug preto POWER JACK na figura acima representa a fonte externa de +12V
Inicialmente vamos ligar o display LCD aos pinos do Arduino conforme imagem acima, os pinos digitais de 2 ao 7 são de controle do LCD (demonstrados com fios de cor amarela), Alimentação 5V e GND são ligados em comum ao Arduino. O display também necessita de um potenciômetro de 10k para ajuste de contraste conforme acima.
O Sensor Touch tem sua alimentação +5V e a saída de sinais será conectada no pino 8 do Arduino Uno.
Os LEDs serão ligados em paralelo tendo sua corrente limitado por um resistor de 220 ohms com potência de 1W.
Abaixo também temos na prática a visão do protótipo montado:
O vídeo demonstrando o funcionamento desse projeto pode ser acessado pela página no Instagram:
Laboratório dos Fundos
https://www.instagram.com/laboratorio_dosfundos/
Desenvolvendo o código
Após montagem do hardware, prosseguimos para o código onde receberá os sinais do sensor touch controlando assim a saída PWM e o display LCD.
O Código como pode ser observado abaixo, será carregado para o microcontrolador ATMEGA328 do Arduino:
#include <LiquidCrystal.h> // inclui a biblioteca LiquidCrystal #define pwm 9 // define o pino 9 com o nome pwm #define touch 8 // define o pino 8 com o nome touch #define tempoMaximoDeUmToque 200 // milisegundos #define tempoMaximoEntreToques 400 // milisegundos int count; // cria a variavel count int int contaToques = 0; // cria a variavel contaToques int long tempoEspera = 0; // cria a variavel tempoEspera long long tempoEsperaEntreToques = 0; // cria a variavel tempoEsperaEntreToques long void executarAcao(); LiquidCrystal lcd ( 7, 6, 5, 4, 3, 2); // define os pinos para comunicação dodisplay lcd void setup() { pinMode(pwm, OUTPUT); // define o pino pwm como saída pinMode(touch, INPUT); // define o pino touch como entrada lcd.begin(16,2); // inicia a comunicação com o lcd lcd.setCursor(0,0); lcd.print(" DIMMER TOUCH"); // escreve no lcd DIMMER TOUCH } void loop() { int sensortouch = digitalRead(touch); //verifica o estado do sensor touch if (sensortouch == HIGH) { //se o sensor detectou toques, executa o codigo abaixo //espera um tempo para nao detectar o mesmo toque mais de uma vez if (tempoEspera == 0) { tempoEspera = tempoEsperaEntreToques = millis(); contaToques++;} else if ((millis() - tempoEspera) >= tempoMaximoDeUmToque) { tempoEspera = 0;} } //caso exceda o tempo maximo entre toques, zera o contador de toques if ( (contaToques != 0) && ((millis() - tempoEsperaEntreToques) > tempoMaximoEntreToques) ) { executarAcao(); contaToques = 0; tempoEsperaEntreToques = millis(); } lcd.noBlink(); // desativa o blink no cursor do display // se o touch for mantido prescionado, executa o código abaixo if(sensortouch == HIGH ){ lcd.display(); // liga o display lcd.setCursor(0,1); lcd.print(" "); // limpa os caracteres do display analogWrite(pwm,count); // escreve no formato pwm a saída do pino 9 count++; // contador para subir o nivel pwm até 250 lcd.set<strong><em> </em></strong>Cursor(0,1); lcd.print(count * 0.4); // converte o nivel pwm 250 para porcentagem % lcd.setCursor(4,1); lcd.print("%"); lcd.setCursor(15,1); lcd.blink(); // ativa o blink no cursor do display delay(30); // delay if (count == 250){ // se pwm estiver em 250 ou 100% no display, zera o contador count = 0; lcd.setCursor(1,1); lcd.print(" "); // limpa caracteres no display }} } void executarAcao() { switch (contaToques) { // verifica a variavel contaToques case 2: // caso 2 toques lcd.noBlink(); digitalWrite(pwm, LOW); // leva nivel baixo para saída lcd.setCursor(0,1); lcd.print("LED OFF "); // escreve LED OFF no display delay(2000); // delay lcd.noDisplay(); // desliga display break; case 3: // caso 3 toques lcd.noBlink(); digitalWrite(pwm, HIGH); // leva nivel alto para saída lcd.setCursor(0,1); lcd.print("LED ON "); // escreve LED ON no display break; } }
Você pode consultar, baixar, modificar e compartilhar o código deste tutorial em nosso repositório do GitHub! E lá você encontra todos os códigos já publicados aqui no blog! Venha compartilhar conhecimento com toda a comunidade maker!
Mergulhando no Projeto
Software
Inicialmente iremos incluir a biblioteca LCD <LiquidCrystal.h>.
Logo após, são nomeados os pinos os pinos utilizados neste protótipo e criada variáveis para armazenamento e controle dos comandos.
tempoMaximoDeUmToque e tempoMaximoEntreToques atuam em conjunto e podem ser re-calibrados posteriormente para melhor intervalo de toques no sensor.
Essa série de definições e inclusões terminam com o mapeamento dos pinos utilizados no display LCD LiquidCrystal lcd ( 7, 6, 5, 4, 3, 2).
Função Setup
Na função setup iremos definir as portas onde conectados a base do transistor (PWM) como saída e o sinal do sensor touch como entrada (pinMode(pwm, OUTPUT) e pinMode(touch, INPUT)).
Em lcd.begin(16,2) inicia-se a comunicação com o display LCD e escreve na linha 1 do display a palavra “DIMMER TOUCH” com lcd.print(” DIMMER TOUCH”).
Função Loop
A função loop já inicia criando a variável sensortouch armazenando nela uma possível mudança de estado do sensor touch, caso ele venha a ser pressionado
int sensortouch = digitalRead(touch);.
if (tempoEspera == 0) e if ( (contaToques != 0) && ((millis() – tempoEsperaEntreToques) > tempoMaximoEntreToques) ) atuam em conjunto.
Como o loop do programa acontece mais rápido que o toque no sensor touch esses artifícios serão necessários para que o sistema não detecte o mesmo toque mais de uma vez.
Caso o tempoMaximoEntreToques exceda, a contagem dos toques é zerada, o programa já está configurado para o intervalo ENTRE toques de 400 milissegundos e tempoMaximoDeUmToque de 200 milissegundos (tempo que o dedo permanecerá pressionando o touch no momento do toque).
Ainda na função Loop , além das contagens dos toques o código sequente atua quando o dedo é permanecido no touch.
Está parte do código pergunta novamente se if(sensortouch == HIGH ).
Caso for verdade o sistema conclui que o sensor touch continua pressionado e a intensão do usuário não é de apenas toques e inicia uma série de comandos.
Mantendo pressionado o sensor touch o nível da saída PWM pino 9 irá subir até o seu valor máximo de 250 que deixa a intensidade dos LED’s no hardware máxima.
analogWrite(pwm,count);
count++;
if (count == 250)
count = 0;
Ao mesmo tempo o display indica esta intensidade em porcentagem para o usuário através da fórmula lcd.print(count * 0.4);.
Voltando ao comando dos toques eles são contados e armazenados na variável contaToques e definidas as ações na função void executarAcao() como mostrado abaixo:
case 2: // caso 2 toques
digitalWrite(pwm, LOW);
lcd.print(“LED OFF “);
case 3: // caso 3 toques
digitalWrite(pwm, HIGH);
lcd.print(“LED ON “);
Hardware
Sensor Touch Capacitivo TTP23b
Este Sensor Touch capacitivo TTP223B foi baseado no CI TTP223B, um componente capaz de detectar toques. Seu funcionamento é bem simples: ao tocar a região indicada, a saída do sensor é ativada. Sem tocar o sensor, não há atividade na saída. Assim o componente funciona como um sensor de toque.
Pinagem:
– SIG: Saída Digital
– VCC: 2,5 – 5V
– GND: GND
Display LCD 16×2 BackLight Azul
O Display LCD 16×2 possibilita e interação do programa com o usuário.
As mensagens podem ser enviadas simultaneamente com o processamento no programa possibilitando assim o envio de dados, texto e sinais lidos nas entradas do microprocessador. O LCD possui 16 colunas e 2 linhas com luz de fundo azul e escrita branca.
Pinagem:
Conclusão
Podemos por esse projeto aprender um pouco mais sobre sistemas de automação residenciais, podendo criar um DIMMER. Esta aplicação pode ser implementada com outros sensores e comandos visando até um controle total de uma residência quando visado sua parte elétrica.
Deixem suas sugestões e perguntas, compartilhe conhecimento!
Referências
Datasheet Transistor BD135
https://www.onsemi.com/pub/Collateral/BD135-D.PDF
Muito legal para mim tudo novidade é muita vontade de conhecer cada vez mais e parabéns por disponibilizar está informações para todos
Que bom que gostou do tutorial. Estamos um pouco parados, mas teremos novidades em breve!