Контроль доступа в помещение на 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
#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.
1 2 3 4 5 |
#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); |
Так-же, подключаем библиотеку, необходимые для работы с модулем отпечатка пальца
1 2 |
#include <Adafruit_Fingerprint.h> #include <SoftwareSerial.h> |
Следующей строкой, указываем какие выводы, используем для программного последовательного порта, в моем случаи это 2 и 3.
1 |
SoftwareSerial mySerial(2, 3); |
Затем создаем объект Adafruit_Fingerprint с именем finger на последовательных выводах.
1 |
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); |
Следующие две строки создают переменные для хранения идентификатора отпечатка пальца и idName.
1 2 |
int fingerprintID = 0; String IDname; |
Далее, мы указываем к какому выводу подключено реле
1 |
int relay = 5; |
В setup() инициализируются как датчик отпечатков пальцев, так и OLED-дисплей. Так же, указываем вывод реле, как выход.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
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.
1 2 3 |
displayMainScreen(); fingerprintID = getFingerprintIDez(); delay(50); |
Функция displayMainScreen()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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); } |
Затем в следующем коде, проверяем индификатор, которому соответствует отпечаток пальца.
1 2 3 4 5 6 7 8 9 10 11 |
if (fingerprintID == 10 || fingerprintID == 11) { IDname = "Sergey"; displayUserGreeting(IDname); } else if(fingerprintID == 12) { IDname = "Nastya"; displayUserGreeting(IDname); } } |
После определения имени идентификатора, функцией displayUserGreeting() открываем отображаем на экране приветствие.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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 В