Robot Sanduino seguidor de línea

En el siguiente video se muestra el Robot Sanduino A01 seguidor de línea.

El programa siguiente, es la versión inicial para lograr que el robot siga la línea como se muestra en el video.

/* Programa: SanduinoSigueLinea.ino
   Autor:    Julio Sandria (Enero 2015)
             Taller Robótica 2015
   Robot Sanduino seguidor de línea 
   con dos sensores de luz             
*/

int pinSensorLuzI = 2;
int pinSensorLuzD = 4;
int valorSensorLuzI = 0;
int valorSensorLuzD = 0;
int tAvanza = 50;
int tGiro = 50;
int tAlto = 50;

void setup() {
  pinMode(pinSensorLuzI,INPUT);
  pinMode(pinSensorLuzD,INPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
  delay(3000);
}

void loop() {
  valorSensorLuzI = digitalRead(pinSensorLuzI);
  valorSensorLuzD = digitalRead(pinSensorLuzD);

  if( valorSensorLuzI == 0 && valorSensorLuzD == 0 ) {
    avanza(tAvanza); 
  } 
  
  if( valorSensorLuzI == 1 ) {
    izquierda(tGiro);
  } 
  
  if( valorSensorLuzD == 1 ) {
    derecha(tGiro);
  }  
  
  alto(tAlto);
}

void avanza(int ms) {
  digitalWrite(6,HIGH);
  digitalWrite(7,LOW);
  digitalWrite(8,HIGH);
  digitalWrite(9,LOW);
  delay(ms);
}

void retrocede(int ms) {
  digitalWrite(6,LOW);
  digitalWrite(7,HIGH);
  digitalWrite(8,LOW);
  digitalWrite(9,HIGH);
  delay(ms);  
}

void izquierda(int ms) {
  digitalWrite(6,HIGH);
  digitalWrite(7,LOW);
  digitalWrite(8,LOW);
  digitalWrite(9,HIGH);
  delay(ms);  
}

void derecha(int ms) {
  digitalWrite(6,LOW);
  digitalWrite(7,HIGH);
  digitalWrite(8,HIGH);
  digitalWrite(9,LOW);
  delay(ms);
}

void alto(int ms) {
  digitalWrite(6,LOW);
  digitalWrite(7,LOW);
  digitalWrite(8,LOW);
  digitalWrite(9,LOW);
  delay(ms);
}

Copia el programa en el software Arduino y cárgalo a la tarjeta Arduino del Robot Sanduino A01.

¿Quieres aumentar la velocidad del robot? Prueba cambiando poco a poco las variables tAvanza, tGiro y tAlto.

 

Robot Sanduino – Sensor ultrasónico

El robot Sanduino A01 está equipado con un sensor ultrasónico HC-SR04 como el de la figura siguiente.

sensor-ultrasonico-hc-sr04_3

Para usar este sensor debes descargar la librería NewPing que está en esta dirección: http://playground.arduino.cc/Code/NewPing.

Es un archivo comprimido en formato zip que debes descomprimir, y la carpeta NewPing copiarla a la carpeta Arduino\libraries que debe estar en tu carpeta Documentos.

Este sensor lo puedes probar con el siguiente programa.

/* Programa: SensorUltrasonico.ino
 Autor: Julio Sandria (Enero 2015)
 Taller Robótica 2015 
*/

// Descargar NewPing: http://playground.arduino.cc/Code/NewPing
// Copia la carpeta NewPing en la carpeta ..\Arduino\libraries
#include <NewPing.h>

// PIN TRIGGER de sensor ultrasónico a PIN 11 de Arduino.
#define PIN_TRIGGER 11
// PIN ECHO de sensor ultrasónico a PIN 12 de Arduino:
#define PIN_ECHO 12
// Máxima distancia a medir en centímetros:
#define MAX_DISTANCIA 200 
// La distancia máxima del sensor es 400-500 cm. 

// La siguiente linea configura pines y distancia.
NewPing sonar(PIN_TRIGGER, PIN_ECHO, MAX_DISTANCIA);

int uS, distancia;

void setup() {
 // Abrir monitor serial a 9600 bauds/seg para ver resultados:
 Serial.begin(9600); 
}

void loop() {
 // Esperar 500ms entre pings (cerca de 20 pings/sec).
 // 29ms debe ser el menor tiempo entre pings.
 delay(500); 
 
 // Envía ping, obtiene tiempo ping en microsegundos (uS): 
 uS = sonar.ping();
 
 // Convertir tiempo ping a distancia.
 // (0 = distancia fuera de rango, no hay eco de ping).
 distancia = uS / US_ROUNDTRIP_CM; 
 
 Serial.print("Distancia: ");
 Serial.print(distancia); // Imprimir distancia 
 Serial.println("cm");
}

Copia el programa en el software Arduino y cárgalo a la tarjeta Arduino. Una vez cargado el programa y con la tarjeta aún conectada a la computadora, abre el Monitor Serial, en el cual podrás ver la lectura del sensor ultrasónico.

Acerca un objeto al sensor para verificar que esté funcionando apropiadamente.

Robot Sanduino – Sensores de luz

El robot Sanduino A01 está equipado con dos sensores de luz TCRT5000. Este sensor emite una luz infrarroja y detecta la cantidad de luz que se refleja en los objetos.

Sensor-de-luz-TCRT5000-300x200

Al colocar el emisor/receptor hacia el piso, puede detectar una línea negra colocada sobre un piso claro. Al usarlo así se le llama también sensor de línea. El emisor/receptor debe estar a una distancia aproximada de 5mm del piso y colocado como lo muestra la siguiente figura.

Sensores-de-linea-Sanduino-800x400

Cada sensor de luz tiene cuatro conectores, ambos sensores se deben conectar así en el robot Sanduino:

  • VCC – Al positivo del protoboard, que está conectado a 5V de Arduino.
  • GND – Al negativo del protoboard, que está conectado a GND de Arduino.

Para el sensor izquierdo:

  • DO (Data Output) – Al pin 2 de Arduino.
  • AO (Analog Output) – No lo usamos.

Para el sensor derecho:

  • DO (Data Output) – Al pin 4 de Arduino.
  • AO (Analog Output) – No lo usamos.

Con estas conexiones, se puede probar este programa ejemplo:

/* Programa: SensorLuz1.ino 
   Autor:    Julio Sandria (Enero 2015)
   Requiere un sensor de luz TCRT5000 conectado al
   pin 2 de Arduino.
*/

int pinSensorLuz1 = 2;
int valorSensorLuz1 = 0;
int valorSensorLuz1anterior = -1;

void setup() {
  pinMode(pinSensorLuz1,INPUT);
  Serial.begin(9600);
  Serial.println("Esperando 3 segundos...");
  delay(3000);
}

void loop() {
  valorSensorLuz1 = digitalRead(pinSensorLuz1);
  if( valorSensorLuz1 != valorSensorLuz1anterior ) {
    Serial.print( "valorSensorLuz1 = " );
    Serial.println( valorSensorLuz1 ); 
  }
  valorSensorLuz1anterior = valorSensorLuz1;
  delay(1000);
}

Copia el programa en el software Arduino y cárgalo a la tarjeta Arduino. Una vez cargado en Arduino, abre el Monitor Serial.

Observa lo que se muestra en el Monitor Serial cuando apuntas el sensor a una superficie clara y a una superficie obscura.

Robot Sanduino – Motores CD

El Robot Sanduino A01 usa dos motores de Corriente Directa (CD), los cuales se pueden conectar como se muestra en la siguiente figura.

SanduinoA01-MotoresCD

El puente H y la tarjeta Arduino UNO deben estar atornillados a la base superior del Robot Sanduino A01, usando un espaciador entre cada tarjeta de circuitos y la base superior, para evitar que las tarjetas se tuerzan al apretar los tornillos.

Las líneas de colores que unen conectores representan cables, que no necesariamente son de los colores mostrados.

Con el siguiente programa, puedes probar que todo el sistema esté apropiadamente conectado.

/* Programa: Sanduino_Motores.ino
   Autor: Julio Sandria (Enero 2015)
   Requiere: Robot Sanduino A01, con puente H
   y Arduino UNO conectados.
   Mueve el motor izquierdo con pines 6 y 7
   Mueve el motor derecho con pines 8 y 9
*/

void setup() {
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
}

void loop() {
  // Robot avanza 2 segundos
  digitalWrite(6,HIGH);
  digitalWrite(7,LOW);
  digitalWrite(8,HIGH);
  digitalWrite(9,LOW);
  delay(2000);
  
  // Robot retrocede 2 segundos
  digitalWrite(6,LOW);
  digitalWrite(7,HIGH);
  digitalWrite(8,LOW);
  digitalWrite(9,HIGH);
  delay(2000);  
}

Carga el programa en la tarjeta Arduino UNO del robot.

NOTA: Asegúrate de conectar una fuente de energía al interruptor y otra fuente de energía a Arduino UNO.

Al iniciar el programa, el robot debe avanzar dos segundos. Si en lugar de esto el robot retrocede, entonces hay que cambiar la polaridad de los cables conectados a los motores y al puente H.

Si al iniciar el programa, el robot gira hacia un lado dos segundos, hay que invertir la polaridad de los cables del motor conectado hacia el lado que gira.

Programación en lenguaje C – Hola mundo!

El siguiente programa, es un ejemplo muy sencillo de programa en lenguaje C.

/* Programa: hola.c
   Autor: Julio Sandria
   Ejemplo Hola mundo!
*/

#include <stdio.h>

void main()
{
    printf("Hola mundo!");
}

Para ejecutar el programa anterior, abre Code::Blocks, selecciona la opción File, después New, después Empty File. Esto creará un archivo vacío. Escribe o pega el código anterior en la sección de programación, como se ilustra en la imagen siguiente.

CodeBlocks13.12-hola

Guarda el programa con el nombre hola.c (File | Save File). Al hacer esto, Code::Blocks, reconoce el códico como un programa en C y lo muestra en colores.

Ejecuta el programa (Build | Run). Esto abrirá una terminal o ventana de símbolo de sistema (en Windows) como la siguiente.

Ejecucion-hola

Observa que en la primera línea de la parte interior de la ventana está la frase Hola mundo!. Esto es lo que hace el programa, imprimir en la salida estándar (una terminal o ventana de comandos) dicho texto.

Las primeras cuatro líneas del programa son comentarios, que no tienen ningún efecto en el programa, son para que nosotros podamos poner algún texto. Los comentarios con muchas líneas empiezan con los caracteres /* y terminan con los caracteres */.

La línea 6 del programa contiene la instrucción include:

#include <stdio.h>

Esta línea le indica al compilador que en esa posición incluya una librería llamada stdio.h, la cual contiene la definición de instrucciones como printf que se usa a continuación.

Todo programa en C tiene una función main(), que es el punto inicial de ejecución de un programa.

La línea 8, void main() indica que allí inicia la función principal (main). Todo el contenido de la función está entre los símbolos { y }.

void main()
{
    printf("Hola mundo!");
}

La función main está definida únicamente por una línea, que tiene la función printf(«Hola mundo!»), la cual lo único que hace es imprimir la frase Hola mundo!, en la salida estándar de la computadora, la cual por omisión una ventana donde se ejecuta el programa (terminal o símbolo de sistema).

Blink – Encender y Apagar un LED con Arduino

¿Cómo controlar un LED con Arduino?

Arduino UNO y otros modelos de tarjetas Arduino, tienen incorporado un LED conectado al PIN 13, como se ilustra en la siguiente imagen, donde el LED está señalado en rojo.

arduinounor3frontsupledpin13

El programa siguiente hace que Arduino encienda y apague el LED conectado al PIN 13.

/* Programa: Blink.ino
   Modificado por: Julio Sandria
   Enciende un LED por dos segundos, y después
   lo apaga un segundo, repite esto siempre hasta
   que se apague Arduino
*/
void setup() {
  // inicializa el pin digital 13 como una salida
  // El pin 13 tiene un LED conectado en la
  // mayoria de las tarjetas Arduino
  pinMode(13,OUTPUT);
}
void loop() {
  // loop = bucle, ciclo
  // loop() se repite siempre hasta que se apague Arduino
  digitalWrite(13,HIGH);  // Enciende el LED
  delay(2000);            // Espera 2000 milisegundos (2 segundos)
  digitalWrite(13,LOW);   // Apaga el LED
  delay(1000);            // Espera 1 segundo
}

Este es solo un programa de ejemplo. Para controlar LEDs externos a Arduino consulta nuestra página: Arduino Blink Monitor Ejemplo.

Riego automatizado de plantas con Arduino

El cuidado de las plantas que tenemos en el jardín o macetas en nuestra casa, escuela u oficina, es muchas veces una actividad relajante y que nos da un rato de distracción de nuestras actividades rutinarias. Pero esto ya no es relajante cuando no tenemos el “don” o el tiempo para cuidarlas y vemos cómo se van muriendo poco a poco las pobres plantitas por falta o exceso de agua, luz o temperatura.

De modo que a quienes nos gusta hacer uso de la tecnología, generalmente aprovechamos cuanta ocasión se nos presenta para hacerlo…

Puedes leer más información de este proyecto en la página siguiente:

Cómo mimar tus plantas con tecnología digital

Prototipo de robot Lego futbolista programado en Java

En este documento se presenta un prototipo de robot futbolista construido con el paquete Lego Mindstirms Robotics Invention System 2.0 y programado en Java usando lejos. En este artículo se presenta una introducción a los robots futbolistas y la construcción inicial y programación básica del robot Lego futbolista (RoLeF).

Technical Report · February 2007
DOI: 10.13140/RG.2.2.10156.67208

Aprendiendo y aplicando Inteligencia Artificial con Robots Móviles

Aprender inteligencia artificial a veces es una tarea muy frustrante cuando intentas entenderlo con mucha teoría y un poco de práctica. Este artículo pretende ilustrar que el aprendizaje de la inteligencia artificial podría ser atractivo y de entretenimiento cuando intentas construir robots que muestren un comportamiento inteligente como ver, oír, hablar, moverse, e incluso aprender. Usamos Robots Lego móviles y Java para aprender y aplicar algunas técnicas de Inteligencia Artificial como redes neuronales, algoritmos genéticos, visión por computadora, reconocimiento de voz y síntesis de voz.

Tabla 1. Tecnologías Java usadas con robots Lego

Java Technology Mean and use
J2SDK Java 2 Software Development Kit to compile and run Java programs
LeJOS Lego Java Operating System to run Java programs inside the RCX
LMbpn A Lego Mindstorms Backpropagation Neural Network (own)
LMsga A Lego Mindstorms Simple Genetic Algorithm (own)
JFM Java Media Framework for Computer Vision
JSAPI & Sphinx Java Speech API and Sphinx for Speech Recognition
JSAPI & Sphinx Java Speech API and Sphinx for Speech Synthesis

Artículo en inglés:
Sandria Reynoso, Julio César, Mario Morales García y Arturo Mendoza Rendón. 2006. Learning and applying artificial intelligence with mobile robots. Research in Computer Science. Vol. 20, pp. 191-198.
Disponible en https://www.researchgate.net/publication/310771450.