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