Контроль доступа в помещение на Arduino

В этом примере зарегистрируем два отпечатка пальца, двух разных людей. Затем с помощью OLED дисплея, будем сообщать, совпал отпечаток или нет. При совпадении отпечатка пальца, откроется электрозамок, в противном случаи выдаст ошибку.

Необходимые детали:
► Контроллер Arduino UNO R3  x 1 шт;
► Провода DuPont, 2,54 мм, 20 см x 1 шт;
► Модуль распознавания отпечатков пальцев AS608 x 1 шт;
► OLED-дисплей 0.96, 128х64, I2C, SSD1306 x 1 шт;
► Модуль реле 1-о канальный с опторазвязкой, 5 В x 1 шт;
► Блок питания DC 12В x 1 шт.

Описание:
В данном примере будет два скетча, первым сканируем отпечатки пальца и сохраняем их в память модуля AS608, а вторым поверяем отсканированный отпечаток пальца с ранее сохраненным и если, есть совпадение, открываем электромагнит.

Подключение:
Сначала подключаем модуль AS608 (не забываем, что он работает от 3.3 вольт), подключаем Vi и GND к контактам 3.3 и GND (Arduino), затем подключаем цифровые выводы Tx и Rx к выводам 2 и 3 (Arduino), как показано в этой статье. Далее подключаем OLED дисплей, запитать его можно, так же от 3.3 вольта, далее подключаем шину I2C, вывод SDA и SCL подключаем к выводу A4 и (Arduino). Так как мы не можем напрямую управлять электрозамком, от вывода Arduino, будем использовать одноканальное реле, для этого подключим питание реле к 5 вольтам Arduino, а вывод IN подключи к выводу 4. Теперь осталось подключить электрозамок, подключаем его одним выводом к 12 В блоку питания, а второй вывод подключаем к центральному выводу реле и затем на второй вывод 12 блока питания. Так же нам понадобится гасящий диод, чтобы защититься от самоиндукции. Схема подключения приведена ниже.

Регистрация отпечатка пальца.
Для продолжения примера, необходимо установить библиотеку «Adafruit_Fingerprint» и зарегистрировать отпечаток пальца в модуле AS608, как это сделать можно посмотреть в этой статье. Индификатор будет 10, 11 и 12.

Установка библиотек:
Для основной программы, необходимо установит библиотеку, для работы с OLED дисплеем, открываем Скетч —> Подключить библиотеку —> Управление библиотеками.

В строке поиска введите «Adafruit_SSD1306» и установите данную библиотеку.

Программа:
Далее, копируем в среду разработки скетч ниже и загружаем его в плату Arduino UNO.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);         

#include <Adafruit_Fingerprint.h>            
#include <SoftwareSerial.h>                    
SoftwareSerial mySerial(2, 3);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
int fingerprintID = 0;                         
String IDname;

int relay = A3;                                 

void setup()
{
   pinMode(relay, OUTPUT);    
   digitalWrite(relay, HIGH); 
   Serial.begin(9600);                          
   finger.begin(57600);                         

  if (finger.verifyPassword())
  {
    Serial.println("Found fingerprint sensor!");
  } 
  else
  {
    Serial.println("Did not find fingerprint sensor :("); 
    while(1) 
    {
      delay(1);
      }
  } 
  Wire.begin();  
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  displayMainScreen();
  finger.getTemplateCount();                 
}

void loop()
{
  displayMainScreen();
  fingerprintID = getFingerprintIDez();
  delay(50);                

///////////////////////////////////////////////////////////////////////
if (fingerprintID == 10 || fingerprintID == 11)
  {
    IDname = "Sergey";
    displayUserGreeting(IDname);            
  }  
  else if(fingerprintID == 12)
  {
    IDname = "Nastya";  
    displayUserGreeting(IDname);            
  }
}
///////////////////////////////////////////////////////////////////////

// возвращает -1 в случае сбоя, в противном случае возвращает идентификатор 
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;
  
  // нашел совпадение
  Serial.print("Found ID #"); 
  Serial.print(finger.fingerID); 
  Serial.print(" with confidence of "); 
  Serial.println(finger.confidence);
  return finger.fingerID; 
}

///////////////// Отображение экрана приведствия //////////////////////
void displayUserGreeting(String Name)
{
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.setCursor(5,0);
  display.print("Privet");
  display.setCursor(5,15);
  display.print(Name); 
  display.display();
  digitalWrite(relay, LOW);
  delay(5000);
  digitalWrite(relay, HIGH); 
  fingerprintID = 0; 
}
////////////////////////////////////////////////////////////////////////

//////////////////// Отображение главного экрана ////////////////////////
void displayMainScreen()
 {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(7,5);
  display.println("Prilozhite Palets");
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(52,20);
  display.println("...");  
  display.display();
  delay(2000);
}
///////////////////////////////////////////////////////////////////////

Описание скетча:
Скетч начинается с подключения библиотек, для работы с OLED дисплеем и создает объект Adafruit_SSD1306 с именем display.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

Так-же, подключаем библиотеку, необходимые для работы с модулем отпечатка пальца

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

Следующей строкой, указываем какие выводы, используем для программного последовательного порта, в моем случаи это 2 и 3.

SoftwareSerial mySerial(2, 3);

Затем создаем объект Adafruit_Fingerprint с именем finger на последовательных выводах.

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

Следующие две строки создают переменные для хранения идентификатора отпечатка пальца и idName.

int fingerprintID = 0;
String IDname;

Далее, мы указываем к какому выводу подключено реле

int relay = 5; 

В setup() инициализируются как датчик отпечатков пальцев, так и OLED-дисплей. Так же, указываем вывод реле, как выход.

void setup()
{
   pinMode(relay, OUTPUT);    
   digitalWrite(relay, HIGH); 
   Serial.begin(9600);                          
   finger.begin(57600);                         

  if (finger.verifyPassword())
  {
    Serial.println("Found fingerprint sensor!");
  } 
  else
  {
    Serial.println("Did not find fingerprint sensor :("); 
    while(1) 
    {
      delay(1);
      }
  } 
  Wire.begin();  
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  displayMainScreen();
  finger.getTemplateCount();                 
}

В loop() отображает экран приветствия на OLED дисплее, с помощью функции displayMainScreen(). Затем непрерывно проверяем входящие отпечатки пальцев. Если датчик обнаруживает сохраненный отпечаток пальца, Arduino сохраняет соответствующий идентификатор в переменной fingerprintID.

displayMainScreen();
fingerprintID = getFingerprintIDez();      
delay(50);                

Функция displayMainScreen()

void displayMainScreen()
 {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(7,5);
  display.println("Prilozhite Palets");
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(52,20);
  display.println("...");  
  display.display();
  delay(2000);
}

Затем в следующем коде, проверяем индификатор, которому соответствует отпечаток пальца.

if (fingerprintID == 10 || fingerprintID == 11)
  {
    IDname = "Sergey";
    displayUserGreeting(IDname);            
  }  
  else if(fingerprintID == 12)
  {
    IDname = "Nastya";  
    displayUserGreeting(IDname);            
  }
}

После определения имени идентификатора, функцией displayUserGreeting() открываем отображаем на экране приветствие.

void displayUserGreeting(String Name)
{
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.setCursor(5,0);
  display.print("Privet");
  display.setCursor(5,15);
  display.print(Name); 
  display.display();
  digitalWrite(in1, LOW);
  delay(5000);
  digitalWrite(in1, HIGH); 
  fingerprintID = 0; 
}

В принципе и все, будут вопросы пишите.

Ссылки
  Библиотека Adafruit Fingerprint Sensor
  Библиотека Adafruit_GFX
  Библиотека Adafruit_SSD1306

Купить на Aliexpress
  Контроллер Arduino UNO R3 на CH340G
  Контроллер Arduino UNO R3 на Atmega16U2
  Провода DuPont, 2,54 мм, 20 см
  Модуль распознавания отпечатков пальцев AS608
  OLED-дисплей 0.96,128х64, белый, DC 3.3-5B, SPI, IIC

Купить в Самаре и области
  Контроллер Arduino UNO R3 на CH340G
  Контроллер Arduino UNO R3 на Atmega16U2
  Провода DuPont, 2,54 мм, 20 см
  Модуль распознавания отпечатков пальцев AS608
 OLED-дисплей 0.96,128х64, 3.3-5B, SPI, IIC, белый
Модуль реле 1-о канальный с опторазвязкой, 5 В

О нас Сергей

Посмотреть также

Подключение дисплея LCD1602 через интерфейс I²C к STM32 в CubeIDE

Подключение дисплея LCD1602 через интерфейс I²C к STM32 в CubeIDE

В данной статье подробно опишу процедуру подключения LCD-дисплея формата 1602 с интерфейсом I2C к плате …

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *