Tuesday, December 2, 2014

TRABAJO FINAL ILANIT LITMAN

VIDEO DEL PROYECTO Y RESUMEN:



CODIGO DE PROGRAMACION DE ARDUINO ILANIT LITMAN
/*
Proyecto sensor ultrasonido para Arduino
 */


#define echoPin 7 // Echo Pin
#define trigPin 8 // Trigger Pin
#define LEDPin 13 // Onboard LED

int maximumRange = 200; // Rango máximo 
int minimumRange = 0; // Rango mínimo 
long duration, distance; // Duración utilizada para calcular distancia

void setup() {
 Serial.begin (9600);
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);
 pinMode(LEDPin, OUTPUT); // 
}

void loop() {
/* Este ciclo determina la distancia del objeto más cercano rebotando ondas contra él 
*/ 
 digitalWrite(trigPin, LOW); 
 delayMicroseconds(2); 

 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10); 
 
 digitalWrite(trigPin, LOW);
 duration = pulseIn(echoPin, HIGH);
 
 //Calcular distancia (en cm) basada en velocidad del sonido.
 distance = duration/58.2;
 
 if (distance >= maximumRange || distance <= minimumRange){
 Serial.println("-1");
 digitalWrite(LEDPin, HIGH); 
 }
 else {
 /* Enviar distancia al computador utilizando protocolo serial, y apagar LED para indicar lectura apropiada. */
 Serial.println(distance);
 digitalWrite(LEDPin, LOW); 
 }
 
 //Delay 20ms before next reading.
 delay(20);
}

_________________________________

CODIGO DE PROCESSING ILANIT LITMAN

/*  processing sensor ultrasonido-representación gráfica 
 
*/
import processing.serial.*;


int numOfShapes = 60; // Número de cuadrados a representar en pantalla
int shapeSpeed = 2; // Velocidad en que los cuadrados se mueven a su nueva posición
 // 2 = Más rápido, Números mayores mas lentos

//Variables Globales
Square[] mySquares = new Square[numOfShapes];
int shapeSize, distance;
String comPortString;
Serial myPort;

/* -----------------------Setup ---------------------------*/
void setup(){
 size(displayWidth,displayHeight); //Utilizar toda la pantalla.
 smooth(); // Dibuja todas la figuras con bordes suavizados.
 
 /* Calcular el tamaño de los cuadrados e iniciar variedad de cuadrados */
 shapeSize = (width/numOfShapes); 
 for(int i = 0; i<numOfShapes; i++){
 mySquares[i]=new Square(int(shapeSize*i),height-40);
 }
 
 /*Abrir puerto para comunicación con Arduino*/
 myPort = new Serial(this, "/dev/tty.usbmodem411", 9600);
 myPort.bufferUntil('\n'); // Disparar nuevo evento serial en una nueva linea
}

/* ------------------------Draw -----------------------------*/
void draw(){
 background(0); //Fondo negro
 delay(50); //Delay de pantala
 drawSquares(); //Dibujar patrón de cuadros
}


/* ---------------------serialEvent ---------------------------*/
void serialEvent(Serial cPort){
 comPortString = cPort.readStringUntil('\n');
 if(comPortString != null) {
 comPortString=trim(comPortString);
 
 /* Utilizar la distancia recibida por Arduino para modificar la posición Y
 del primer cuadro (Los demás le siguen). 200 es la máxima distancia esperada. 
 Las distancia es luego asignada a un valor entre 1 y la altura de la pantalla.*/
 distance = int(map(Integer.parseInt(comPortString),1,200,1,height));
 if(distance<0){

 distance = 0;
 }
 }
}


/* ---------------------drawSquares ---------------------------*/
void drawSquares(){
 int oldY, newY, targetY, redVal, blueVal;
 
 /* Posición Y del primer cuadro basada en el valor recibido por el sensor */
 mySquares[0].setY((height-shapeSize)-distance);
 
 /* Refrescar la posición y el color de cada cuadrado */
 for(int i = numOfShapes-1; i>0; i--){
 /* Usar posición de cuadro anterior como objetivo */
 targetY=mySquares[i-1].getY();
 oldY=mySquares[i].getY();
 
 if(abs(oldY-targetY)<2){
 newY=targetY; //alineación
 }else{
 //caluclar nueva posición de cuadro
 newY=oldY-((oldY-targetY)/shapeSpeed);
 }
 //Ajustar nueva posición de cuadro
 mySquares[i].setY(newY);
 
 /*Calcular color de cuadro basado en posición en pantalla*/
 blueVal = int(map(newY,0,height,0,255));
 redVal = 255-blueVal;
 fill(redVal,0,blueVal);
 
 /* Dibujar cuadro en pantalla*/
 rect(mySquares[i].getX(), mySquares[i].getY(),shapeSize,shapeSize);
 }
}

/* ---------------------sketchFullScreen---------------------------*/
// Entrar en pantalla completa
boolean sketchFullScreen() {
 return true;
}

/* ---------------------CLASS: Square ---------------------------*/
class Square{
 int xPosition, yPosition;
 
 Square(int xPos, int yPos){
 xPosition = xPos;
 yPosition = yPos;
 }
 
 int getX(){
 return xPosition;
 }
 
 int getY(){
 return yPosition;
 }
 
 void setY(int yPos){
 yPosition = yPos;
 }
}

No comments:

Post a Comment