Не нашел датчик отпечатков пальцев :( Arduino Mega 2560 Adafruit Fingerprint Sensor
Я получаю следующую ошибку, когда пытаюсь зарегистрировать отпечатки пальцев с помощью микроконтроллера Arduino Mega 2560 вместе со сканером отпечатков пальцев:
Не нашел датчик отпечатков пальцев :(
Точные устройства, которые я использую, как показано в ссылках ниже:
https://www.gearbest.com/development-boards/pp_70487.html?lkid=11637831 https://www.gearbest.com/boards-shields/pp_009769796663.html?wid=1433363
Мое подключение цепи:
(Зеленый) TX => Pin 0 [PWM]>
(Белый) RX => Pin 1 [PWM]>
//Он не реагирует при подключении к 5V, он только нагревается
(Красный) VCC => 3.3 v>
(Черный) GND => GND>
Связь проиллюстрирована ниже:
Код показан ниже:
#include <Adafruit_Fingerprint.h>
// На Леонардо/Микро или других с аппаратным последовательным, используйте их! #0 - зеленый провод, #1-белый
// раскомментируйте эту строку:
#define mySerial Serial1
// Для UNO и других устройств без аппаратного серийного номера мы должны использовать software serial...
// вывод №2 находится ВНУТРИ датчика (ЗЕЛЕНЫЙ провод)
// вывод №3 выведен из arduino (БЕЛЫЙ провод)
// прокомментируйте эти две строки, если вы используете аппаратный последовательный порт
//#include <SoftwareSerial.h>
//SoftwareSerial mySerial(10, 11);
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");
// установите скорость передачи данных для последовательного порта датчика
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println("Найден датчик отпечатков пальцев!");
} else {
Serial.println("Не нашел датчик отпечатков пальцев :(");
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("Готов записать отпечаток пальца!");
Serial.println("Пожалуйста, введите ID # (от 1 до 127) вы хотите сохранить этот палец как...");
id = readnumber();
if (id == 0) {// ID #0 not allowed, try again!
return;
}
Serial.print("Регистрационный идентификатор #");
Serial.println(id);
while (! getFingerprintEnroll() );
}
uint8_t getFingerprintEnroll() {
int p = -1;
Serial.print("Ожидание действительного пальца для регистрации в качестве #"); 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;
}
}
Я использовал библиотеку отпечатков пальцев Adafruit, найденную здесь:
https://github.com/adafruit/Adafruit-Fingerprint-Sensor-Library
Я также припаял провода от датчика к наружным контактным разъемам для большей стабильности соединения.
Все, что я получаю, - это непрерывно мигающий датчик отпечатков пальцев, который заставляет меня думать, что он не неисправен, но когда я пытаюсь запустить код регистрации, я получаю сообщение об ошибке, выделенное выше.
Я также попытался подключиться с помощью программного последовательного подхода, как показано ниже, но это тоже не было решением:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);
В чем может быть проблема? Моя связь и код в порядке? У кого-нибудь есть идея, как это исправить?
Тепло возникает на окруженной области внизу:
@Raymond Wachaga, 👍0
Обсуждение1 ответ
Спасибо за ваши ответы @HavocRC и @Juraj
Я успешно пришел к следующим рабочим параметрам, которые я протестировал и дал положительные результаты:
При использовании Arduino Mega 2560 с демонстрацией SFG мы используем:
(Зеленый) TX => Вывод 1>
(Белый) RX => Вывод 0>
(Красный) VCC => 5 В>
(Черный) GND => GND>
При использовании Arduino Mega 2560 с библиотекой Adafruit мы используем:
Использование аппаратного последовательного порта (Serial1) [Рекомендуется]
(Зеленый) TX => Вывод 19>
(Белый) RX => Вывод 18>
(Красный) VCC => 5 В>
(Черный) GND => GND>
//Обратите внимание, что вы прокомментируете последовательную инициализацию программного обеспечения
//как указано в коде в библиотеке Adafruit
#define mySerial Serial1
При использовании Arduino Mega 2560 с библиотекой Adafruit мы используем:
Использование Последовательного программного обеспечения
(Зеленый) TX => Вывод 10>
(Белый) RX => Вывод 11>
(Красный) VCC => 5 В>
(Черный) GND => GND>
//Порядок пинов в коде таков
SoftwareSerial mySerial(10, 11);
В процессе тестирования я также использовал более старую версию интегрированной среды разработки Arduino версии 1.0.5, которая, возможно, помогла заставить датчик работать (просто догадка). Оказывается, датчик работает только с напряжением 5 В, хотя он немного нагревается (не до уровня пламени на ходу, но я бы не оставил его включенным, если бы на некоторое время был вдали от своего ноутбука).
Кстати, чтобы демо-версия SFG работала, сначала загрузите "пустой" пример, закройте Arduino, а затем запустите демо-версию SFG. Если это работает, значит, ваш сканер отпечатков пальцев в рабочем состоянии.
Для аппаратных последовательных опций вы также можете использовать альтернативные контакты следующим образом:
Сериал2 на выводах 17 (RX) и 16 (TX)
Сериал3 на выводах 15 (RX) и 14(TX)
Ссылки
http://www.adafruit.com/datasheets/SFGDemoV2.0.rar
https://www.arduino.cc/en/main/OldSoftwareReleases
https://www.arduino.cc/reference/en/language/functions/communication/serial/
- Серийный порт не инициализируется на Arduino Mega 2560, если питание не подается через порт USB.
- Термопринтер Adafruit печатает слабо
- Невозможно заменить SoftwareSerial на Serial1 на плате Mega.
- Серийное программное обеспечение и оборудование одновременно
- у меня возникают странные проблемы при попытке прочитать форму последовательного соединения gps
- Прослушивание последовательных портов
- Arduino Mega чтение с внешнего датчика. Проблема
- Последовательная связь между Arduino
Прежде всего посмотрите это видео https://www.youtube.com/watch?v=nxjLx5RdaSQ&t=183s . Я бы сказал, что это поврежденный товар, если он нагревается при подключении к 5 В. Эта сенсорная плата должна быть в состоянии работать от этого напряжения, согласно перечисленным спецификациям и отличному видео educ8ts. Это тоже от gearbest, а у gearbest не самый лучший послужной список. Можете ли вы точно определить, откуда идет тепло? Возможно, вам удастся заменить поврежденный компонент (если вам повезет)., @HavocRC
Так уж получилось, что я его уже смотрел :-) Спасибо. Я отредактировал свой вопрос, чтобы показать, где происходит перегрев. Знаете ли вы, какая часть вызывает это из снимка? Или я слишком остро реагирую, может быть, эти уровни тепла нормальны?!, @Raymond Wachaga
Может быть, это штекерные перемычки, соединяющие макетную плату с микроконтроллером? Потому что они немного танцуют вокруг вас, когда вы управляетесь с устройством. Должен же быть способ обезопасить их, не так ли?, @Raymond Wachaga
Мега имеет 4 аппаратных сериала. почему вы используете первый вариант, который используется USB, или почему SoftwareSerial? и почему макет посередине?, @Juraj
@Juraj Теперь, когда я установил, что мой датчик находится в рабочем состоянии, и использовал его как с SFG Demo, так и с Arduino IDE, я еще немного опробую аппаратные серии. Я пробовал их безуспешно раньше, если вы проверите мой вопрос выше, где я использовал контакты 0 и 1, которые работают с SFG Demo, но не Arduino IDE. Я подозреваю, что проблема может быть связана с библиотекой Adafruit, поскольку при попытке загрузить отредактированный код для работы с аппаратными сериалами загрузка завершается неудачно, если только я не использую совсем неправильные контакты. Предложения? В любом случае я опубликую свои выводы здесь через пару дней., @Raymond Wachaga
Последовательный на выводах 0, 1 используется USB. используйте Serial1 на выводах 18 и 19, @Juraj
Спасибо! Сначала я попробую это. Я подтвердил, что здесь дело обстоит именно так: https://www.arduino.cc/reference/en/language/functions/communication/serial/` В этих крошечных компьютерах много чего есть., @Raymond Wachaga
@Juraj Проверено и работает. Я соответствующим образом обновил свой ответ. Спасибо за ваш вклад! Что касается моего использования макетной платы, то я припаял проводку сканера отпечатков пальцев к 4 соединенным мужским контактным разъемам, так что именно поэтому мне сейчас нужна макетная плата, хотя и как временное решение, когда я прототипирую свой дизайн., @Raymond Wachaga