Buenos dias, estoy ingresando al mundo de Arduino y mi primer proyecto es hacer una cerradura electrica con lector de huella. Para ello compre el siguiente lector:
he conectado los cables proveniente del UART del lector Rx al Tx 3 del Arduino y el Tx al Rx 2, use el software ejemplo 'enroll', que viene con la libreria adafruit fingerprinter y no detecto al lector. Busque en infinidad de foros y encontre que para la placa mega 2560 los rx que funcionan son:
Mega 0(RX), 1(TX) 19(RX), 18(TX) 17(RX), 16(TX) 15(RX), 14(TX)
los probe a todos e incluso intercambiando los cables y tampoco lo detecto.
Ya no se que mas probar asi que acudo a este foro por si alguien tuvo alguna vez este inconveniente y si pudo solucionarlo.
Desde ya muchas gracias.
Adjunto el software enroll, pero es el mismo que se ha visto en todos los foros.
***************************************************
This is an example sketch for our optical Fingerprint sensor
Designed specifically to work with the Adafruit BMP085 Breakout
----> http://www.adafruit.com/products/751
These displays use TTL Serial to communicate, 2 pins are required to
interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution
****************************************************/
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
// On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
// uncomment this line:
#define mySerial Serial1
// For UNO and others without hardware serial, we must use software serial...
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino (WHITE wire)
// comment these two lines if using hardware serial
//SoftwareSerial mySerial(11, 10);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
uint8_t id;
void setup()
{
Serial.begin(9600);
while (!Serial); // For Yun/Leo/Micro/Zero/...
delay(100);
Serial.println("\n\nAdafruit Fingerprint sensor enrollment");
// set the data rate for the sensor serial port
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1) { delay(1); }
}
}
uint8_t readnumber(void) {
uint8_t num = 0;
while (num == 0) {
while (! Serial.available());
num = Serial.parseInt();
}
return num;
}
void loop() // run over and over again
{
Serial.println("Ready to enroll a fingerprint!");
Serial.println("Please type in the ID # (from 1 to 127) you want to save this finger as...");
id = readnumber();
if (id == 0) {// ID #0 not allowed, try again!
return;
}
Serial.print("Enrolling ID #");
Serial.println(id);
while (! getFingerprintEnroll() );
}
uint8_t getFingerprintEnroll() {
int p = -1;
Serial.print("Waiting for valid finger to enroll as #"); Serial.println(id);
while (p != FINGERPRINT_OK) {
p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
Serial.println(".");
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error");
break;
default:
Serial.println("Unknown error");
break;
}
}
// OK success!
p = finger.image2Tz(1);
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features");
return p;
default:
Serial.println("Unknown error");
return p;
}
Serial.println("Remove finger");
delay(2000);
p = 0;
while (p != FINGERPRINT_NOFINGER) {
p = finger.getImage();
}
Serial.print("ID "); Serial.println(id);
p = -1;
Serial.println("Place same finger again");
while (p != FINGERPRINT_OK) {
p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
Serial.print(".");
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error");
break;
default:
Serial.println("Unknown error");
break;
}
}
// OK success!
p = finger.image2Tz(2);
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features");
return p;
default:
Serial.println("Unknown error");
return p;
}
// OK converted!
Serial.print("Creating model for #"); Serial.println(id);
p = finger.createModel();
if (p == FINGERPRINT_OK) {
Serial.println("Prints matched!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_ENROLLMISMATCH) {
Serial.println("Fingerprints did not match");
return p;
} else {
Serial.println("Unknown error");
return p;
}
Serial.print("ID "); Serial.println(id);
p = finger.storeModel(id);
if (p == FINGERPRINT_OK) {
Serial.println("Stored!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_BADLOCATION) {
Serial.println("Could not store in that location");
return p;
} else if (p == FINGERPRINT_FLASHERR) {
Serial.println("Error writing to flash");
return p;
} else {
Serial.println("Unknown error");
return p;
}
}
3 y 2 creo que no son nada en un MEGA.
18 y 19 en cambio son Serial1.
Si pones Serial1, ya tienes esos pines definidos por hardware y no tienes que usar ningún SoftwareSerial.
Asi que comenta esta línea
Hola surbyte, gracias por contestar. Perdon por responder tarde, pero crei que enviaban a mi casilla de mail un alerta.
Te comento que ya habia probado comentando la inclusion de la libreria serial y conectando en los pines 18 y 19 y aun asi no funciono.
Para dejar mas claro como he conectado el fingerprinter, he adjuntado unas fotos, espero que sean claras para entenderlas.
Nuevamente gracias por tu ayuda.
he seguido el hilo que mencionas y cambie &mySerial por &Serial1, y aun asi, sigue si funcionar.
los baudios los respeto (9600) y perdon por mi ignorancia pero no entiendo lo de compartir RX,TX y GND, por si no llegaras a ver las imagenes te comento:
Valoro tu esfuerzo pero te quedaste en la mitad de la tarea.. que hago con 3 enlaces si no veo las imágenes.
Si te reclamo que las imágenes deben verse el sentido común dicta que faltaba algo no?
Y además el pedido era para el post donde subiste los adjuntos.
Luego te contacto x privado y te explico.
Parece ser que varios han tenido tu problema.
Esto encontré pero no es mas que lo que ya te dije
When using Arduino Mega 2560 with the Adafruit Library, we use:
Using Hardware Serial Port (Serial1) [Recommended]
(Green) TX => Pin 19
(White) RX => Pin 18
(Red) VCC => 5V
(Black) GND => GND
//Note that you'll comment out the Software Serial initialization
//as directed by the code in the Adafruit Library
#define mySerial Serial1
When using Arduino Mega 2560 with the Adafruit Library, we use:
no difiere a como me indicas que deben estar conectadas. y en cuanto a la programacion he probado ambas opciones que me ejemplificas y aun asi no funciona.
En las indicaciones que viene con el lector indica que debe utilizarse la libreria de Adafruit_Fingerprint, asi que la libreria es la indicada.
Es poco probable, ya que es nueva, pero tengo alguna forma de probar si funciona el lector, es decir que no este defectuoso.? Gracias.
Hi,
Adjunto un link que explica y tiene informacion como leer el sensor. Otra cosa es que para comunicarte el baud rate debe de ser de 19200. El baud rate ya viene predeterminado en la programacion del sensor. Tambien tiene un manual en PDF y el code para probar si el sensor trabaja.Espero que te pueda ayudar a resolver tu problema.
Hola surbyte y tauro, les gradezco el interés por ayudarme.
Tauro ingrese al sitio que posteaste y para probar si funciona el lector con el soft que ellos publican tengo que comprar un PL2303 USB UART Board para poder conectarlo a mi PC, así que en cuanto lo compre y pruebe les contare al menos si funciona.
He cambiado los baudios como allí mencionan a 19200 y nada. Pero lo primero es lo primero, probare si funciona directo a la PC y luego los molestare nuevamente.
Gracias a ambos.
auro ingrese al sitio que posteaste y para probar si funciona el lector con el soft que ellos publican tengo que comprar un PL2303 USB UART Board para poder conectarlo a mi PC, así que en cuanto lo compre y pruebe les contare al menos si funciona.
No tienes que comprar nada, eso mismo lo haces con Arduino
Que diferencia hay con PC o con Arduino, ninguna o mejor dicho el software.
SI usas el software adecuado no habrá problema en ningúno de los dos caso, y si lo usas mal fallará en ambos.
Hi,
Ese modulo se usa para convertir el USB a RS232. Yo tengo como 4 de ellos. Te permite mandar comandos usando el keyboard del PC al modulo. Una pregunta la informacion de la huella tu la quires ver en el display del PC o no. En otra palabras es de que la informacion del modulo la recoja el mega y la puedas ver en PC. No veo porque tienes problemas cuando haz usado casi todos los sketch posibles y no te trabaja. Normalmente las librerias tienen varios sketch que te permiten por lo menos decirte que te puedes comunicar con el modulo. Haz tratado varios sin poder hacerlo comunicarse.Posiblemente no creo tener una idea de donde quires ver la informacion que recibe el mega.
Surbyte, pero ese es el problema, ya he probado con la libreria que ellos mencionan la adafruit, conecte el lector al Mega como has visto en las fotos, cambie los baudios, use el soft 'enroll' que viene en la libreria, y aun asi, no funciona. En el sitio que menciona tauro, lo lei al derecho y al reves y no hayo una pista que me indique que puede estar mal. Como mencione, el lector es nuevo, no deberia estar defectuoso, pero es lo unico que me queda por probar.
Tauro, estoy haciendo una cerradura electrica permitiendo el acceso solo si la persona esta autorizada. Podria comprarla, pero la verdad es que me gusta mucho el mundo arduino y quiero incursionar en el. Esta pensado ponerle un display para que indique si esta autorizado o no. No va a estar conectado a una PC, trabajaria alimentada por una fuente y una bateria por si hay corte de luz. Ese es mi proyecto, pero como sabras aun no logre hacer funcionar el scanner.
El manual dice que a cada comando devuelve otros de modo que el paso lógico es VERLOS.
Si tomas la librería, debe existir una forma de DEBUG, algo que te muestre que esta pasando cuando le solicitas una tarea.
Asi que miré la librería y encontré esto
FINGERPRINT_DEBUG
En la librería Adafruit_Fingerprint.h encontrárás esto que esta comentado
//#define FINGERPRINT_DEBUG
Le quitas los comentarios y ahora podrias ver que ocurre.
Recompila todo.
Si estas usando el IDE de Arduino no te dejará modificar la librería Adafruit_Fingerprint.h asi que muévela al escritorio, editala y luego vuelve a colocarla donde estaba.