Ligando e Desligando TV por Aproximação utilizando Sensor Ultrasônico HC-SR04

Antes de dar continuidade a este tutorial, vc deve ler meu outro post –  Clonando Qualquer Controle Remoto

Vamos utilizar para o nosso projeto o famoso Sensor Ultrasônico, mas vamos entender o seu funcionamento.

Quem nunca ouviu na escola como o Morcego consegue perceber algum obstáculo ou insetos a sua frente?

Se vc pensou em Ondas Ultrassônicas, está correto. Esse mamífero consegue emitir essa onda ou pelas narinas ou pela boca, dependendo da espécie. Essas ondas ao encontrar um obstáculo, bate e volta em forma de ecos para o morcego, que percebe o obstáculo a frente.

Basicamente é o que o Sensor Ultrasônico faz, ele emite ondas e calcula o tempo que ela demora para voltar, como sabemos que distância é a velocidade vezes o tempo, fica fácil calculá-la.

O Sensor Ultrasônico HC-SR04, tem 4 pinos:

VCC – 5 volts

TRIG – Envia o pulso

ECHO – Recebe o pulso

GND – Terra

Para fazer funcionar no arduino, devemos primeiramente fazer o download da biblioteca Ultrasonic, para isso clique AQUI.

Se tiver duvida de como instalar a biblioteca, clique AQUI.

Monte o seguinte esquema:

Instalada a biblioteca, cole e rode o seguinte código:

#include <Ultrasonic.h>
//Define os pinos trig e echo:
int pin_trig = 12; //envia o pulso
int pin_echo = 11; //recebe o pulso
//Cria-se o objeto:
Ultrasonic ultrasonic(pin_trig, pin_echo);

void setup(){
Serial.begin(9600);
}

void loop(){
int distancia = ultrasonic.Ranging(CM); //Variável distancia recebe o valor de ultrasonic.Ranging(CM)
Serial.print("Distancia em CM: ");
Serial.println(distancia);
delay(300);
}
 

ATENÇÃO: Para copiar este código, clique em VISUALIZAR FONTE(no canto superior direito).

Clique em Serial Monitor, vc vai ver a distancia (em centimetros) que o obstáculo está do sensor, lembrando que o sensor HC-SR04 tem distância minima de 2 cm e máxima de 5 m.

Veja a imagem abaixo, o momento exato que aproximo e retiro minha mão do sensor:

Então com o valor da variável distancia podemos definir a que distância será dado o sinal para Desligar a TV.

Já estou supondo que vc leu o tutorial Clonando qualquer Controle Remoto e já estar com a segunda parte do tutorial pronta, a parte cansativa em que vc copia e cola o código, lembra?

Agora vamos unir o Tutorial do Controle Remote com o de hoje com algumas modificações. Então monte com atenção:

Agora o Código:

/**********************************************************
*             ACIONAMENTO AUTOMÁTICO TV                   *
*               POR SENSOR ULTRASSÔNICO                   *
*                     BY SILLAS                           *
*                     Meu Blog:                           *
*             http://arduino.wordpress.com                *
*               Funções do Controle Remoto:               *
*           http://learn.adafruit.com/ir-sensor           *
*                                                         *
***********************************************************/

#include <Ultrasonic.h>
//Define os pinos trig e echo:
int pin_trig = 12; //envia o pulso
int pin_echo = 11; //recebe o pulso
int IRledPin =  3; //Led Infravermelho no pino 3
int valor = 100; //Distancia máxima para ligar a TV em centimetros
int Etapa = 1;  //Etapa para dar ordem ao processo
unsigned long SairInst = 0; //Instante que a pessoa saiu do alcance do sensor
unsigned long SairCont = 0; //Cronometra o Tempo em que saiu
//Cria-se o objeto:
Ultrasonic ultrasonic(pin_trig, pin_echo);

void setup(){
pinMode(IRledPin, OUTPUT); //Define o pino do LED IR como Saida
}

void loop(){
int distancia = ultrasonic.Ranging(CM); //Variável distancia recebe o valor de ultrasonic.Ranging(CM)
delay(300);  //Tempo para nova leitura
if (distancia <= valor  && Etapa==1) {  //Se distancia for menor ou igual ao valor(definido no início) e Etapa for 1, ou seja, alguem se aproximou do sensor, faça o seguinte:
SendChannelUpCode();//Ligue a TV
Etapa=2; //Mude a Etapa para 2
}

if(distancia > valor && Etapa==2){ //Se distancia for maior que o valor(definido no início) e Etapa for 2, ou seja, a pessoa saiu do alcance do sensor, faço o seguinte:
SairInst=millis(); //Grave o tempo em que a pessoa saiu
Etapa=3; //Mude a Etapa para 3
}

if(Etapa==3){ //Se Etapa for 3, faça o seguinte:
SairCont=millis(); //Comece a cronometrar
if((SairCont-SairInst) > 60000){ //Se a pessoa saiu e não voltou por 1 minuto
SendChannelUpCode(); //Deligue a TV
//E comece tudo outra vez:
Etapa=1;
SairInst=0;
SairCont=0;
}
}

if(distancia <= valor && Etapa==3){ //Se distancia for menor ou igual ao valor(definido no início) e Etapa for 3, ou seja, alguem voltou a se aproximar do sensor, faça o seguinte:
SairInst=0; //Zere o tempo
SairCont=0; //Zere o tempo
Etapa=2; //Retorne a Etapa 2
}
}

//Funções responsáveis pelo sinal do Controle Remoto
void pulseIR(long microsecs) {
cli();

while (microsecs > 0) {

digitalWrite(IRledPin, HIGH);
delayMicroseconds(10);
digitalWrite(IRledPin, LOW);
delayMicroseconds(10);
microsecs -= 26;
}
sei();
}

void SendChannelUpCode() {
delayMicroseconds();
pulseIR();
delayMicroseconds();
pulseIR();
delayMicroseconds();
pulseIR();
delayMicroseconds();
pulseIR();
delayMicroseconds();
pulseIR();
delayMicroseconds();
pulseIR();
delayMicroseconds();
pulseIR();
delayMicroseconds();
pulseIR();
delayMicroseconds();
pulseIR();
delayMicroseconds();
pulseIR();
delayMicroseconds();
pulseIR();
delayMicroseconds();
pulseIR();
}

A partir da linha de número 75, é com vc, complete conforme ensina no Tutorial do Controle Remoto, OK?

Com este código o Arduino vai fazer o seguinte:

1-Espera até alguem se aproximar do sensor
2-Se alguem se aproximar do sensor e chegar a uma distancia menor ou igual a 100 cm, definida na variável valor, ele liga a TV;
3-Se alguem sair do alcance do sensor, ele vai esperar por um minuto antes de desligar – Coloquei isso caso alguém for sair rapidinho para pegar um lanche e voltar –
4-Se não voltar em 1 minuto, desliga a TV

Repare ainda que usei a função millis(), essa função é responsável por cronometra o tempo desde quando o Arduino é iniciado, para saber mais acesse http://arduino.cc/en/Reference/millis

Publicado em agosto 1, 2012, em Arduino. Adicione o link aos favoritos. Deixe um comentário.

Deixe um comentário