Ардуино сканер отпечатков пальцев своими руками

Урок 28. Контроль доступа по отпечатку пальца

В этом уроке мы создадим устройство открывающее дверь по отпечатку пальца.

Нам понадобится:

Для реализации проекта нам необходимо установить библиотеки:

  • Библиотека LiquidCrystal_I2C_V112 (для работы с дисплеями LCD1602 по шине I2C).
  • Библиотека Adafruit_Fingerprint (для работы с модулем отпечатков пальцев).
  • Библиотеки Wire и SoftwareSerial входят в стандартный набор IDE Arduino.

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki – Установка библиотек в Arduino IDE.

Видео:

Принцип действия:

    Сканер отпечатков пальцев, в данном устройстве, выполняет три действия:

  • Регистрация отпечатков пальцев.При регистрации отпечатков пальцев, пользователь должен приложить палец к оптическому датчику дважды. Модуль обработает оба изображения и на их основе создаст шаблон, который будет сохранён в библиотеке отпечатков пальцев.
  • Сравнение отпечатков пальцев.При сравнении отпечатков пальцев, пользователь прикладывает палец к оптическому датчику, модуль сгенерирует шаблон пальца и сравнит его с сохранёнными шаблонами в библиотеке отпечатков пальцев.
  • Удаление отпечатков пальцев.При удалении отпечатка пальца, модуль удаляет шаблон отпечатка из библиотеки.

Схема подключения:

LCD дисплей подключается к аппаратной шине I2C, все остальные модули, подключаются к любым выводам arduino, каждый из которых можно изменить на любой другой, в начале скетча. Электромеханический замок подключается к напряжению питания 12В, постоянного тока, в разрыв вывода GND подключается клеммник силовой части Trema ключа.

Arduino:Модули:
2 (RX – вход программного UART) T – выход сенсора отпечатков пальцев
3 (TX – выход программного UART) R – вход сенсора отпечатков пальцев
4 Trema светодиод (зелёный)
5 Trema светодиод (красный)
6 Trema зуммер
7 Trema силовой ключ
8 Trema кнопка («A»)
9 Trema кнопка («B»)
I2C LCD дисплей

Алгоритм работы:

При старте (в коде setup), скетч выполняет 3 задачи:

  • Установка режимов работы выводов.
  • Инициализация и вывод информации на дисплей.
  • Инициализация (и проверка) сенсора отпечатков пальцев.

Циклически (в коде loop), скетч выполняет 4 задачи:

  • Опрос состояния кнопок – выполняется функцией Func_buttons_control().
  • Общение с сенсором отпечатков пальцев – выполняется функцией Func_sensor_communication().
  • Вывод данных на LCD дисплей – выполняется функцией Func_display_show().
  • Управление модулями: зуммером, светодиодами, силовым ключом – выполняется в коде loop.

Тип задач выполняемых функциями Func_buttons_control(), Func_sensor_communication() и Func_display_show(), определяется значением переменной VAR_mode_MENU, которая хранит номер режима меню:

  • 0-9 вне меню
  • 10-19 Menu > Set state
  • 20-29 Menu > Show ID
  • 30-39 Menu > New ID
  • 40-49 Menu > Del ID
  • 99 Menu > Exit

Управление модулями осуществляется при установленном флаге FLG_state_WORK – указывающим, что устройство находится в состоянии ENABLE.

Открытие замка (включение зуммера, переключение светодиодов) осуществляется по установленному флагу FLG_mode_ACCESS, который, в конце кода loop, сбрасывается через 5 секунд после установки.

Управление:

  • Вход в меню – кратковременное нажатие на обе кнопки.
  • Переход к следующему пункту меню – нажатие на кнопку «A».
  • Переход к предыдущему пункту меню – нажатие на кнопку «B».
  • Выбор пункта меню – кратковременное нажатие на обе кнопки.
  • Выход из меню – удержание двух кнопок «A» и «B» дольше 2 с, или выбор пункта меню «Exit».
  • Открытие замка изнутри – нажатие на кнопку «A» или «B» без входа в меню.
  • Блокировка замка – выбор параметра «DISABLE» в пункте меню «State».
  • Разблокировка замка – выбор параметра «ENABLE» в пункте меню «State».
  • Просмотр занятых ID шаблонами отпечатков пальцев – выбор пункта меню «Show ID».
  • Создание шаблона отпечатка пальца – выбор пункта меню «New ID»
  • Удаление шаблона отпечатка пальца – выбор пункта меню «New ID»

Код программы:

// Подключаем библиотеки:
#include // подключаем библиотеку для работы с шиной I2C
#include // подключаем библиотеку для работы с программным UART
#include // подключаем библиотеку для работы с LCD дисплеем
#include // подключаем библиотеку для работы с модулем отпечатков пальцев
LiquidCrystal_I2C lcd(0x27,16,2); // объявляем объект lcd для работы с LCD дисплеем, указывая параметры дисплея (адрес I2C = 0x27, количество столбцов = 16, количество строк = 2)
SoftwareSerial mySerial(2, 3); // объявляем объект mySerial для работы с библиотекой SoftwareSerial ИМЯ_ОБЪЕКТА( RX, TX ); // Можно указывать любые выводы, поддерживающие прерывание PCINTx
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); // объявляем объект finger для работы с библиотекой Adafruit_Fingerprint ИМЯ_ОБЪЕКТА = Adafruit_Fingerprint(ПАРАМЕТР); // ПАРАМЕТР – ссылка на объект для работы с UART к которому подключен модуль, например: &Serial1
// Объявляем переменные и константы:
const uint8_t PIN_led_OPEN = 4; // указываем номер вывода arduino, к которому подключен зелёный светодиод
const uint8_t PIN_led_CLOSED = 5; // указываем номер вывода arduino, к которому подключен красный светодиод
const uint8_t PIN_beep_OPEN = 6; // указываем номер вывода arduino, к которому подключен Trema зуммер
const uint8_t PIN_key_OPEN = 7; // указываем номер вывода arduino, к которому подключен Trema ключ
const uint8_t PIN_button_A = 8; // указываем номер вывода arduino, к которому подключена кнопка A
const uint8_t PIN_button_B = 9; // указываем номер вывода arduino, к которому подключена кнопка B uint16_t TIM_Button_A = 0; // время удержания кнопки A (в сотых долях секунды) uint16_t TIM_Button_B = 0; // время удержания кнопки B (в сотых долях секунды) uint32_t TIM_mode_ACCESS = 0; // время установки флага FLG_mode_ACCESS указывающего о необходимости открытия замка int ACK_finger_FUN = 0; // результат выполнения функции библиотеки Adafruit_Fingerprint uint8_t VAR_mode_MENU = 0; // текущий режим вывода меню uint8_t VAR_count_ID = 0; // количество найденных ID в базе uint8_t VAR_first_ID = 0; // номер первого выведенного ID из всех найденных uint8_t VAR_this_ID = 0; // номер ID, шаблон которого требуется сохранить/удалить uint8_t VAR_array_ID[162]; // массив найденных ID в базе bool FLG_result_FUN = 0; // флаг указывающий на результат сохранения шаблона bool FLG_mode_ACCESS = 0; // флаг указывающий о необходимости открытия замка bool FLG_state_WORK = 1; // флаг указывающий о состоянии работы замка bool FLG_display_UPD = 1; // флаг указывающий о необходимости обновления информации на дисплее
void setup(){ pinMode(PIN_button_A, INPUT); // устанавливаем режим работы вывода PIN_button_A, как “вход” pinMode(PIN_button_B, INPUT); // устанавливаем режим работы вывода PIN_button_B, как “вход” pinMode(PIN_led_OPEN, OUTPUT); // устанавливаем режим работы вывода PIN_led_OPEN, как “выход” pinMode(PIN_led_CLOSED, OUTPUT); // устанавливаем режим работы вывода PIN_led_CLOSED, как “выход” pinMode(PIN_key_OPEN, OUTPUT); // устанавливаем режим работы вывода PIN_key_OPEN, как “выход” pinMode(PIN_beep_OPEN, OUTPUT); // устанавливаем режим работы вывода PIN_beep_OPEN, как “выход” lcd.init(); // инициируем LCD дисплей lcd.backlight(); // включаем подсветку LCD дисплея lcd.clear(); // стираем информацию с дисплея lcd.setCursor(0, 0); lcd.print(F(“iArduino.ru”)); // выводим текст “iArduino.ru” delay(500); // обязательная задержка перед инициализацией модуля отпечатков пальцев finger.begin(9600); // finger.begin(57600); // инициируем модуль отпечатков пальцев, с подключением через программный UART на скорости 57600 (скорость модуля по умолчанию) lcd.clear(); // стираем информацию с дисплея lcd.setCursor(0, 0); lcd.print(F(“Scan sensor…”)); // выводим текст “Scan sensor…” lcd.setCursor(0, 1); // устанавливаем курсор в позицию: 0 столбец, 1 строка if(finger.verifyPassword()){lcd.print(F(“Found sensor”));} // если модуль отпечатков обнаружен, выводим сообщение “сенсор обнаружен” else {lcd.print(F(“Sensor not found”)); while(1);} // если модуль отпечатков не обнаружен, выводим сообщение “сенсор не обнаружен” и входим в бесконечный цикл: while(1); delay(1000); // необязательная задержка, чтоб можно было прочитать сообщение об обнаружении модуля
}
void loop(){
// Передаём управление кнопкам Func_buttons_control(); // вызываем функцию Func_buttons_control();
// Обновляем информацию на дисплее if(FLG_display_UPD){Func_display_show();} // если установлен флаг FLG_display_UPD (нужно обновить информацию на дисплее), то вызываем функцию Func_display_show();
// Общаемся с модулем отпечатков пальцев Func_sensor_communication(); // вызываем функцию Func_sensor_communication();
// Управляем замком, светодиодами и зуммером if(FLG_state_WORK){ // если установлен флаг FLG_state_WORK (замок работает, «State: ENABLE»), то … digitalWrite(PIN_key_OPEN, FLG_mode_ACCESS); // если используется электромагнитный замок, где 0-открыто, а 1-закрыто, то второй параметр указывается с восклицательным знаком: digitalWrite(PIN_key_OPEN, !FLG_mode_ACCESS); digitalWrite(PIN_led_OPEN, FLG_mode_ACCESS); // включаем или выключаем светодиод подключённый к выводу PIN_led_OPEN digitalWrite(PIN_led_CLOSED, !FLG_mode_ACCESS); // включаем или выключаем светодиод подключённый к выводу PIN_led_CLOSED if(FLG_mode_ACCESS){tone(PIN_beep_OPEN, 2000, 100);} // если установлен флаг FLG_mode_ACCESS (замок открыт), то отправляем меандр на вывод PIN_beep_OPEN (к которому подключён Trema зуммер) длительностью 100 мс с частотой 2000 Гц }
// Сбрасываем флаг FLG_mode_ACCESS, указывающий о необходимости открытия замка, через 5 секунд после его установки if(FLG_mode_ACCESS){ if( TIM_mode_ACCESS >millis()){FLG_mode_ACCESS=0; FLG_display_UPD = 1; if(VAR_mode_MENU==1){VAR_mode_MENU=0;}} if((TIM_mode_ACCESS+5000)0){VAR_mode_MENU = 10; } // войти в меню if(TIM_Button_A >0 && TIM_Button_B==0){FLG_mode_ACCESS = 1; TIM_mode_ACCESS=millis(); } // открыть замок if(TIM_Button_A==0 && TIM_Button_B >0){FLG_mode_ACCESS = 1; TIM_mode_ACCESS=millis(); } // открыть замок break; case 10: /* 1 уровень меню – вкл/выкл замок */ if(TIM_Button_A >0 && TIM_Button_B==0){VAR_mode_MENU = 99; } // перейти к предыдущему пункту меню if(TIM_Button_A==0 && TIM_Button_B >0){VAR_mode_MENU = 20; } // перейти к следующему пункту меню if(TIM_Button_A >0 && TIM_Button_B >0){VAR_mode_MENU = 11; } // выбрать текущий пункт меню break; case 11: /* 2 уровень меню – вкл/выкл замок */ if(TIM_Button_A >0 && TIM_Button_B==0){FLG_state_WORK = FLG_state_WORK?0:1; } // вкл/выкл if(TIM_Button_A==0 && TIM_Button_B >0){FLG_state_WORK = FLG_state_WORK?0:1; } // вкл/выкл if(TIM_Button_A >0 && TIM_Button_B >0){VAR_mode_MENU = 10; } // выйти из текущего пункта меню break; case 20: /* 1 уровень меню – показать ID */ if(TIM_Button_A >0 && TIM_Button_B==0){VAR_mode_MENU = 10; } // перейти к предыдущему пункту меню if(TIM_Button_A==0 && TIM_Button_B >0){VAR_mode_MENU = 30; } // перейти к следующему пункту меню if(TIM_Button_A >0 && TIM_Button_B >0){VAR_mode_MENU = 21; } // выбрать текущий пункт меню break;
// case 21: /* 2 уровень меню – показать ID */ это поиск ID с надписью Please wait …
// без реакции на нажатие кнопок
// case 22: /* 3 уровень меню – показать ID */ if(TIM_Button_A >0 && TIM_Button_B==0){VAR_first_ID -= VAR_first_ID>0?3:0; } // уменьшить первый выводимый на дисплей ID if(TIM_Button_A==0 && TIM_Button_B >0){VAR_first_ID += ((VAR_first_ID+3)0 && TIM_Button_B >0){VAR_mode_MENU = 20; } // выйти из текущего пункта меню break; case 30: /* 1 уровень меню – сохранить ID */ if(TIM_Button_A >0 && TIM_Button_B==0){VAR_mode_MENU = 20; } // перейти к предыдущему пункту меню if(TIM_Button_A==0 && TIM_Button_B >0){VAR_mode_MENU = 40; } // перейти к следующему пункту меню if(TIM_Button_A >0 && TIM_Button_B >0){VAR_mode_MENU = 31; } // выбрать текущий пункт меню break;
// case 31: /* 2 уровень меню – сохранить ID */ это поиск ID с надписью Please wait …
// без реакции на нажатие кнопок
// case 32: /* 3 уровень меню – сохранить ID */ if(TIM_Button_A >0 && TIM_Button_B==0){VAR_this_ID -= VAR_this_ID>0?1:0; } // уменьшить ID по которому будет сохранён отпечаток if(TIM_Button_A==0 && TIM_Button_B >0){VAR_this_ID += VAR_this_ID0 && TIM_Button_B >0){VAR_mode_MENU = 33; } // выбрать текущий пункт меню break;
// case 33: /* 4 уровень меню – сохранить ID */ это ожидание прикладываемого пальца (в первый раз) с надписью Put finger …
// без реакции на нажатие кнопок
//
// case 34: /* 5 уровень меню – сохранить ID */ это ожидание конвертации изображения в шаблон (в первый раз) с надписью converting …
// без реакции на нажатие кнопок
//
// case 35: /* 6 уровень меню – сохранить ID */ это ожидание отсутствия пальца перед сканером с надписью remove finger …
// без реакции на нажатие кнопок
//
// case 36: /* 7 уровень меню – сохранить ID */ это ожидание прикладываемого пальца (во второй раз) с надписью Put finger …
// без реакции на нажатие кнопок
//
// case 37: /* 8 уровень меню – сохранить ID */ это ожидание конвертации изображения в шаблон (во второй раз) с надписью converting …
// без реакции на нажатие кнопок
//
// case 38: /* 9 уровень меню – сохранить ID */ это ожидание создания и сохранения шаблона с надписью Saved …
// без реакции на нажатие кнопок
// case 39: /*10 уровень меню – сохранить ID */ if(TIM_Button_A >0 && TIM_Button_B==0){VAR_mode_MENU = 30; } // в начало текущего пункта меню if(TIM_Button_A==0 && TIM_Button_B >0){VAR_mode_MENU = 30; } // в начало текущего пункта меню if(TIM_Button_A >0 && TIM_Button_B >0){VAR_mode_MENU = 30; } // в начало текущего пункта меню break; case 40: /* 1 уровень меню – удалить ID */ if(TIM_Button_A >0 && TIM_Button_B==0){VAR_mode_MENU = 30; } // перейти к предыдущему пункту меню if(TIM_Button_A==0 && TIM_Button_B >0){VAR_mode_MENU = 99; } // перейти к следующему пункту меню if(TIM_Button_A >0 && TIM_Button_B >0){VAR_mode_MENU = 41; VAR_this_ID=0; } // выбрать текущий пункт меню break; case 41: /* 2 уровень меню – удалить ID */ if(TIM_Button_A >0 && TIM_Button_B==0){VAR_this_ID = VAR_this_ID==255?0:255; } // 255-all / 0-one if(TIM_Button_A==0 && TIM_Button_B >0){VAR_this_ID = VAR_this_ID==255?0:255; } // 255-all / 0-one if(TIM_Button_A >0 && TIM_Button_B >0){VAR_mode_MENU = VAR_this_ID==255?42:43; } // выбрать текущий пункт меню break;
// case 42: /* 3 уровень меню – удалить ID */ это удаление всех ID с надписью Please wait …
// без реакции на нажатие кнопок //
// case 43: /* 4 уровень меню – удалить ID */ это поиск ID с надписью Please wait …
// без реакции на нажатие кнопок case 44: /* 5 уровень меню – удалить ID */ if(TIM_Button_A >0 && TIM_Button_B==0){VAR_this_ID -= VAR_this_ID>0?1:0; } // уменьшить ID по которому будет удалён отпечаток if(TIM_Button_A==0 && TIM_Button_B >0){VAR_this_ID += VAR_this_ID0 && TIM_Button_B >0){VAR_mode_MENU = 45; } // выбрать текущий пункт меню break;
// case 45: /* 6 уровень меню – удалить ID */ это удаление выбранного ID с надписью Please wait …
// без реакции на нажатие кнопок // case 99: /* 1 уровень меню – выйти из меню */ if(TIM_Button_A >0 && TIM_Button_B==0){VAR_mode_MENU = 40; } // перейти к предыдущему пункту меню if(TIM_Button_A==0 && TIM_Button_B >0){VAR_mode_MENU = 10; } // перейти к следующему пункту меню if(TIM_Button_A >0 && TIM_Button_B >0){VAR_mode_MENU = 0; } // выбрать текущий пункт меню break; } }
}
// функция вывода информации на дисплей
void Func_display_show(){ FLG_display_UPD=0; lcd.clear(); switch(VAR_mode_MENU){ case 0: /* вне меню */ lcd.setCursor(0, 0); lcd.print(F(“State: “)); lcd.print(FLG_state_WORK ? F(“ENABLE”) : F(“DISABLE”) ); lcd.setCursor(0, 1); lcd.print(F(“Access: “)); lcd.print(FLG_mode_ACCESS ? F(“OPENED”) : F(“CLOSED” ) ); break; case 1: /* замок открыт отпечатком */ lcd.setCursor(0, 0); lcd.print(F(“Found ID: “)); if(VAR_this_ID

Читайте также:  Вемос (wemos): отличный аналог микроконтроллера ардуино

Источник: https://lesson.iarduino.ru/page/urok-28-kontrol-dostupa-po-otpechatku-palca

Самодельное противоугонное устройство на Ардуино и датчике отпечатков пальцев

Для создания простой биометрической системы безопасности для защиты вашего автомобиля от несанкционированного доступа нам понадобится датчик отпечатков пальцев и микроконтроллер Arduino. Данный проект использует учебный материал Adafruit. Для облегчения повторения используется полный программный код из этого материала, с небольшими изменениями.

Для начала мы модифицируем пусковую систему транспортного средства. Основным соединением является проводник IG от замка зажигания, по которому подается напряжение питания на регулятор напряжения, далее на микроконтроллер Arduino для его включения и выключения и сканирования пальца на датчике в течение 10 секунд.

При совпадении отпечатка пальца система активирует релейный блок, который управляет реле стартера. Теперь вы можете завести двигатель. Через 10 секунд датчик, реагирующий на отпечатки пальцев, отключается. Вы можете включить его повторно, повторив цикл запуска зажигания.

Если в течение 10 секунд датчик не определил отпечаток пальца или отпечаток не совпадает с эталонным, тогда система запуска отключается, и пуск двигателя не происходит.

Поскольку каждое транспортное средство имеет свою систему конфигурации запуска, то вам необходимо проконсультироваться с электриком по электрооборудованию автомобиля или просмотреть электрическую схему до модификации системы запуска двигателя.

Примите во внимание, что датчик, реагирующий на отпечатки пальцев, не запускает двигатель. Он всего лишь активирует и деактивирует реле стартера, которое запрещает или разрешает запуск двигателя.

В данном проекте противоугонное устройство устанавливается на 2-х дверный купе Mitsubishi Lancer 2000.

Шаг 1: Используемые компоненты

Плата Arduino Uno
Датчик, реагирующий на отпечатки пальцев
Регулируемый источник питания
Релейный блок
NPN-транзистор BC547B
Резистор 1 кОм

Шаг 2: Схема электрооборудования

Я модифицировал схему электрооборудования в соответствии с используемыми компонентами. Примите во внимание, что настоящая схема применима только для данного типа автомобиля.

Читайте также:  Учимся создавать простую звуковую панель на arduino - arduino+

Шаг 3: Подготовка программных компонентов

1. Загрузите среду разработки Arduino IDE
2. Установите Arduino IDE.
3. Загрузите библиотеку Adafruit Fingerprint
4. Добавьте Adafruit fingerprint к библиотеке Arduino.

Запустите Arduino IDE. Нажмите Sketch>Import Library> (Скетч-Импортировать библиотеку) и кликните Add library (Добавить библиотеку). Разместите в папку библиотеку Adafruit fingerprint.

5. Запустите Arduino IDE. Нажмите File>Adafruit-Fingerprint-Sensor-Library-Master> и кликните blank (программа blank.ino).

Загрузите blank.ino в Arduino Uno. Микроконтроллер Arduino не будет выполнять какие-либо операции, поскольку программа служит в качестве интерфейса между микроконтроллером и датчиком, реагирующим на отпечатки пальцев.

6. Установите SFGDemo v.20: http://www.adafruit.com/product/751
7. Подключите датчик, реагирующий на отпечатки пальцев, как показано на схеме
8. Загрузите отпечатки пальцев, используя SFGDemoV2.0

Шаг 4: Загрузка основной программы

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

Программа работает по принципу учебного материала Adafruit Fingerprint. Однако я немного изменил программный код и добавил таймер для отключения датчика через 10 секунд, чтобы избежать отвлечения внимания от мигающего светодиода датчика.

Шаг 5: Сборка, часть 1

Выкрутите винты под приборной панелью. Ослабьте рычаг механизма выключения запора капота. Снимите нижнюю часть приборной панели. В свободное место поместите датчик.

Шаг 6: Сборка, часть 2

Отмерьте требуемое расстояние и вырежьте небольшую зону для надежной установки датчика.

Шаг 7: Сборка, часть 3

Плату с Arduino Uno лучше всего установить за датчиком определения отпечатков пальцев. Я немного подточил посадочное место, чтобы плата Arduino Uno заняла правильное положение.

Шаг 8: Сборка, часть 4

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

Читайте также:  Arduino в автомобиле: использование с жк-дисплеем

Шаг 9: Сборка, часть 5

Подсоедините все необходимые компоненты, как показано на схеме электрооборудования на шаге 2.

Шаг 10: Установка

Подсоедините необходимые провода и установите устройство под приборной панелью. Убедитесь в отсутствии короткого замыкания проводов.

Оригинал статьи

Прикрепленные файлы:

  • fingerprintModifiedwithsleepfunction.ino (5 Кб)

Источник: http://cxem.net/arduino/arduino151.php

Биометрический замок – настройка сканера и программирование микроконтроллера | Каталог самоделок

Для создания связи с датчиком отпечатков, была использована инструкция Arduino library от Джоша Хоули (прямая загрузка инструкции здесь).

Чтобы отладить работу сканера отпечатков пальцев с буквенным табло, надо загрузить этот файл синхронизации.

Датчик отпечатков пальцев имеет собственную память для хранения отсканированных снимков. Так что после того, как датчик начнет работать, загрузите этот файл регистрации эскизов, добавив его в базу данных отпечатков пальцев под адресом 0. Откройте на компьютере консоль управления и следуйте всплывающим подсказкам.

Коды – Blink Example:

/* Library example for controlling the GT-511C3 Finger Print Scanner (FPS) */
#include “FPS_GT511C3.h”
#include “SoftwareSerial.h”
//Hardware setup – FPS connected to:
//digital pin 10(arduino rx, fps tx)
//digital pin 11(arduino tx – 560ohm resistor fps tx – 1000ohm resistor – ground)
//this brings the 5v tx line down to about 3.2v so we dont fry our fps
FPS_GT511C3 fps(10, 11);
void setup(){ Serial.begin(9600); fps.UseSerialDebug = true; // so you can see the messages in the serial debug screen fps.Open();
}
void loop(){ // FPS Blink LED Test fps.SetLED(true); // turn on the LED inside the fps delay(1000); fps.SetLED(false);// turn off the LED inside the fps delay(1000);
}

Коды – Enroll Example: 

/* FPS_Enroll.ino – Library example for controlling the GT-511C3 Finger Print Scanner (FPS) */
#include “FPS_GT511C3.h”
#include “SoftwareSerial.h”
//Hardware setup – FPS connected to:
//digital pin 10(arduino rx, fps tx)
//digital pin 11(arduino tx – 560ohm resistor fps tx – 1000ohm resistor – ground)
//this brings the 5v tx line down to about 3.2v so we dont fry our fps
FPS_GT511C3 fps(10, 11);
void setup(){ Serial.begin(9600); delay(100); fps.Open(); fps.SetLED(true); Enroll();
}
void Enroll(){ // Enroll test // find open enroll id int enrollid = 0; fps.EnrollStart(enrollid); // enroll Serial.print(“Press finger to Enroll #”); Serial.println(enrollid); while(fps.IsPressFinger() == false) delay(100); bool bret = fps.CaptureFinger(true); int iret = 0; if (bret != false) { Serial.println(“Remove finger”); fps.Enroll1(); while(fps.IsPressFinger() == true) delay(100); Serial.println(“Press same finger again”); while(fps.IsPressFinger() == false) delay(100); bret = fps.CaptureFinger(true); if (bret != false) { Serial.println(“Remove finger”); fps.Enroll2(); while(fps.IsPressFinger() == true) delay(100); Serial.println(“Press same finger yet again”); while(fps.IsPressFinger() == false) delay(100); bret = fps.CaptureFinger(true); if (bret != false) { Serial.println(“Remove finger”); iret = fps.Enroll3(); if (iret == 0) { Serial.println(“Enrolling Successfull”); } else { Serial.print(“Enrolling Failed with error code:”); Serial.println(iret); } } else Serial.println(“Failed to capture third finger”); } else Serial.println(“Failed to capture second finger”); } else Serial.println(“Failed to capture first finger”);
}
void loop(){ delay(100000);
}

Файл синхронизации:

FPSBlinkExample.ino

Файл регистрации эскизов:

FPSEnrollExample.ino

Этап 7: программирование процессора ATtiny85

Микрочип ATtiny85 стоит дешево, и полностью совместим с платой Arduino, наверное, он самая лучшая электродеталь из когда-либо созданных!

Программатор Arduino также нужен, чтобы перепрошить микросхему ATmega328, которая управляет работой ЖК-дисплея.

В собираемом устройстве процессор ATtiny будет выполнять очень простые команды: проверять наличие сигнала от ATmega и открывать дверь гаража, когда сигнал будет подтвержден.

Чтобы запрограммировать работу процессора, его надо подключить при помощи макетной платы к программатору вместе с конденсатором 10 мкФ, как показано на картинке ниже.

А затем загрузить окончательный код и следовать рекомендациям инструкции от High-Low Tech.

После загрузки окончательного кода, выход 13 на плате Arduino, соединённый со светодиодом, нужно перевести в состояние HIGH для отслеживания работы по световой индикации.

Окончательный код для ATtiny:

//fpsAttiny by Nodcah
//Recieves a brief signal from the main module to close a relay
void setup(){ pinMode(2,OUTPUT); //indicator led through 10K resistor pinMode(4,OUTPUT); //trasistor pin that opens the garage pinMode(0,INPUT); //input delay(500); //give things time to start up digitalWrite(2, HIGH); //indicator LED
}
void loop(){ if(digitalRead(0)){ //simple pattern to trigger the transistor delay(125); if(digitalRead(0)==false){ delay(55); //the timings are off because the ATtiny's timer isn't perfect if(digitalRead(0)){ delay(55); if(digitalRead(0)==false){ delay(55); if(digitalRead(0)){ delay(55); if(digitalRead(0)==false){ digitalWrite(4, HIGH); //transistor “presses” the button delay(1000); digitalWrite(4,LOW); digitalWrite(2,LOW); delay(1000); digitalWrite(2, HIGH); } } } } } }
}

FPSGarageAttiny.ino

ПРЕДЫДУЩИЙ ЭТАП – Сборка платы управления и программирование микроконтроллера

ДАЛЕЕ: Этап 8 / 9 / 10: Окончательный код для ATmega328 / вырезание крышки на 3D принтере / Подготовка гаража

Источник: https://volt-index.ru/high-tech/biometricheskiy-zamok-nastroyka-skanera-i-programmirovanie-mikrokontrollera.html

Ссылка на основную публикацию
Adblock
detector