O projeto Ping aborda a utilização de sensores ultra-sônico no Arduino. Um sensor é um dispositivo que responde a um estímulo físico/químico de maneira específica e mensurável analógicamente. No nosso projeto usaremos o sensor ultra-sônico. O Ultra-som é um sensor que pode ser utilizado como medidor de distância, detecção de objetos e entre outros.
Este é o sensor ultra-sônico que vamos utilizar no projeto. Ele pode ser comprado neste link: http://www.seeedstudio.com/depot/ultra-sonic-range-measurement-module-p-626.html?cPath=144_149
Ele contêm 3 pinos:VCC: Para alimentação. (Coloque nos 5V do Arduino)GND: Ground. (Coloque no GND do Arduino)SINAL (SIG): Para saída do sinal, no caso desse projeto, coloque no pino 7.Ficando dessa forma:
Muito bem, agora vamos ao código, ao abrir a ide do arduino vamos utilizar um código já pronto para este nosso projeto.
Abra a IDE do arduino e siga este caminho File > Examples > Sensors > Ping
No começo do sketch temos um resumo do que será feito. Basicamente o sensor irá ler um sinal e retornará a distância do objeto mais próximo. Para fazer isso, é mandado um pulso para o sensor iniciar a leitura, depois espera um pulso de retorno. O tamanho do pulso que retornou é proporcional a distância do sensor ao objeto.
O código começa com a declaração de uma constante.
const int pingPin = 7;
Esta constante representa o número da porta em que o sensor está conectado ao Arduino.
void setup() {
// initialize serial communication:
Serial.begin(9600);
}
A função setup inicializa a comunicação serial do Arduino com o PC, para que possamos ver o resultado da leitura do sensor no Serial Monitor.
void loop()
{
// variáveis para a duração do ping
// e do resultado da distância em centímetros e polegadas.
long duration, inches, cm;
// O PING é disparado por um pulso em HIGH de 2 ou mais microssegundo.
pinMode(pingPin, OUTPUT); // define o pino como SAÍDA, estamos enviando o sinal.
digitalWrite(pingPin, LOW); // Dá um pulso em LOW antes de enviar um HIGH para
delayMicroseconds(2); // garantir um pulso limpo.
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
// O mesmo pino é usado para ler o sinal do PING.
//Agora a porta é definida como ENTRADA
//Usamos a função pulseIn que quando setada em HIGH, espera o pino ficar HIGH e começa a contar
// Quando o pino ficar em LOW ele termina de contar e retorna o tamanho do pulso em microssegundos.
pinMode(pingPin, INPUT); //define o pino como ENTRADA, receberemos um sinal PING
duration = pulseIn(pingPin, HIGH); //retorna o tamanho do pulso em ms.
// converte o tempo em distância
inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
// escreve as distâncias calculadas na serial para que possamos ler no Serial Monitor.
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(100);
}
Agora vamos analisar as funções fora da função loop().
// Converte microssegundos em polegadas.
long microsecondsToInches(long microseconds){
// Existem aproximadamente 74 microssegundos em uma polegada.
// Então dividimos os microssegundos por 74
// Depois por 2, pois queremos saber apenas a distância do sensor ao objeto.
return microseconds / 74 / 2;
}
// Converte microssegundos em centímetros.
long microsecondsToCentimeters(long microseconds)
// Mesma coisa de polegadas mas no caso existem 29 microssegundos em 1 cm.
return microseconds / 29 / 2;
}
Depois que fizermos o upload do código para o Arduino, poderemos acompanhar os resultados do sensor no Serial Monitor e ver que quanto mais nos afastamos do sensor, a distância será maior. Quanto mais perto, menor. Se isso não acontecer, cheque se os pinos estão no lugar certo.
Ou