Si queremos saber que pasa al arrancar nuestra Raspberry probablemente la mejor opción es conectarse directamente a los pines UART, para hacerlo de la manera más elegante les recomiendo el Shield de www.linksprite.com
Ademas pone a disposición pines hembra para I2C, SPI y para el resto de las GPIO en forma de pines macho como si fueramos a conectar servo motores.
Otra de las ventajas es que realmente si hay algun problema con la ethernet o simplemente si no tenemos el cable disponible podemos trabajar con la Raspberry, la coneccion se establece por defecto con 115kbps.
Blog dedicado al desarrollo del hardware libre y opensource
sábado, 31 de mayo de 2014
domingo, 25 de mayo de 2014
Conectandose con la computadora del Carro
Bueno la historia es un poco larga, hace un tiempo pedi por Amazon un conector obdII bluetooth, para los que no estan familiarizados con el tema OBD (On Board Diagnostics) es un estándar de comunicación para vehículos, en wikipedia podrán encontrar mas información; básicamente es posible comunicarse con la computadora de los vehículos o coches de hoy dia gracias a este estándar de la industria automotriz. Como todos estos aparaticos los distribuyen de China tardó un poco mas de 3 semanas en llegar a mi buzon de Rudy Export; nunca lo vi entre las otras cosas que llegaron, luego de mas de 1 año apareció, he tratado de que me lo envien pero núnca supe que pasó.
Bueno realmente son muy economicos, decidí entonces construir un equipito basado en algun chip que se comunique con la red CAN del carro utilizando los protocolos del OBDII; hay varios de estos, está el archiconocido ELM327 tambien está el STN1110, Sparkfun vende un convertidor OBD-II UART, solo que el problema es que uno tendría que encargarse de conectar la salida TTL de esta tarjeta a la portatil, es decir "Un Cablerío", decidí entonces hacer una tarjetica que se acople al STN1110 con un stick Bluetooth, es esta manera tendría el equivalente al conector obdII de uso comercial que habia pedido por Amazon, solo que un poco mas grande.
Veamos el esquema del diseño final
La Bateria de los carros es de 12 Voltios entoces para alimentar el stick Bluetooth hay que regular el voltaje a 5V y por ultimo conectamos el bluetooth a la salida TTL de la tarjeta. A continuación las partes del prototipo
Antes de todo esto es importante tomar en cuenta que la tarjeta OBDII-UART viene por defecto a 9600baudios, o sea muy lenta; hay que conectarse via ttl por una terminal y configurarla a algo mas rapido yo utilize 115kbps. Los comandos fueron
STSBR 115200
y por ultimo para guardar en la memoria flas
STWBR
lo mismo hay que hacer con el stick bluetooth, que hable a la misma velocidad
tipear $$$ para entrar en modo comando antes de que se cumpla un minuto de haber sido energizado
presionar d para ver la configuracion actual.
usar el comando SU para cambiar los baudios en este caso 115200kbps
SU,11
Esto es todo, como yo lo que tengo es un MacBook Pro utilicé el software MoviPro, sin embargo existen mucho programas para hacer esto, por los momentos utilizaré este, pero creo que sería más interesante que haga un programa para Android aprovechando el bluetooth.
Bueno realmente son muy economicos, decidí entonces construir un equipito basado en algun chip que se comunique con la red CAN del carro utilizando los protocolos del OBDII; hay varios de estos, está el archiconocido ELM327 tambien está el STN1110, Sparkfun vende un convertidor OBD-II UART, solo que el problema es que uno tendría que encargarse de conectar la salida TTL de esta tarjeta a la portatil, es decir "Un Cablerío", decidí entonces hacer una tarjetica que se acople al STN1110 con un stick Bluetooth, es esta manera tendría el equivalente al conector obdII de uso comercial que habia pedido por Amazon, solo que un poco mas grande.
Veamos el esquema del diseño final
La Bateria de los carros es de 12 Voltios entoces para alimentar el stick Bluetooth hay que regular el voltaje a 5V y por ultimo conectamos el bluetooth a la salida TTL de la tarjeta. A continuación las partes del prototipo
Stick Bluetooth baasado en el chip RN41
Tarjeta OBDII-UART
Prototipo de tarjeta bluetooth

Ensamblado final
Antes de todo esto es importante tomar en cuenta que la tarjeta OBDII-UART viene por defecto a 9600baudios, o sea muy lenta; hay que conectarse via ttl por una terminal y configurarla a algo mas rapido yo utilize 115kbps. Los comandos fueron
STSBR 115200
y por ultimo para guardar en la memoria flas
STWBR
lo mismo hay que hacer con el stick bluetooth, que hable a la misma velocidad
tipear $$$ para entrar en modo comando antes de que se cumpla un minuto de haber sido energizado
presionar d para ver la configuracion actual.
usar el comando SU para cambiar los baudios en este caso 115200kbps
SU,11
Esto es todo, como yo lo que tengo es un MacBook Pro utilicé el software MoviPro, sin embargo existen mucho programas para hacer esto, por los momentos utilizaré este, pero creo que sería más interesante que haga un programa para Android aprovechando el bluetooth.
lunes, 19 de mayo de 2014
Case para Cámara de Raspberry
Saludos, os recomiendo este case para usar con la Raspicam
Con esto evitan el contacto con las manos y es mas facil de adaptar a sus proyectos de hardware se puede consegui en Sparkfun.
Con esto evitan el contacto con las manos y es mas facil de adaptar a sus proyectos de hardware se puede consegui en Sparkfun.
miércoles, 14 de mayo de 2014
Instalando PHP5 en Arduino Yun
Mostraremos como se instala el PHP5 en el Arduino Yun en pocos pasos.
El gestor de paquetes del Lilino se llama opkg y esta basado en linux OpenWrt.
Ahora a lo nuestro:
1- Conectarse via SSH. Si sabe la ip tambien se puede hacer de la manera tradicional.
#ssh root@arduino.local
2- Actualizar los repos.
#opkg update
3- A mi me gusta nano, (odio el vi) >:|
#opkg install nano
4- Instalar los paquetes respectivos.
#opkg install php5 php5-cgi
5- Editamos el archivo del configuracion del servidor web por defecto del lilino.
#nano /etc/config/uhttpd
6- Descomentamos la linea y guardamos
list interpreter ".php=/usr/bin/php-cgi"
7- Reiniciamos el servidor web.
#/etc/init.d/uhttpd restart
8- Por ultimo creamos el archivo test.php en el directorio /www para probar si funciona
este es el contenido del archivo test.php
9- Por ultimo llamamos la pagina http://arduino.local/test.php
deberia funcionar, es rápido...
El gestor de paquetes del Lilino se llama opkg y esta basado en linux OpenWrt.
Ahora a lo nuestro:
1- Conectarse via SSH. Si sabe la ip tambien se puede hacer de la manera tradicional.
#ssh root@arduino.local
2- Actualizar los repos.
#opkg update
3- A mi me gusta nano, (odio el vi) >:|
#opkg install nano
4- Instalar los paquetes respectivos.
#opkg install php5 php5-cgi
5- Editamos el archivo del configuracion del servidor web por defecto del lilino.
#nano /etc/config/uhttpd
6- Descomentamos la linea y guardamos
list interpreter ".php=/usr/bin/php-cgi"
7- Reiniciamos el servidor web.
#/etc/init.d/uhttpd restart
8- Por ultimo creamos el archivo test.php en el directorio /www para probar si funciona
este es el contenido del archivo test.php
<?php phpinfo() ?>9- Por ultimo llamamos la pagina http://arduino.local/test.php
deberia funcionar, es rápido...
Caja para Arduino Yun
Para el momento en que estoy escribiendo esta entrada no se dispone de muchas opciones de caja para el Arduino Yun, seria interesante que saquen al menos una metálica atornillable en la pared como la que existe para Arduino, esto le daría un acabado mas profesional para los proyectos finales, de momento en china fabrican esta...
Lo malo es que es se cierra a presión, no posee tornillos y deja visible los puertos I/O desde afuera, esto es lo que se llama comunmente un "Peor es nada!".
Lo malo es que es se cierra a presión, no posee tornillos y deja visible los puertos I/O desde afuera, esto es lo que se llama comunmente un "Peor es nada!".
sábado, 30 de noviembre de 2013
Interesante Engendro
Amigos este es el Arduino YUN es el resultado de una mutación entre el Arduino Leonardo y un Linux embebido es decir 2 cabezas en un mismo cuerpo, para programar este interesante aparatico se debe utilizar la versión de la IDE de Arduino 1.5.5 beta, para ver todo lo que puede hacer mejor véanlo ustedes mismos en la página del fabricante http://arduino.cc/en/Main/ArduinoBoardYun#
Algo caro pero vale la pena probarlo
Algo caro pero vale la pena probarlo
jueves, 5 de septiembre de 2013
Camara para Raspberry Pi
Esta es una cámara que no le debería faltar a todo el que tenga un Raspberry Pi; es un pequeño monstrico de 5 megapixeles de resolución nativa, ademas es mas rápida que una cámara tradicional que se conecte por usb.
la activación es muy simple se hace por raspi-config y luego se selecciona la opcion 'enable camera addon support', ahora bien si queremos usarla con algún software tradicional o si quieren trabajar con OpenCV se necesita que esté instalado el driver de video for linux; debemos entonces agregar algo al repo.
primero instalamos la clave del repo
wget http://www.linux-projects.org/listing/uv4l_repo/lrkey.asc && sudo apt-key add ./lrkey.asc
abrimos el sources.list, a mi me gusta hacerlo con nano
$ nano /etc/apt/sources.list
y agregamos el url del repo
deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/ wheezy main
luego actualizamos e instalamos los drivers
$ sudo apt-get update
$ sudo apt-get install uv4l uv4l-raspicam
ahora bien necesitamos activarlo esto hay que hacerlo cada vez que se quiera usar la cámara
$ uv4l --driver raspicam --auto-video_nr --width 640 --height 480 --encoding jpeg
esto se ejecuta solamente una vez y activa el /dev/video0 en caso que no estén usando alguna cámara usb, si vuelven a ejecutar la linea anterior se activaría adicionalmente el dispositivo /dev/video1
si queremos hacer una prueba de que funciona bien ejecutamos
$ dd if=/dev/video0 of=foto.jpeg bs=11M count=1
si no van a usar mas la cámara pueden desactivar el dispositivo /dev/video0 con la siguiente instrucción
$ pkill uv4l
En la proxima entrada veremos el uso de esta cámara con SimpleCV
la activación es muy simple se hace por raspi-config y luego se selecciona la opcion 'enable camera addon support', ahora bien si queremos usarla con algún software tradicional o si quieren trabajar con OpenCV se necesita que esté instalado el driver de video for linux; debemos entonces agregar algo al repo.
primero instalamos la clave del repo
wget http://www.linux-projects.org/listing/uv4l_repo/lrkey.asc && sudo apt-key add ./lrkey.asc
abrimos el sources.list, a mi me gusta hacerlo con nano
$ nano /etc/apt/sources.list
y agregamos el url del repo
deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/ wheezy main
luego actualizamos e instalamos los drivers
$ sudo apt-get update
$ sudo apt-get install uv4l uv4l-raspicam
ahora bien necesitamos activarlo esto hay que hacerlo cada vez que se quiera usar la cámara
$ uv4l --driver raspicam --auto-video_nr --width 640 --height 480 --encoding jpeg
esto se ejecuta solamente una vez y activa el /dev/video0 en caso que no estén usando alguna cámara usb, si vuelven a ejecutar la linea anterior se activaría adicionalmente el dispositivo /dev/video1
si queremos hacer una prueba de que funciona bien ejecutamos
$ dd if=/dev/video0 of=foto.jpeg bs=11M count=1
si no van a usar mas la cámara pueden desactivar el dispositivo /dev/video0 con la siguiente instrucción
$ pkill uv4l
En la proxima entrada veremos el uso de esta cámara con SimpleCV
sábado, 17 de agosto de 2013
Cambiando los conectores de expansion del Beagleboard XM
Ahora le toca el turno al Beagleboard XM, lo que me gusta de este sabor de tarjeta de linux embebido es que tiene 4 puertos USB, 1 entrada y 1 salida de audio, 1 puerto serial RS232 y un puerto Ethernet 10/100, no esta nada mal pero si lo comparamos con el raspberry uno esta pagando 3 veces mas por una tarjeta sin obtener 3 veces mas el poder de computo; solo se justificaría usar este equipo en el caso que necesitemos audio de entrada, salida y mas puertos usb. Sin embargo fué mi segunda adquisición en el mundo de los pequeños linux, la primera que adquirí fue la FoxBoard de 100Mhz 'a long time ago'.
Había comprado una caja metálica especial para Beagleboard XM sin embargo resultaba incomodo poder usar el puerto de expansión debido a que es hembra y apunta hacia la parte de abajo de la tarjeta, lo quise cambiar para que quede en el mismo estilo del raspberry, es decir macho y apuntando hacia arriba.
Para esto utilice la estación de emisión de aire caliente WHA3000P lo único malo de este equipo es su precio cerca de 3000 dolares
Primero sujetamos el beagleboard a la base.
Había comprado una caja metálica especial para Beagleboard XM sin embargo resultaba incomodo poder usar el puerto de expansión debido a que es hembra y apunta hacia la parte de abajo de la tarjeta, lo quise cambiar para que quede en el mismo estilo del raspberry, es decir macho y apuntando hacia arriba.
Para esto utilice la estación de emisión de aire caliente WHA3000P lo único malo de este equipo es su precio cerca de 3000 dolares
Primero sujetamos el beagleboard a la base.
le colocamos una lamina de cobre a la medida esto para impedir el flujo de aire caliente al resto de los componentes.
Configuramos el precalentamiento, flujo de aire, temperatura en sus tiempos a tono.
Y por ultimo soldamos header macho quedando el puerto de expansion al mejor estilo del Raspberry Pi. Ahora así será mas fácil diseñarle tarjetas que se puedan acoplar a este equipo.
martes, 13 de agosto de 2013
Arduino para ropa
Esta entrada está dedicada al desarrollo de soluciones e-textiles, dicho de otra manera es posible llevar el cómputo a la ropa y hacerla inteligente; si bien ésta es un área relativamente nueva quizás a primera vista podemos decir ¿Para que diablos querríamos llevar un microprocesador a la prenda de vestir?.
Bien unos chamos que ganaron un concurso de innovación tecnológica pensaron que sí podría ser útil esta técnica; simplemente le colocaron a los uniformes de unos mineros, microprocesadores arduinos para ropa (lilypads) ademas de sensores de temperatura, transmisores inalámbricos y otras cosas más que de momento no recuerdo; cada minero sin saberlo fungía de unidad móvil de captura de información de la mina que se comunicaba con otro de forma inalámbrica algo así como lo hacen las hormigas, transmitiendo en tiempo real al centro de operaciones de la mina en superficie los datos de la mina de la parte subterránea.
Las posibilidades de uso son infinitas, solo hay que tener un poco de imaginación y verán que se pueden hacer muchísimas cosas útiles e interesantes. Tengo tiempo trabajando con estos aparaticos, vamos a hacer un repaso de algunos de los componentes para e-textiles que he probado.
Primero veremos el famoso Lilypad
bueno... no están viendo doble.... solo que son dos tipos de lilypad, el primero de ellos de derecha a izquierda es el original, tiene el acceso a todos los pines de atmega328 y se puede programar tanto por el conector fdti basico de 3v3 o el nuevo fdti de 5v que vende sparkfun. El otro lilypad posee menos pines, solo tiene 9 ;( esto tiene una razon de ser; posee un cargador para bateria de litio de 3.7V en la siguiente imagen lo muestro conectado.
otro detalle es que no tiene puerto ISP por el mismo cuento (culpa de cargador embebido). Así que solo se le puede subir el programa por el bootloader, de todas maneras no es mal de morir esa es la forma original de subir programas al AVR en Arduino.
Hay muchos otros accesorios, solo que no los tengo todos, mostraremos algunos como en la siguiente imagen
Por ultimo....
también está disponible una fuente para baterias AAA.
Bien unos chamos que ganaron un concurso de innovación tecnológica pensaron que sí podría ser útil esta técnica; simplemente le colocaron a los uniformes de unos mineros, microprocesadores arduinos para ropa (lilypads) ademas de sensores de temperatura, transmisores inalámbricos y otras cosas más que de momento no recuerdo; cada minero sin saberlo fungía de unidad móvil de captura de información de la mina que se comunicaba con otro de forma inalámbrica algo así como lo hacen las hormigas, transmitiendo en tiempo real al centro de operaciones de la mina en superficie los datos de la mina de la parte subterránea.
Las posibilidades de uso son infinitas, solo hay que tener un poco de imaginación y verán que se pueden hacer muchísimas cosas útiles e interesantes. Tengo tiempo trabajando con estos aparaticos, vamos a hacer un repaso de algunos de los componentes para e-textiles que he probado.
Primero veremos el famoso Lilypad
bueno... no están viendo doble.... solo que son dos tipos de lilypad, el primero de ellos de derecha a izquierda es el original, tiene el acceso a todos los pines de atmega328 y se puede programar tanto por el conector fdti basico de 3v3 o el nuevo fdti de 5v que vende sparkfun. El otro lilypad posee menos pines, solo tiene 9 ;( esto tiene una razon de ser; posee un cargador para bateria de litio de 3.7V en la siguiente imagen lo muestro conectado.
otro detalle es que no tiene puerto ISP por el mismo cuento (culpa de cargador embebido). Así que solo se le puede subir el programa por el bootloader, de todas maneras no es mal de morir esa es la forma original de subir programas al AVR en Arduino.
Hay muchos otros accesorios, solo que no los tengo todos, mostraremos algunos como en la siguiente imagen
tenemos el microprocesador atmega328 de forma aislada ésto es por si acaso el lilypad es muy grande para sus requerimientos, en ese caso está disponible el botón de encendido, el conector para la batería y otra cosilla interesante, el hilo conductor, éste último es suave, a primera vista parece un hilo normal, viene para colocarlo en el receptáculos de hilos de las máquinas de coser.
Por ultimo....
también está disponible una fuente para baterias AAA.
domingo, 28 de julio de 2013
Modulo biometrico GT-511C1
Este módulo biometrico es fascinante ya que ademas de ser rápido, permite la descarga de la huella dactilar de un módulo y subirla a otro del mismo tipo, lo que da pie al desarrollo de soluciones biométricas avanzadas personalizadas.
Es fabricado por la empresa taiwanesa ADH Technology Co.Ltd. El único problema es que el que yó compré tiene unos bugs en el firmware que no permiten descargar el template de la huella por ttlserial, ni mucho menos cargarla, ya les envié un email para que liberen la actualización que permita corregir esta falla; el modulo GT-511C3 no posee este inconveniente.
Anteriormente había trabajado con un módulo Nitgen publicado en esta entrada http://fernandezajp.blogspot.com/2013/02/sensor-biometrico.html, los módulos biométrico poseen mas o menos las mismas funciones, solo hay que revisar el manual tecnico y empresar a escribir codigo fuente como un loco para hacer que funcione bien, aún no he encontrado una implementación para Arduino y creo que la razón principal es que el atmega328 no tiene la capacidad de memoria para usar todo el potencial de este módulo biométrico; aun cuando se podría escribir una libreria que haga lo basico no se podria hacer una que por ejemplo que almacene temporalmente templates ni las imagenes RAW por lo de la memoria, a menos que se use un chip de memoria adicional; habria que probar esta idea.
En el repo de Github les dejo los drivers para conectividad de este modulo para Windows, MacOSX, RaspberryPi y Arduino, (el de Arduino tiene esta en beta aun no funciona bien).
https://github.com/fernandezajp/GT511C1_Drivers
Para poder usarlo de una manera mas comoda le hice un adaptador para un modulo fdti 3.3v básico
domingo, 21 de julio de 2013
Ups Cuidado con los billetes falsos (1/2)
En esta estrada expondremos como usar unos cuantos led ultravioletas para detectar billetes falsos, si bien no funcionaria para todos los paises ya que depende del material con el cual fue construido ademas de los elementos de seguridad, al menos se pueden usar con los dolares americanos, si tienes uno de estos dolares falsos en USA puedes parar en la carcel como un tonto(a).
Es importante para cada caso documentarse cuales son los elementos de seguridad que poseen los billetes, por ejemplo el de U$20 reacciona diferente al de U$100 lo cual significa que uno debe memorizar estos pormenores para analizar los billetes de forma rápida.
Para este articulos utilizaremos unos Led ultravioletas el YSL-R547P4C-E3 de la empresa CHINA YOUNG SUN LED TECHNOLOGY CO., LTD.
Lo importante a la hora de usar un led en general, es necesario mirar las especificaciones de diseño, si observamos el pdf del fabricante indica que no se debe sobrepasar los 20 miliamperios si queremos que tenga una larga vida util.
Para esto usamos el mas simple de los calculos de electronica básica; si el Forward Voltaje del led es de 3Voltios y el regulador que usamos es de 3.3Voltios significa que debemos usar una resistencia mas o menos de 20 ohmios para obtener una amperaje cercano a los 15 miliamperios.
(3.3V-3V)/15mA = 20ohm
ahora veremos el efecto del led frente a algunos de los billetes
Lamentablemente solo he podido conseguir un solo de 50 Bolivares en los bajos fondos, la busqueda de un billete de Dolar Americano falso ha sido infructosa hasta el momento
La siguiente fotografia corresponde al billete falso, si pueden observar los pillos que hicieron este billete pudieron replicar la marca de agua, sin embargo los led uv pueden resaltar facilmente la trampa ya que no se deberia ver si se alumbra con los led UV desde arriba
En cambio con un billete real no se observa la marca de agua cuando se alumbra con los led UV desde arriba ademas de que se observan hilos fosforecentes aleatorio alrededor del billete sin embargo la camara fotográfica que tengo no lo resalta bien, si tienen oportunidad de probarlo de verdad estos hilos son muy brillantes.
Ahora vamos con uno de U$20; nuevamente la imagen no se logra ver con los colores correctos sin embargo a la vista del ojo humano el hilo de seguridad se ver de color verde fosforecente, si el billete fuera falso seguro que no se veria de esta manera.
En la segunda parte de esta entrada finalmente utilizaremos mas leds quizas con unos 10 seria suficiente para tener buena iluminacion UV y haremos el artefacto en una impresora 3D para tenerlo con el acabado perfecto.
Es importante para cada caso documentarse cuales son los elementos de seguridad que poseen los billetes, por ejemplo el de U$20 reacciona diferente al de U$100 lo cual significa que uno debe memorizar estos pormenores para analizar los billetes de forma rápida.
Para este articulos utilizaremos unos Led ultravioletas el YSL-R547P4C-E3 de la empresa CHINA YOUNG SUN LED TECHNOLOGY CO., LTD.
Lo importante a la hora de usar un led en general, es necesario mirar las especificaciones de diseño, si observamos el pdf del fabricante indica que no se debe sobrepasar los 20 miliamperios si queremos que tenga una larga vida util.
Para esto usamos el mas simple de los calculos de electronica básica; si el Forward Voltaje del led es de 3Voltios y el regulador que usamos es de 3.3Voltios significa que debemos usar una resistencia mas o menos de 20 ohmios para obtener una amperaje cercano a los 15 miliamperios.
(3.3V-3V)/15mA = 20ohm
ahora veremos el efecto del led frente a algunos de los billetes
Lamentablemente solo he podido conseguir un solo de 50 Bolivares en los bajos fondos, la busqueda de un billete de Dolar Americano falso ha sido infructosa hasta el momento
La siguiente fotografia corresponde al billete falso, si pueden observar los pillos que hicieron este billete pudieron replicar la marca de agua, sin embargo los led uv pueden resaltar facilmente la trampa ya que no se deberia ver si se alumbra con los led UV desde arriba
En cambio con un billete real no se observa la marca de agua cuando se alumbra con los led UV desde arriba ademas de que se observan hilos fosforecentes aleatorio alrededor del billete sin embargo la camara fotográfica que tengo no lo resalta bien, si tienen oportunidad de probarlo de verdad estos hilos son muy brillantes.
Ahora vamos con uno de U$20; nuevamente la imagen no se logra ver con los colores correctos sin embargo a la vista del ojo humano el hilo de seguridad se ver de color verde fosforecente, si el billete fuera falso seguro que no se veria de esta manera.
En la segunda parte de esta entrada finalmente utilizaremos mas leds quizas con unos 10 seria suficiente para tener buena iluminacion UV y haremos el artefacto en una impresora 3D para tenerlo con el acabado perfecto.
jueves, 18 de julio de 2013
Sensor EMG
La Electromiografia es una técnica de medición de señales eléctricas musculares; originalmente se usó para el diagnóstico de enfermedades relacionadas con la función muscular, pero ahora con el avance tecnológico se le ha dado un nuevo uso como por ejemplo el desarrollo de protesis mioelectricas; si se coloca este sensor en puntos especificos del brazo por ejemplo se puede hacer una protesis robótica que permita que pacientes que no posean este preciado miembro puedan mejorar su calidad de vida.
A continuacion presentamos este sensor bastante pequeño, solo 1 pulgada de lado y lado, lo interesante en este caso seria reemplazar los contactos por unos que no sean desechables.
martes, 16 de julio de 2013
Netduino Plus 2 otra opcion al estilo Arduino
No esta de mas ver otro tipo de hardware, el netduino plus 2 es una buena opción a la hora de utilizar una tarjeta con el mismo pinout del arduino pero con microframework, lo que mas me gusta de éste con respecto a la primera version (netduino plus) es la velocidad de procesamiento, realmente es mas rápido, aunque de primera vista algunos se sorprenden del porqué cambiaron el chip ethernet por uno de 10mbits con respecto al de 10/100 que tiene su predecesor; lo primero que se me vino a la mente es que con el arduino plus inicial habia que tener cuidado con el trafico de la LAN, si es excesivo ejemplo una oficina con muchos empleados, una universidad o ambientes similares se podia quedar congelado, puesto que no le daba tiempo de procesar tantas solicitudes, espero que no ocurra lo mismo que este nuevo diseño, de todas maneras hay que ponerlo a prueba.
Manos a la obra luego les aviso...
domingo, 7 de julio de 2013
Uso de la libreria Modbusserial (2/2)
Después de caer en un vórtice espacio-tiempo (por muchas ocupaciones) vuelvo a escribir en el blog, muchos han preguntado como se usa la librería ModbusSerial
En la siguiente foto se pueden observar los elemento necesarios para hacer la prueba de la librería
El cable usb se conecta al PC en mi caso uso el ModSim para emular una Remota; este cable va conectado el conector RS232 el cual se coloca en el Protoboard para Arduino y con los cables se hace la conección final.
Se debe usar el código fuente base para usar la libreria Modbusserial.
Si no queremos que se muestre por la consola las respuesta de la remota solo se debe comentar la linea
#define VERBOSE
en la libreria modbusseriallib.h
-------------------------------------------------------------
#include <SoftwareSerial.h>
#include "modbusseriallib.h"
#define RXPIN 4
#define TXPIN 5
SoftwareSerial PLCSerialPort(RXPIN, TXPIN);
ModbusSerial ModbusSerial(&PLCSerialPort);
void setup()
{
Serial.begin(9600);
PLCSerialPort.begin(9600);
}
void loop()
{
// your program //
}
-------------------------------------------------------------
Como verán se puede cambiar el pin RX y TX de acuerdo a sus necesidades
El Objeto instanciado se llama ModbusSerial y se usa de la siguiente manera:
FC1
En caso de que deseen llamar la función fc1 de la librería deberán de tener la siguiente consideración
* Es una función de lectura por lo tanto deben declarar una variable que reciba la información de la remota.
* Si queremos ver la respuesta utilizamos un pequeño ciclo for
Veamos el siguiente ejemplo: Si queremos preguntar por 37 discrete coils desde la direccion 20 inclusive, del Device 17 (ojo viene en formato decimal), codificamos lo siguiente:
byte deviceId=17;
unsigned short start=20;
int numValues=37;
unsigned short values[numValues]; // aquí se almacena la respuesta
ModbusSerial.fc1(deviceId,start,numValues,values);
for(int i=0;i<numValues-1;i++)
{
Serial.print(values[i]);
Serial.print(",");
}
Serial.println(values[numValues-1]);
Si tomamos en cuenta las respuestas que están en la entrada anterior "http://fernandezajp.blogspot.com/2013/01/libreria-modbus-serial-para-arduino.html", obtendríamos la respuesta de la siguiente manera
MSG:11,1,0,13,0,25,E,10
10 received.
PACKET:11,1,5,CD,6B,B2,E,1B,45,E6
Read successful
1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,0,1,1
FC2
El mismo esquema aplicaría para la función fc2, en este caso la dirección de inicio es la 10197 y leeremos solo 22 valores luego lo almacenamos en la variable values.
byte deviceId=17;
unsigned short start=10197;
int numValues=22;
unsigned short values[numValues]; // aquí se almacena la respuesta
ModbusSerial.fc2(deviceId, start, numValues,values);
for(int i=0;i<numValues-1;i++)
{
Serial.print(values[i]);
Serial.print(",");
}
Serial.println(values[numValues-1]);
Respuesta
MSG:11,2,0,C4,0,16,BA,8
8 received.
PACKET:11,2,3,CD,6B,32,45,C4
Read successful
1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,1,0,0,1,1
FC3
Función fc3 (Read Holding Registers), ahora leeremos 3 valores a partir de la dirección 40108 y lo almacenaremos en la variable values.
byte deviceId=17;
unsigned short start=40108;
int numValues=3;
unsigned short values[numValues];
ModbusSerial.fc3(deviceId, start, numValues, values);
for(int i=0;i<numValues-1;i++)
{
Serial.print(values[i],HEX);
Serial.print(",");
}
Serial.println(values[numValues-1],HEX);
La respuesta que obtendríamos seria
MSG:11,3,0,6B,0,3,76,11
11 received.
PACKET:11,3,6,AE,41,56,52,43,40,49,AD
Read successful
AE41,5652,4340
FC4
Función fc4 (Read Input Registers), ahora leeremos 1 valor correspondiente a la dirección 30009 y lo almacenaremos en la variable values.
byte deviceId=17;
unsigned short start=30009;
int numValues=1;
unsigned short values[numValues];
ModbusSerial.fc4(deviceId, start, numValues, values);
for(int i=0;i<numValues-1;i++)
{
Serial.print(values[i],HEX);
Serial.print(",");
}
Serial.println(values[numValues-1],HEX);
Respuesta:
MSG:11,4,0,8,0,1,B2,7
7 received.
PACKET:11,4,2,0,A,F8,F4
10 Read successful
A
Ahora veamos ahora una de escritura
FC5
Esta función escribe un solo dato en una dirección específica por eso tiene menos parámetros
ej: escribir en la dirección 173 del DeviceId = 17 el valor de True
byte deviceId=17;
unsigned short start=173;
ModbusSerial.fc5(deviceId, start, true);
Respuesta
MSG:11,5,0,AC,0,FF,4F,8
8 received.
PACKET:11,5,0,AC,0,FF,4F,3B
Read successful
El mismo caso aplica para los analógicos
FC6
Ej: Escribir en la dirección 40002 el valor de 3
byte deviceId=17;
unsigned short start=40002;
unsigned short value=3;
ModbusSerial.fc6(deviceId, start, value);
Respuesta
MSG:11,6,0,1,0,3,9A,8
8 received.
PACKET:11,6,0,1,0,3,9A,9B
Read successful
Para escribir múltiples valores discretos utilizamos la función 15
FC15
ej: Escribir un arreglo binario de 10 valores binarios en la dirección 20 del device 17.
byte deviceId=17;
unsigned short start=20;
int numValues=10;
boolean values[numValues];
values[0] = 1;
values[1] = 1;
values[2] = 0;
values[3] = 1;
values[4] = 0;
values[5] = 0;
values[6] = 1;
values[7] = 1;
values[8] = 1;
values[9] = 0;
ModbusSerial.fc15(deviceId, start, numValues, values);
Respuesta
MSG:11,F,0,13,0,A,2,CB,1,BC,8
8 received.
PACKET:11,F,0,13,0,A,26,99
Read successful
el mismo esquema para los analógicos
FC16
Escribir un arreglo de 2 valores en la dirección 40002 del device 17.
byte deviceId=17;
unsigned short start=40002;
int numValues=2;
unsigned short values[numValues];
values[0] = 0xA;
values[1] = 0x102;
ModbusSerial.fc16(deviceId, start, numValues, values);
Respuesta
MSG:11,10,0,1,0,2,4,0,A,1,2,C6,8
8 received.
PACKET:11,10,0,1,0,2,12,98
Read successful
En la siguiente foto se pueden observar los elemento necesarios para hacer la prueba de la librería
El cable usb se conecta al PC en mi caso uso el ModSim para emular una Remota; este cable va conectado el conector RS232 el cual se coloca en el Protoboard para Arduino y con los cables se hace la conección final.
Se debe usar el código fuente base para usar la libreria Modbusserial.
Si no queremos que se muestre por la consola las respuesta de la remota solo se debe comentar la linea
#define VERBOSE
en la libreria modbusseriallib.h
-------------------------------------------------------------
#include <SoftwareSerial.h>
#include "modbusseriallib.h"
#define RXPIN 4
#define TXPIN 5
SoftwareSerial PLCSerialPort(RXPIN, TXPIN);
ModbusSerial ModbusSerial(&PLCSerialPort);
void setup()
{
Serial.begin(9600);
PLCSerialPort.begin(9600);
}
void loop()
{
// your program //
}
-------------------------------------------------------------
Como verán se puede cambiar el pin RX y TX de acuerdo a sus necesidades
El Objeto instanciado se llama ModbusSerial y se usa de la siguiente manera:
FC1
En caso de que deseen llamar la función fc1 de la librería deberán de tener la siguiente consideración
* Es una función de lectura por lo tanto deben declarar una variable que reciba la información de la remota.
* Si queremos ver la respuesta utilizamos un pequeño ciclo for
Veamos el siguiente ejemplo: Si queremos preguntar por 37 discrete coils desde la direccion 20 inclusive, del Device 17 (ojo viene en formato decimal), codificamos lo siguiente:
byte deviceId=17;
unsigned short start=20;
int numValues=37;
unsigned short values[numValues]; // aquí se almacena la respuesta
ModbusSerial.fc1(deviceId,start,numValues,values);
for(int i=0;i<numValues-1;i++)
{
Serial.print(values[i]);
Serial.print(",");
}
Serial.println(values[numValues-1]);
Si tomamos en cuenta las respuestas que están en la entrada anterior "http://fernandezajp.blogspot.com/2013/01/libreria-modbus-serial-para-arduino.html", obtendríamos la respuesta de la siguiente manera
MSG:11,1,0,13,0,25,E,10
10 received.
PACKET:11,1,5,CD,6B,B2,E,1B,45,E6
Read successful
1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,0,0,0,0,1,1,0,1,1
FC2
El mismo esquema aplicaría para la función fc2, en este caso la dirección de inicio es la 10197 y leeremos solo 22 valores luego lo almacenamos en la variable values.
byte deviceId=17;
unsigned short start=10197;
int numValues=22;
unsigned short values[numValues]; // aquí se almacena la respuesta
ModbusSerial.fc2(deviceId, start, numValues,values);
for(int i=0;i<numValues-1;i++)
{
Serial.print(values[i]);
Serial.print(",");
}
Serial.println(values[numValues-1]);
Respuesta
MSG:11,2,0,C4,0,16,BA,8
8 received.
PACKET:11,2,3,CD,6B,32,45,C4
Read successful
1,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,0,1,0,0,1,1
Función fc3 (Read Holding Registers), ahora leeremos 3 valores a partir de la dirección 40108 y lo almacenaremos en la variable values.
byte deviceId=17;
unsigned short start=40108;
int numValues=3;
unsigned short values[numValues];
ModbusSerial.fc3(deviceId, start, numValues, values);
for(int i=0;i<numValues-1;i++)
{
Serial.print(values[i],HEX);
Serial.print(",");
}
Serial.println(values[numValues-1],HEX);
La respuesta que obtendríamos seria
MSG:11,3,0,6B,0,3,76,11
11 received.
PACKET:11,3,6,AE,41,56,52,43,40,49,AD
Read successful
AE41,5652,4340
FC4
Función fc4 (Read Input Registers), ahora leeremos 1 valor correspondiente a la dirección 30009 y lo almacenaremos en la variable values.
byte deviceId=17;
unsigned short start=30009;
int numValues=1;
unsigned short values[numValues];
ModbusSerial.fc4(deviceId, start, numValues, values);
for(int i=0;i<numValues-1;i++)
{
Serial.print(values[i],HEX);
Serial.print(",");
}
Serial.println(values[numValues-1],HEX);
Respuesta:
MSG:11,4,0,8,0,1,B2,7
7 received.
PACKET:11,4,2,0,A,F8,F4
10 Read successful
A
FC5
Esta función escribe un solo dato en una dirección específica por eso tiene menos parámetros
ej: escribir en la dirección 173 del DeviceId = 17 el valor de True
byte deviceId=17;
unsigned short start=173;
ModbusSerial.fc5(deviceId, start, true);
Respuesta
MSG:11,5,0,AC,0,FF,4F,8
8 received.
PACKET:11,5,0,AC,0,FF,4F,3B
Read successful
FC6
Ej: Escribir en la dirección 40002 el valor de 3
byte deviceId=17;
unsigned short start=40002;
unsigned short value=3;
ModbusSerial.fc6(deviceId, start, value);
Respuesta
MSG:11,6,0,1,0,3,9A,8
8 received.
PACKET:11,6,0,1,0,3,9A,9B
Read successful
FC15
ej: Escribir un arreglo binario de 10 valores binarios en la dirección 20 del device 17.
byte deviceId=17;
unsigned short start=20;
int numValues=10;
boolean values[numValues];
values[0] = 1;
values[1] = 1;
values[2] = 0;
values[3] = 1;
values[4] = 0;
values[5] = 0;
values[6] = 1;
values[7] = 1;
values[8] = 1;
values[9] = 0;
ModbusSerial.fc15(deviceId, start, numValues, values);
Respuesta
MSG:11,F,0,13,0,A,2,CB,1,BC,8
8 received.
PACKET:11,F,0,13,0,A,26,99
Read successful
el mismo esquema para los analógicos
FC16
Escribir un arreglo de 2 valores en la dirección 40002 del device 17.
byte deviceId=17;
unsigned short start=40002;
int numValues=2;
unsigned short values[numValues];
values[0] = 0xA;
values[1] = 0x102;
ModbusSerial.fc16(deviceId, start, numValues, values);
Respuesta
MSG:11,10,0,1,0,2,4,0,A,1,2,C6,8
8 received.
PACKET:11,10,0,1,0,2,12,98
Read successful
lunes, 6 de mayo de 2013
miércoles, 17 de abril de 2013
Un poco de physical computing
Si bien lo que voy a mostrar en esta entrada no es nada nuevo, el objetivo real es mostrar que con componentes que no faltan en nuestras casas se puede hacer un dispositivo joystick modular que podamos incorporar en algun otro proyecto de robotica.
El programa para controlar el nunchuck de nintendo desde un arduino fue hecho en el 2008 por Tod E. Kurt, se preguntaran porque prefiero de esta manera a usar lo tradicional, el nunchuck pegado al Wiimote. La respuesta es depende... si el proyecto de robotica solo necesita de un joystick, un par de botones y/o lectura de acelerometro en x y y no hace falta tanto aparatejo; ademas de esta manera no necesitamos gastar baterias ya que se alimenta directamente del arduino que a su vez esta pegado al puerto usb del pc.
por otra parte el software que se va a ejecutar en el pc o en su defecto un linux embebido como es el caso del raspberry pudiera hacerse con processing, si no te apetece el java como es mi caso lo puedes hacer con python que esta de moda y si eres C# dependiente (o sea como yo) en mono o dotnet
se mueve muy bien bastante rapido, está controlado por eventos ya que encapsulé el control nunchuck en un componente independiente, el programilla esta totalmente estable y listo para ser incorporardo en un proyecto de robotica.
El proximo paso seria construir una tarjeta con un avr tiny que implemente una interfaz usb quedando el hardware muchisimo mas pequeño y con una mejor presentación; claro en este caso habria que desarrollarlo directamente con AVRStudio.
El programa para controlar el nunchuck de nintendo desde un arduino fue hecho en el 2008 por Tod E. Kurt, se preguntaran porque prefiero de esta manera a usar lo tradicional, el nunchuck pegado al Wiimote. La respuesta es depende... si el proyecto de robotica solo necesita de un joystick, un par de botones y/o lectura de acelerometro en x y y no hace falta tanto aparatejo; ademas de esta manera no necesitamos gastar baterias ya que se alimenta directamente del arduino que a su vez esta pegado al puerto usb del pc.
por otra parte el software que se va a ejecutar en el pc o en su defecto un linux embebido como es el caso del raspberry pudiera hacerse con processing, si no te apetece el java como es mi caso lo puedes hacer con python que esta de moda y si eres C# dependiente (o sea como yo) en mono o dotnet
se mueve muy bien bastante rapido, está controlado por eventos ya que encapsulé el control nunchuck en un componente independiente, el programilla esta totalmente estable y listo para ser incorporardo en un proyecto de robotica.
El proximo paso seria construir una tarjeta con un avr tiny que implemente una interfaz usb quedando el hardware muchisimo mas pequeño y con una mejor presentación; claro en este caso habria que desarrollarlo directamente con AVRStudio.
sábado, 13 de abril de 2013
Adaptador de Memoria MicroSD para Raspberry
Este adaptador de Memoria vale la pena adquirirlo, lo vende Adafruit; mejora la apariencia del raspberry debido que elimina el espacio sobrante del convertidor de microsd a SD.
Fijense que antes de colocar este aparatico el raspberry se ve asi
y ahora se ve asi
Vale la pena
Fijense que antes de colocar este aparatico el raspberry se ve asi
y ahora se ve asi
Vale la pena
viernes, 12 de abril de 2013
Adaptador para las GPIO del Raspberry
En esta entrada compartiremos un conector para las GPIO del raspberry hecho a mano, aun cuando se puede conseguir por internet puede ser complicado y costoso conseguirlo.
tiene la separacion idonea para colocarlo en el protoboard
tiene la separacion idonea para colocarlo en el protoboard
jueves, 11 de abril de 2013
Sesion remota gráfica del RaspberryPi
En ocaciones es necesario establecer una sesion remota gráfica al RaspberryPi, utilizar el vnc de manera estandar suele ser lento debido a que la GUI es compartida.
Dependiendo del requerimiento del usuario si lo que necesita es mayor velocidad a la hora de usar una interfaz gráfica remota y no compartir la pantalla es posible iniciar la interfaz X usando el protocolo RDP; esto se hace instalando como sudo el xrdp de la siguiente manera
sudo apt-get install xrdp
luego reiniciamos el equipo y podremos conectarnos desde linux con el tsclient, desde mac con Remote Desktop Connection.app y con Windows desde Coneccion a Escritorio Remoto, por supuesto el rendimiento es muy bueno solo que la interfaz X no esta compartida, es decir no se va poder observar lo que se hace en el monitor que tenga el Raspberry conectado en ese momento.
Mas adelante en otra entrada indicaremos como se hace inicio de interfaz X con otro protocolo.
Dependiendo del requerimiento del usuario si lo que necesita es mayor velocidad a la hora de usar una interfaz gráfica remota y no compartir la pantalla es posible iniciar la interfaz X usando el protocolo RDP; esto se hace instalando como sudo el xrdp de la siguiente manera
sudo apt-get install xrdp
luego reiniciamos el equipo y podremos conectarnos desde linux con el tsclient, desde mac con Remote Desktop Connection.app y con Windows desde Coneccion a Escritorio Remoto, por supuesto el rendimiento es muy bueno solo que la interfaz X no esta compartida, es decir no se va poder observar lo que se hace en el monitor que tenga el Raspberry conectado en ese momento.
Mas adelante en otra entrada indicaremos como se hace inicio de interfaz X con otro protocolo.
viernes, 5 de abril de 2013
Lector de ondas cerebrales parte 2
Un poco decepcionado con el hardware lector de ondas cerebrales, posee un clip que se conecta en el lobulo de la oreja haciendo tierra, y una pequeña placa metalica que hace contacto con la frente del usuario, solo es capaz segun lo que pude comprobar de sensar el pestañeo de la persona y el nivel de concentracion, aun cuando este ultimo no lo hace muy bien.
A continuacion muestro una captura de pantalla de un programa de matematicas que viene con el equipo, inicialmente creia que si uno pensaba la respuesta deberia aparecer en la pantalla; pero despues de concentrarme mucho y hacer fuerza con la mente :( nada de nada ;(.
Uno debe escribir la respuesta mientras el software mide el nivel de concentracion, solo eso....
Sin embargo existe otro equipo mas profesional que sensa varios puntos de la cabeza del usuario, estos si valen la pena a la hora de hacer investigación.
En lo que a mi respecta esperare tener a la mano algo mas profesional para hacer investigación en este campo.
martes, 19 de marzo de 2013
Lector de ondas cerebrales NeuroSky de Mindwave
Llego la hora del hardware Freaky, este aparatillo promete cosas buenas, acabo de destaparlo veamos que podemos hacer, hay mucho desarrollo en la WEB interesante.
lunes, 18 de marzo de 2013
PirateModbus
Basados en el desarrollo de la libreria Modbus presentaremos una herramienta basada en Arduino Mega(1) que puede ser util en algunos casos.
El PirateModbus, que puede colocarse en el medio de las remotas y el SCADA para examinar los paquetes :)
(1):Utilicé el ArduinoMega porque no tenia en que usarlo era muy viejo "Arduino1280", se pudo hacer el diseño con varios attiny85 conectados por puerto I2C o SPI, solo que queria mas largo el programa y mas complicado de armar >:)
El PirateModbus, que puede colocarse en el medio de las remotas y el SCADA para examinar los paquetes :)
(1):Utilicé el ArduinoMega porque no tenia en que usarlo era muy viejo "Arduino1280", se pudo hacer el diseño con varios attiny85 conectados por puerto I2C o SPI, solo que queria mas largo el programa y mas complicado de armar >:)
Suscribirse a:
Entradas (Atom)

+22.41.36.png)
+21.50.23.png)
+22.16.49.png)



+17.15.21.png)


+09.56.12.png)
+07.56.21.png)
+13.41.37.png)
+13.44.22.png)
+13.44.36.png)
+13.41.54.png)
+13.45.50.png)
+21.26.43.png)
+21.26.31.png)
+21.26.20.png)
+21.26.02.png)


+11.10.32.png)
+11.09.01.png)
+11.36.12.png)
+20.32.09.png)
+20.59.01.png)
+16.38.51.png)
+16.38.21.png)

