산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Arduino 지문 출석 시스템(클라우드 데이터 스토리지 포함)

구성품 및 소모품

Arduino Mega 2560 R3
× 1
ElectroPeak R301T 지문 센서
× 1
ElectroPeak Micro SD TF 카드 어댑터 모듈
× 1
ElectroPeak DS3231 I2C RTC 모듈
× 1
ElectroPeak 3.5" TFT 컬러 디스플레이 스크린 모듈
× 1
ElectroPeak NodeMCU ESP8266 ESP-12E 보드
× 1
ElectroPeak 수-암 점퍼 와이어
× 1

필요한 도구 및 기계

레이저 커터(일반)
납땜 인두(일반)

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

이 튜토리얼과 다른 놀라운 튜토리얼을 읽을 수 있습니다. ElectroPeak의 공식 웹사이트 .

개요

오늘날 IoT 시스템의 사용이 증가함에 따라 IoT 장치의 작동 및 구현에 대한 학습은 매우 중요합니다. 이 튜토리얼에서는 로그인 정보와 근무 시간을 메모리 카드에 저장하는 것 외에도 이 정보를 ThingSpeak 플랫폼이 인터넷에 연결되는 즉시 업로드하는 Arduino로 지문 출석 장치를 만들 것입니다. CSV와 같은 다양한 형식으로 패널에서 이 정보를 다운로드할 수 있습니다.

<비디오 너비="100%" 높이="100%" preload="metadata" controls="controls">https://halckemy.s3.amazonaws.com/uploads/attachments/945916/att-cover-video-.compressed-1.mp4

배울 내용

<울>
  • 지문 센서 사용
  • NodeMCU를 사용하여 ThingSpeak에 데이터 업로드
  • 지문 센서와 Arduino로 출석 장치 만들기
  • ThingSpeak가 무엇인가요?

    IoT(사물 인터넷)는 수많은 사물이 인터넷에 연결되어 개인 및 기타 장치와 상호 작용하고 일반적으로 분석을 위해 클라우드에 데이터를 업로드하는 세상을 상상합니다.

    ThingSpeak는 클라우드 컴퓨팅에서 라이브 데이터를 표시하고 수집할 수 있는 IoT 플랫폼입니다.

    ThingSpeak와의 인터페이스 및 데이터 업로드

    ThingSpeak 연결을 시작하려면 아래 단계를 따르세요.

    1단계 ) ThingSpeak.com 웹사이트에 접속하여 계정을 만드십시오.

    2단계 ) 계정을 활성화한 후 로그인하고 새 채널을 클릭합니다. 내 채널에서 섹션.

    3단계 ) 열려 있는 새 창에서 패널 이름과 필요한 경우 설명을 작성하십시오. 이름을 지정하여 필요한 필드 수를 결정하십시오. 나머지 부품은 선택 사항입니다. 정보를 입력한 후 패널을 저장합니다.

    4단계 ) 이제 API 키로 이동합니다. 패널에서.

    5단계 ) 채널 ID가 필요합니다. 및 API 키 작성 데이터를 전송하므로 기록해 두십시오.

    6단계) ThingSpeak 다운로드 라이브러리를 만들고 Arduino IDE에 추가하십시오.

    ThingSpeak 라이브러리

    7단계) 아두이노 IDE로 이동합니다. WriteMultipleFiels 열기 예제 부분에서 SSID, 암호, 채널 ID 및 쓰기 API 키 값을 입력하십시오.

    /* WriteMultipleFields 설명:20초마다 단일 Thingspeak 업데이트에서 필드 1,2,3,4 및 상태에 값을 씁니다. 하드웨어:ESP8266 기반 보드 !!! 중요 - 이 프로젝트의 secrets.h 파일을 네트워크 연결 및 Thingspeak 채널 세부 정보로 수정하십시오. !!! 참고:- ESP8266WiFi 라이브러리 및 ESP8622 보드 애드온이 필요합니다. 자세한 내용은 https://github.com/esp8266/Arduino를 참조하세요. - 도구->보드 메뉴에서 대상 하드웨어를 선택합니다. - 이 예는 WPA 암호화를 사용하는 네트워크에 대해 작성되었습니다. WEP 또는 WPA의 경우 WiFi.begin() 호출을 적절하게 변경합니다. Thingspeak( https://www.Thingspeak.com )는 클라우드에서 라이브 데이터 스트림을 집계, 시각화 및 분석할 수 있는 분석 IoT 플랫폼 서비스입니다. https://www.Thingspeak.com을 방문하여 무료 계정에 가입하고 채널을 만드십시오. Arduino용 Thingspeak 통신 라이브러리에 대한 문서는 라이브러리가 설치된 README.md 폴더에 있습니다. 전체 Thingspeak 문서는 https://www.mathworks.com/help/Thingspeak/index.html을 참조하십시오. 라이선스 정보는 함께 제공되는 라이선스 파일을 참조하십시오. Copyright 2018, The MathWorks, Inc.*/#include "Thingspeak.h#include "secrets.h#include char ssid[] =SECRET_SSID; // 네트워크 SSID(이름) char pass[] =SECRET_PASS; // 네트워크 비밀번호int keyIndex =0; // 네트워크 키 인덱스 번호(WEP에만 필요)WiFiClient 클라이언트; unsigned long myChannelNumber =SECRET_CH_ID;const char * myWriteAPIKey =SECRET_WRITE_APIKEY;// 값 초기화int number1 =0;int number2 =random(0,100);int number3 =random (0,100);int number4 =random(0,100);String myStatus ="";void setup() { Serial.begin(115200); // 직렬 WiFi.mode(WIFI_STA) 초기화; Thingspeak.begin(클라이언트); // Thingspeak 초기화}void loop() { // WiFi 연결 또는 재연결 if(WiFi.status() !=WL_CONNECTED){ Serial.print("Attempting to connect to SSID:"); Serial.println(SECRET_SSID); while(WiFi.status() !=WL_CONNECTED){ WiFi.begin(ssid, 통과); // WPA/WPA2 네트워크에 연결합니다. 개방형 또는 WEP 네트워크를 사용하는 경우 이 줄을 변경하십시오. Serial.print("."); 지연(5000); } Serial.println("\n연결되었습니다."); } // 값으로 필드를 설정합니다. Thingspeak.setField(1, number1); Thingspeak.setField(2, 숫자2); Thingspeak.setField(3, number3); Thingspeak.setField(4, 숫자4); // 상태 메시지 파악 if(number1> number2){ myStatus =String("field1이 field2보다 큼"); } else if(숫자1 <숫자2){ myStatus =String("필드1이 필드2보다 작음"); } else{ myStatus =String("필드1은 필드2와 같습니다."); } // 상태 설정 Thingspeak.setStatus(myStatus); // Thingspeak 채널에 쓰기 int x =Thingspeak.writeFields(myChannelNumber, myWriteAPIKey); if(x ==200){ Serial.println("채널 업데이트에 성공했습니다."); } else{ Serial.println("채널 업데이트에 문제가 있습니다. HTTP 오류 코드 " + String(x)); } // 값 변경 number1++; if(숫자1> 99){ 숫자1 =0; } 숫자2 =임의(0,100); number3 =임의(0,100); 숫자4 =무작위(0,100); 지연(20000); // 채널을 다시 업데이트하려면 20초 동안 기다립니다.} 

    코드를 업로드하면 패널의 필드 1~4에 업로드된 임의의 숫자가 표시됩니다. 데이터 업로드를 위해 출석 시스템에서 동일한 구조화된 코드가 사용됩니다.

    참고

    ThingSpeak 패널에 데이터를 업로드할 때마다 15초 이상 기다리십시오.

    지문 센서와 Arduino를 사용하여 출석 시스템 만들기

    이 시스템은 지문으로 사람의 출입을 등록한 후 직원의 날짜, 이름, 도착 시간, 출발 시간, 근무 시간 등의 정보를 SD 카드에 저장합니다. 그러면 이 정보는 지정한 시간에 ThingSpeak로 전송됩니다. 인터넷에 연결되지 않은 경우 게시되지 않은 데이터가 저장되며 인터넷에 연결되는 즉시 ThingSpeak에 전달됩니다. 정보는 마이크로컨트롤러의 EEPROM에 저장되기 때문에 정전 시에도 손실되지 않습니다.

    회로

    모든 모듈을 연결한 후 아두이노에 LCD 실드를 올려 놓습니다.

    LCD 실드가 Arduino 핀의 일부를 덮고 있기 때문에 이 핀이 필요한 경우 보드 하단에서 특정 핀으로 경계선을 연결할 수 있습니다.

    코드

    이 코드에는 다음 라이브러리가 필요합니다.

    Adafruit-지문-센서-라이브러리

    Adafruit-GFX-라이브러리

    MCUFRIEND_kbv

    RTClib

    이제 다음 코드를 다운로드하여 Arduino에 업로드하십시오. 이 코드는 기본 이름을 가진 11명을 위해 작성되었지만 기본 모드에서 이름을 변경하고 제거할 수 있습니다. 새 이름을 등록하려면 장치를 컴퓨터에 연결하고 키를 눌러 등록 모드로 들어간 다음 직렬 모니터를 열고 직렬 모니터에 표시된 대로 등록 절차를 따르십시오.

    첨부 파일에서 코드 다운로드:

    다음 링크에서 SD 카드, 시계 모듈 및 LCD 사용에 대해 자세히 알아볼 수 있습니다.

    SD 카드 모듈 w/ Arduino:데이터 읽기/쓰기 방법

    Arduino와 함께 DS1307 RTC 모듈을 사용하고 미리 알림을 만드는 방법

    Arduino의 TFT LCD 디스플레이에 대한 절대 초보자 가이드.

    NodeMCU는 이 시스템에 정보를 업로드하는 작업을 실행합니다. Arduino에서 직렬 포트를 통해 업로드 정보를 가져와 업로드 상태를 반환합니다. 아두이노로. NodeMCU에 다음 코드를 업로드하세요.

    #include "Thingspeak.h#include ESP8266WiFi.h>char ssid[] ="SSID";char pass[] ="SSID PASSWORD";WiFiClient 클라이언트;unsigned long myChannelNumber =귀하의 채널 ID; const char * myWriteAPIKey ="채널 쓰기 API 키";문자열 최종 ="";문자열 날짜 ="";문자열 Enter ="";문자열 종료 ="";문자열 이름 ="";문자열 WT =""; 무효 String_Analyze(문자열 입력) { int index1, index2, index3, index4; index1 =input.indexOf('*', 0); index2 =input.indexOf('*', index1 + 1); index3 =input.indexOf('*', index2 + 1); index4 =입력.lastIndexOf('*'); 이름 =입력; 날짜 =입력; 입력 =입력; 종료 =입력; WT =입력; 이름.제거(색인1); 날짜.제거(인덱스2); Date.remove(0, 인덱스1 + 1); Enter.remove(index3); Enter.remove(0, index2 + 1); Exit.remove(index4); Exit.remove(0, index3 + 1); WT.remove(0, index4 + 1);} 무효 Get_String(){ while (Serial.available()) { Final =Serial.readString(); // 들어오는 데이터를 문자열로 읽습니다. //Serial.println(Final); }} 무효 설정() { Serial.begin(9600); WiFi.mode(WIFI_STA); Thingspeak.begin(클라이언트); 핀모드(LED_BUILTIN, 출력); digitalWrite(LED_BUILTIN, HIGH);}void loop() { if (WiFi.status() !=WL_CONNECTED) { //Serial.print("SSID 연결 시도 중:"); // 직렬.println(ssid); while (WiFi.status() !=WL_CONNECTED) { WiFi.begin(ssid, 통과); // WPA/WPA2 네트워크에 연결합니다. 개방형 또는 WEP 네트워크를 사용하는 경우 이 줄을 변경하십시오. Serial.print("0"); 지연(5000); } } 디지털 쓰기(LED_BUILTIN, 낮음); //Serial.println("\n연결되었습니다."); Get_String(); String_Analyze(최종); if (!Final.equals("")) { Thingspeak.setField(1, 날짜); Thingspeak.setField(2, 이름); Thingspeak.setField(3, Enter); Thingspeak.setField(4, 종료); Thingspeak.setField(5, WT); int x =Thingspeak.writeFields(myChannelNumber, myWriteAPIKey); if (x ==200) { 지연(100); Serial.print("1"); } else { 지연(100); Serial.print("0"); } 지연(17000); 최종 =""; } 

    먼저 채널 ID를 변경합니다. 및 API 키 작성 ThingSpeak 패널에 따라

    String_Analuze(); 이 코드의 함수는 NodeMCU 입력 문자열을 날짜, 이름, 도착 및 출발 시간, 근무 시간으로 나누어 이 정보를 ThingSpeak에 보냅니다. 그런 다음 업로드가 성공하면 문자 "1"을 보내고 그렇지 않으면 문자 "0"을 Arduino에 보냅니다.

    출석 장치 조립

    다음 지도와 다양한 색상 또는 기타 재료의 플렉시글라스를 사용하여 출석 장치의 본체를 만들 수 있습니다.

    첨부 파일에서 장치 본체 레이저 절단 맵 다운로드:

    전자 부품을 배치하고 본체 전체를 조립한 후 원하는 위치에 설치하십시오. 이제 장치에 12V 어댑터를 연결하기만 하면 작동이 시작됩니다.

    다음은 무엇입니까?

    <울>
  • LCD에서 더 많은 아이콘을 사용해 보세요.
  • 시스템에 RFID 옵션을 추가해 보십시오.
  • Google 스프레드시트에 데이터 업로드 시도 ThingSpeak 대신 .
  • 이 튜토리얼이 유용하고 흥미롭다면 에서 좋아요를 눌러주세요 페이스북.

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • 코드 1
  • 코드 2
  • 코드 1Arduino
    Thingspeak와의 인터페이스 및 데이터 업로드
    /* WriteMultipleFields 설명:20초마다 단일 Thingspeak 업데이트에서 필드 1,2,3,4 및 상태에 값을 씁니다. 하드웨어:ESP8266 기반 보드 !!! 중요 - 이 프로젝트의 secrets.h 파일을 네트워크 연결 및 Thingspeak 채널 세부 정보로 수정하십시오. !!! 참고:- ESP8266WiFi 라이브러리 및 ESP8622 보드 애드온이 필요합니다. 자세한 내용은 https://github.com/esp8266/Arduino를 참조하세요. - 도구->보드 메뉴에서 대상 하드웨어를 선택합니다. - 이 예는 WPA 암호화를 사용하는 네트워크에 대해 작성되었습니다. WEP 또는 WPA의 경우 WiFi.begin() 호출을 적절하게 변경합니다. Thingspeak( https://www.Thingspeak.com )는 클라우드에서 라이브 데이터 스트림을 집계, 시각화 및 분석할 수 있는 분석 IoT 플랫폼 서비스입니다. https://www.Thingspeak.com을 방문하여 무료 계정에 가입하고 채널을 만드십시오. Arduino용 Thingspeak 통신 라이브러리에 대한 문서는 라이브러리가 설치된 README.md 폴더에 있습니다. 전체 Thingspeak 문서는 https://www.mathworks.com/help/Thingspeak/index.html을 참조하십시오. 라이선스 정보는 함께 제공되는 라이선스 파일을 참조하십시오. Copyright 2018, The MathWorks, Inc.*/#include "Thingspeak.h#include "secrets.h#include char ssid[] =SECRET_SSID; // 네트워크 SSID(이름) char pass[] =SECRET_PASS; // 네트워크 비밀번호int keyIndex =0; // 네트워크 키 인덱스 번호(WEP에만 필요)WiFiClient 클라이언트; unsigned long myChannelNumber =SECRET_CH_ID;const char * myWriteAPIKey =SECRET_WRITE_APIKEY;// 값 초기화int number1 =0;int number2 =random(0,100);int number3 =random (0,100);int number4 =random(0,100);String myStatus ="";void setup() { Serial.begin(115200); // 직렬 WiFi.mode(WIFI_STA) 초기화; Thingspeak.begin(클라이언트); // Thingspeak 초기화}void loop() { // WiFi 연결 또는 재연결 if(WiFi.status() !=WL_CONNECTED){ Serial.print("Attempting to connect to SSID:"); Serial.println(SECRET_SSID); while(WiFi.status() !=WL_CONNECTED){ WiFi.begin(ssid, 통과); // WPA/WPA2 네트워크에 연결합니다. 개방형 또는 WEP 네트워크를 사용하는 경우 이 줄을 변경하십시오. Serial.print("."); 지연(5000); } Serial.println("\n연결되었습니다."); } // 값으로 필드를 설정합니다. Thingspeak.setField(1, number1); Thingspeak.setField(2, 숫자2); Thingspeak.setField(3, number3); Thingspeak.setField(4, 숫자4); // 상태 메시지 파악 if(number1> number2){ myStatus =String("field1이 field2보다 큼"); } else if(숫자1 <숫자2){ myStatus =String("필드1이 필드2보다 작음"); } else{ myStatus =String("필드1은 필드2와 같습니다."); } // 상태 설정 Thingspeak.setStatus(myStatus); // Thingspeak 채널에 쓰기 int x =Thingspeak.writeFields(myChannelNumber, myWriteAPIKey); if(x ==200){ Serial.println("채널 업데이트에 성공했습니다."); } else{ Serial.println("채널 업데이트에 문제가 있습니다. HTTP 오류 코드 " + String(x)); } // 값 변경 number1++; if(숫자1> 99){ 숫자1 =0; } 숫자2 =임의(0,100); number3 =임의(0,100); 숫자4 =무작위(0,100); 지연(20000); // 채널을 다시 업데이트하려면 20초 동안 기다립니다.}
    코드 2Arduino
    #include "Thingspeak.h#include ESP8266WiFi.h>char ssid[] ="YOUR SSID";char pass[] ="SSID PASSWORD";WiFiClient client;unsigned long myChannelNumber =귀하의 채널 ID;const char * myWriteAPIKey ="귀하의 채널 쓰기 API 키";문자열 최종 ="";문자열 날짜 ="";문자열 Enter ="";문자열 종료 ="";문자열 이름 ="";문자열 WT =""; 무효 String_Analyze(문자열 입력) { 정수 인덱스1, 인덱스2, 인덱스3, 인덱스4; index1 =input.indexOf('*', 0); index2 =input.indexOf('*', index1 + 1); index3 =input.indexOf('*', index2 + 1); index4 =입력.lastIndexOf('*'); 이름 =입력; 날짜 =입력; 입력 =입력; 종료 =입력; WT =입력; 이름.제거(색인1); 날짜.제거(인덱스2); Date.remove(0, 인덱스1 + 1); Enter.remove(index3); Enter.remove(0, index2 + 1); Exit.remove(index4); Exit.remove(0, index3 + 1); WT.remove(0, index4 + 1);} 무효 Get_String(){ while (Serial.available()) { Final =Serial.readString(); // 들어오는 데이터를 문자열로 읽습니다. //Serial.println(Final); }} 무효 설정() { Serial.begin(9600); WiFi.mode(WIFI_STA); Thingspeak.begin(클라이언트); 핀모드(LED_BUILTIN, 출력); digitalWrite(LED_BUILTIN, HIGH);}void loop() { if (WiFi.status() !=WL_CONNECTED) { //Serial.print("SSID 연결 시도 중:"); // 직렬.println(ssid); while (WiFi.status() !=WL_CONNECTED) { WiFi.begin(ssid, 통과); // WPA/WPA2 네트워크에 연결합니다. 개방형 또는 WEP 네트워크를 사용하는 경우 이 줄을 변경하십시오. Serial.print("0"); 지연(5000); } } 디지털 쓰기(LED_BUILTIN, 낮음); //Serial.println("\n연결되었습니다."); Get_String(); String_Analyze(최종); if (!Final.equals("")) { Thingspeak.setField(1, 날짜); Thingspeak.setField(2, 이름); Thingspeak.setField(3, Enter); Thingspeak.setField(4, 종료); Thingspeak.setField(5, WT); int x =Thingspeak.writeFields(myChannelNumber, myWriteAPIKey); if (x ==200) { 지연(100); Serial.print("1"); } else { 지연(100); Serial.print("0"); } 지연(17000); 최종 =""; }

    맞춤형 부품 및 인클로저

    업로드2ftmp2fdcd9a041-0d41-433f-b48f-b7fa0a1b7a832felectropeak_attendance_code_q4bsYBzou5.zip 업로드2ftmp2f93ae52e3-7f3c-4744-b2db-b69baed578622fattendanceboxlasercut_ryMUOo5d7h.dwg

    제조공정

    1. Cloud Storage 사용의 10가지 이점
    2. DVD 플레이어
    3. Python과 함께 Arduino 및 RFID를 사용한 출석 시스템
    4. 무선 자기 데이터 전송
    5. Arduino 알람 시스템:SERENA
    6. 온도 및 습도 데이터 로거
    7. Arduino 또는 ESP8266이 있는 정전 용량 지문 센서
    8. Arduino 클라우드 센서 타워
    9. 지하실/크롤 공간 환기 시스템
    10. IoT의 클라우드