En este tutorial de Arduino, te mostraré cómo puedes hacer que este radar de aspecto genial use
la placa Arduino y el entorno de desarrollo de procesamiento. Puede ver el siguiente video o leer
el tutorial escrito a continuación para obtener más detalles.
Construyendo el dispositivo
Primero hice un soporte de cartón para conectar el sensor ultrasónico al Servo motor. Lo doblé
como se muestra en la siguiente imagen, lo pegué y aseguré al servomotor con un tornillo
como este.
También adjunté un encabezado de alfiler en el que soldé 4 cables de puente para conectar el
sensor.
Finalmente aseguré el servo motor a la placa Arduino usando una banda elástica.
Esquema de circuito
Conecté el sensor ultrasónico HC-SR04 a los pines número 10 y 11 y el servomotor al pin número
12 en la placa Arduino.
Códigos fuente
Ahora necesitamos crear un código y subirlo a la Junta de Arduino que permitirá la interacción
entre Arduino y el IDE de procesamiento. Para entender cómo funciona la conexión, haga clic aquí
para visitar mi Tutorial de procesamiento y Arduino .
Aquí está el código fuente de Arduino con una descripción de cada línea del código (ESPAÑOL)
INGLES
Ahora recibiremos los valores para el ángulo y la distancia medida por el sensor desde la placa
Arduino en el IDE de procesamiento usando la función SerialEvent () que lee los datos del puerto
serial y vamos a poner los valores del ángulo y la distancia en las variables iAngle e
iDistance. Esta variable se usará para dibujar el radar, las líneas, los objetos detectados y parte
del texto.
Para dibujar el radar hice esta función drawRadar () que consiste en funciones de arco () y line
() .
1. void drawRadar ( ) {
2. pushMatrix ( ) ;
3. traducir ( 960 , 1000 ) ; // mueve las coordinadas iniciales a la nueva ubicación
4. noFill ( ) ;
5. strokeWeight ( 2 ) ;
6. golpe ( 98 , 245 , 31 ) ;
7. // dibuja las líneas de arco
8. arco ( 0 , 0 , 1800 , 1800 , PI, TWO_PI ) ;
9. arco ( 0 , 0 , 1400 , 1400 , PI, TWO_PI ) ;
10. arco ( 0 , 0 , 1000 , 1000 , PI, TWO_PI ) ;
11. arco ( 0 , 0 , 600 , 600 , PI, TWO_PI ) ;
12. // dibuja las líneas de ángulo
13. línea ( - 960 , 0 , 960 , 0 ) ;
14. línea ( 0 , 0 , - 960 * cos ( radianes ( 30 ) ) , - 960 * sin ( radianes ( 30 ) ) ) ;
15. línea ( 0 , 0 , - 960 * cos ( radianes ( 60 ) ) , - 960 * sin ( radianes ( 60 ) ) ) ;
16. línea ( 0 , 0 , - 960 * cos ( radianes ( 90 ) ) , - 960 * sin ( radianes ( 90 ) ) ) ;
17. línea ( 0 , 0 , - 960 * cos ( radianes ( 120 ) ) , - 960 * sin ( radianes ( 120 ) ) ) ;
18. línea ( 0 , 0 , - 960 * cos ( radianes ( 150 ) ) , - 960 * sin ( radianes ( 150 ) ) ) ;
19. línea ( - 960 * cos ( radianes ( 30 ) ) , 0 , 960 , 0 ) ;
20. popMatrix ( ) ;
21. }
INGLES…………………………………………………………….
1. void drawRadar() {
2. pushMatrix();
3. translate(960,1000); // moves the starting coordinats to new location
4. noFill();
5. strokeWeight(2);
6. stroke(98,245,31);
7. // draws the arc lines
8. arc(0,0,1800,1800,PI,TWO_PI);
9. arc(0,0,1400,1400,PI,TWO_PI);
10. arc(0,0,1000,1000,PI,TWO_PI);
11. arc(0,0,600,600,PI,TWO_PI);
12. // draws the angle lines
13. line(-960,0,960,0);
14. line(0,0,-960*cos(radians(30)),-960*sin(radians(30)));
15. line(0,0,-960*cos(radians(60)),-960*sin(radians(60)));
16. line(0,0,-960*cos(radians(90)),-960*sin(radians(90)));
17. line(0,0,-960*cos(radians(120)),-960*sin(radians(120)));
18. line(0,0,-960*cos(radians(150)),-960*sin(radians(150)));
19. line(-960*cos(radians(30)),0,960,0);
20. popMatrix();
21. }
Para dibujar la línea que se mueve a lo largo del radar hice esta función drawLine () . Su centro
de rotación se establece con la función translate () y utilizando la función de línea () en la que se
utiliza la variable iAngle, la línea se vuelve a dibujar para cada grado.
1. void drawLine ( ) {
2. pushMatrix ( ) ;
3. strokeWeight ( 9 ) ;
4. golpe ( 30 , 250 , 60 ) ;
5. traducir ( 960 , 1000 ) ; // mueve las coordinadas iniciales a la nueva ubicación
6. line ( 0 , 0 , 950 * cos ( radianes ( iAngle ) ) , - 950 * sen ( radianes ( iAngle ) ) ) ; // dibuja la línea según el ángulo
7. popMatrix ( ) ;
8. }
INGLES
1. void drawLine() {
2. pushMatrix();
3. strokeWeight(9);
4. stroke(30,250,60);
5. translate(960,1000); // moves the starting coordinats to new location
6. line(0,0,950*cos(radians(iAngle)),-950*sin(radians(iAngle))); // draws the line according to the angle
7. popMatrix();
8. }
Para dibujar los objetos detectados hice esta función drawObject () . Toma la distancia del sensor
ultrasónico, lo transforma en píxeles y, en combinación con el ángulo del sensor, atrae el objeto en
el radar.
1. void drawObject ( ) {
2. pushMatrix ( ) ;
3. traducir ( 960 , 1000 ) ; // mueve las coordinadas iniciales a la nueva ubicación
4. strokeWeight ( 9 ) ;
5. golpe ( 255 , 10 , 10 ) ; // color rojo
6. pixsDistance = iDistance * 22.5 ; // cubre la distancia desde el sensor de cm a píxeles
7. // limitando el rango a 40 cms
8. if ( iDistance < 40 ) {
9. // dibuja el objeto según el ángulo y la distancia
10. line ( pixsDistance * cos ( radianes ( iAngle ) ) , -pixsDistance * sin ( radianes ( iAngle ) ) , 950 * cos ( radianes ( iAngle ) ) , - 950
* sin ( radianes ( iAngle ) ) ) ;
11. }
12. popMatrix ( ) ;
13. }
INGLES
1. void drawObject() {
2. pushMatrix();
3. translate(960,1000); // moves the starting coordinats to new location
4. strokeWeight(9);
5. stroke(255,10,10); // red color
6. pixsDistance = iDistance*22.5; // covers the distance from the sensor from cm to pixels
7. // limiting the range to 40 cms
8. if(iDistance<40){
9. // draws the object according to the angle and the distance
10. line(pixsDistance*cos(radians(iAngle)),-pixsDistance*sin(radians(iAngle)),950*cos(radians(iAngle)),-950*sin(radians(iAngle)));
11. }
12. popMatrix();
13. }
Para el texto en la pantalla hice la función drawText () que dibuja textos en ubicaciones
particulares.
Todas estas funciones se llaman en la función principal draw ()que se repite todo el tiempo y
dibuja la pantalla. También aquí estoy usando esta función de relleno () con 2 parámetros para
simular el desenfoque de movimiento y el desvanecimiento lento de la línea en movimiento.
1. void draw ( ) {
2.
3. llenar ( 98 , 245 , 31 ) ;
4. textFont ( orcFont ) ;
5. // simulando el desenfoque de movimiento y el desvanecimiento lento de la línea de movimiento
6. noStroke ( ) ;
7. llenar ( 0 , 4 ) ;
8. rect ( 0 , 0 , ancho, 1010 ) ;
9.
10. llenar ( 98 , 245 , 31 ) ; // color verde
11. // llama a las funciones para dibujar el radar
12. drawRadar ( ) ;
13. drawLine ( ) ;
14. drawObject ( ) ;
15. drawText ( ) ;
16. }
INGLES
1. void draw() {
2.
3. fill(98,245,31);
4. textFont(orcFont);
5. // simulating motion blur and slow fade of the moving line
6. noStroke();
7. fill(0,4);
8. rect(0, 0, width, 1010);
9.
10. fill(98,245,31); // green color
11. // calls the functions for drawing the radar
12. drawRadar();
13. drawLine();
14. drawObject();
15. drawText();
16. }
INGLES
Simplemente cambie los valores en la función size (), con su resolución de pantalla.