Для работы с датчиком отпечатка пальцев, есть отличная библиотека для Arduino, которая значительно облегчает процесс настройки датчика. В этом проекте используется Arduino Uno. Для подключения к интернету используется плата Adafruit CC3000.
Начнем с подключения питания:
- Подключите контакт 5V с платы Arduino к красной рельсе питания;
- Контакт GND с Arduino подключается к синей рельсе на беспаечной монтажной плате.
Переходим к подключению датчика отпечатка пальца:
- Сначала подключите питание. Для этого красный провод соединяется с рельсой +5 V, а черный - с рельсой GND;
- Белый провод датчика подключается к контакту 4 на Arduino.
- Зеленый провод идет к контакту 3 на микроконтроллере.
Теперь займемся модулем CC3000:
- Контакт IRQ с платы CC3000 подключаем к пину 2 на Arduino.
- VBAT - к контакту 5.
- CS - к контакту 10.
- После этого надо подключить SPI контакты к Arduino: MOSI, MISO и CLK - к контактам 11, 12 и 13 соответственно.
Ну и в конце надо обеспечить питание: Vin - к Arduino 5V (красная рельса на вашей монтажной плате), а GND к GND (синяя рельса на макетке).
Фотография полностью собранного проекта показана ниже:
Перед разработкой скетча, который будет подгружать данные на Adafruit IO, надо передать данные о вашем отпечатке пальца сенсору. Иначе в дальнейшем он вас не опознает;). Рекомендуем откалибровать датчик отпечатка пальца, используя Arduino отдельно. Если вы работаете с этим сенсором впервые, рекомендуем ознакомиться с процессом калибровки и детальной инструкцией по работе с датчиком отпечатка пальца.
Если вы еще не сделали этого, то заведите аккаунт на Adafruit IO.
После этого можем перейти к следующему этапу разработки "умного замка" на Arduino: а именно, разработка скетча, который будет передавать данные на Adafruit IO. Так как программа достаточно объемная, в статье мы выделим и рассмотрим только ее основные части, а после дадим ссылку на GitHub, где вы сможете скачать полный скетч.
Скетч начинается с подгрузки всех необходимых библиотек:
#include <Adafruit_SleepyDog.h>
#include <Adafruit_CC3000.h>
#include <SPI.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_CC3000.h"
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>>
После этого надо немного подкорректировать скетч, вставив параметры вашей WiFi сети, указав SSID и пароль (password):
#define WLAN_SSID "ваш_wifi_ssid"
#define WLAN_PASS "ваш_wifi_пароль"
#define WLAN_SECURITY WLAN_SEC_WPA2>
Кроме этого, необходимо ввести имя и AIO ключ (key) для входа в ваш аккаунт Adafruit IO:
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883
#define AIO_USERNAME "adafruit_io_имя"
#define AIO_KEY "adafruit_io_ключ">
Следующие строки отвечают за взаимодействие и обработку данных с датчика отпечатка пальца. Если датчик был активирован (отпечаток совпал), будет '1':
const char FINGERPRINT_FEED[] PROGMEM = AIO_USERNAME "/feeds/fingerprint";
Adafruit_MQTT_Publish fingerprint = Adafruit_MQTT_Publish(&mqtt, FINGERPRINT_FEED);
Кроме того, надо создать экземпляр объекта SoftwareSerial для нашего сенсора:
SoftwareSerial mySerial(3, 4);
После этого мы можем создать объект для нашего сенсора:
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
Внутри скетча мы указываем какой fingerID должен активировать замок в дальнейшем. В данном примере используется 0, который соответствует ID первого отпечатка пальцев, который используется датчиком:
int fingerID = 0;
После этого инициализируем счетчик и задержку (delay) в нашем проекте. По сути мы хотим, чтобы замок автоматически срабатывал после открытия. В данном примере используется задержка в 10 секунд, но вы можете подстроить это значение под собственные потребности:
int activationCounter = 0;
int lastActivation = 0;
int activationTime = 10 * 1000;
В теле функции setup() мы инициализируем датчик отпечатка пальцев и обеспечиваем подключение чипа CC3000 к вашей WiFi сети.
В теле функции loop() подключаемся к Adafruit IO. За это отвечает следующая строка:
MQTT_connect();
После подключения к платформе Adafruit IO, проверяем последний отпечаток пальца. Если он совпадает, а замок не активирован, мы отсылаем '1' для обработки в Adafruit IO:
if (fingerprintID == fingerID && lockState == false) {
Serial.println(F("Access granted!"));
lockState = true;
state = 1;
if (! fingerprint.publish(state)) {
Serial.println(F("Failed"));
} else {
Serial.println(F("OK!"));
}
lastActivation = millis();
}
Если же в пределах функции loop() замок активирован и мы достигли значения задержки, которое указывали выше, отсылаем '0':
if ((activationCounter - lastActivation > activationTime) && lockState == true) {
lockState = false;
state = 0;
if (! fingerprint.publish(state)) {
Serial.println(F("Failed"));
} else {
Serial.println(F("OK!"));
}
}
Последнюю версию кода вы можете скачать на GitHub.
Пришло время тестировать наш проект! Не забудьте скачать и установить все необходимые библиотеки для Arduino!
Убедитесь, что вы внесли все необходимые изменения в скетч и загрузите его на ваш Arduino. После этого откройте окно серийного монитора.
Когда Arduino подключится к WiFi сети, сенсор отпечатка пальца начнет мигать красным цветом. Прислоните палец к датчику. В окне серийного монитора должен отобразится ID номер. Если он совпадет, появится сообщение, 'OK!'. Это значит, что данные были отправлены на сервера Adafruit IO.