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.


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