Не нашел датчик отпечатков пальцев :( 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);

В чем может быть проблема? Моя связь и код в порядке? У кого-нибудь есть идея, как это исправить?

Тепло возникает на окруженной области внизу:

, 👍0

Обсуждение

Прежде всего посмотрите это видео 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


1 ответ


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/

,