Como montar um Sensor de distância com Arduino

14 Comentários

Voltámos aos guias de Arduino, assunto que tem ganho bastante expressão no Pplware e já há um canal no Facebook que tem crescido fomentando a troca de ideias e a promoção da entreajuda.

Assim, hoje vamos desenvolver um Sensor de Distância com Arduino.

imagem_arduino_sensor_prox00_small

Continuando com os mini tutoriais do Arduino, que despertaram o interesse do público em geral, hoje daremos uma continuidade ao último artigo do Ligue um lcd ao Arduino.

Alguém já andou num carro com sensores de estacionamento? Se sim, vai encontrar algumas semelhanças neste tutorial que será sobre um sensor de distância com lcd e um buzzer.

imagem_arduino_sensor_prox01_small

Material necessário:

  • 1 Arduino UNO/ Mega
  • 1 buzzer
  • 1 sensor hc-sr04
  • 1 lcd 16×2
  • 1 potenciómetro 5k
  • 1 resistência 100 ohms

Vamos então passar ao esquema de ligações, que já é um pouco mais complexa que as anteriores.

O código para fazer o circuito funcionar com o Arduino:

//inclui a biblioteca LCD
#include

//escolha dos pinos
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);

//Pinos do Sensor
int pinotrig = 7;
int pinoEco = 6;

int val = 0;  // Valor do HIGH.

int buzzer = 1;  //pino do buzzer
int distancia; // variável de distância.

void setup()
{
//Inicia a comunicaçao
Serial.begin(9600);
//Inicia o lcd com 16 carateres e 2 linhas
lcd.begin(16, 2);

//Pinos do Sensor Ultrasonico (Entrada e Saida)
pinMode(pinotrig,OUTPUT);
pinMode(pinoEco,INPUT);

//Pinos do Leds como saida

//Pino do buzzer como saida
pinMode(buzzer, OUTPUT);

//Aqui imprime o texto inicial
scrollRight();

}

voidloop()

{

//Inicia a leitura do Sensor
digitalWrite(pinotrig,HIGH);
delayMicroseconds(11);
digitalWrite(pinotrig,LOW);

//Deteta 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;

//____________________________________________________________________
//Distância no serial monitor.
Serial.print(distancia);
Serial.print(” cm”);
Serial.println();
//Tempo de atualização da amostragem de distância no LCD ou no serial monitor do aplicaçao do Arduino.
delay(70);

//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(“A detetar”);
delay(100);
}

//verifica a distancia variando a velocidade do beep if
((distancia < 0) && (distancia <= 5)) { tone(1,2999,800); } if ((distancia > 5) && (distancia <= 10)) { tone(1,2999,800); } if ((distancia > 10) && (distancia <= 15)) { tone(1,2999,800); } if ((distancia > 10) && (distancia <= 15)) { tone(1,2999,800); } if ((distancia > 15) && (distancia <= 20)) { tone(1,2999,800); } if ((distancia > 20) && (distancia <= 25)) { tone(1,2999,800); } if ((distancia > 25))
{
tone(1,2999,800);

}

//delays para o buzzer em função da distancia

digitalWrite(buzzer, LOW);
delay(distancia*7);

}

//____________________________________________________________________

void scrollRight()
{

digitalWrite(buzzer, LOW);

lcd.clear();
lcd.print(“Sensor”);
lcd.setCursor(0, 1);
lcd.print(“Ultrasonico”);
delay(1500);

lcd.clear();
lcd.print(“PPLWARE”); lcd.setCursor(0,1);
lcd.print(“Daniel Costa”);
delay(1200);

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

 

E agora, por fim, podemos ver a demonstração do funcionamento do programa num vídeo:

Espero que seja o primeiro passo que precisa para se iniciar na robótica ou algo do género, pois é bastante útil.

Qualquer dúvida ou sugestão, temos a nossa página no Facebook (pplware.arduino) e nos nossos comentários, onde podem sugerir, corrigir e serem esclarecidos.

Comentários

14

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de David Costa
    David Costa

    if ((distancia > 10) && (distancia <= 15))
    {
    tone(1,2999,800);

    }
    esta repetido

    1. Avatar de Daniel Costa
      Daniel Costa

      Boa noite David, obrigado pelo teu reparo, eu sei que o valor do 800 (tempo do tom) está sempre igual, pode-se aumentar no código mediante o aumento da distância, mas assim como está o código ele funciona também… experimenta 🙂

  2. Avatar de Nuno Pontes
    Nuno Pontes

    Deixo aqui a sugestão de que poderiam, ou com o arduino ou com o raspberry, fazer uns tutoriais (DIY) para a montagem e programação de um drone (quadcopter por exemplo)

    1. Avatar de Daniel Costa
      Daniel Costa

      Está anotada a tua sugestão, iremos ver se isso é viável 🙂

  3. Avatar de Pedro
    Pedro

    Boas, gostava de me iniciar no arduino mas não tenho nenhum projecto em mente apenas gostaria de me iniciar por agora, logo pensei adquirir o Arduino Starter Kit para começar. Agradecia a opinião dos mais experientes se este seria um bom ou mau investimento.

    Deixo o link:http://www.inmotion.pt/store/the-arduino-starter-kit

    1. Avatar de Daniel Costa
      Daniel Costa

      Bem, será um bom ou mau investimento dependendo da tua vontade 🙂 se te dedicares e ficares um expert acho que não é caro 🙂 tens bastante variedade de componentes para fazer imensas brincadeiras 🙂

  4. Avatar de Diogo Aleixo
    Diogo Aleixo

    E se utilizares mais que um senor? Se seguires a lógica do teu programa e já assim, estás a desperdiçar ciclos do processador.

    Utiliza os interrupts. De qualquer maneira, está impecável.

    1. Avatar de Só um gajo
      Só um gajo

      A lógica seguida neste tutorial, e em todos os outros tutoriais do Arduino que vi no Pplware, é a mesma lógica de todos os programas feitos na linguagem específica para o Arduino.
      Basicamente o Arduino tem uma pseudo linguagem de programação própria para tornar a sua programação simples. todos os programas têm 2 funções setup() e loop(), logo só podes criar programas cíclicos e tens muito overhead e tudo mais naquilo que fazes. Isto foi feito assim para seguir a máxima de que o Arduino é extremamente simples de programar porque com esta pseudo linguagem cria uma camada de abstracção onde podes ignorar a gestão da memória, endereços dos pinos, interupções, etc, etc. Afinal de contas o Arduino foi criado para artistas e não para engenheiros, apesar de dar imenso jeito aos engenheiros.

      No entanto, eu acho que ficaria bem o Pplware fazer também um tutorial onde se demonstre a programação para Arduino em C. O Arduino Uno tem um ATMega 328 que é relativamente simples e pode ser muito útil para quem quiser aprender um pouco mais e até apra quem quiser is mais além e desenvolver código mais eficiente que não desperdice tantos ciclos de processamento.

  5. Avatar de Joao
    Joao

    Não vejo o esquema das ligações, só o código.

    1. Avatar de Apaxe
      Apaxe

      É importante que os artigos sejam apresentados de uma forma mais detalhada pois ajuda muito os que tem menos experiência…

  6. Avatar de alexmv
    alexmv

    Ainda no outro dia tive de fazer um protejo igual a este..

  7. Avatar de Nuno
    Nuno

    Nao está a faltar o esquema das ligações?

  8. Avatar de Pedro
    Pedro

    Onde está o esquema das ligações?

  9. Avatar de Guilherme
    Guilherme

    Não aparece o esquema de ligações!