아두이노 지문인식 근태관리 시스템: 클라우드(ThingSpeak) 데이터 저장
부품 및 소모품
| 부품 | 수량 | 비고 |
| Arduino Mega 2560 R3 | 1 | 메인 컨트롤러 (시리얼 포트 다수 필요) |
| ElectroPeak R301T 지문 센서 | 1 | 시리얼 통신 |
| Micro SD TF 카드 어댑터 모듈 | 1 | 로컬 데이터 백업용 |
| DS3231 I2C RTC 모듈 | 1 | 정확한 시간 스탬프 |
| 3.5" TFT 컬러 LCD 실드 | 1 | 상태/메뉴 표시 (아두이노 메가 호환) |
| NodeMCU ESP8266 ESP-12E | 1 | WiFi 통신 및 ThingSpeak 업로드 전담 |
| 수-암 점퍼 와이어 | 1세트 | 배선용 |
필요 도구
- 레이저 커터 (아크릴/우드 케이스 제작용)
- 납땜 인두
소프트웨어
- Arduino IDE
- ThingSpeak 라이브러리
프로젝트 개요
IoT 기기 구현 능력을 기르기 위한 튜토리얼로, 지문인식 기반 근태관리 장치를 만듭니다. 직원이 지문으로 출/퇴근 인증 시:
- 날짜, 이름, 출근시간, 퇴근시간, 근무시간을 SD 카드에 저장
- 인터넷 연결 시 ThingSpeak 클라우드에 자동 업로드 (CSV 다운로드 가능)
- 인터넷 미연결 시 EEPROM에 미전송 데이터 보관 → 재연결 시 일괄 전송
- 정전 시에도 EEPROM에 데이터 보존
ThingSpeak 설정 방법
- ThingSpeak.com 회원가입
- My Channels → New Channel 생성
- 필드 5개 설정: Date, Name, Enter Time, Exit Time, Work Hours
- API Keys 탭에서 Channel ID와 Write API Key 복사
- Arduino IDE 라이브러리 매니저에서 "ThingSpeak" 검색 설치
- 예제 `WriteMultipleFields` 열어서 SSID, Password, Channel ID, Write API Key 입력 후 테스트
주의: ThingSpeak 무료 계정은 최소 15초 간격으로만 업데이트 가능. 코드에서 `delay(17000)`로 준수.
하드웨어 구성
아두이노 메가 메인 보드
- 지문 센서: Serial1 (핀 18/19) 또는 Serial2/3
- SD 카드 모듈: SPI 핀 (50, 51, 52, 53)
- DS3231 RTC: I2C 핀 (20=SDA, 21=SCL)
- TFT LCD 실드: 메가 위에 직접 장착 (일부 핀 가림 → 필요시 하단에서 배선 연장)
- NodeMCU: Serial2/3 등으로 메가와 통신 (데이터 문자열 전송)
NodeMCU 역할
메가로부터 시리얼로 데이터 문자열 수신(`날짜*이름*출근*퇴근*근무시간` 형식) → 파싱 → ThingSpeak 필드 매핑 → 업로드 → 성공/실패(1/0) 메가로 회신.
소스 코드
1. ThingSpeak 테스트 코드 (NodeMCU용)
#include "ThingSpeak.h"
#include
char ssid[] = SECRET_SSID;
char pass[] = SECRET_PASS;
WiFiClient client;
unsigned long myChannelNumber = SECRET_CH_ID;
const char * myWriteAPIKey = SECRET_WRITE_APIKEY;
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
}
void loop() {
if (WiFi.status() != WL_CONNECTED) {
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) { delay(5000); }
}
ThingSpeak.setField(1, number1);
ThingSpeak.setField(2, number2);
ThingSpeak.setField(3, number3);
ThingSpeak.setField(4, number4);
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (x == 200) Serial.println("Channel update successful.");
else Serial.println("Problem updating channel. HTTP error " + String(x));
delay(20000); // 20초 대기 (무료 계정 제한)
}
2. NodeMCU 실전 업로드 코드
#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); // LED off (active low)
}
void loop() {
// WiFi 재연결
if (WiFi.status() != WL_CONNECTED) {
while (WiFi.status() != WL_CONNECTED) {
WiFi.begin(ssid, pass);
Serial.print("0"); delay(5000);
}
}
digitalWrite(LED_BUILTIN, LOW); // LED on = connected
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);
if (x == 200) { delay(100); Serial.print("1"); }
else { delay(100); Serial.print("0"); }
delay(17000); // ThingSpeak 15초 룰 준수
Final = "";
}
}
3. 아두이노 메가 메인 코드 (별도 파일 제공)
다음 라이브러리 필요:
- Adafruit-Fingerprint-Sensor-Library
- Adafruit-GFX-Library
- MCUFRIEND_kbv (TFT LCD용)
- RTClib (DS3231용)
기능: 지문 등록/인증, RTC 시간 읽기, SD 카드 로그 기록, TFT 메뉴 UI, NodeMCU로 데이터 전송 관리, EEPROM 미전송 데이터 큐 관리.
전체 코드는 프로젝트 페이지 첨부 파일(`electropeak_attendance_code.zip`)에서 다운로드 가능.
케이스 제작
- 아크릴/우드 레이저 커팅 도면 제공 (DWG 파일)
- 부품 배치도 따라 조립 후 12V 어댑터 연결로 즉시 동작
확장 아이디어
- LCD에 더 많은 아이콘/애니메이션 추가
- RFID 카드 옵션 추가 (지문 + 카드 이중 인증)
- Google Sheets API 연동으로 ThingSpeak 대체
- 관리자용 웹 대시보드 별도 구축
참고 자료