Realizado por: Aitor Manga Sosa, Jesús Medina Ruiz y Benjamín Ruiz-Mateos Fernández
PROGRAMACIÓN:
PROCESSING
import processing.serial.*;
Serial mipuerto;
String serialAngulo;
String serialDistancia;
String serialDatos;
float objetoDistancia;
int radarAngulo, radarDistancia;
int index=0;
void setup(){
size (1280, 720);
mipuerto = new Serial(this, Serial.list()[0], 9600);
mipuerto.bufferUntil('#');
frameRate(60);
}
void draw(){
noStroke();
fill(0,4);
rect(0, 0, 1280, 720);
fill(10,255,10);
//Radar Arcos y líneas
pushMatrix();
translate(640,666);
noFill();
strokeWeight(2);
stroke(10,255,10);
arc(0,0,1200,1200,PI,TWO_PI);
arc(0,0,934,934,PI,TWO_PI);
arc(0,0,666,666,PI,TWO_PI);
arc(0,0,400,400,PI,TWO_PI);
strokeWeight(4);
line(-640,0,640,0);
line(0,0,-554,-320);
line(0,0,-320,-554);
line(0,0,0,-640);
line(0,0,320,-554);
line(0,0,554,-320);
popMatrix();
// Líneas del radar
pushMatrix();
strokeWeight(5);
stroke(10,255,10); // color verde
translate(640,666);
line(0,0,640*cos(radians(radarAngulo)),-640*sin(radians(radarAngulo)));
popMatrix();
// Objeto detectado, líneas de color rojo
pushMatrix();
translate(640,666);
strokeWeight(5);
stroke(255,10,10); // color rojo
objetoDistancia = radarDistancia*15;
if(radarDistancia<40){ // si la distancia es menos de 40 cm
line(objetoDistancia*cos(radians(radarAngulo)),-objetoDistancia*sin(radians(radarAngulo)),633*cos(radians(radarAngulo)),-633*sin(radians(radarAngulo)));
}
popMatrix();
}
void serialEvent(Serial mipuerto){
serialDatos = mipuerto.readStringUntil('#');
serialDatos = serialDatos.substring(0,serialDatos.length()-1);
index = serialDatos.indexOf("*");
serialAngulo= serialDatos.substring(0, index);
serialDistancia= serialDatos.substring(index+1, serialDatos.length());
radarAngulo = int(serialAngulo);
radarDistancia = int(serialDistancia);
}
ARDUINO
#include <Servo.h>
const int trigPin = 10;
const int echoPin = 11;
long duracion;
int distanciaCM;
Servo radarServo;
void setup(){
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
radarServo.attach(12);
}
void loop(){
for(int i=0;i<=180;i++){
radarServo.write(i);
delay(50);
digitalWrite(trigPin, LOW);
delayMicroseconds(4);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duracion = pulseIn(echoPin, HIGH);
distanciaCM = duracion*0.034/2;
Serial.print(i);
Serial.print("*");
Serial.print(distanciaCM);
Serial.print("#");
}
for(int i=180;i>=0;i--){
radarServo.write(i);
delay(50);
digitalWrite(trigPin, LOW);
delayMicroseconds(4);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duracion = pulseIn(echoPin, HIGH);
distanciaCM = duracion*0.034/2;
Serial.print(i);
Serial.print("*");
Serial.print(distanciaCM);
Serial.print("#");
}
}