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
Blog dedicado al desarrollo del hardware libre y opensource
sábado, 30 de noviembre de 2013
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 >:)
miércoles, 13 de marzo de 2013
Accesorios Raspberry
Por fin algo sobre Raspberry...
No quise escribir nada sobre como configurar un equipillo de estos, en internet ya hay mucha informacion solo quise compartir sobre como darle una apariencia decente. Este Case me parece muy interesante, tiene una apariencia inmejorable, los acabados son perfectos.
y para culminar es necesario en ocaciones hacer alguna implementación con un hardware adicional. Esta tarjeta fue hecha a mano aun cuando tambien se consigue por la web.
y para culminar una vez montado
No quise escribir nada sobre como configurar un equipillo de estos, en internet ya hay mucha informacion solo quise compartir sobre como darle una apariencia decente. Este Case me parece muy interesante, tiene una apariencia inmejorable, los acabados son perfectos.
y para culminar es necesario en ocaciones hacer alguna implementación con un hardware adicional. Esta tarjeta fue hecha a mano aun cuando tambien se consigue por la web.
y para culminar una vez montado
martes, 12 de marzo de 2013
Llaves electronicas usb
En esta entrada exponemos una implementacion de llave electronica para proteger el código fuente de copias no autorizadas utilizando una placa generica basada en AVR especificamente ATtiny85, sin embargo es posible hacerla con otro mcu solo que quedaria con un tamaño un poco mas grande.
En la internet se consiguen varias implementaciones de estas placas a continuacion muestro un diseño muy simple
hay que acotar que en este caso es necesario colocar un pequeño regulador de 3v3 para alimentar el mcu y sobre todo los pines D+ y D- del usb; en otros diseños prefieren alimentar el mcu con los 5v y colocar un par de zener en D+ y D-, de igual manera cualquiera funciona, en mi caso particular hice algo menos fastidioso... utilizar el AVRStick de Sparkfun, simplemente hice un nuevo desarrollo basado en el diseño de ellos obteniendo resultados satisfactorios.
Para subir el programa en la plaquita utilizé los famosos pines pogo
simplemente es un pin que posee un resorte interno esto con el objeto de hacer un adaptador icsp de 6 pines para programar la plaquita
por ultimo subo el programa que implenta la llave electronica basada en la libreria libusb ya que el micro ATtiny85 no posee puerto USB, en esta ocasión no utilicé la IDE de Arduino sino que lo hice directamente con el AVRStudio. Es importantes aclarar que hay que conectar la plaquita a la alimentacion preferiblemente no a la computadora sino a una toma externa para que no intente reconocerla.
por último colocamos las tapitas de pendrive y quedo de la siguiente manera
En el programa que va dentro del mcu se le coloca en las definiciones de USB_CFG_VENDOR_NAME y USB_CFG_DEVICE_NAME nuestro valores respectivos, ojo no debemos utilizar valores que corresponda a otros dispositivos comerciales.
Cuando se inserta la llave en una maquina pedirá el driver y la va a reconocer con el nombre de fabricante y el nombre de dispositivo definido en la llave electronica.
Suscribirse a:
Entradas (Atom)