Mostrando entradas con la etiqueta Programas. Mostrar todas las entradas
Mostrando entradas con la etiqueta Programas. Mostrar todas las entradas

3/15/2018

Pi Zero !!!


Saludos,

ha pasado mucho tiempo desde mi última entrada pero esto no quiere decir que haya parado, simplemente tengo menos tiempo para escribir, y el poco que tengo lo pierdo viendo películas o series en Netflix o similares.

Hoy vengo a hablaros de la raspberry Pi Zero, el último juguetito que he adquirido y que me está permitiendo sacarle partido a estas placas, a la vez que me vienen a la cabeza algunos otros proyectos de hardware.

Estaba buscando para enlazar un artículo anterior sobre la raspberry Pi, y sorpresa que no está publicado, ni terminado….





Resumiendo la Pi Zero es una versión reducida en tamaño de la Raspberry Pi 3, que incluye wifi y bluetooth, evidentemente esta reducción de tamaño conlleva perdida de puertos usb, puertos de Ethernet, conectores Jack…







Pero tiene el tamaño ideal para hacer pequeños robots, muy potentes difícilmente alcanzable con arduinos o similares. Pero para ello es necesario poder conectarle dispositivos de una forma sencilla. Así que lo primero que haces es buscar que hay en el mercado para poder conectar a esta placa.





El video anterior es lo que buscaba, una placa que se financio mediante un kickstarter como otras tantas. Pero en mi opinión no era muy potente, ¿Que ofrecía por 25$?

·         2 puertos analógicos
·         1 puerto serie
·         2 puertos digitales

¿Y ya está?, a parte que aumentaba la placa de tamaño.

Pues ni corto ni perezoso me puse manos a la obra, cosa que ninguna otra placa de raspberry pi había conseguido, con la Zero veo potencial para hacer proyectos hardware.









Os presento Zero Grove Board.


Exactamente en el mismo tamaño que la Pi Zero, tenemos:

·         1 puerto serial
·         6 puertos digitales
·         1 puerto PWM
·         5 puertos Analogicos
·         1 puerto I2C

Todo ello con conectores Grove, para que sea sencillo conectar sus sensores y placas. Pero claro la programación va a ser muy compleja pues es algo que he creado yo y no es estándar. Pues nada que ver, la programación es simple, instalando la librería wiringPi, te permite programarlo en C, en Python y en scratch no lo he probado, pero no veo porque no.








Detalle visto con los conectores.


Los cables que veis en las fotos es que se me quedaron dos pistas sin hacer... Nada importante, son para programar el Pic...


Los puertos digitales, es sencillo, se cablean del puerto de la Pi Zero y arreando, pero para crear los puertos de entrada analógico ha empleado un Pic, concretamente el PIC16F1503, conectado a la Pi Zero mediante I2C, acceder a las entradas analógicas es muy sencillo con la misma librería.






En el vídeo veis, primero que soy un zopenco grabando. El programa es muy simple los puertos digitales están configurado como output, al arrancar el programa toma un muestra de la entrada analógica 2, y en función de la nueva muestra en mayor o menor encienden los leds amarillos o verdes. El sistema responde muy fino, en el pic se hace 5 lecturas y se pasa el valor medio.



Y bueno sin enrollarme mucho mas os dejo el código en c del programa en cuestión.

Anakleto.

5/13/2017

Haptic con xbee

Saludos

hoy me han pedido que haga un “Haptic” para las manos.  O un sistema que dé una respuesta táctil al interactuar con el entorno virtual. Algo muy simple, instalar unos vibradores en unos guantes, para cuando toques algo del entorno virtual tengas una respuesta táctil.


http://www.eodyne.com/es/


Esto no es nada nuevo, todos estamos acostumbrados que el mando de la consola vibre al recibir nuestro personaje un impacto o golpe, pues hacer algo similar económico y funcional. En definitiva en colocar un motor vibrador, que ha de funcionar cuando entremos en contacto con algún objeto, controlar este tipo de motores es muy simple.





Para la comunicación entre el ordenador y los guantes desempolvare unos viejos conocidos los Xbee, no es una opción muy económica, pero si los tienes es una rápida solución para hacer este setup. En este caso simplemente con los Xbee podríamos prescindir de microcontrolador para activar los motores, pero he optado por incorporar un pic12fl1840 en comunicación serial por si hay que añadir algún otro sensor.


El setup de los Xbee es muy sencillo con la aplicación XCTU, el setup básico para configurar la red es:



Menú del XCTU Setup del sistema



El emisor enviara a los guantes y recibirá de los guantes, se podría emplear otro tipo de sistemas por wifi, como Omega2 Plus, Particle Photon, etc. Pero he optado por el xbee porque es simple rápido y tenía el material. Para hacer el setup utilizo una de las placas xbee shield montadas sobre el Arduino, en la foto se ve un Mega, pero normalmente utilizo un Arduino antiguo sin el microcontrolador para hacer de emisor, si queréis hacerlo “bonito” adquirir esta placa.






La conexión entre el xbee y el pic es muy simple, hay que cruzar el Tx-- DIN y el Rx--DOUT, el programa para este caso son pocas líneas de código  y solo contemplo recibir un byte por mensaje.






Esquema del proyecto para mostrar las conexiones. Modelo final para instalar en los guantes.





#include <12LF1840.h>
#device ADC=16

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP         //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(internal=8000000)
#use FIXED_IO( A_outputs=PIN_A5 )
#use rs232(baud=9600,parity=N,xmit=PIN_A0,rcv=PIN_A1,bits=8,stream=PORT1)
int8 dato;
#INT_RDA
void  RDA_isr(void) 
{
dato=getc();
putc(dato);
}

void main()
{
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   while(TRUE)
   {
      if(dato==0x32){ // 0x31 derecha 0x32 izquierda
      output_high(PIN_A5);
      delay_ms(500);
      output_low(PIN_A5);
      dato=0;
      }else
      {
      output_low(PIN_A5);
      delay_ms(500);
      }
   }
}


El programa es muy simple recibe un byte si es 0x31, en Ascii 1, se activa el motor de la mano derecha durante 500 milisegundos, si es un 0x32, en Ascii 2, se activará el motor de la mano izquierda. En cualquier caso, ambos guantes reciben el mensaje el microntrolador decide quien actúa y quien no, la opción de ponerlo es porque nos permite añadir más sensores o realizar algún otro calculo, el número de veces que se activado, etc. 




Anakleto.

5/08/2017

Eddibot con palanca y control python

Saludos, 


he estado trabajando ya nuestros Eddiebots les he añadido algunas curiosidades, además del sensor de distancia APDS 9960, le hemos puesto un seguidor de línea y una barra para que se levante del suelo el solo.  En ambos caso los sensores/actuadores que hemos instalado son I2c.




Esta entrada podría ser la continuación de la sensores i2c con pic o una segunda entrada del Intel Edison. Al modelo original de Ediboot le he añadido unos soportes en la parte posterior para que se quede en una posición semi-vertical.




En la parte delantera he instalado una palanca controlada por un motor micrometal de 298: 1 de reducción, más que de sobra para poder desplazar el peso del robot, para controlar el motor he empleado como en otras ocasiones el driver L272M controlado por el pic12lf1840 configurado como esclavo i2c. Podría haber empleado alguno de los pines libres de la placa de GPIO pero no son tantas las que están libres por el uso de la placa de motores y opte por este método que me da más libertad de diseño, reduciendo los problemas a otros más pequeños.


Controlar el motor al fin y al cabo no es mucho más complicado que el control del Led, que explique en el primer ejemplo de i2c, se le puede enviar tres instrucciones:



0x31: Bajar palanca

0x32: Recoger palanca

0x30: Parar Palanca


Al no tener encoder el motor o bien se hacía un control por tiempos, algo que suele descalabrarse, así que opte por colocar un pulsador en el pecho del robótico para que actuara de final de carrera cuando se recoge la palanca.  A la hora de bajarla el limite lo impongo controlando el ángulo del “kalmanfilter”, cuando llegue a cierto ángulo el robot se pondrá de pie solo.





Otro de los sensores que le instalado en el seguidor de línea, en varias versiones, esto quiere decir que he ido modificando como colocar el sensor en función de cuantas cosas llevara el robot.





Al igual que la “pata”, su nombre oficial es otro en la oficina no dejan de reírse con el robot con “pene”, el sensor de línea he empleado el picf1840 para hacer el sensor esclavo i2c. El sistema es cómodo y te permite realizar sensores que se pueden adaptar a cualquier plataforma, Arduino, raspberry pi, Intel edison … 

El aspecto final del sensor que he empleado es:




Placa “home Made” con picf1840, se instala entre los motores del Eddiebot







Otra cosa que debíamos hacer con los Eddibot es que colaborasen entre ellos transportando una plancha o algo similar, haciendo pruebas es algo “relativamente” sencillo de implementar, lo complicado era posicionarlos en una poción concreta para realizar el experimento. 






Para que esto fuera sencillo realice un control mediante Python para poder situar a los robots en la posición correspondiente. No necesita de mucha explicación simplemente cambiar las ip’s para que coincidan con la de vuestros robots y poco más.


Conectarse con los Robots Z
Robot 1 control W,S,A,D
Robot 2 Control I,K,J,L,
Control común T,G,B
Salir X

Anakleto

4/12/2017

MAME, Retropie y Arcade power

Saludos,

hoy vengo a hablaros de como instalarse una recreativa en casa, podríamos ponernos manos a la obra y realizar una maquina semejante a las de antaño, pero pese a su encanto tiene el inconveniente del espacio que ocupa.


Lo de hoy es más simple, tienes un ordenador conectado a la tele,  un equipo antiguo que no le das uso,  una raspberry pi o una Tablet, móvil etc. Pues si algo de esto tienes puedes montarte una máquina recreativa en casa, nada del otro mundo algo que te permita jugar y echarte unos vicios a esos antiguos juegos que recuerdas de tu infancia. O porque no, descubrir esas viejas glorias que en nada se parecen a los juegos actuales.



Que necesitaremos, si se dispone de un mando de pc inalámbrico o por cable (usb), o más sencillo un teclado. Es lo que emplearemos para jugar, en mi caso empleo un mando de la Xbox con el adaptador para pc y un teclado inalámbrico.




Para comenzar vamos a explicar que es un emulador, según la Wikipedia, es un software que nos permite ejecutar programas en un sistema operativo diferente para el cual fueron creados. Es decir, ejecutar programas de maquinas o sistemas antiguos en nuestros equipos actuales.

Tenemos emuladores de Android, que nos permite ejecutar las aplicaciones del teléfono en el ordenador, y cuando digo aplicaciones también me refiero a juegos, esto ya nos podía ayudar a conseguir una máquina recreativa, de fácil manejo y configuración.


Pero si queremos jugar a aquellos clásicos pixelados, que nos hacían dejarnos nuestra semanada en las recreativas del barrio o del pueblo, hablamos de, la emulación de máquinas recreativas, videoconsolas etc. Desde hace muchísimo tiempo existen toda clase de emuladores, uno de los más conocidos es el MAME, “Multiple Arcade Machine Emulator”, que como indica su nombre es multi plataforma, es decir puede emular muchas maquinas.

Instalación en ordenador


La instalación es sencilla dependiendo de donde la queramos instalar, solo hay que seleccionar el sistema Windows, Mac o Linux y bajarnos la versión. La última versión es la 0.184 y esto lo comento porque es importante. Como os he mencionado el sistema MAME no es nuevo, tengo la versión 0.83 (aun operaiva) desde hace años y un montón de roms de recreativas, más de las que necesito para jugar. Al instalarme la nueva y exportar esas roms, algunas funcionan, otras no.


El motivo es que las roms se tienen que actualizar, al igual que el MAME, y esto podría parecer un coñazo porque son muchas. Pero, ¿realmente vamos a jugar a todas?... Por ello lo que vamos a plantear desde aquí es buscar las que realmente queramos, personalizando de esta forma tu entorno de juego. Desde paginas como Emuparadise, podéis buscar las roms de vuestros juegos favoritos, comprobando que funcionan con la versión de mame que tenéis instalada.


 


Para ponerlo en modo ventana, Configure Options/Video options/Window Mode ON. En avaible no hay nada porque no hemos cargado ninguna Rom, en la carpeta.

  
Una vez coloquéis las roms en la carpeta ../mame/roms/ os aparecerán  en la lista, en el caso de que os salgan todas las roms que están disponibles aunque no las tengáis instaladas hay una opción en: 

Configure options/miscellaneous options/ Hide roomless machine from available listà ON

Si como comentaba tienes una carpeta con roms antiguas pruébalas normalmente las de Arcade funcionan, pero no todas y las de neogeo suelen dar errores. Por ello os recomiendo haceros una lista de a lo que queréis jugar, antes de tener 4000 juegos.

Para configurar los mandos:

Configure options/General Inputs/








Si tenéis algún mando conectado os aparecerá listado sino podéis emplear el teclado, os aparecerá un listado infinito, solo tenéis que configurar los cursores y botones la mayoría de juegos como máximo tienen 6. En “Other controls” aparece los controles de meter moneda, start player 1 etc.




Desde el juego si pulsáis la tecla tabulador accedéis a un menú similar donde podéis modificar la dificultad del juego (DIP), el número de partidas por monedas, y cambiar los controles.

Instalación en dispositivo Android


Otras opciones es instalar el mame4droid, en nuestro dispositivo Android, ya sea teléfono Tablet o SmartTv, aquí nos indicara que las roms validas son las de la versión 0.134.Yo he instalado una versión de Super Pang para probar y pese a que recomendaba versión 0.141 ha funcionado correctamente.  En este caso si teneis algún mando se puede conectar al móvil Tablet mediante este cable. Si lo instaláis en la tele, lo podréis conectar a uno de los usb que tienen, esto último no puedo probarlo.




Al conectarle un mando el mando virtual desaparece convirtiendo el dispositivo solamente en pantalla, hay gente que se ha currado adaptadores para tener una mini consola portátil.

Instalación en Raspberry pi


Y otra opción, no por ser la última es la menos elegante viene a ser similar a la primera que he explicado, necesitaremos una raspberry pi , recomiendo la 3 que incluye wifi y bluetooth, aunque con las anteriores también funcionan, una tarjeta SD de 8 gigas, teclado  y monitor o televisión. Si tienes una raspberry pi de las primeras y no sabías que hacer con ella este es el proyecto.


Primero descargas la imagen de Retropie que necesites según la version de raspberry que tengas.


Si operamos desde Windows necesitaremos Win32DiskImager, para instalar la ISO en la tarjeta SD. Si lo hacéis desde Linux aquí tenéis una pequeña guía y desde Mac esta otra.


Podéis seguir esta guía de instalación, que explica paso por paso, una vez hayáis configurado el mando o en su defecto el teclado, entrar en el menú de configuración de  la raspberry pi.







Configurar el wifi si lo hubiera o bluetooth si es necesario. Interesa activar SSH , para poder operar desde otro ordenador.


Ahora nos faltan las roms, la versión del mame que instalada el Retropie no es idéntica al mame explicado anteriormente, aquí tenéis una lista de roms que son compatibles o no se han probado, como os recomendé anterior mente descargaros las  roms que os apetezca probar jugar.



¿Cómo poner las roms?, en la anterior guía había una explicación de cómo hacerlo, yo empleo  Winscp, creando una nueva conexión SCP con la dirección ip de la raspberry.


usuario: pi
password: raspberry







Las roms se guardan en la carpeta /home/pi/Retropie/roms/ en la carpeta que corresponda según la maquina Neogeo, Mame, Snes, Atari…


Las roms de Nintendo64 necesitan activar la aceleración 3D de la GPU, acto que nos deja sin retropié porque el menú no funciona con esa configuración, si queréis jugar a esas roms seguir esta guía de instalación, aunque deberéis instalar algún ventilador en vuestra raspberry pi, para evitar sobrecalentamiento,  obviamente me refiero al modelo 3 o la Zero.



Y ya no doy más la chapa, a jugar.




Anakleto.

2/20/2017

Linkit Smart 7688 Duo

Saludos,

Este es el primero de una serie de artículos que publicare respecto a esta nueva placa que hemos adquirido.


Likit Smart es un microcontrolador con un sistema operativo Linux incluido de un tamaño muy reducido, semejante o la copia de un Intel Edison. O esa es la idea, necesitamos crear un sistema balancing semejante a Eddie, que nos fue sustraído durante un curso. Eddie incluía una placa Eddison, con una controladora de motores dual h-bridge, un IMU con 9DOF, un bloque GPIO, bloque USB y un módulo de batería. Dada su forma y su manera de montaje todo quedaba reducido en un espacio muy pequeño, pero con un precio que oscila entre los 200 y 250€.




Vamos a tratar de realizar a su hermano barato, con una placa Likit Smart 7688 Duo, una placa de motores hecha con drivers L272M que hemos empleado para hacer otros robots un IMU de 9 DOF. Salvo los procesadores el resto de material es reciclado de proyectos antiguos.

Vamos con los datos técnicos.
580 MHz MIPS CPU
Single input single output(1T1R) Wi-Fi 802.11 b/g/n (2.4G)
Pin-out for GPIO, I2C, I2S, SPI, SPIS, UART, PWM and Ethernet Port
32MB Flash and 128MB DDR2 RAM
USB host
Micro SD slot SD/SDXC
Support for Arduino API (ATmega32U4)
Size: 60.8x26.0mm
MPU Chipset: MT7688AN, 580MHz, 3.3V
MCU Chipset: ATmega32U4, 8MHz, 3.3V
Memory: Flash: 32MB, RAM: 128MB DDR2
GPIO Pin: 3(MT76),24(ATmega), 3.3V
PWM Pin : 8(Atmega), 3.3V,16bits
ADC Pin 12(ATmega), 10 bits
External Interrupts: 8
SPI/SPIS
Pin numbers: S0, S1, S2, S3
Max Speed: 4MHz
I2C Pin: D2/D3, 400KHz
UART Lite: P8/P9(MT76), D0/D1(ATmega)
USB Host Pin: P6/P7
Wi-Fi: 1T1R 802.11 b/g/n (2.4G)
Ethernet: 1-port 10/100 FE PHY, Pin: P2/P3/P4/P5







Descripción del Hardware


Tal y como indicábamos el MCU del  Link Smart se puede programar con el ide de Arduino seleccionando como placa al Arduino Yun. Aunque el ordenador me lo detecta como un tensy, lo único problemático es que tras programarlo el puerto desaparece.


Esto no ha sido un problema menor, pues tras cargarle el Blink no había manera de que Windows 10 me volviese a detectar la placa. Gracias a otra gente que ha documentado este tipo de placa he descubierto que hay que pulsar dos veces el reset del MCU cuando le vas a cargar el programa. De esta manera se recupera el puerto de la placa. Para evitar este problema, primero recomiendo leerse la documentación antes de ponerse manos a la obra. Esto suele ocurririr cuando nos conectamos a la placa como si fuera un Arduino Yun. Si en preferencias de Arduino añadimos





Tras añadir la dirección vamos a Herramientas, Placa, Gestor de tarjetas. En la última posición estará la placa Linkit Smart 7688 Duo para instalar.

Para el desarrollo de este proyecto, tratamos de substituir un Intel Edison, nos damos cuenta que quizá la mejor placa para desarrollarlo sería la Linkit Smart 7688, más parecida pues la Duo al contar con el microcontrolador ofrece varios modos de programación y funcionamiento, en principio tres.




El método innovador es el que nos permite programarla desde el ide de Arduino.


La principal diferencia con la placa anterior es que todos los sensores se conectan y gestión desde el MCU, dejando solo unos cuantos pines que se gestionan con el procesador MT7688, esto principalmente es lo mismo que tiene el Arduino Yun, con la diferencia del precio. Este tipo de comunicación emplea la librería Bridge, que permite al Arduino controlar todo el sistema, incluso el Linux.



Ahora bien, podemos crear un Firmata y programar tanto el Arduino como el Linux para que lo que tengamos conectado en el MCU sea leído por el Linux y viceversa. En definitiva, es una conexión serial y se debe programar ala Arduino para que responda las instrucciones que reciba.


La tercera opción es similar a la primera, pero en el Arduino programamos el proceso de captura de los sensores y la gestión de los actuadores, y se mantiene una comunicación fluida con el Linux, que puede desarrollar procesos que requieran más potencia de computación.

  

Cosas que conectar

Para realizar el proyecto necesitamos una IMU, Grove IMU 10DOF que funciona por I2C pero tal y como veremos en la siguiente imagen el I2C está controlado únicamente por el MCU, al igual que el control de los motores, que emplearemos los drivers L272M.




Diagrama de pines del Linkit Smart 7688 Duo




Los encoders de los motores irán conectados a las entradas de interrupción D14, D15, D16, D17 que serán gestionados mediante la CPU con la librería mraa. Los motores los conectaremos en el D4, D5, D6, D7 y el bus I2C estará en los pines D2 y D3.

Para este proyecto hemos empleado los motores Micro Metal Gear motor 50:1 con Encoder, que ya vienen con el encoder y el conector y tienen un precio muy asequible. La resolución del encoder es aproximadamente 14 pulsos por vuelta, al tener dos sensores recibiremos 28 pulsos por vuelta X 50 de la reducción aproximadamente 1400 pulsos por vuelta de la rueda.

Nota: La reducción de los motores en el robot Eddie es 75:1, empleando los mismos encoders con esa reducción obtenemos 4200 pulsos aproximados por vuelta, con el programa del Eddie. Una gran diferencia con el modelo de Polulu que según indica da 12 pulsos por vuelta, aunque no he podido comprobarlo físicamente. Esto causa un problema para ajustar el PID pues los parámetros de entrada son muy diferentes.





No tiene una figura muy definida, pero para ser un prototipo ya nos funciona. La batería para esta ocasión he reciclado un par de módulos de una batería de un macbook.



... Working progress...

Anakleto.