Este tipo de robot es muy popular y fácil de construir, la presente es una guía de como hacer uno con componentes fáciles de conseguir.
El robot tipo ratón esta propuesta para que el constructor pueda hacer sus propias variantes e innovaciones y también para que explores con otros materiales, este robot es un reto al ingenio para aquellos que se inician en el mundo de la robótica.
Robot tipo ratón V1
Esta primera versión de este robot tendrá un sistema mecánico para detectar y eludir obstáculos.
En las siguientes versiones se le añadirá mas inteligencia al robot de manera que pueda ser programado con un microcontrolador.
Componentes robot ratón V1
Componentes:
Motores
Interruptores pulsadores
Cables
Batería preferiblemente recargable
Palo de plástico o madera
Clips o alambre
Montaje de los motores
Motores en los extremos del robot
Los motores se pegaran con silicona en los extremos laterales del robot, también se les soldaran dos cables
Vista frontal de los motores en el robot
En este caso se empleo una batería de teléfono para el cuerpo del robot, los motores están pegado con una inclinación de aproximadamente 45 grados.
Configuración de los interruptores
Pulsador de lengüeta de 3 terminales
El terminal C es común a los otros dos terminales NO y NC, ambos están conectados en este terminal.
Si el pulsador no es presionado el terminal NO esta como un interruptor abierto con respecto al punto común, es decir entre los terminales C y NO no hay continuidad a no ser que se presione el interruptor, por esto se dice que el interruptor esta normalmente abierto entre estos dos terminales.
Si el pulsador es presionado el terminal NC esta como un interruptor cerrado con respecto al punto común, es decir entre los terminales C y
NC hay continuidad a no ser que se presione el interruptor, por esto
se dice que el interruptor esta normalmente cerrado entre estos dos
terminales.
Las conexiones para el robot se harán entre el punto común C y el terminal normalmente cerrado NC.
Cables en el punto común y normalmente cerrado
Este tipo de conexión servirá para apagar el motor en caso de que el interruptor sea presionado y abra el circuito.
Para la odómetria de la plataforma móvil es necesario que el conteo del codificador óptico de rotación pueda ser controlado. Cuando se emplea la función onFwd y OnRev el conteo de la rotacion del motor es reiniciado constantemente y no se puede hacer los calculos necesarios para determinar la posición de la plataforma.
Estas funciones son similares a onFwd() y OnRev() pero con la opción de seleccionar por medio de 5 constantes el modo de controlar el codificador optico (tacometro) de la plataforma móvil, estas opciones son:
RESET_NONE para no reiniciar el contador del codificador óptico.
RESET_COUNT para reiniciar el contador del codificador óptico.
Retorna el valor en grados de la posición relativa del motor. Hay que indicar el puerto en que esta conectado el motor. El valor que se retorna no vuelve a ser cero después de completar 360 grados, después de un giro el valor siguiente seria 361 grados y así sucesivamente.
Los puertos de conexión para los motores son OUT_A OUT_B OUT_C
El tipo de valor que retorna es long por lo que el valor en grados almacenado puede ser bastante grande.
long ValorGrados; //variable tipo long donde se guardara el valor en grados ValorGrados = MotorRotationCount(OUT_A);//Almacena el valor del motor A
Ejemplo de aplicación:
void GirarRobotI(long GRADOS, int POTENCIA){
long GradosActual;
long GradosGirados=0;//Inicializar en cero
GradosActual= MotorRotationCount(OUT_A);
while(GradosGirados<=GRADOS){
OnRev(OUT_B, POTENCIA);
OnFwd(OUT_A, POTENCIA);
GradosGirados=MotorRotationCount(OUT_A)-GradosActual;
NumOut(0,0,GradosGirados);
}
Off(OUT_AB);
TextOut(0, LCD_LINE3,"TerminoI");
}
//Funcion para girar el robot a la derecha (en realidad los grados son del motor)
void GirarRobotD(long GRADOS, int POTENCIA){
long GradosActual;
long GradosGirados=0;//Inicializar en cero
GradosActual= MotorRotationCount(OUT_B);
while(GradosGirados<=GRADOS){
OnFwd(OUT_B, POTENCIA);
OnRev(OUT_A, POTENCIA);
GradosGirados= MotorRotationCount(OUT_B)-GradosActual;
NumOut(0,0,GradosGirados);
}
Off(OUT_AB);
TextOut(0, LCD_LINE3,"TerminoD");
}
task main(){
while (true){
GirarRobotD(180,70);
Wait(1000);
GirarRobotI(180,70);
Wait(1000);
}
}
En la presente publicación trata de aplicar varios de los conceptos que se aprenden en los cursos básicos de programación mediante un video juego tipo Ping Pong.
Ejemplo 1 Como desplazar una bola en pantalla y hacer que esta rebote.
Codigo Empleado En Ejemplo 1 int BolaX = 0; int BolaY = 10; int IncX = 1; int IncY = 1; int AnchoPantalla = 100; int AltoPantalla = 100; void setup() { size(AnchoPantalla, AltoPantalla); frameRate(10); } void draw() { background(255); ellipse(BolaX, BolaY, 10, 10); BolaX=BolaX+IncX; BolaY=BolaY+IncY; println("Posicion Bola X = "+BolaX); println("Posicion Bola Y = "+BolaY); if (BolaX<=0 || BolaX>=AnchoPantalla) { IncX=IncX*(-1); } if (BolaY<=0 || BolaY>=AltoPantalla) { IncY=IncY*(-1); } }
Elaboración básica de un programa en Processing para leer datos enviados desde un microcontrolador, en este ejemplo Arduino.
En este ejemplo solo se hace lectura de datos tipo entero desde Processing.
Instrucciones Empleadas Para La Comunicación
import processing.serial.* : Importa la librería para la comunicación, esta librería ya esta incluida en processing.
Serial MiPuerto: Instancia o declara un objeto que se empleara para el manejo del puerto serial.
Serial.list() : Da un listado de los puertos seriales disponibles en el computador, sirve para determinar en que posición del listado esta el puerto que se empleara en la comunicación
new Serial(this, ListaPuertos[0], 9600): Inicializa el objeto puerto serial, en este ejemplo el puerto que esta en la posición 0 del listado a una velocidad de comunicación de 9600 baudios.
MiPuerto.read() : Instrucción para la lectura de datos enviados por el puerto serial, la lectura se hace del buffer o pila que almacena los datos enviados. El buffer o pila puede almacenar muchos datos que son leídos uno a uno.
MiPuerto.clear() : Limpia el buffer o pila que almacena los datos seriales recibidos, es útil para una lectura inmediata del dato enviado por el microcontrolado a costa de la perdida de datos.
Processing tiene la clase String que permite hacer manejo de cadena de caracteres lo que facilita el envío y recepción de estas por medio del puerto serial.
En el siguiente ejemplo el envío de la cadena se hace desde la tarjeta Arduino y la recepción se hace en Processing.
La cadena ser recibe desde processing con la instrucción
CadenaRecibida = MiPuerto.readStringUntil('\n');
El metodo readStringUntil indica que se hace la lectura hasta que encontrar un salto de linea que se indica con'\n' en Arduino se emplea la instrucción
Serial.println("Hola Mundo");
Para enviar una cadena de caracteres con salto de linea
voidloop()
{
if (Serial.available() >0) {
Dato = Serial.read();
if(val =='1'){
ledState =!ledState; //Cambia de estado
digitalWrite(13, ledState);
}
delay(100);
} else {
Serial.println("Listo para recibir");
delay(50);
}
}
voidestablecerComunicacion() {
while (Serial.available() <=0) {
Serial.println("A");//Envia el caracter A procurando establecer comunicacion
delay(300);
}
}
Código de Processing
import processing.serial.*; String ListaPuertos[]; String CadenaRecibida; Serial MiPuerto;
booleanEstableComunicacion=false;
void setup() { println(Serial.list()); ListaPuertos=Serial.list(); println(ListaPuertos[0]); MiPuerto=new Serial(this, ListaPuertos[0], 9600); println(MiPuerto); MiPuerto.bufferUntil('\n');//Envia el evento hasta detectar un fin de linea } voiddraw() {
//Nada de momento
}
voidserialEvent( Serial myPort) {
CadenaRecibida= myPort.readStringUntil('\n');
if (CadenaRecibida!=null) {//Verifica que la cadena no este vacia
CadenaRecibida=trim(CadenaRecibida);//Elimina espacios y saltos de linea de cadena
println(CadenaRecibida);//Muestra en la consola la cadena recibida
if (EstableComunicacion==false) {//Si no se ha establecido por primera vez la comunicacion
if (CadenaRecibida.equals("A")) {//Si la cadena recibida es la letra A
MiPuerto.clear();//Limpia buffer
EstableComunicacion=true;//Indica que se estableció comunicacion
MiPuerto.write("A");//Envia el caracter A la la tarjeta Arduino
println("Se estableció comunicacion");//Muestra en la consola que ya hay comunicacion
}
} else {//Ya hay comunicacion con la tarjeta
println(CadenaRecibida);//Muestra en consola la cadena recibida
if (mousePressed ==true) {//Si el raton es presionado
MiPuerto.write('1');//Envia el caracter 1
println("1");//Muestra en consola que se envio el 1
}
MiPuerto.write("A");//Envia el caracter A procurando establecer comunicacion
}
}
}
Una de la inquietudes con la tarjeta pinguino es su posibilidad de emplearla para aplicaciones compiladas en otros leguajes (CCS, PIC18, COWBASIC). Explorando la Web me encontre con una modificación realizada en la pagina de microembebidos
En la pagina lo que se expone es la implementacion de un Bootloader que descargado en la tarjeta pinguino permite descargar los archivos .hex de las aplicaciones realizadas con otros compiladores diferentes a Pinguino.
La instalación no se ha probado en windows 8 , pero quizas necesite la instalacion en modo de controladores no firmados. En windows 8.1 el proceso es un poco diferente, aqui hay uno enlaces con la explicacion
Es un entorno para el analisis y diseño de sistemas digitales combinatorios y secuenciales.
Es desarrollado por Javier García Zubía, Jesús Sanz Martinez, Borja Sotomayor Basilio.
No es necesario registrarse en ninguna web, pero sí es recomendable
enviar un correo electrónico a zubia@eside.deusto.es para poder recibir gratuitamente las nuevas
versiones del BOOLE-DEUSTO. Basta con enviar el nombre, la universidad o centro
de enseñanza, facultad, asignatura y curso en que se usa y número de alumnos
que lo usan.
Es una tecnica de computación grafica para realizar graficos empleando los caracteres alfanumericos definidos por el codigo Ascii.
Pseint por tener un terminal de visualizacion solo en texto, puede emplear esta tecnica para mostrar graficos.
Aqui de pueden ver algunos ejemplos:
En Pseint se debe tener en cuenta que la consola de visualizacion es de 80 de ancho por 25 de alto, asi que los graficos deben ser maximo de este tamaño
Para el curso de programacion la propouesta es la siguiente:
Realizar
una secuencia de escenas que narren una historia o cuento.
La
historia debe por lo menos tener amenos 10 escenas diferentes
La
primer escena debe contar con el nombre del estudiante, código,
grupo y titulo del cuento o historia.
Por
lo menos dos de las escenas debe tener animaciones.
En
caso de ser extensa la historia, se puede presentar por partes en
diferentes pseudocódigos de Pseint.
Comunicación De Pinguino Con Un Dispositivo Móvil Android
Modulo BlueThooth
Hay varios módulos de comunicación serial asíncrona de modo inalambrico por Bluetooth , como lo son el HC-04, HC-05. HC-06 todos para la aplicación básica de comunicación uno a uno entre un dispositivo móvil Android y un microcontrolador operan igual.
Descripción del BLK MD BC04
El modulo que se adquirió no tenia terminales de conexión directos para Protoboard, así que se procedió a soldar los terminales con cuidado. Se recomienda adquirir estos módulos ya listos para conexión en Protoboard o escudos Pinguino Arduino.
Montaje Bolutek BC-04
La alimentación para todos estos dispositivos es de 3.3 voltios los módulos que ya están listos para usar tienen regulación de voltaje y pueden alimentarse directamente a 5 voltios
Conexión
En el esquema de conexión se observa que el microcontrolador esta alimentado a 3.3v pero puede estar alimentado a 5v siempre y cuando el modulo Bluethooth este a 3.3v o tenga un regulador que permita alimentación a 5v.
Montaje Para La Recepción De Datos
Montaje recepción Pinguino BlueThooth
Para la recepción de datosse conecta el terminal TX del modulo BlueThooth con el terminal RX de la tarjeta Pinguino. En el esquema se observa que por utilizar 5V se empleo un regulador de 3.3V para alimentar el modulo BlueThooth, los módulos que están listos para usar en el protoboard tienen el regulador ya integrado.
Programa de recepción y encendido de un Led
Este es el programa que se descarga en Pinguino, en el momento de las pruebas este no opero empleando Pinguino X4 así que se compilo con Pinguino 9.05 y funciono correctamente.
Pantalla de diseño en App Inventor
Bloques del programa App Pinguino BlueThooth
Los bloques son de guía para otros programas más elaborados, de manera fácil se agregan otros botones para enviar diferentes textos, es de tener en cuenta que en la recepción de Pinguino se espera un carácter por esto los textos tienen una sola letra.
Fuentes De Los Programas Realizados En App Inventor
Trate de conectar una tarjeta virtual en Proteus con Pinguino IDE, sin éxito ya que una vez que presiono el reset para la descarga, ya no se lo conectar nuevamente y el dispositivo USB no es reconocido.
Sin embargo procedí a copiar el archivo hex de una Pinguino con el programa de comunicación con processing que se encuentra en otras publicaciones de este blog. En este caso la interacción funciono dado que ya no hay que presionar el pulsador de reset y esto hace que la tarjeta virtual siempre este conectada.
Por defecto el USB virtual de Proteus no esta instalado y hay que hacerla para que este pueda operar.
Para la instalación ir a la carpeta Virtual USB de proteus y dar click a Install USB Drivers
El montaje corresponde a un motor paso a paso tipo unipolar con dos terminales comunes, el circuito de potencia para el manejo del motor corresponde al ULN2003 que puede emplearse para manejar motores pequeños. Para el manejo de dos motores un solo circuito integrado se emplea el ULN2803.
En el esquema el común del motor esta conectado a 5 Voltios y a la misma fuente del micricontrolador.
La conexión del común puede ser también a 12V, también el común del ULN se conectara a los 12V.