Противоугонное устройство на основе дактилоскопического датчика

kasumali
Offline
Зарегистрирован: 11.11.2015

Помогите пожалуйста запрограммировать реле через 13 пин. Я его подключил, но нужно нарисать код, чтобы он начал работать. Вот схема устройства

Есть код для работы датчика отпечатков пальцев(дактилоскопического датчика), и он работает, но нужно добавить код и для реле, чтобы после того как датчик отсканировал правильный отпечаток пальца на реле подавался сигнал и далее он включается лампочка (лампа вместо моторчика).

kasumali
Offline
Зарегистрирован: 11.11.2015

Вот код для сенсора отпечатков пальцев

#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>

int getFingerprintIDez();

// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
SoftwareSerial mySerial(2, 3);


Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup()  
{
  Serial.begin(9600);
  Serial.println("fingertest");

  // 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);
  }
  Serial.println("Waiting for valid finger...");
}

void loop()                     // run over and over again
{
  getFingerprintIDez();
  delay(50);            //don't ned to run this at full speed.
}

uint8_t getFingerprintID() {
  uint8_t p = finger.getImage();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println("No finger detected");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Imaging error");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }

  // OK success!

  p = finger.image2Tz();
  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!
  p = finger.fingerFastSearch();
  if (p == FINGERPRINT_OK) {
    Serial.println("Found a print match!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Communication error");
    return p;
  } else if (p == FINGERPRINT_NOTFOUND) {
    Serial.println("Did not find a match");
    return p;
  } else {
    Serial.println("Unknown error");
    return p;
  }   
  
  // found a match!
  Serial.print("Found ID #"); Serial.print(finger.fingerID); 
  Serial.print(" with confidence of "); Serial.println(finger.confidence); 
}

// returns -1 if failed, otherwise returns ID #
int getFingerprintIDez() {
  uint8_t p = finger.getImage();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.image2Tz();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.fingerFastSearch();
  if (p != FINGERPRINT_OK)  return -1;
  
  // found a match!
  Serial.print("Found ID #"); Serial.print(finger.fingerID); 
  Serial.print(" with confidence of "); Serial.println(finger.confidence);
  return finger.fingerID; 
}

 

exez
exez аватар
Offline
Зарегистрирован: 04.04.2015

Все мои релюшки работают в инветированном режиме. В анчале скетча подаю на них digitalWrite(13,HIGH); размыкает цепь.

Где надо включить - пишу digitalWrite(13, LOW), и цепь замыкается..

kasumali
Offline
Зарегистрирован: 11.11.2015

а куда именно это можно написать в моем коде?

exez
exez аватар
Offline
Зарегистрирован: 04.04.2015

Но у Вас же не релюшка подключена к ардуинке, а npn транзистор. Поэтому в Вашем случае надо вначале ничего не делать, а там где находит верный отпечаток написать: 

Serial.println("Found a print match!"); digitalWrite(13,HIGH); 

Но как оно будет работать в полевых условиях - увы не знаю :) Вы ж будете выключать периодически мотор или ставить на сигнализацию. Как будет отключаться ардуинка, чтоб сбрасывать это значение в ноль непонятно..

Radjah
Offline
Зарегистрирован: 06.08.2014

Чета я сомневаюсь, что программный UART на 57600 стабильно заработает. Лучше отладку в него на 9600 пиши, а читалку на аппаратный подвесь.

kasumali
Offline
Зарегистрирован: 11.11.2015

Извините, можно как-нибудь объяснить а то я новичек в ардуино. почему лучше вместо 57600 9600 написать и что за читалка?

kasumali
Offline
Зарегистрирован: 11.11.2015

а кроме этого что-нибудь еще может нужно написать? и еще я хотел галетный 3-х позиционный переключатель поставить для образца вместо замка зажигания. В 0 позиции выключен, в 1 позиции подается только питание на ардуино и сканер отпечатков, чтобы сканировать палец, а уже после идентификации включается 3 позиция и заводим мотор (а у меня загорится лампочка на 12 В). Если не трудно ответьте пожалуйста как это реализовать? Имею ввиду код как доработать для этого.

Radjah
Offline
Зарегистрирован: 06.08.2014

Я к тому, что на больших скоростях лучше использовать аппаратный UART (пины 0 и 1).

kasumali
Offline
Зарегистрирован: 11.11.2015

а на это влияет то, что 2 и 3 тоже подключены??

exez
exez аватар
Offline
Зарегистрирован: 04.04.2015

на работу схемы не повлияет :)

kasumali
Offline
Зарегистрирован: 11.11.2015

exez пишет:

на работу схемы не повлияет :)

заработало реле, но вот лампа мигнет 2 раз и вырубается, а должно гореть пока я не выключу. Что делать-то?

Посоветуйте.