Radar Usando Arduino

Radar com arduino

 

Essa é uma montagem bem legal para quem gosta de trabalhar com Arduino. Ele é bem simples, mas com resultados muito interessantes, ele utiliza um módulo de ultra-som HY-SFR05, um servo e a placa Arduino  para  fazer um radar que detecta a uma certa distância um objeto ou pessoa. Esse circuito faz uma varredura de 180 ° e digitaliza a área igual aos radares de aeronaves. O  Arduino processa e aciona o servo motor, envia todos os dados para  serem exibidos no PC, através da comunicação com a porta serial.

 

 

Tal como mostrado no esquema ele usa uma  fonte externa de 5V, isso ocorre porque o servo consume mais do  que o Arduino pode fornecer. Já que você vai usar a fonte externa conecte também módulo de ultra-som. Não esqueça de ligar o terra (-) do Arduino com o terra (-) da outra fonte.

 

Radar Usando Arduino

 

Codigo



/*
Arduino Ultrasonic Radar v1.1
Autor: FjRamirez
Email: [email protected]
Web: www.tuelectronica.es
Fecha: 15/04/2013

Una modificación de luckylarry.co.uk Arduino SRF05 Radar Sketch
*/

#include // Añade la libreria Servo
Servo leftRightServo; // Crea una variable servo
int leftRightPos = 0; // Variable para la posición del servo (grados)
int index = 0; // Contador para el número de lectura
long total = 0; // Variable para calcular el pormedio
int average = 0; // Variable para calcular el promedio
long duration = 0; // Variable para calcular el tiempo de llegada de la señal
int distance = 0; // Variable para calcular la distancia

// CONFIGURACIÓN:
int echoPin = 53; // SRF05’s Echo pin
int trigPin = 51; // SRF05’s Trig pin
int servoPin = 12; // Pin para el cable de señal del servo
int servoMin = 700; // Anchura del pulso, en microsegundos, correspondiente al mínimo (0 grados) ángulo en del servo (por defecto 544)
int servoMax = 2400; // Anchura del pulso, en microsegundos, correspondiente al máximo (180 grados) ángulo en del servo (por defecto 2400)
const int numReadings = 2; // Número de lecturas en cada posición

void setup() {
leftRightServo.attach(servoPin,700,2400); // Pin de salida para el servo, recorrido minimo, recorrido maximo
Serial.begin(9600); // Establece la velocidad de datos del puerto serie
pinMode(trigPin, OUTPUT); // Establece pin como salida
pinMode(echoPin, INPUT); // Establece pin como entrada
digitalWrite(trigPin, LOW); // Pone el pin a un estado logico bajo
}

void loop() {
for(leftRightPos = 0; leftRightPos < 180; leftRightPos++) { // De izquierda a derecha.
leftRightServo.write(leftRightPos);
for (index = 0; index<numReadings; index++) { // Repite tantas veces como número de lecturas en cada posicion
// Pulso de 10us para inicial el modulo
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH, 17400); // Devuelve la longitud del pulso del pin Echo en us (3metros maximo)
if (!duration){ // Si la duracción es 0
duration = 17400; // La señal se a perdido. Se establece distancia maxima
}
distance = duration/58; // Calculamos distancia en centrimetros
total = total + distance; // Almacenamos la distancia para calcular promedio
delay(50); // Esperamos hasta la siguiente medida
}

average = total/numReadings; // Calcula el promedio
total = 0; // Resetea variable

// Envia datos por el puerto serie
Serial.print(“X”); // Identificador X para la posicion del servo
Serial.print(leftRightPos); // Posición del servo
Serial.print(“V”); // Identificador V para el promedio de distancia
Serial.println(average); // Promedio de distancia
}

for(leftRightPos = 180; leftRightPos > 0; leftRightPos–) { // De derechas a izquierda
leftRightServo.write(leftRightPos);
for (index = 0; index<numReadings; index++) {
// Pulso de 10us para inicial el modulo
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH, 17400);
if (!duration){
duration = 17400;
}
distance = duration/58;
total = total + distance;
delay(50);
}

average = total/numReadings;
total = 0;

Serial.print(“X”);
Serial.print(leftRightPos);
Serial.print(“V”);
Serial.println(average);
}
}


Descrição das variáveis ​​de configuração

numReadings permite configurar todas as medidas que foram detectada em cada posição do servo. O valor nesta posição irá ser uma média dos valores obtidos. Isto é usado para evitar possíveis erros na medição. Quanto mais aumentar este valor obtém-se uma medida mais precisa em pontos que possam existir ou múltiplas reflexões sonoras. Aumentar este valor implica em um tempo mais longo para rastrear uma área.

servoMin e ServoMax permite definir a duração mínima e máxima do pulso de saída para a servo correspondente a 0 ° e 180 °. É possível que dependendo do servo motor tem de mudar estes valores, fazendo  alguns testes preliminares. Se vemos que o servo faz todo o caminho ou faz movimentos de maneira  estranha, você deve alterar até acertar o curso.

[Ver projeto original]
Nova Eletrônica - Circuitos e projetos Eletrônicos grátis

Deixe um comentário