Como montar um Sensor de distância com Arduino
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.
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.
Material necessário:
- 1 Arduino UNO/ Mega
- 1 buzzer
- 1 sensor hc-sr04
- 1 lcd 16x2
- 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.
Este artigo tem mais de um ano
if ((distancia > 10) && (distancia <= 15))
{
tone(1,2999,800);
}
esta repetido
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 🙂
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)
Está anotada a tua sugestão, iremos ver se isso é viável 🙂
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
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 🙂
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.
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.
Não vejo o esquema das ligações, só o código.
É importante que os artigos sejam apresentados de uma forma mais detalhada pois ajuda muito os que tem menos experiência…
Ainda no outro dia tive de fazer um protejo igual a este..
Nao está a faltar o esquema das ligações?
Onde está o esquema das ligações?
Não aparece o esquema de ligações!