quinta-feira, 26 de dezembro de 2013

Arduino + Sensor Ultra-sônico US-020 + LCD

Neste artigo abordaremos um exemplo de utilização do Sensor US-020 com arduino.

 O que é o Sensor US-020?

Esse sensor é um sensor ultra-sônico, capaz de medir a distancia de um objeto que esteja em sua frente. O mesmo principio é usado na natureza pelos morcegos e os golfinhos para localizar alimento e/ou obstaculo. Conforme pode ser visto na imagem.


 Basicamente é emitido um som em determinada frequência (trigger) que quando alcança o objeto retorna um eco (echo) ao emissor no caso o morcego (natureza) ou sensor (US-020), é através desse eco possível calcular a distancia do alvo.
 Em Robótica é usado em robôs e projetos de automação com PICs.

No caso para arduino e PICs temos 2 tipos de Sensores mais mais usados, o US-020 e o HC-SR04















Ambos tem a mesma função medir a distancia de objetos.


Ligação

No Primeiro Pino Vcc ligamos o 5 volts.
No Segundo Pino Trigger ligamos em um dos pinos Digital do arduino (Onde é emitido o sinal)
No Terceiro Pino Echo ligamos em outro pino Digital do arduino (Onde recebe o sinal  chamado eco)
No Quarto Pino GND ligamos o terra ou ground do arduino.




Diferença entre US-020 e HC-SR04

Apesar de ambos sensores serem bem parecido em questão de aparência e forma de trabalho, existe uma diferença entre eles que é no quesito precisão.

Segundo minha experiência com ambos os sensores pode perceber uma precisão maior quando trabalhamos com o US-020, porém isso depende de como trabalhamos com o código arduino, só foi possivel perceber essa diferença quando usamos a biblioteca newPing do site oficial do arduino.

http://playground.arduino.cc/Code/NewPing


Requisitos de Hardware e Software

 

Hardware

 _  Arduino Uno, Mega, Duemilanove ou outro compativel.
_  Sensor Ultra-Sônico US-020 ou HC-SR04.
_  Buzzer 5 volts.
_  Led RGB de 4 pinos.
_  2 Resistores de 100 ohms (ou conforme a necessidade do seu LED).

 

Software
_ IDE do Arduino instalada.

 

Montagem

Irei separar a motagem em 2 diagramas para facilitar a visualização


Montagem do circuito

 pino 7 echo do US-020
 pino 8 trigger do US-020
vcc do sensor no 5 volts do microcontrolador.
GRD no ground do microcontrolador
Buzzer no pino digital 2 e ground
Led 
R(Red) no pino 3
G(Green) no pino 5
B(Blue) no pino 6
e o quarto pino no 5 volts do atmega


montagem  ilustrativa do display LCD
Observação: Está montagem do LCD é apenas ilustrativa.
pode ser encontrada no seguinte endereço.
http://arduino.cc/en/Tutorial/LiquidCrystal 






Para os fios azuis usados nos pinos digitais do arduino usamos os seguintes pinos para o nosso projeto

RS = Pino 13
E =   Pino 12
D4 = Pino 11
D5 = Pino 10
D6 = Pino 9
D7 = Pino 4


A parte de Ligação terminamos.


Programação

Abra o IDE do arduino e copie o seguinte código

//Projeto adaptado do Projeto feito por Adriano Teixeira
//*Desenvolvido por Thiago Huno, 19/12/2013
//O código é aberto, mas ao usar, por favor citem. */


//inclui a classe LCD
#include

//Instacia e seta os pinos
LiquidCrystal lcd (4, 9, 10, 11, 12, 13);
   
    //Pinos do Sensor Ultrasonico (US-020)
    int pinoGatilho = 8;
    int pinoEco = 7; 
   
        int pinoRed = 3; // pino Red do led RGB.
        int pinoGreen = 5; // pino Green do led RGB.
        int pinoBlue = 6; // pino Blue do led RGB.
        int val = 0; // Valor  do HIGH. (Obs para este led os valores são inverso 0 =100% e 255= 0%)
       
        int buzzer = 2; //pino do buzzer
        int distancia; //Criando uma variável de distância.

void setup()
{
  //Inicia a Serial
  Serial.begin(9600);
  //Incia o lcd com 16 campos e 2 linhas
  lcd.begin(16, 2);
 
  //Pinos do Sensor Ultrasonico (Entrada e Saida)
  pinMode(pinoGatilho,OUTPUT);
  pinMode(pinoEco,INPUT);
 
 
  //Pinos do Leds como saida
  pinMode(pinoRed, OUTPUT);
  pinMode(pinoGreen, OUTPUT);
  pinMode(pinoBlue, OUTPUT);
 
  //Pino do buzzer como saida
  pinMode(buzzer, OUTPUT);
 
 
  //Aqui imprime o texto inicial
  scrollRight();

}


void loop()
{
 
  //Inicia a leitura do Sensor
  digitalWrite(pinoGatilho,HIGH);
  delayMicroseconds(11);
  digitalWrite(pinoGatilho,LOW);


  //Captura a Distancia
  distancia = pulseIn(pinoEco, HIGH);
 
  //Calculando a distância em centímetros, sendo que...
  // ...velocidade do som = 340 m/s ou 29 us/cm.
  distancia = distancia/29/2;
                          
  //___________________________________________________________________________________________
 
  //MONITOR SERIAL:
  //Distância no monitor serial.
  Serial.print(distancia);
  Serial.print(" cm");
  Serial.println();
  //Tempo de atualização da amostragem de distância no LCD ou no monitor serial do programa do Arduino.
  delay(70);
 
 
  //MONITOR DISPLAY LCD:
  //Impressao no LCD
  lcd.clear();
  lcd.print("Distancia atual:");
  lcd.setCursor(5, 1);
  lcd.print(distancia);
  lcd.setCursor(9, 1);
  lcd.print("cm");
  delay(70);
 
  //___________________________________________________________________________________________ 
 
  //CONDIÇÕES:
 
  if(distancia < 0)
  {
  lcd.clear();
  lcd.print("Distancia atual:");
  lcd.setCursor(3, 1);
  lcd.print("Loading...");
  delay(100);
  }
 
  if((distancia < 0) && (distancia > 350))
  {
  systemOff();
  }
  
  
  //verifica a condicao de distancia para variar a frequencia do buzzer
  //e as cores do led
  if ((distancia > 0) && (distancia <= 5)) 
  {
    analogWrite(pinoRed, 0);
    analogWrite(pinoGreen, 255);
    analogWrite(pinoBlue, 255);

        
  }
 
   if ((distancia > 5) && (distancia <= 10)) 
  {
    analogWrite(pinoRed, 80);
    analogWrite(pinoGreen, 255);
    analogWrite(pinoBlue,  150);
        
  }
 
     if ((distancia > 10) && (distancia <= 15)) 
  {
    analogWrite(pinoRed, 150);
    analogWrite(pinoGreen, 255);
    analogWrite(pinoBlue,  80);
        
  }
 
 
     if ((distancia > 10) && (distancia <= 15)) 
  {
    analogWrite(pinoRed, 255);
    analogWrite(pinoGreen, 255);
    analogWrite(pinoBlue,  0);
        
  }
 
 
  if ((distancia > 15) && (distancia <= 20)) 
  {
    analogWrite(pinoRed, 255);
    analogWrite(pinoGreen, 150);
    analogWrite(pinoBlue,  80);
        
  }
 
  if ((distancia > 20) && (distancia <= 25)) 
  {
    analogWrite(pinoRed, 255);
    analogWrite(pinoGreen, 80);
    analogWrite(pinoBlue,  150);
        
  }
 
  if ((distancia > 25)) 
  {
    analogWrite(pinoRed, 255);
    analogWrite(pinoGreen, 0);
    analogWrite(pinoBlue,  255);
        
  }


   //delays para o buzzer em função da distancia
   digitalWrite(buzzer, HIGH);
   delay(200);
 
 
   digitalWrite(buzzer, LOW);
   delay(distancia*7);


}

  //___________________________________________________________________________________________
 
 //metodo que desliga o led
void systemOff()
{
  digitalWrite(pinoRed, 255);
  digitalWrite(pinoGreen, 255);
  digitalWrite(pinoBlue, 255);
  digitalWrite(buzzer, LOW);
}

  //___________________________________________________________________________________________
 

 
void scrollRight()
{
 
digitalWrite(buzzer, LOW);
 
lcd.clear();
lcd.print("Sensor");
lcd.setCursor(0, 1);
lcd.print("Ultrasonico");
delay(1500);

lcd.clear();
lcd.setCursor(0,1);
lcd.print("Thiago Huno");
delay(1200);

for (int x = 0; x < 16; x++)
  {
  //Rola o display 16 vezes para a direita
  lcd.scrollDisplayRight();
  delay(300);
  }
}




faça o upload para o arduino e teste.

Espero ter ajudado!





 



 






Nenhum comentário:

Postar um comentário