lunes, 22 de abril de 2013

Comunicación de pinguino con processing

Utilización De La Librería Piguino Processing

Esta es una librería para Processing que permite comunicar la tarjeta Pinguino con Processing en modo Bulk USB.
Esta aplicación fue pensada para que se pueda desarrollar programas desde el computador, en este caso con Processing para poder tener acceso a un dispositivos electrónicos conectados a un microcontrolador como leds, interruptores, potenciómetros, etc.
También trata de poder tener acceso al microcontrolador sin necesidad de programar este directamente.
Para poder utilizar esta librería hay que instalarla en Processing y descargar un programa en el microcontrolador Pinguino.
Disposición para el 18f4550
La imagen muestra como esta configurado para la tarjeta montada con el PIC18F4550, se indica cuales terminales se emplean como entradas y salidas digitales así como entradas análogas.
El terminal 11 puede ser empleado como salida análoga por modulación de ancho de pulso.

Enlaces de interés

Instalación De La Librería En Processing.

Antes de instalar la librería se debe tener lo siguiente:
  1. Descargar en la tarjeta Pinguino el programa de comunicación USB con Processing, puede ser los archivos con extensión hex empleando el PICKIT o compilando el código que esta al final de este documento con Pinguino 9.05 donde dice descarga del programa de comunicación en Pinguino.
  2. En el caso de windows instalar el driver o controlador, el enlace para descargar el controlador esta en los enlaces de interés.
Ya teniendo lo anterior se puede instalar y probar la librería

 Video explicativo de la instalación de la libreria

Resumen Funciones Disponibles En La Librería

Esta tabla es un resumen de las funciones que pueden ser empleadas en Processing y la tarjeta Pinguino.

Ejemplos Básicos 

Una vez instalada la librería en Processing y el driver de Pinguino. Se pueden probar los siguientes programas en Processing para ser probados.

Encendido y Apagado De Un Led

Montaje de prueba básico

Ejemplo 01 Encendido Y Apagado De Un Led

import hypermedia.pinguino.*; 
Pinguino pinguino; 
void setup(){ 
   Pinguino.log( true );
   pinguino = new Pinguino( this );
void draw(){ 
   pinguino.digitalWrite(0,Pinguino.LOW); 
   delay(1000); 
   pinguino.digitalWrite(0,Pinguino.HIGH); 
   delay(1000); 
}

Ejemplos Varios

Montaje multiproposito

Ejemplo 02 Entradas Digitales Empleando Pulsadores

import hypermedia.pinguino.*;
Pinguino pinguino;
int nPulsador1;
nt nPulsador2;
int nPulsador3;
int nPulsador4;
void setup(){
Pinguino.log( true );
   pinguino = new Pinguino( this );
}
void draw(){
   nPulsador1=pinguino.digitalRead(10);
   nPulsador2=pinguino.digitalRead(12);
   nPulsador3=pinguino.digitalRead(21);
   nPulsador3=pinguino.digitalRead(22);
   pinguino.digitalWrite(0,Pinguino.LOW);
   pinguino.digitalWrite(1,Pinguino.LOW);
   pinguino.digitalWrite(2,Pinguino.LOW);
   pinguino.digitalWrite(3,Pinguino.LOW);
   if(nPulsador1==0){
      println("Pulsador izquierdo esta presionado ");
     pinguino.digitalWrite(0,Pinguino.HIGH);
   }
   if(nPulsador2==0){
     println("Pulsador arriba esta presionado ");
    pinguino.digitalWrite(1,Pinguino.HIGH );
   } 
   if(nPulsador3==0){
     println("Pulsador derecho esta presionado ");
     pinguino.digitalWrite(2,Pinguino.HIGH );
   }
   if(nPulsador4==0){
      println("Pulsador abajo esta presionado ");
     pinguino.digitalWrite(3,Pinguino.HIGH );
   } 
}

Ejemplo 03 Entrada Análoga Empleando Un Potenciómetro

import hypermedia.pinguino.*;
Pinguino pinguino;
int nAdc;
void setup(){
   Pinguino.log( true );
   pinguino = new Pinguino( this );
}
void draw(){
   nAdc=pinguino.analogRead(13);
   println("El Valor es: " + nAdc);
}

Descarga Del Programa De Comunicación En Pinguino

Dejo los dos programas tanto para el microcontrolador 18F2550 y 18F4550 empleando pinguino 9.05 si se utiliza PinguinoX2 o PinguinoX3 comentar la instrucción #define pic18f4550.
Los siguientes son los programas que se compilan y se descargan en el microcontrolador

Para el 18F4550 en Pinguino 9.05

// test Pinguino with Processing
// Jean-Pierre MANDON 2009
#define PIC18F4550
int i;
uchar todo,mode,pin,value;
unsigned char buffer[2];
int temp;
int endstring;
void clear();
void setup() {
for( i=0; i<8; i++ ) pinMode( i, OUTPUT );
for( i=25; i<29; i++ ) pinMode( i, OUTPUT );
clear();
}
void loop() {
// select action to perform...
if ( USB.available() ) {
if (USB.read()=='+')
{
todo =USB.read();
if ( todo=='C' ) clear(); // clear all
if ( todo=='W' ) { // switch on/off the specified pin
mode = USB.read();
pin = USB.read();
value  = USB.read();
if ( mode=='D' ) digitalWrite( pin, value );
if ( mode=='A' ) {
temp=value+(USB.read()*256);
analogWrite( pin, temp );
}
}
if ( todo=='R' ) {
mode = USB.read();
pin = USB.read();
if ( mode=='D' ) {
buffer[0] = digitalRead( pin );
USB.send(  buffer, 1 );
}
if ( mode=='A' ) {
temp = analogRead( pin  );
buffer[0]=temp;
buffer[1]=temp/256;
USB.send(  buffer, 2 );
}
}
endstring=USB.read(); // read end string byte ( 0 )
}
}
}
void clear() {
for( i=0; i<8; i++ ) {
digitalWrite( i, LOW );
}
for( i=21; i<29; i++ ) {
digitalWrite( i, LOW );
}
}

Para el 18F2550 en Pinguino 9.05

// test Pinguino with Processing
// Jean-Pierre MANDON 2009
int i;
uchar todo,mode,pin,value;
unsigned char buffer[2];
int temp;
int endstring;
void clear();
void setup() {
for( i=0; i<8; i++ ) pinMode( i, OUTPUT );
clear();
}
void loop() {
// select action to perform...
if ( USB.available() ) {
if (USB.read()=='+')
{
todo =USB.read();
if ( todo=='C' ) clear(); // clear all
if ( todo=='W' ) { // switch on/off the specified pin
mode = USB.read();
pin = USB.read();
value  = USB.read();
if ( mode=='D' ) digitalWrite( pin, value );
if ( mode=='A' ) {
temp=value+(USB.read()*256);
analogWrite( pin, temp );
}
}
if ( todo=='R' ) {
mode = USB.read();
pin = USB.read();
if ( mode=='D' ) {
buffer[0] = digitalRead( pin );
USB.send(  buffer, 1 );
}
if ( mode=='A' ) {
temp = analogRead( pin  );
buffer[0]=temp;
buffer[1]=temp/256;
USB.send(  buffer, 2 );
}
}
endstring=USB.read(); // read end string byte ( 0 )
}
}
}
void clear() {
for( i=0; i<8; i++ ) {
digitalWrite( i, LOW );
}
for( i=21; i<29; i++ ) {
digitalWrite( i, LOW );
}
}

Problemas Comunes

  • En la versión PinguinoX4 da un error al tratar de compilar el programa que se descarga en Pinguino, en la versión PinguinoX3 también da el mismo error compilando el programa en windows más no en Linux. No da problemas empleando Pinguino 9.05 tanto en windows como en Linux. Deje en los enlaces de descarga el archivo ya compilado hex para descargarlo empleando el PICKIT.
  • En algunas ocasiones se rompe la comunicación y aparece un error de comunicación en Processing. Es importante tener un buen cableado en la tarjeta para no generar ruido o interferencias que pueda romper la comunicación con el puerto USB en modo BULK

Preguntas Frecuentes

  • ¿ Por medio de esta librería es la única forma de comunicar Pinguino con Processing ? R/ No hay otras formas como la que puede realizarse con los puertos seriales del computador, ya sea por medio de un adaptador usb serial o configurando la tarjeta Pinguino en modo CDC.
  • ¿ Solo necesito conectar la tarjeta pinguino para realizar la comunicación ? R/ No también es necesario que el microcontrolador Pinguino tenga descargado el programa correspondiente para realizar la comunicación.
  • ¿ Puedo controlar servos con la tarjeta desde Processing ? R/ No el programa que se descarga a Pinguino no tiene soporte para servos, así como la librería. Para manjar servos aconsejo programar directamente la tarjeta Pinguino y comunicarse con Processing por el puerto serie.

martes, 16 de abril de 2013

sábado, 13 de abril de 2013

Manejo Pantalla LCD 1602 en un microcontroaldor

Aquí muestro como se conecta una pantalla LCD tipo 1602 con un microcontrolador 16f628A.
El esquema puede ser adaptado fácilmente a cualquier otro microcontrolador
Terminales de este tipo de pantalla

Conexión con el pic16f628A

Enlaces de interés

Código en Great Cow Basic

'================================================================
'===== Utilizacion LCD ejemplo 00
'================================================================
'================================================================
'===== CHIP SETUP  
'===============================================================
#chip 16F628A, 4
'================================================================
'===== CONFIGURACION  DE ENTRADAS Y SALIDAS
'===== CONFIGURACION DEL LCD
'================================================================
#define LCD_IO 8
#define LCD_DATA_PORT PORTB
#define LCD_RS PORTA.1
#define LCD_RW PORTA.2
#define LCD_Enable PORTA.3
'================================================================
'===== PROGRAMA PRINCIPAL  
'================================================================
    PRINT "Hola UNIAJC"




Conexión del max232 en un microcontrolador

En el ejemplo que se muestra la conexión se hace para un microcontrolador 18f628A, pero también aplica para otros microntroladores haciendo las conexiones a los terminales RX y TX.
El conector utilizado es un DB9 hembra que sera compatible con la mayoría de los adaptadores USB-Serial RS232 o con una conexión directa a un puerto serie si el computador dispone de este.

Esquema de conexión

En el esquema todos los capacitores son de 1uf y el cátodo (lado negativo) esta marcado con una linea blanca.
Dejo aquí los enlaces de interés

Proyecto de curso 801b caracterización de un sensor


PROYECTO DE SEMESTRE GRUPO 801B
Es proyecto propuesto  en este documento tiene como finalidad integrar los proyectos de curso de cada materia cursada por los estudiantes de grupo 801B en una solo con un tema relacionado con las materias que cursan.

INTEGRANTES
  • La presentación del proyecto estará integrado por un máximo de tres estudiantes.
  • Los integrantes del grupo se anotarán previamente en un listado y se les asignará un valor de resistencia para la realización del experimento de caracterización del sensor.
PRESENTACIÓN
Se presentara por medio de un articulo en formato IEEE con una extensión máxima de 5 paginas, se sugiere que el articulo contemple los siguientes capitulos.
  • Resumen.
  • Introducción.
  • Descripción del experimento a realizar. (es decir en que consiste el circuito las medidas que realizaran).
  • Datos obtenidos (tabla y gráfico de los datos) 
  • Empleo de herramientas computacionales para la solución de problemas de ingeniería. (curso de programación)
  • El efecto fotoeléctrico y su relación con los fototransistores ( Física)
  • Caracterizacion de un sensor por medio de tecnicas numéricas. (Análisis Matemático) 
  • Determinación de cuanta agua fluirá por un ducto. ( Fenómenos del transporte) 
  • Conclusiones. 
Anexos:
DETERMINACIÓN DE CUÁNTA AGUA FLUIRÁ POR UN CONDUCTO
El estudiante debe resolver el Ejemplo 12.3 planteado en las copias de apoyo empleando Scilab.
Para emplear las funciones polyfit y polyval que están en matlab se puede utilizar el toolbox  stixbox que se puede instalar por atoms.
También puede utilizarse las siguientes funciones ejecutándolas desde el editor.
function y = polyval(p, x)
  y = 0*x;
  p = mtlb_fliplr(p);
  for ix = 1 : length(p)
    y =  y + p(ix) * x.^(ix-1);
  end
endfunction
function p = polyfit(x, y, n)
  if length(x) ~= length(y)
    error('x and y vectors must be the same size')
  end 
  x = x( : );
  y = y( : );
  V = ones(length(x), n+1); 
  for j = n : -1 : 1
    V(:, j) = x .* V (:, j+1);
  end 
  [Q, R] = qr(V);
  QTy = Q' * y;
  p = R(1 : n+1, 1 : n+1) \ QTy(1 : n+1);
  p = p.';
endfunction
 
 
EXPERIMENTO DE CARACTERIZACIÓN DE UN SENSOR
El circuito corresponde al montaje del CNY70 también dejado en la fotocopiadora.

Enlaces de interés

Plantillas de documentos tipo articulo

Vídeos explicativos sobre el tema
Interpolación Lineal


introducción a la interpolación

Aquí hay un vídeo que aunque en tailandes se puede observar los comandos empleados en Scilab
Vídeo sobre interpolación



viernes, 12 de abril de 2013

Evento Kines Art Uniajc


Este es un evento de arte interactivo presentado en la UNIAJC. 


Esto me hizo recordar el trabajo que realice sobre interactividad por medio de procesamiento de imágenes con los ingenieros Carlos Lino Rengifo y Marly Patricia Ching en ParqueSoft para el proyecto Astrolita mas o menos hace 6 años. Aquí dejo algunos vídeos (La programación se realizo en C++ con ogre y OpenCv)

juego interactivo Xpectrum

Trabajo de efecto holograma

También esta la mesa multitouch http://micropinguino.blogspot.com/2012/09/mesa-multitouch.html

domingo, 7 de abril de 2013

Montaje Pinguino



Montaje En Protoboard Del Sistema Pinguino

Una de las mas destacables ventajas de Pinguino es su facilidad de montaje, sobre todo si no se tiene experiencia haciendo circuitos impresos o soldando y montando en tarjetas universales.
En esta publicación mostrare como se arma el sistema microcontrolado Pinguino utilizando los PIC18F2550 y PIC18F4550.

Montaje De Pinguino Con El PIC 18F2550

El PIC 18F2550 es un microcontrolador fácil de conseguir y de manipular en el protoboard.
En los siguientes esquemas se reemplazo el valor sugerido del capacitor VUSB de 220nf a 10uf por que presento mayor estabilidad en la comunicación con Processing.

Esquema de montaje Pinguino 18F2550

Montaje y componentes Pinguino 18F2550
Foto de montaje con el 18F2550

Vídeo de como montar el pinguino 18F2550

Montaje De Pinguino Con El PIC 18F4550

Prácticamente el montaje es igual al del 18F2550, con algunas variaciones en la disposición de los terminales por tener mas. Se puede ver el vídeo de como montar el Pinguino 18F2550 como guía indicativa
Montaje pinguino 18f4550
Esquema de montaje del pinguino 18f4550

Enlaces De Interés

Montaje De Pinguino En Circuito Impreso

En la red existen varios planos para hacer la tarjeta impresa (PCB) de Pinguino. Aquí dejo la del Pinguino con el 18F4550 tomado del blog del  creador de Pinguino.
El documento pdf con la tarjeta impresa hay que imprimirlo sin ajustar documento si se utiliza acrobat para imprimir, puesto que esto afecta el tamaño original de la imagen.



Aspectos A Tener En Cuenta

  • Es muy importante tener en cuenta que en los esquemas el conector es un USB hembra y que en caso de colocar uno macho el microcontrolador estaría alimentado inversamente y dañarse.
  • Los capacitores de 0.01uf (104) y 10uf no son críticos en el montaje y pueden temporalmente ser omitidos (son importantes sobre todo si estamos trabajando con motores).
  • No es necesario resetear el microcontrolador para desconectarlo del computador.

Descarga Del Bootloader Para Convertir El Microcontrolador En Pinguino.

Para hacer esto necesitaremos el archivo de extensión hex que encontramos en la siguiente ruta de la versión X4 del IDE de Pinguino extra/bootloaders/8bit/bootloaderV2.12_PIC18Fx550.hex.
En la sección de enlaces de interés esta el enlace para descargar el bootloader.
Para hacer la descarga necesitaremos el PicKit que es una herramienta de Microchip para la descarga de programas en los microcontroladores PIC, también puede emplearse programadores tipo PicKitClone

Aquí esta el vídeo explicativo de como se hace la descarga del bootloader

Como Conectar El Microcontrolador Al Programador PicKit 2

Las imágenes muestran como se conectan los cables desde el PicKit para los microcontroladores 18f2550 y 18f4550.
Se sugiere emplear colores en los cables para una fácil verificación.
esquema del PicKit2
conexión real
Terminales de programación para el 18f2550
conexión para el 18F2550
vista de conexiones del 18f2550
Terminales de programación para el 18f4550
vista de conexiones del 18f4550









martes, 2 de abril de 2013

Estructuras Condicionales en Pseint

Vídeos explicativos sobre estructuras condicionales.
Estos ejemplos son gracias la profesor Victor Viera Balanta.
Repaso de entrada proceso y salida.

El mayor entre dos números condicional simple

El mayor de dos números condicional doble (sino)

Determinación del mayor entre tres números.

lunes, 1 de abril de 2013

El ratón en Processing

Dejo aquí una guía que describe el uso del ratón en Processing 
Estas son dos tablas resumen de la funciones del ratón sacadas de la guía.