I03 - Utilizando leds infravermelhos como sistema de alarme - Arduino

Intermediário - Projeto 03

Alarme utilizando leds infravermelhos com Arduino

Objetivo

Criar um sistema de alarme através de leds infravermelhos, utilizando um led emissor IR e um led receptor IR (fototransistor). Vamos, portanto, criar uma barreira invisível ao olho nu, através de sinais infravermelhos, que ao serem interrompidos por algum motivo, um som de alarme será emitido por um buzzer ou por um auto-falante controlado pelo Arduino. O alarme após 5 ciclos é desligado automaticamente e poderá ser acionado toda vez que o fototransistor (led emissor) não receber luz infravermelha, ou seja, quando a barreira for interrompida.

Definições

Led Emissor Infravermelho (IR): Led que emite um sinal IR (infrared ou infravermelho) que pode ser reconhecido por um componente receptor IR. Projetado para emitir sinais infravermelhos em dispositivos remotos e se conectarem em uma placa microcontroladora. A faixa de luz emitida pelo led emissor, cujo comprimento de onda é de aproximadamente 940nm,  não é perceptível ao olho humano.

Led Receptor (IR) - Fototransistor: Componente eletrônico que atua como um fotodiodo, permitindo a passagem de corrente elétrica somente com a presença de luz. O fototransistor é parecido com um transistor tradicional, possuindo 2 terminais sendo um o coletor e o outro o emissor, entretanto, a sua base base é ativada pela incidência de radiação infravermelha e não por um sinal digital.

Aplicação

Para fins didáticos e projetos de alarmes, interruptores, detecção de presença, detecção de obstáculos, contagem de elementos em uma esteira transportadora, controle remoto e sistemas robóticos.

Componentes necessários

Referência

Componente

Quantidade

Imagem

Observação

Protoboard Protoboard 830 pontos 1 Resultado de imagem para protoboard 830v

No mínimo utilizar protoboard com 400 pontos

Jumpers Kit cabos ligação macho / macho 1  
Led emissor IR

Led emissor IR 3mm ou 5mm

1

–Tensão de operação: 1,2 a 1,4VDC
–Corrente de operação: 20mA
–Comprimento da onda: 940nm

Fototransistor

Fototransistor 3mm ou 5mm

1

– Tensão de operação: 1,1 a 1,4VDC
– Corrente de operação: 10mA
– Potência máxima: 60mW
– Comprimento da onda: 940nm

 Display LCD  Display LCD 16X2 1

 DISPLAY LCD 16X2

LCD que utilize o controlador HD44780 (veja na descrição ou datasheet do componente)

O display poderá ser de qualquer cor (fundo verde, azul ou vermelho)

Módulo I2C para display LCD    

Módulo I2C com CI PCF8574

(opcional

1 Módulo I2C display LCD Arduino

O módulo I2C poderá vir separado ou já soldado no display LCD

(datasheet)

Se você não possui um módulo I2C para display LCD, poderá adaptar o projeto para o display LCD sem o adaptador.

Led 5mm Led 5mm  1

1 LED alto brilho ou difuso (qualquer cor)

Você poderá utilizar também LEDs de 3 mm na cor que desejar.

Resistor Resistor 150Ω  2

2 Resistores de 150Ω ou superior

(usar no led emissor e no led)

Resistor Resistor 10KΩ 1

1 Resistor de 4,7KΩ a 10KΩ

(usar no fototransistor)

 

Arduino UNO R3 Arduino UNO 1

Você poderá utilizar uma placa Arduino UNO original ou similar

Montagem do Circuito

Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito.

Atenção

1. Neste projeto vamos utilizar um display LCD 16x2 com controlador HD44780, que se adapta aos mais diversos projetos com vários modelos de placas e microcontroladores. Este display possui 16 colunas por 2 linhas com backlight (luz de fundo) verde, azul ou vermelha e tem 16 pinos para a conexão. Atenção: Utilize um display LCD com os pinos soldados.

DISPLAY LCD 16X2

2. Para a montagem do display com adaptador, entenda a estrutura do módulo I2C para display LCD 16x2 / 20X4:

Módulo I2C - Detalhes

2.1. Na lateral do adaptador encontramos 4 pinos, sendo: 2 pinos para alimentação (Vcc e GND) e 2 pinos para conexão com a interface I2C (SDA e SCL) que deverão estar conectados nos pinos analógicos A4 (SDA) e A5 (SCL) do Arduino Uno ou nos pinos A20 (SDA) e A21 (SCL) do Arduino Mega 2560. Veja a tabela abaixo com onde temos as principais placas Arduino e suas conexões com o I2C.

2.2. Para controlar o contraste do display, utilize o potenciômetro de ajuste de contraste. O jumper lateral, quando utilizado, permite que a luz do fundo (backlight) seja controlada pelo programa ou permaneça apagada.

2.3. A seleção de endereço do adaptador I2C para display LCD, na maioria dos módulos fornecidos no mercado já vêm configurados com o com o endereço 0x27. Se você não sabe qual endereço que o seu módulo I2C e/ou módulo RTC DS3231 está configurado, baixe o seguinte "sketch":

DOWNLOAD - I2C_scanner

2.3.1 Após instalar e rodar o sketch acima, abra o monitor serial que mostrará qual é o endereço que o seu módulo I2C e o módulo RTC DS3231 está configurado:

2.3.1.1 Nos casos em que módulo I2C estiver configurado com uma faixa de endereços diferente do endereço 0X27 altere a alinha de programação -> LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE); com o endereço correto.

2.5. Para saber mais sobre a montagem e utilização de display LCD com módulo I2C leia: Projeto 48 - Como controlar um display LCD com o módulo I2C.

3. Lembre-se que o LED tem polaridade: O terminal maior tem polaridade positiva e o lado do chanfro tem polaridade negativa.

3.1. Portanto, faça a conexão do Arduino no terminal positivo do led (anodo) e o GND no terminal negativo (catodo).

3.2. Para evitar danos ao led é necessário a inclusão de um resistor no circuito. Como o resistor é um limitador da corrente elétrica, ele poderá estar conectado no anodo (terminal maior) ou no catodo (terminal menor) do led, tanto faz.

4. Determinamos o valor do resistor através da tabela prática: Tabela prática de utilização de leds 3mm e 5mm. Entretanto, o mais correto é sempre verificar o datasheet do fabricante do LED para você ter os exatos valores de tensão e corrente do mesmo - leia Leds ligados em série e em paralelo.

4.1. Valores utilizados para nossos projetos: LEDs difusos ou de alto brilho: Vermelho, Laranja e Amarelo: 150 Ω | Led Verde e Azul: 100 Ω

5. O buzzer tem polaridade. Portando, cuidado para não ligar o buzzer invertido. Se você retirar o adesivo superior do buzzzer poderá ver um sinal de positivo (+). Este sinal mostra onde está o pino positivo do componente que deverá estar conectado ao Arduino:

6. Agora monte os leds infravermelhos conforme orientações abaixo:

6.1. É importante salientar que o led emissor tem polaridade. Portanto, conecte o terminal positivo (anodo) no Vcc (5V) e o terminal negativo (catodo) no GND.

6.1.1. Para evitar danos ao led emissor, é necessário incluir um resistor igual ou superior a 100Ω. No nosso exemplo utilizamos um resistor de 150Ω.

6.1.2. O resistor funciona como um limitador de corrente do circuito e poderá portanto, estar conectado em qualquer terminal do led, seja positivo ou negativo.

6.2. O Fototransistor funciona de forma similar que um transistor NPN, ou seja, é constituído de Base, Coletor e Emissor. Ao receber luz infravermelha, o fototransistor é ativado após saturação, enviando um sinal de baixo nível (LOW) para o Arduino.

6.2.1. Antes da montagem, observe com atenção a posição dos terminais do led fototransistor:

- Coletor: terminal mais curto (C);
- Emissor: terminal mais comprido (E);

6.2.2. Para a montagem do fototransistor, conecte o terminal maior (E - emissor) no GND e o terminal menor ou o lado com chanfro (C - coletor) em um pino analógico do Arduino. No nosso exemplo utilizamos a porta analógica A2.

6.2.3. Para que haja estabilidade na recepção dos sinais será necessário a inclusão de um resistor entre 4,7KΩ e 10KΩ conectado no terminal do coletor do fototransistor (terminal mais curto) e no VCC (5V). Veja a imagem abaixo:

6.2.4. Conexão com o pino analógico do Arduino: o fototransistor envia um sinal analógico para o Arduino que será convertido em sinal digital através do ADC (Conversor Analógico Digital).

6.2.4.1. O conversor ADC do microcontrolador ATmega328 possui 10 bits de resolução, portanto o sinal analógico enviado e convertido em digital irá variar de 0 até 1023.

6.2.4.2. Quando o fototransistor não recebe nenhuma luz infravermelha, o valor enviado será de 1023. Entretanto, como a luz ambiente também emite radiação infravermelha, este valor quase nunca chega a 1023. Desta forma, mesmo com o filtro de luz que existe no componente, o valor máximo enviado irá variar de acordo com a intensidade da luz ambiente, ou seja, quanto mais escuro maior o valor.

6.2.4.3. Quando mais luz infravermelho o fotoresistor receber, menor será o valor enviado para o Arduino. Portanto, ao usarmos o sinal analógico do fototransistor, podemos determinar parâmetros de comparação para informar se uma barreira foi interrompida ou se um obstáculo foi detectado ou não.

6.3. Veja o esquema elétrico abaixo para a conexão do sensor no Arduino. No nosso exemplo utilizamos R1 = 150Ω e R2 = 10KΩ

Sensor de Proximidade Simples

6. A montagem do nosso projeto foi realizada em um protoboard de 400 pontos e 2 mini-protoboards. Verifique se o seu protoboard possui linhas de alimentação contínuas ou separadas.

Testando a montagem do circuito

1. Para verificarmos se a montagem do circuito está correta, rode o sketch abaixo e verifique:

1.1. Ao aproximarmos um objeto ou o dedo entre o led emissor IR e o fototransistor, sem precisar tocá-los, o led irá acender. Distanciando o dedo ou um objeto dos sensores, o led se apagará imediatamente.

const byte pinoFototransistor = A2; //PINO ANALÓGICO UTILIZADO PELO FOTOTRANSISTOR
const byte pinoLed = 12;
               
void setup(){
  Serial.begin(9600); //INICIALIZAÇÃO DA SERIAL
  pinMode(pinoFototransistor, INPUT); //DEFINE O PINO COMO ENTRADA
  pinMode(pinoLed, OUTPUT); //DEFINE O PINO COMO SAÍDA
}
 
void loop(){
  if(analogRead(pinoFototransistor) < 600){ //SE A LEITURA DO FOTOTRANSISTOR FOR MENOS QUE 1020 BITS
    Serial.print(analogRead(pinoFototransistor)); // IMPRIME O VALOR LIDO
    Serial.println(" Recebendo sinal infravermelho"); //IMPRIME O TEXTO NA SERIAL
    digitalWrite(pinoLed, LOW);
  }else{ 
    Serial.print(analogRead(pinoFototransistor)); // IMPRIME O VALOR LIDO
    Serial.println(" Sinal infravermelho interrompido"); //IMPRIME O TEXTO NA SERIAL
    digitalWrite(pinoLed, HIGH);   
  }
 }

ATENÇÃO:

1) No nosso exemplo, definimos o valor para identificar que o sinal foi interrompido em 600 bits. Mas, dependendo da iluminação externa e da distância entre o emissor e o receptor IR, você precisará aumentar ou diminuir este valor. Utilize o código acima para calibrar esse valor.

2) Quanto maior for a distância entre o emissor e o receptor IR, maior será a leitura no pino analógico.

O resultado do código acima deverá ficar parecido com a imagem a seguir:

Veja o vídeo abaixo do nosso teste de montagem:

Incluindo biblioteca LiquidCrystal_I2C

Atenção: Caso você opte pela utilização do display de LCD sem o módulo I2C, siga os procedimentos do Projeto 38 - Controlando um display LCD (instalação e comandos básicos) e não instale a biblioteca abaixo.

Para que o módulo I2C funcione corretamente é necessário adicionarmos a biblioteca LiquidCrystal_I2C no IDE do Arduino. Uma das grandes vantagens das placas Arduino é a diversidade de bibliotecas disponíveis que podem ser utilizadas em seus programas. Estas bibliotecas podem ser criadas para a linguagem "C" ou especificamente para o Arduino, reduzindo drasticamente o tempo gasto com programação. Veja a tabela Coletânea de bibliotecas para sensores.

Download dos arquivos da biblioteca LiquidCrystal_I2C

DOWNLOAD - NewliquidCrystal_1.3.4.zip

Para saber detalhes desta biblioteca clique aqui.

Instalando a biblioteca pelo IDE do Arduino

Após fazer o download do arquivo NewliquidCrystal_1.3.4.zip com todos os arquivos da biblioteca compactados no formato zip, abra o IDE do Arduino e siga o tutorial: Como incluir uma biblioteca no IDE do Arduino.

Utilizando a biblioteca LiquidCrystal_I2C

Para instalação e utilização da biblioteca para o módulo I2C como comunicação para um display LCD siga o tutorial: Projeto 48 - Como controlar um display LCD com o módulo I2C

Comandos do display LCD para a biblioteca LiquidCrystal

No projeto vamos utilizar alguns comandos de controle do display LCD através da biblioteca LiquidCrystal que já vem embutida na IDE do Arduino. Para conhecer todos os comandos desta biblioteca, acesse o link: Comandos display LCD para biblioteca LiquidCrystal e LiquidCrystal Library (Arduino Reference).

Obs.: Para acessarmos uma biblioteca embutida na IDE do Arduino, assim como, para acessarmos um biblioteca local através de um header file, utilizaremos a diretiva #include.

Código do Projeto (Sketch)

1) Faça o dowload e abra o arquivo projetoI03.ino no IDE do Arduino: DOWNLOAD - projetoI03.ino

Obs. 1: Nos casos em que módulo I2C estiver configurado com um endereço diferente do endereço 0X27, altere a alinha de programação -> LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE); com o endereço correto. - Veja o tutorial Projeto 48 - Como controlar um display LCD com o módulo I2C

Obs. 2: Se estiver utilizando um display de LCD 20 X 4, altere o comando da linha 36 para lcd.begin (20,4);

Obs.3: Se não possuir o módulo I2C utilize apenas o display LCD conforme Projeto 38 - Controlando um display LCD (instalação e comandos básicos)

Obs.4: O valor de referência poderá ser alterado dependendo da distância entre os leds emissor e receptor e a iluminação externa. Este valor poderá ser obtido na testagem do circuito, como mostramos acima.

Ou se preferir, copie e cole o código abaixo no IDE do Arduino:

/*******************************************************************************
*
*    Projeto I03 - Alarme acionado por leds infravermelhos - Arduino
*    Data: 06/08/2020
*    Autor: Angelo Luis Ferreira
*            http://squids.com.br/arduino
*
*******************************************************************************/
#include //Carrega a biblioteca lcd com I2C

//Define os pinos que serão utilizados para ligação ao display
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);

const byte pinoFototransistor = A2; // Pino analógico conectado ao fototransistor
const byte pinoLed = 12;
const byte pinoBuzzer = 7;

unsigned int referencia = 600; // Valor de referência.

int toneVal = 0;
int toneAdjustment = 2000;
float sinVal;
               
void setup(){
  Serial.begin(9600); //Inicialização do monitor serial
  lcd.begin(16, 2); // Define o display com 16 colunas e 2 linhas
  lcd.clear();
  pinMode(pinoFototransistor, INPUT); //Define o pino como entrada no Arduino
  pinMode(pinoLed, OUTPUT); // Define o pino como saída do Arduino
}
 
void loop(){
  if(analogRead(pinoFototransistor) < referencia){ // Se a leitura do fototransistor for menor que a referência
    Serial.print(analogRead(pinoFototransistor)); // Imprime o valor lido no pino analógico
    Serial.println(" Recebendo sinal infravermelho");
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Normal");
    lcd.setCursor(0,1);
    lcd.print("Leitura: ");
    lcd.print(analogRead(pinoFototransistor));
    digitalWrite(pinoLed, LOW);
  }else{ 
    Serial.print(analogRead(pinoFototransistor)); // Imprime o valor lido no pino analógico
    Serial.println(" Sinal infravermelho interrompido");     
    
    //aciona o alarme
    lcd.setCursor(0,0);
    lcd.print("Alarme disparado");
    lcd.setCursor(0,1);
    lcd.print("Leitura: ");
    lcd.print(analogRead(pinoFototransistor));
    digitalWrite(pinoLed, HIGH);
    sirene();
    delay(25); // espera um pouco
    noTone(pinoBuzzer); // interrompe o tom  
  }
}

 //Função sirene
void sirene(){
  //tocar 5 ciclos
  for (int k=0; k<5; k++){
    for (int x=0;x<180;x++){        
        //converte graus em radianos
        sinVal = (sin(x*(3.1412/180)));
        //agora gera uma frequencia
        toneVal = 2000+(int(sinVal*100));
        //toca o valor no buzzer
        tone(pinoBuzzer,toneVal);
        //atraso de 2ms e gera novo tom
        delay(2);        
    }
  }
}

Vídeo

Como o projeto deve funcionar

1. Quando você iniciar o programa, o led estará apagado, pois o feixe de luz infravermelho está incidindo sobre o fototransistor e os valores lidos são maiores que o valor de referência que você utilizou no projeto (no nosso exemplo utilizamos 600 bits). Também no display LCD será exibida a mensagem "Normal" e o valor lido no pino analógico A2, que está conectado com o coletor do fototransistor.

2. Interrompendo o feixe de luz infravermelho sobre o fototransitor, o led e o alarme (sirene) serão acionados. Isto acontece quando o valor lido fototransistor estiver abaixo do valor de referência (no nosso exemplo utilizamos 600). Também será exibida a mensagem "Alarme disparado" no display LCD. Observe que o valor exibido no display deverá ser maior que o valor de referência.

3. Após alguns instantes o alarme é desligado automaticamente.

4. Abrindo o Monitor Serial do IDE do Arduino, você poderá fazer as leituras do sensor a qualquer momento.

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Comentários

×

Infomações do site / SEO








×

Adicionar Marcadores