Que es un rover?

Un «rover explorador» es un vehículo diseñado específicamente para moverse sobre la superficie de un planeta, luna u otro cuerpo celeste. Estos vehículos robóticos son equipados con instrumentos científicos y tecnología avanzada para realizar investigaciones y recoger datos del entorno que exploran. A diferencia de los satélites o las sondas espaciales, que observan desde la órbita, los rovers pueden tomar muestras del suelo, capturar imágenes de alta resolución a nivel del suelo, analizar la composición de rocas y suelo, y realizar experimentos científicos.

Los rovers exploradores son fundamentales en misiones espaciales no tripuladas porque permiten a los científicos obtener información detallada y de primera mano sobre lugares inaccesibles para los humanos. Han sido utilizados en la Luna, Marte y se planifican misiones para otros destinos. Estos vehículos pueden ser controlados remotamente desde la Tierra o programados para operar de manera autónoma, navegando y tomando decisiones sobre el terreno a explorar.

Construir un rover explorador a escala, usando tecnologías accesibles como Raspberry Pi o Arduino, ofrece una excelente oportunidad educativa para aprender sobre robótica, programación, ingeniería y ciencias espaciales, promoviendo así el interés en la exploración espacial y la innovación tecnológica.




Barrera con sensor de ultrasonido

Este código utiliza un sensor ultrasónico para medir la distancia.

Si la distancia es menor a 15 cm, moverá el servo motor de 0 a 180 grados. Asegúrate de conectar los componentes según las especificaciones y ajusta los pines según tu configuración.

Además, ten en cuenta que este código es un punto de partida y puede necesitar ajustes según tus necesidades específicas. ¡Buena suerte con tu proyecto!

Este es un segundo ejemplo del codigo mejorado:




Radar con Arduino

En nuestro último proyecto, te llevamos al emocionante mundo de la tecnología radar casera. Descubre cómo crear un radar funcional desde cero utilizando componentes como una placa Arduino, un sensor de ultrasonido y un servo. Aprenderás a programar y controlar cada uno de estos elementos para construir un dispositivo que puede detectar objetos y representarlos en tiempo real. Desde la programación en Processing hasta la electrónica en Arduino, aqui te dejo lso dos codigos:

Codigo Arduino

// Includes the Servo library
#include <Servo.h>. 
// Defines Tirg and Echo pins of the Ultrasonic Sensor
const int trigPin = 10;
const int echoPin = 11;
// Variables for the duration and the distance
long duration;
int distance;
Servo myServo; // Creates a servo object for controlling the servo motor
void setup() {
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
  Serial.begin(9600);
  myServo.attach(12); // Defines on which pin is the servo motor attached
}
void loop() {
  // rotates the servo motor from 15 to 165 degrees
  for(int i=15;i<=165;i++){  
  myServo.write(i);
  delay(30);
  distance = calculateDistance();// Calls a function for calculating the distance measured by the Ultrasonic sensor for each degree
  
  Serial.print(i); // Sends the current degree into the Serial Port
  Serial.print(","); // Sends addition character right next to the previous value needed later in the Processing IDE for indexing
  Serial.print(distance); // Sends the distance value into the Serial Port
  Serial.print("."); // Sends addition character right next to the previous value needed later in the Processing IDE for indexing
  }
  // Repeats the previous lines from 165 to 15 degrees
  for(int i=165;i>15;i--){  
  myServo.write(i);
  delay(30);
  distance = calculateDistance();
  Serial.print(i);
  Serial.print(",");
  Serial.print(distance);
  Serial.print(".");
  }
}
// Function for calculating the distance measured by the Ultrasonic sensor
int calculateDistance(){ 
  
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH); 
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH); // Reads the echoPin, returns the sound wave travel time in microseconds
  distance= duration*0.034/2;
  return distance;
}

Codigo Procesing

import processing.serial.*; // imports library for serial communication
import java.awt.event.KeyEvent; // imports library for reading the data from the serial port
import java.io.IOException;
Serial myPort; // defines Object Serial
// defubes variables
String angle="";
String distance="";
String data="";
String noObject;
float pixsDistance;
int iAngle, iDistance;
int index1=0;
int index2=0;
PFont orcFont;
void setup() {
  
 size (1200, 700); // ***CHANGE THIS TO YOUR SCREEN RESOLUTION***
 smooth();
 myPort = new Serial(this,"COM8", 9600); // starts the serial communication
 myPort.bufferUntil('.'); // reads the data from the serial port up to the character '.'. So actually it reads this: angle,distance.
}
void draw() {
  
  fill(98,245,31);
  // simulating motion blur and slow fade of the moving line
  noStroke();
  fill(0,4); 
  rect(0, 0, width, height-height*0.065); 
  
  fill(98,245,31); // green color
  // calls the functions for drawing the radar
  drawRadar(); 
  drawLine();
  drawObject();
  drawText();
}
void serialEvent (Serial myPort) { // starts reading data from the Serial Port
  // reads the data from the Serial Port up to the character '.' and puts it into the String variable "data".
  data = myPort.readStringUntil('.');
  data = data.substring(0,data.length()-1);
  
  index1 = data.indexOf(","); // find the character ',' and puts it into the variable "index1"
  angle= data.substring(0, index1); // read the data from position "0" to position of the variable index1 or thats the value of the angle the Arduino Board sent into the Serial Port
  distance= data.substring(index1+1, data.length()); // read the data from position "index1" to the end of the data pr thats the value of the distance
  
  // converts the String variables into Integer
  iAngle = int(angle);
  iDistance = int(distance);
}
void drawRadar() {
  pushMatrix();
  translate(width/2,height-height*0.074); // moves the starting coordinats to new location
  noFill();
  strokeWeight(2);
  stroke(98,245,31);
  // draws the arc lines
  arc(0,0,(width-width*0.0625),(width-width*0.0625),PI,TWO_PI);
  arc(0,0,(width-width*0.27),(width-width*0.27),PI,TWO_PI);
  arc(0,0,(width-width*0.479),(width-width*0.479),PI,TWO_PI);
  arc(0,0,(width-width*0.687),(width-width*0.687),PI,TWO_PI);
  // draws the angle lines
  line(-width/2,0,width/2,0);
  line(0,0,(-width/2)*cos(radians(30)),(-width/2)*sin(radians(30)));
  line(0,0,(-width/2)*cos(radians(60)),(-width/2)*sin(radians(60)));
  line(0,0,(-width/2)*cos(radians(90)),(-width/2)*sin(radians(90)));
  line(0,0,(-width/2)*cos(radians(120)),(-width/2)*sin(radians(120)));
  line(0,0,(-width/2)*cos(radians(150)),(-width/2)*sin(radians(150)));
  line((-width/2)*cos(radians(30)),0,width/2,0);
  popMatrix();
}
void drawObject() {
  pushMatrix();
  translate(width/2,height-height*0.074); // moves the starting coordinats to new location
  strokeWeight(9);
  stroke(255,10,10); // red color
  pixsDistance = iDistance*((height-height*0.1666)*0.025); // covers the distance from the sensor from cm to pixels
  // limiting the range to 40 cms
  if(iDistance<40){
    // draws the object according to the angle and the distance
  line(pixsDistance*cos(radians(iAngle)),-pixsDistance*sin(radians(iAngle)),(width-width*0.505)*cos(radians(iAngle)),-(width-width*0.505)*sin(radians(iAngle)));
  }
  popMatrix();
}
void drawLine() {
  pushMatrix();
  strokeWeight(9);
  stroke(30,250,60);
  translate(width/2,height-height*0.074); // moves the starting coordinats to new location
  line(0,0,(height-height*0.12)*cos(radians(iAngle)),-(height-height*0.12)*sin(radians(iAngle))); // draws the line according to the angle
  popMatrix();
}
void drawText() { // draws the texts on the screen
  
  pushMatrix();
  if(iDistance>40) {
  noObject = "Out of Range";
  }
  else {
  noObject = "In Range";
  }
  fill(0,0,0);
  noStroke();
  rect(0, height-height*0.0648, width, height);
  fill(98,245,31);
  textSize(25);
  
  text("10cm",width-width*0.3854,height-height*0.0833);
  text("20cm",width-width*0.281,height-height*0.0833);
  text("30cm",width-width*0.177,height-height*0.0833);
  text("40cm",width-width*0.0729,height-height*0.0833);
  textSize(40);
  text("Elias-Robokids 2023 ", width-width*0.875, height-height*0.0277);
  text("Angulo: " + iAngle +" °", width-width*0.48, height-height*0.0277);
  text("Dist:", width-width*0.26, height-height*0.0277);
  if(iDistance<40) {
  text("        " + iDistance +" cm", width-width*0.225, height-height*0.0277);
  }
  textSize(25);
  fill(98,245,60);
  translate((width-width*0.4994)+width/2*cos(radians(30)),(height-height*0.0907)-width/2*sin(radians(30)));
  rotate(-radians(-60));
  text("30°",0,0);
  resetMatrix();
  translate((width-width*0.503)+width/2*cos(radians(60)),(height-height*0.0888)-width/2*sin(radians(60)));
  rotate(-radians(-30));
  text("60°",0,0);
  resetMatrix();
  translate((width-width*0.507)+width/2*cos(radians(90)),(height-height*0.0833)-width/2*sin(radians(90)));
  rotate(radians(0));
  text("90°",0,0);
  resetMatrix();
  translate(width-width*0.513+width/2*cos(radians(120)),(height-height*0.07129)-width/2*sin(radians(120)));
  rotate(radians(-30));
  text("120°",0,0);
  resetMatrix();
  translate((width-width*0.5104)+width/2*cos(radians(150)),(height-height*0.0574)-width/2*sin(radians(150)));
  rotate(radians(-60));
  text("150°",0,0);
  popMatrix(); 
}



Como usar un sensor de movimiento PIR

Para utilizar un sensor PIR (Sensor de Movimiento por Infrarrojos Pasivos) con Arduino y mostrar un mensaje en el monitor serial cuando detecte movimiento, puedes seguir estos pasos:

Materiales necesarios:

  1. Arduino (cualquier modelo compatible, como Arduino Uno, Nano, etc.).
  2. Sensor PIR.
  3. Cableado (cables jumper).
  4. Una computadora con el entorno de desarrollo de Arduino instalado.

Pasos a seguir:

  1. Conecta el sensor PIR al Arduino de la siguiente manera:

  • Conecta el pin VCC del sensor PIR al pin 5V del Arduino.
  • Conecta el pin GND del sensor PIR al pin GND del Arduino.
  • Conecta el pin OUT del sensor PIR al pin digital 2 del Arduino.

  1. Abre el entorno de desarrollo de Arduino en tu computadora.
  2. Crea un nuevo proyecto o sketch en Arduino.
  3. Escribe el siguiente código en el sketch:
int pirPin = 2;  // Pin digital al que está conectado el sensor PIR

void setup() {
  Serial.begin(9600);  // Inicializar la comunicación serial
  pinMode(pirPin, INPUT);  // Configurar el pin del sensor PIR como entrada
}

void loop() {
  int movimiento = digitalRead(pirPin);  // Leer el valor del sensor PIR

  if (movimiento == HIGH) {  // Si se detecta movimiento
    Serial.println("Objeto detectado");  // Imprimir el mensaje en el monitor serial
    delay(1000);  // Esperar 1 segundo para evitar múltiples detecciones rápidas
  }
}

  1. Verifica y carga el código en tu Arduino.
  2. Abre el Monitor Serial en el entorno de Arduino para ver los resultados. Asegúrate de que la velocidad de baudios en el Monitor Serial coincida con la velocidad especificada en el código (9600 en este caso).
  3. Cuando el sensor PIR detecte movimiento, verás el mensaje «Objeto detectado» en el Monitor Serial.

Este código simple leerá el estado del sensor PIR en el pin 2 y mostrará el mensaje en el Monitor Serial cada vez que detecte movimiento. Asegúrate de que el sensor esté configurado y conectado correctamente para que funcione de manera efectiva.