Система учёта рабочего времени по отпечатку пальца на Arduino с облачным хранилищем (ThingSpeak)
Компоненты и материалы
| Arduino Mega 2560 R3 | ×1 |
| Сенсор отпечатков R301T (ElectroPeak) | ×1 |
| MicroSD модуль (TF карта) | ×1 |
| RTC DS3231 (I2C) | ×1 |
| TFT 3.5" дисплей (MCUFRIEND_kbv) | ×1 |
| NodeMCU ESP8266 (ESP-12E) — WiFi мост | ×1 |
| Перемыжки мама-папа | ×1 набор |
Инструменты
- Лазерный резак (корпус из акрила/плексигласа)
- Паяльник
Программное обеспечение
- Arduino IDE
- ThingSpeak (IoT платформа, MATLAB/MathWorks)
О проекте
Устройство для учёта рабочего времени: сотрудник кладёт палец на сканер → система фиксирует вход/выход, сохраняет на SD-карту (дата, имя, время прихода, ухода, отработано часов), дублирует в EEPROM Mega (защита от потери питания). При наличии WiFi NodeMCU отправляет данные на ThingSpeak (5 полей: дата, имя, вход, выход, часы). Можно выгрузить CSV из панели ThingSpeak.
Настройка ThingSpeak
- Регистрация на ThingSpeak.com.
- Channels → New Channel → имя, 5 полей (Date, Name, Enter, Exit, WorkTime).
- API Keys → сохранить Channel ID и Write API Key.
- Установить библиотеку
ThingSpeakв Arduino IDE. - Пример
WriteMultipleFields→ вставить свои SSID, PASS, Channel ID, Write API Key. - Минимальный интервал обновления канала — 15 секунд.
Архитектура системы
- Arduino Mega: сканер отпечатков, RTC, SD, TFT меню, логика входа/выхода, формирование строки данных.
- NodeMCU: получает строку по Serial (UART) от Mega, парсит, отправляет на ThingSpeak, возвращает Mega статус «1» (успех) или «0» (ошибка).
- Питание: 12V адаптер → Mega (Vin), NodeMCU от 3.3V Mega или отдельный LDO.
Формат данных между Mega и NodeMCU
Строка с разделителями *: Date*Name*Enter*Exit*WorkTime*
Пример: 2024-01-15*Ivan*09:00*18:00*9.0*
Код NodeMCU (загрузчик на ThingSpeak)
#include "ThingSpeak.h"
#include
char ssid[] = "YOUR_SSID";
char pass[] = "YOUR_PASSWORD";
WiFiClient client;
unsigned long myChannelNumber = YOUR_CHANNEL_ID;
const char * myWriteAPIKey = "YOUR_WRITE_API_KEY";
String Final = "", Date = "", Enter = "", Exit = "", Name = "", WT = "";
void String_Analyze(String input) {
int i1 = input.indexOf('*', 0);
int i2 = input.indexOf('*', i1 + 1);
int i3 = input.indexOf('*', i2 + 1);
int i4 = input.lastIndexOf('*');
Name = input.substring(0, i1);
Date = input.substring(i1 + 1, i2);
Enter = input.substring(i2 + 1, i3);
Exit = input.substring(i3 + 1, i4);
WT = input.substring(i4 + 1);
}
void Get_String() {
while (Serial.available()) Final = Serial.readString();
}
void setup() {
Serial.begin(9600);
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
}
void loop() {
if (WiFi.status() != WL_CONNECTED) {
while (WiFi.status() != WL_CONNECTED) {
WiFi.begin(ssid, pass);
Serial.print("0"); delay(5000);
}
}
digitalWrite(LED_BUILTIN, LOW);
Get_String();
String_Analyze(Final);
if (Final.length() > 0) {
ThingSpeak.setField(1, Date);
ThingSpeak.setField(2, Name);
ThingSpeak.setField(3, Enter);
ThingSpeak.setField(4, Exit);
ThingSpeak.setField(5, WT);
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
Serial.print(x == 200 ? "1" : "0");
delay(17000); // ThingSpeak лимит 15 сек
Final = "";
}
}
Код Arduino Mega (основная логика)
Требует библиотек: Adafruit_Fingerprint, Adafruit_GFX, MCUFRIEND_kbv, RTClib, SD, EEPROM.
Полный скетч (с регистрацией отпечатков через Serial Monitor, меню на TFT, записью на SD, отправкой в NodeMCU) доступен в архиве electropeak_attendance_code.zip во вложениях.
Корпус (лазерная резка)
DWG-файл attendanceboxlasercut.dwg — планки акрила/плексигласа для монтажа Mega, TFT, сканера, SD, NodeMCU, блока питания. Сборка на болтах/винтах.
Идеи для расширения
- Добавить иконки на TFT для лучшего UX.
- Добавить RFID-карты как альтернативу отпечатку.
- Отправка данных в Google Sheets вместо ThingSpeak.
Производственный процесс
- 10 ключевых преимуществ облачного хранилища для современных бизнесов
- DVD-проигрыватели: история, технологии и будущие инновации
- Надежная система учета рабочего времени на Arduino с RFID и Python
- Беспроводная передача данных по магнитному полю на Arduino с 3D-сенсором Infineon
- SERENA: Пользовательская система сигнализации на Arduino Mega 2560 с TFT Touchscreen
- Логгер температуры и влажности на Arduino с DHT11 и Ethernet Shield
- Интеграция ёмкостного сканера отпечатков DFRobot с Arduino или ESP8266
- Сенсорная башня на Arduino Cloud: Мониторинг температуры, движения и газа
- Умная вентиляция подвала на Arduino: контроль влажности
- Использование облачной мощи для IoT: раскрытие бесшовной связности и инсайтов данных