Materiales:
1 x HC-SR04
4 x cables de puente
1 placa x
1 x arduino
Aquí está el código para el arduino:
/*
Sensor de distancia HC-SR04 Ping:
VCC de 5v de arduino
GND a GND de arduino
Echo a Arduino pin 7
Trigonométricas para Arduino pin 8
Este bosquejo origina Virtualmix: http://goo.gl/kJ8Gl
Ha sido modificado por la tinta del caracol aquí: http://winkleink.blogspot.com.au/2012/05/arduino-hc-sr04-ultrasonic-distance.html
Y aún más modificado por ScottC aquí: http://arduinobasics.blogspot.com.au/2012/11/arduinobasics-hc-sr04-ultrasonic-sensor.html
en 10 de noviembre de 2012.
*/
#define echoPin 7 / / Echo Pin
#define trigPin 8 / / pasador del gatillo
#define LEDPin 13 / LED a bordo
int maximumRange = 200; Rango máximo necesitada
int minimumRange = 0; Rango mínimo necesitada
larga duración, distancia; Duración permite calcular la distancia
void setup() {}
Serial.Begin (9600);
pinMode (trigPin, salida);
pinMode (echoPin, entrada);
pinMode (LEDPin, salida); Utilizar indicador LED (si procede)
}
void loop() {}
/ * El siguiente ciclo trigPin/echoPin se utiliza para determinar la
distancia del objeto más cercano por rebote de ondas sonoras de él. */
digitalWrite (trigPin, LOW);
delayMicroseconds(2);
digitalWrite (trigPin, HIGH);
delayMicroseconds(10);
digitalWrite (trigPin, LOW);
duración = pulseIn (echoPin, HIGH);
Calcular la distancia (en cm) basada en la velocidad del sonido.
distancia = duración/58.2;
Si (distancia > = maximumRange || distancia < = minimumRange) {}
/ * Enviar un número negativo a computadoras y a su vez LED encendido
para indicar "fuera de rango" * /
Serial.println("-1");
digitalWrite (LEDPin, alto);
}
Else {}
/ * Enviar la distancia a la computadora utilizando el protocolo Serial, y
Apague el LED para indicar lectura exitosa. */
Serial.println(Distance);
digitalWrite (LEDPin, LOW);
}
Retardo de 50ms antes de la próxima lectura.
Delay(50);
}
Aquí está el código de procesamiento
/ * El siguiente bosquejo de procesamiento fue creado por ScottC de
el 10 de noviembre de 2012: http://arduinobasics.blogspot.com/
Inspirado en este esbozo de transformación por Daniel Shiffman:
http://Processing.org/Learning/Basics/sinewave.html
*/
Import processing.serial.*;
int numOfShapes = 60; Número de plazas para visualizar en pantalla
int shapeSpeed = 2; Velocidad a la que las formas de mover a nueva posición
2 = más rápido, números más grandes son más lentos
Variables globales
Cuadrado [] mySquares = nueva plaza [numOfShapes];
int shapeSize, distancia;
String comPortString;
Serie myPort;
/* -----------------------Setup ---------------------------*/
void setup() {}
Size(displayWidth,displayHeight); Utilice el tamaño de la pantalla entera.
Smooth(); dibuja todas las formas con bordes lisos.
/ * Calcular el tamaño de los cuadrados e inicializar la matriz de plazas * /
shapeSize = (anchura/numOfShapes);
para (int i = 0; i < numOfShapes; i ++) {}
mySquares [i] = nuevo Square(int(shapeSize*i),height-40);
}
/ * Abrir el puerto serie para comunicación con el Arduino
Asegúrese de que el puerto COM correcto - yo estoy usando el puerto COM 8 * /
myPort = serie nueva (, "/ dev/cu.usbmodem1421", 9600);
myPort.bufferUntil('\n'); Desencadenar una SerialEvent en una nueva línea
}
/* ------------------------Draw -----------------------------*/
void draw() {}
Background(0); El fondo negro
Delay(50); Retraso utilizado para refrescar la pantalla
drawSquares(); Dibujar el patrón de cuadrados
}
/* ---------------------serialEvent ---------------------------*/
void serialEvent(Serial cPort) {}
comPortString = cPort.readStringUntil('\n');
Si (comPortString! = null) {}
comPortString=trim(comPortString);
/ * Uso de la distancia recibida por Arduino para modificar la posición y
de la primera plaza (habrá). Debe coincidir con el
configuración de código de Arduino. En este caso 200 es el máximo
distancia de espera. La distancia entonces se asigna un valor
entre la 1 y la altura de la pantalla * /
distancia = int(map(Integer.parseInt(comPortString),1,200,1,height));
if(Distance<0) {}
/ * Si el equipo recibe un número negativo (-1), entonces el
sensor informa un error de "fuera de rango". Convertir todos los
de estos a una distancia de 0. */
distancia = 0;
}
}
}
/* ---------------------drawSquares ---------------------------*/
void drawSquares() {}
newY oldY, int, targetY, redVal, blueVal;
/ * Establecer la posición Y de la plaza 1 º basada en
valor del sensor recibido * /
mySquares[0].setY((height-shapeSize)-distance);
/ * Actualización de la posición y el color de cada una de las plazas * /
para (int i = numOfShapes-1; i > 0; i--) {}
/ * Usar posición anterior de la plaza como destino * /
targetY=mySquares[i-1].getY();
oldY=mySquares[i].getY();
if(ABS(oldY-targetY) < 2) {}
newY = targetY; Esto ayuda a hasta
} else {}
calcular la nueva posición de la Plaza
newY=oldY-((oldY-targetY)/shapeSpeed);
}
Establece la nueva posición de la Plaza
mySquares[i].setY(newY);
/ * Calcular el color de la Plaza de base en su
posición en la pantalla * /
blueVal = int(map(newY,0,height,0,255));
redVal = 255-blueVal;
Fill(redVal,0,blueVal);
/ * Dibujar el cuadrado en la pantalla * /
Rect(mySquares[i].getX(), mySquares[i].getY(),shapeSize,shapeSize);
}
}
/ *---sketchFullScreen---* /
Esto pone el proceso en modo de pantalla completa
Boolean sketchFullScreen() {}
verdaderas;
}
/* ---------------------CLASS: Square ---------------------------*/
clase {cuadrado}
int xPosition, yPosition;
Cuadrado (int xPos, yPos int) {}
xPosition = xPos;
yPosition = yPos;
}
int getX() {}
volver xPosition;
}
int getY() {}
volver yPosition;
}
void setY (int yPos) {}
yPosition = yPos;
}
}