Abaixo as fotos da montagem em Breadboard:
O código fonte utilizado:
/* Código adaptado do sensor PING */
// configura os pinos de sáida
const int emissor = 7;
const int receptor = 8;
void setup() {
// initialize serial communication:
Serial.begin(9600);
pinMode(emissor, OUTPUT);
pinMode(receptor, INPUT);
}
void loop()
{
// establish variables for duration of the ping,
// and the distance result in inches and centimeters:
long duration, inches, cm;
// The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
digitalWrite(emissor, LOW);
delayMicroseconds(2);
digitalWrite(emissor, HIGH);
delayMicroseconds(5);
digitalWrite(emissor, LOW);
//o receptor faz a leitura do estado do pino e se retorna HIGH ele informa
duration = pulseIn(receptor, HIGH);
// converte a distância
inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
inches2 = microsecondsToInches(duration2);
cm2= microsecondsToCentimeters(duration2);
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm,");
Serial.println();
delay(100);
}
long microsecondsToInches(long microseconds)
{
// According to Parallax's datasheet for the PING))), there are
// 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
// second). This gives the distance travelled by the ping, outbound
// and return, so we divide by 2 to get the distance of the obstacle.
// See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
return microseconds / 74 / 2;
}
long microsecondsToCentimeters(long microseconds)
{
// The speed of sound is 340 m/s or 29 microseconds per centimeter.
// The ping travels out and back, so to find the distance of the
// object we take half of the distance travelled.
return microseconds / 29 / 2;
}
Abaixo o vídeo de resposta desta programação:
Nosso desafio foi adaptar este código a leitura de 2 sensores de ultrassom ao mesmo tempo. Usamos led´s diferentes pois o vermelho era de alto brilho e atrapalhava a visão. O código fonte segue abaixo:
/* Programa para uso de 2 Sensores de Ultrassom medindo distância em cm para robôs de combate - Projeto TITAN
Código adaptado do sensor PING
Grupo Pequenos Cientistas*/
// constante dos pinos
const int emissor = 7;
const int receptor = 8;
const int emissor2= 9;
const int receptor2= 10;
void setup() {
// Configuração de pinos como entrada e saída
pinMode(emissor, OUTPUT);
pinMode(receptor, INPUT);
pinMode(emissor2, OUTPUT);
pinMode(receptor2, INPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop()
{
// variáveis utilizadas para conversão do ping em centímetros
long duration, inches, cm;
long duration2,inches2, cm2;
// sensor 1
//desliga o emissor
digitalWrite(emissor, LOW);
delayMicroseconds(2);
// 2 microssegundos depois enivia um sinal que dura 5 microssegundos
digitalWrite(emissor, HIGH);
delayMicroseconds(5);
//desliga o emissor
digitalWrite(emissor, LOW);
// o receptor recebe o eco e envia um sinal digital HIGH - alto
duration = pulseIn(receptor, HIGH);
//converte os valor do sinal de microssegundos para centímetros, retornando a variável cm
cm = microsecondsToCentimeters(duration);
//condição de leitura da variável - comandos para motores
if (cm > 15){
digitalWrite (13, HIGH); // se a distância for maior que 15 cm acende o led
}
else{
digitalWrite(13, LOW); // se não, desliga o led
}
// Sensor 2
//desliga o emissor
digitalWrite(emissor2, LOW);
delayMicroseconds(2);
// 2 microssegundos depois enivia um sinal que dura 5 microssegundos
digitalWrite(emissor2, HIGH);
delayMicroseconds(5);
//desliga o emissor
digitalWrite(emissor2, LOW);
// o receptor recebe o eco e envia um sinal digital HIGH - alto
duration2 = pulseIn(receptor2, HIGH);
// converte a distância e retorna a variável cm
cm2= microsecondsToCentimeters(duration2);
//condição de leitura da variável - comandos para motores
if (cm2 > 15){
digitalWrite (12, HIGH);// se a distância for maior que 15 cm acende o led
}
else{
digitalWrite(12, LOW);// se não, desliga o led
}
}
// Variável de conversão de microssegundos para centímetros
long microsecondsToCentimeters(long microseconds)
{
// A velocidade do som é 340 m/s ou 29 microssegundos por centímetro. O ping vai e volta e, sua distância será metade do tempo de ida e volta.
return microseconds / 29 / 2;
}
Neste programa iniciamos fazendo os comenados fazerem a leitura de um sensor junto com o outro. O resultado foi desastroso lia o sensor 1 e não o 2. Depois separamos os sensores e inserimos, após a leitura dos dois, a condição de reação e resolvemos o problema.
O vídeo de 2 sensores fazendo a leitura de distância:
Aplicação
Instalação dos sensores nos robôs (parabéns pela ideia de usar os soquetes de led de computadores Paulo). No robô, instalamos 4 sensores e o resultado foi satisfatório:
Vídeo do robô em funcionamento utilizando os sensores de ultrassom para desviar dos obstáculos.
Muito bom o projeto, tenho uma duvida, como vocês fizeram para replicar o programa para os demais sensores, visto que são quatro no total.
ResponderExcluirMUITO LEGAL PARABÉNS
ResponderExcluir