lunes, 18 de mayo de 2015

Video Juego de Ping Pong en Processing

Como Hacer Un Video Juego Básico Con Processing

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);
  }
}  

lunes, 11 de mayo de 2015

Comunicacion serial con Processing y Arduino


Lectura De Datos Seriales Desde Processing

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.

Más informacion se puede consultar en:

Código en Processing

import processing.serial.*;
String ListaPuertos[];
Serial MiPuerto;
int DatoLeido;
float VoltajeLeido;
void setup() {
  println(Serial.list());
  ListaPuertos=Serial.list();
  println(ListaPuertos[0]);
  MiPuerto=new Serial(this, ListaPuertos[0], 9600);
  println(MiPuerto);
}
void draw() {
  DatoLeido=MiPuerto.read();
  println("Dato = "+DatoLeido);
  VoltajeLeido=(float(DatoLeido))*0.019607843;
  println("Voltaje = "+VoltajeLeido);
  MiPuerto.clear();
}
 

Envío de una cadena de caracteres desde Arduino

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

Código de Arduino

void setup(){
  Serial.begin(9600);
}
void loop(){
  Serial.println("Hola Mundo");
  delay(100);
} 

Código de Processing

import processing.serial.*;
String ListaPuertos[];

String CadenaRecibida;
Serial MiPuerto;
int DatoLeido;
void setup() {
  println(Serial.list());
  ListaPuertos=Serial.list();
  println(ListaPuertos[0]);
  MiPuerto=new Serial(this, ListaPuertos[0], 9600);
  println(MiPuerto);
}

void draw(){
  if ( myPort.available() > 0){
    CadenaRecibida = MiPuerto.readStringUntil('\n');
  } 
  println(CadenaRecibida);
}

Envío de un dato desde Processing a Arduino

En este caso se emplea la instrucción MiPuerto.write() para enviar una dato de byte que puede ser un valor entero o carácter.
En este ejemplo se envía el carácter '1' o su equivalente entero en ASCII que es 49 para encender un led de la tarjeta Arduino.

Código de Arduino

char Dato; 
void setup() {
   pinMode(13, OUTPUT);
   Serial.begin(9600);
 }
void loop() {
   if (Serial.available()){
     Dato = Serial.read();
   }
   if (val == '1') { 
     digitalWrite(ledPin, HIGH);
   } else {
     digitalWrite(ledPin, LOW);
   }
   delay(10);
}  
 

Código de Processing

import processing.serial.*;
String ListaPuertos[];

String CadenaRecibida;
Serial MiPuerto;
void setup() {
  println(Serial.list());
  ListaPuertos=Serial.list();
  println(ListaPuertos[0]);
  MiPuerto=new Serial(this, ListaPuertos[0], 9600);
  println(MiPuerto);
}

void draw() {
  if (mousePressed == true){                          
    myPort.write('1');
  }else {                           
    myPort.write('0');
  }   
}
 

Envío y recepción Processing a Arduino

En este caso se hace tanto envío como recepción de datos entre las dos plataformas.
Se hace el uso de la función establecerComunicacion para garantizar que se ha establecido la comunicación entre las dos plataformas. 

Código de Arduino

char Dato;
boolean EstableComunicacion; 
void setup() {
   pinMode(13, OUTPUT);
   Serial.begin(9600);
   establecerComunicacion();
   EstadoLed=false; 
   EstableComunicacion =false;
 }

void loop()
{
  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);
   }
}
void establecerComunicacion() {
  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;

boolean EstableComunicacion = 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
}
void draw() {
 //Nada de momento
}
void serialEvent( 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
    }
  }
}

domingo, 1 de marzo de 2015

PICDEM Con Pinguino

COMO EMPLEAR LA TARJETA PINGUINO CON PICDEM

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.

ENLACES Y DESCARGAS 
 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

viernes, 20 de febrero de 2015

Sistemas Combinatorios Con Boole Deusto


EJEMPLO DE SISTEMA COMBINATORIOS CON BOOLE DEUSTO

Boole Deusto

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.

Enlaces de descarga y guias

Videos Tutoriales


jueves, 19 de febrero de 2015

Ascii Art y animaciones en Pseint

ASCII ART

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:

EDITORES Y GENERADORES DE GRAFICOS ASCII

Los editores y generadores son utiles para realizar estos graficos, algunos de ellos son

 ASCII ART EN PSEINT

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.

 Tutoriales y videos pueden encontrase aqui:

viernes, 31 de octubre de 2014

Pinguino Android con App Inventor vía BlueTooth

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 datos se 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

miércoles, 29 de octubre de 2014

Simulacion De Pinguino Con Proteus y Processing

PROTEUS CON PINGUINO E INTERACCIÓN CON PROCESSING

Pinguino Virtual en Proteus
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.

Archivos Para descargar
Instalar El Virtual USB de Proteus
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

Imagen tomada de http://protonbasic.wordpress.com/usb/usb-hid/

  • En Proteus versión 7.6 funciono para el sistema operativo windows 7 de 32 bits, en el de 64 indico que el controlador no era compatible.
  • En la versión 8 de proteus tiene soporte tanto para sistemas windows de 32 y 64 bits.



domingo, 12 de octubre de 2014

Motor Paso a Paso Con Pinguino

CONTROL DE UN MOTOR PASO A PASO CON PINGUINO

Motor paso a paso con Pinguino
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.

REFERENCIAS

miércoles, 8 de octubre de 2014

EEPROM AT28C16

EEPROM AT28C16

El emplear memorias EEPROM para la realización de circuitos digitales combinatorios y secuencial puede ahorrar el uso de compuertas y facilitar modificaciones y correcciones al los circuitos.
Una memoria EEPROM básicamente es un dispositivo lógico programable y puede ser empleado como tal para la realización de circuitos digitales tanto combinatorios como secuenciales.

Terminales EEPROM AT28C16

LECTURA DE DATOS EN LA MEMORIA EEPROM 

Una forma fácil de leer los datos de una memoria EEPROM, es empleando Led en la salida para visualizar el dato y emplear un Dip Swicht para generar la dirección que se desea consultar

Lectura EEPROM AT28C16

En el gráfico se observa que la configuración permita la lectura desde 00H hasta FFH y que los bits mas significativos del registro de direccionamiento que no son empleados son llevados a GND.
Hay que tener presente que la configuración del Dip Swicht es con resistencias de Pull Up
Otra forma de verificar los datos es empleando un microcontrolador como Pinguino.

Lectura EEPROM AT28C16 con Pinguino
El emplear un microcontrolador trae la facilidad de leer los datos secuencialmente o solo los que sean de nuestro interés por medio de un programa. En el ejemplo se emplea escritura directa al puerto B empleando la instrucción PORTB que en Pinguino corresponde al conjunto de terminales que van de 0 a 7.

ESCRITURA DE DATOS EN LA MEMORIA EEPROM 


Este tipo de memoria pude ser programada de forma manual sin la necesidad de algún voltaje especial de programación como ocurre en muchos dispositivos programables.

Programación manual EEPROM AT28C16

Para la programación manual se siguen los siguientes pasos
  • En el Dip Swicht de la izquierda se fija la dirección.
  • En el Dip Swicht de la derecha se coloca el dato que se desea guardar.
  • Se presiona el pulsador para escribir el dato.
Para un nuevo dato en otra dirección se repite nuevamente el procedimiento descrito.


Aunque la escritura de datos se puede hacer de forma manual, es más fácil empleando un microcontrolador.

Programación EEPROM AT28C16 con Pinguino
El emplear un microcontrolador, permite editar y cambiar los datos, así como direccionar en diferentes segmentos los datos que queremos escribir. En el ejemplo los datos son guardados en formato hexadecimal empleando un arreglo.

domingo, 21 de septiembre de 2014

Montaje pinguino 4550 PCB

MONTAJE PINGUINO 18F4550 PCB 

PCB Pinguino y entrenador PIC

FUENTES PARA REALIZAR EL MONTAJE


GUÍA DE MONTAJE PINGUINO Y ENTRENADOR PIC
PCB pinguino 4550

La tarjeta esta diseñada para soportar microcontroladores PIC de 40 terminales y puede emplearse como entrenador PIC y o como tarjeta Pinguino.

COMPONENTES

RESISTENCIAS
Las resistencias se recomiendan a un cuarto de vatio.
  • 3- Resistencias de 470 ohm .
  • 1- Resistencia de 10 kohm.
CAPACITORES
Los capacitores electrolíticos están marcados con + para indicar el ánodo. El ánodo en un capacitor electrolítico nuevo es el terminal mas largo.
  • 3- capacitores de 100 nf (104).
  • 2- capacitores de 20pf (pueden ser otros en el rango de 15 a 30 pf).
  • 3- capacitores de 47uf (pueden ser también de 10uf).
  • 1- capacitor de 220nf (224) Puede reemplazarse por uno de valor similar.
LEDS
Se recomienda leds sencillos rojo y verde.
  • 1- Led rojo 3mm (Led de ON) el ánodo del led esta indicado con +.
  • 1- Led verde 3mm (Led de RUN) el ánodo del led esta indicado con +.
REGULADORES
Los reguladores se emplean si el dispositivo se alimenta con fuente externa, aunque se recomienda una alimentación externa de 12 voltios, puede ser cualquier otra con un voltaje cercano (7v a 15v).
  • 1-Regulador 7833 de 3.3 voltios . Se consigue también como LD33V
  • 1-Regulador 7805 de 5 voltios.
CONECTORES
  • 2- Regletas header hembra (Como las de Arduino).
  • 1- Regleta header macho para las conexiones SELP y 5v GND.
  • 1- Regleta header macho en L para la conexión PICKIT.
  • 1- Conector USB hembra.
  • 1- Plug hembra para alimentación con adaptador de voltaje.
OTROS
  • 1- Pulsador de 4 terminales.
  • 1- Diodo 1n4148.
  • 1- Cristal de cuarzo de 20 Mhz, para la tarjeta Pinguino es obligatorio este valor.
  • 1- Cable USB macho – macho.
CONFIGURACIÓNES

CONFIGURACIÓN SIN FUENTE EXTERNA DE ALIMENTACIÓN
Sin fuente de alimentación externa

Esta configuración es la que tiene solo los componentes necesarios para que la tarjeta opere desde la alimentación suministrad por el computador.
Selección de alimentación por USB

El Jumper SELP de selección de alimentación se coloca como indica el gráfico para seleccionar alimentación desde USB.
Esta selección por Jumper previene que dos fuentes de alimentación estén simultáneamente alimentando el microcontrolador.
La tierra GND si es común para los dos circuitos posibles de alimentación.
En el modo USB los terminales 12V y 5V de los conectores EXT SUPPLY no operan. Solo el terminal de 3.3 esta en operación para alimentación de dispositivos o sensores que operen en este rango

CONFIGURACIÓN CON FUENTE EXTERNA DE ALIMENTACIÓN

Alimentación externa


En esta configuración se cuenta con dos opciones de alimentación desde fuente externa o USB por medio de la selección con el Jumper SELP.
Selección alimentación externa
El Jumper SELP de selección de alimentación se coloca como indica el gráfico para seleccionar alimentación externa.
Esta selección por Jumper previene que dos fuentes de alimentación estén simultáneamente alimentando el microcontrolador.
La tierra GND si es común para los dos circuitos posibles de alimentación.
El adaptador recomendado para alimentación externa recomendado es de 12 voltios donde el exterior del plug es tierra (GND) y el interior es alimentación 12 voltios.
El diodo previene el caso de que adaptador conectado tenga polaridad invertida con respecto al circuito.


Terminales para tomar alimentación


Con la alimentación externa se tiene salidas de de 3.3 Voltios, 5 Voltios y 12 Voltios en los conectores indicados como EXT SUPPLY.


DIAGRAMA ESQUEMÁTICO



Diagrama esquemático