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

RFID 통과 직원의 비접촉 온도 제어

구성품 및 소모품

Arduino MKR1000
× 1
RFID 리더기 RC522
× 1
OLED 0.96" 128x32
× 1
MLX90614
× 1

앱 및 온라인 서비스

Arduino IDE
프리징

이 프로젝트 정보

직원이 RFID 태그를 사용하여 기업에 접근할 경우 비접촉 적외선 체온계로 직원의 체온을 추가로 측정합니다. 발열(COVID19 증상 중 하나)이 있는 경우 접근이 차단됩니다. 또한 모든 데이터(RFID를 통한 사원 식별)는 출근 시간 및 체온(UID RFID를 위한 사원 식별)을 모니터링하는 데이터 태그가 있는 회사 웹사이트로 이동합니다.

RFID를 이용한 체온조절(테스트)을 통한 사무실 출입

클라우드에서 보낸 데이터 보기

온도 조절 기능이 있는 RFID를 사용하여 사무실에 입장

동영상2

1단계. 소프트웨어 설치

컨트롤러로 Arduino MKR 1000 WiFi 보드를 사용합니다. 우리는 Arduino IDE에서 프로그래밍할 것입니다. 기본적으로 Arduino IDE는 AVR 보드용으로만 구성됩니다. Arduino MK Wi-Fi 1000 플랫폼으로 작업하려면 카드 관리자에서 Arduino SAMD(32비트 ARM Cortex-M0+)에 대한 지원을 추가해야 합니다. 보드 관리자에서(도구> 보드> 보드 관리자 ), Arduino SAMD를 찾아 설치 버튼을 클릭합니다.

Arduino IDE에 소프트웨어를 설치한 후 도구  보드 메뉴는 MKR 1000 WiFi 보드를 포함하여 Arduino Zero 및 MKR 보드를 지원합니다. USB 케이블을 사용하여 MKR 1000 카드를 컴퓨터에 연결합니다. 드라이버는 자동으로 설치되어야 합니다.

2단계. IR 온도 센서 MLX90614를 Arduino MKR 1000 Wi Fi 보드에 연결

MLX90614는 비접촉 온도 측정용 적외선 센서입니다. 약 0.5°C의 정확도로 -70~380°C 범위의 온도를 측정할 수 있습니다. MLX90614DAA 재고 있음

센서는 I2C 프로토콜을 사용합니다. 연락처 할당

Arduino MKR WiFi 보드에 대한 연결 다이어그램

프로그래밍을 위해 Adafruit_MLX90614.h 라이브러리를 사용합니다. 이 라이브러리는 관리자 라이브러리(스케치> 라이브러리 포함> 관리자 라이브러리)를 통해 설치해야 합니다. ). Arduino 보드에 스케치 업로드(mlx90614_01.ino)

// 라이브러리 연결
#include
#include
// 객체 인스턴스 생성
Adafruit_MLX90614 mlx =Adafruit_MLX90614();

void setup() {
Serial.begin(9600);
Serial.println("start");
// 시작 MLX90614 센서
mlx.begin();
}

void 루프() {
Serial.print("Ambient ="); Serial.print(mlx.readAmbientTempC());
Serial.print("*C");
Serial.print("\tObject ="); Serial.print(mlx.readObjectTempC());
Serial.print("*C");
Serial.print("\tObject ="); Serial.print(mlx.readObjectTempF());
Serial.println("*F");
지연(3000);
}

그리고 직렬 포트 모니터를 엽니다. 3초마다 주변 온도와 물체 온도를 직렬 포트로 출력

3단계. OLED 디스플레이를 Arduino MKR 1000 WiFi 보드에 연결

이 프로젝트는 SSD1306 칩에 필요한 바인딩이 있는 모듈 형태의 12x32 흑백 OLED 디스플레이를 사용합니다. 이 모듈은 I2C 인터페이스에서 실행됩니다. Arduino 보드에 대한 연결 다이어그램

프로그래밍할 때 Adafruit SSD1306 라이브러리를 사용합니다. 온도 출력의 스케치를 디스플레이에 로드합니다. 3초마다 온도를 측정합니다(mlx90614_02.ino).

// 라이브러리 연결
#include
#include
#include
#include
// 객체 인스턴스 생성
Adafruit_MLX90614 mlx =Adafruit_MLX90614();
Adafruit_SSD1306 display(128, 32, &Wire, -1);

float temp;
unsigned long millis1=0;

void setup() {
Serial.begin(9600);
// 시작 표시
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize(1);
display.setTextColor(WHITE);
// 옵션 표시
display.clearDisplay();
display.display();
// MLX90614 센서 시작
mlx.begin();
// start
Serial.println("start");
}

void 루프() {
if(millis()-millis1>=3000) {
display.clearDisplay();
표시. setCursor(10,10);
display.println(F("대기 온도...."));
temp=mlx.readObjectTempC();
display.setCursor(10, 20);
display.print(temp);
display.print(F(" *C"));
display.display();
//
millis1=millis();
}
}

4단계. rc522 RFID 리더 모듈을 Arduino MKR 1000 WiFi 보드에 연결

다양한 RFID 태그가 있습니다. 태그는 능동 및 수동입니다(내장 전원 없이 판독기의 신호에 의해 안테나에 유도된 전류에 의해 전원이 공급됨). 태그는 LF(125 - 134kHz), HF(13.56MHz), UHF(860 - 960MHz)와 같은 다양한 주파수에서 작동합니다. 태그에서 정보를 읽고 태그에 데이터를 쓰는 장치를 리더라고 합니다. Arduino 프로젝트에서 RFID-RC522 모듈은 리더기로 매우 자주 사용됩니다. 이 모듈은 RA 태그(13.56MHz의 주파수에서) 작업을 제공하는 NSP 회사의 MFRC522 칩에서 만들어집니다.

SPI 프로토콜을 통해 Arduino MCF 1000 WiFi 카드에 연결

RFID 카드의 UID 감지 스케치, 온도 측정, 직렬 포트(mlx90614_03.ino)에 대한 출력으로 입력을 열거나 닫는 것에 대한 메시지.

// 라이브러리 연결
#include
#include
#include
#include
#include
#include
// 객체 인스턴스 생성
Adafruit_MLX90614 mlx =Adafruit_MLX90614();
Adafruit_SSD1306 디스플레이(128, 32, &Wire, -1);
MFRC522 mfrc522(7, 6);

바이트 카드UID[4] ={0,0,0,0 };
int res=1;
float temp;
unsigned long millis1=0;

void setup() {
Serial.begin(9600 );
// 디스플레이 시작
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize(1);
display.setTextColor(WHITE);
display .clearDisplay();
display.display();
// MLX90614 센서 시작
mlx.begin();
// запуск SPI
SPI.begin ();
// MFRC522 초기화 중
mfrc522.PCD_Init();
Serial.println("start");
Serial.println("RFID 대기 ...." );
}

무효 루프() {
스위치(res) ) {
경우 1:// RFID 대기
display.clearDisplay();
display.setCursor(10,10);
display.print(F("RFID 대기 ...."));
// 카드 부착 여부 확인
if ( mfrc522.PICC_IsNewCardPresent()) {
// 지도 정보 읽기.
if ( mfrc522.PICC_ReadCardSerial()) {
// UID 저장
Serial.print(F("카드 UID:"));
display.setCursor(10,20);
(바이트 i =0; 나는 <4; i++) {
cardUID[i]=mfrc522.uid.uidByte[i];
Serial.print(cardUID[i],HEX);
display.print(cardUID[i], HEX);
}
Serial.println();
Serial.println("대기 온도...");
res=3;
}
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
display.display();
break;
사례 2:// 요청 데이터베이스에서 UID 서버로
break;
case 3:// 온도 측정 대기
delay(2000);
display.clearDisplay();
display .setCursor(10,10);
display.println(F("대기 온도..."));
temp=mlx.readObjectTempC();
display.setCursor(10 ,20);
display.print(temp);
display.print(F(" *C"));
display.display();
if(temp> 34.0 &&temp<42.0) {
res=5;
}
break;
case 4:// 서버에 온도 데이터 보내기
break;
사례 5:// 열기 또는 닫기
display.clearDisplay();
display.setCursor(10,10);
display.print(F("Temp="));
display.pr int(temp);
display.print(F("*C"));
display.setCursor(10,20);
if(temp<37.5) {
display.print(F("OPEN"));
Serial.println("OPEN");
}
else {
display.print(F("닫기") );
display.setCursor(10,0);
display.print(F("온도 높음!!!"));
Serial.println("닫기");
Serial.println("온도 높음!!!");
}
display.display();
delay(3000);
Serial.println("RFID 대기 ....");
res=1;
break;
기본값:
break;
}
}

5단계. Arduino MKR 1000 WiFi 보드를 인터넷에 연결하기

Arduino MKR1000을 Wi-Fi 네트워크에 연결하기 위해 WiFi101 라이브러리를 사용합니다. WiFi101 라이브러리는 라이브러리 관리자(스케치  라이브러리 포함  관리자 라이브러리)를 사용하여 설치할 것입니다.

Arduino MK R 1000 Wi-Fi 보드를 필요한 액세스 포인트에 연결하는 스케치를 다운로드하십시오. connectWithWPA.ino 에서 예제를 업로드하십시오. 탭에 WiFi 핫스팟에 대한 데이터를 입력하여 라이브러리를 보드에 추가:

#define SECRET_SID "my_D 링크"
#define SECRET_PASS "********"

스케치 다운로드 후 시리얼 포트 모니터를 열어 아두이노 MKR1000 Wi-Fi 보드를 액세스 포인트에 연결하는 과정을 볼 수 있습니다.

연결에 성공하면 계속 진행하십시오.

6단계. 회사 웹사이트에 직원 데이터베이스 생성 및 입구 일일 온도 측정값 수집 데이터베이스 생성

호스팅 시 데이터베이스 생성(MySQL) 및 그 안에 두 개의 테이블:

<울>
  • 사용자 - 직원 데이터 및 그들의 uid;
  • 온도 - 입력 시 측정된 체온 데이터를 수집합니다.
  • 이제 호스팅에서 Arduino MKR 1000 WiFi에서 보낸 데이터를 처리하기 위한 2개의 스크립트를 만듭니다. 스크립트 get_uid.php 데이터베이스에서 ID를 확인하고 응답으로 반환:

    #아니요 – uid가 데이터베이스에 없는 경우

    #예;<이름> - uid가 데이터베이스에 있는 경우

    스크립트 get_uid.php의 내용

    //
    $location="localhost";
    $user="************";
    $pass="************";
    $db_name="************";
    // DB 연결
    if(! $db=mysqli_connect($location,$user,$pass,$db_name))
    {echo "connect error";}
    else
    {;}
    $query0=" SELECT * FROM 사용자 WHERE uid='".$_GET['uid']."' ";
    $rez0=mysqli_query($db,$query0);
    if (mysqli_num_rows($rez0)>0) {
    $row0=mysqli_fetch_assoc($rez0);
    echo "#예".";".$row0[이름];
    }
    그 외 {
    echo "#no";
    }
    ?>

    브라우저에서 요청을 보내 스크립트를 테스트할 수 있습니다.

    스크립트 get_temp.php 직원의 체온을 데이터베이스로 전송

    스크립트 get_temp.php의 내용

    //
    $location="localhost";
    $user="************";
    $pass="************";
    $db_name="************";
    // DB 연결
    if(! $db=mysqli_connect($location,$user,$pass,$db_name))
    {echo "connect error";}
    else
    {;}
    $query0=" SELECT * FROM 사용자 WHERE uid='".$_GET['uid']."' ";
    $rez0=mysqli_query($db,$query0);
    if (mysqli_num_rows($rez0)>0) {
    $row0=mysqli_fetch_assoc($rez0);
    $query1=" 임시 SET에 삽입
    id_user='".$row0['id' ]."',
    temp='".$_GET['temp']."',
    day='".date('Ymd H:i:s')."' ";
    mysqli_query($db,$query1);
    echo "#yes";
    }
    else {
    echo "#no";
    }
    ?>

    브라우저에서 요청을 보내 스크립트를 테스트할 수 있습니다.

    STEP 7. Arduino MKR 1000 WiFi에서 회사 웹사이트로 데이터 보내기

    2개의 함수를 작성해 보겠습니다.

    send_uid_to_server() - 서버에 uid 보내기;

    send_temp_to_server() - 온도를 서버로 보냅니다.

    send_uid_to_server() 함수

    int send_uid_to_server() {
    int ret=3;
    unsigned long previos;
    int x=0;int f=0;
    char s;
    client.stop();
    if (client.connect(server, 80)) {
    //// 서버에 데이터 보내기
    // 문자열 형성
    // 줄당 uid
    String str="/firm/get_uid.php?uid=";
    for (byte i =0; i <4; i++) {
    str+=String (cardUID[i],HEX);
    }
    Serial.print("str=");Serial.println(str);
    client.println("GET "+str+" HTTP /1.1");
    client.println("호스트:freeparkovka.ru");
    client.println("사용자 에이전트:ArduinoWiFi/1.1");
    client.println(" 연결:닫기");
    client.println();
    // получение ответа
    previos=millis();
    for(int i=0;i<40;i++ )
    response[i]=0;
    do {
    if(client.available()> 0) {
    // 서버에서 데이터 가져오기
    s =client.read();
    if(s=='#')
    f=1;
    if(f==1) {
    응답[x]=s;
    x++;
    }
    Serial.write(s);
    }
    }
    while((millis( ) - 이전) <5000);
    if(response[0]='#') {
    ret=command(응답);
    }
    Serial.println(응답);
    //client.stop();
    return ret;
    }
    else {
    // 연결되지 않음
    Serial.println("연결 실패 ");
    //client.stop();
    return 3;
    }
    }

    send_temp_to_server() 함수

    void send_temp_to_server() {
    client.stop();
    if (client.connect(server, 80)) {
    //// 서버에 데이터 보내기
    // 문자열 형성
    // 줄당 uid
    String str="/firm/get_temp.php?uid=";
    for (byte i =0; i <4; i++) {
    str+=String(cardUID[i],HEX);
    }
    str+="&temp="+String(temp);
    Serial.print( "str=");Serial.println(str);
    client.println("GET "+str+" HTTP/1.1");
    client.println("호스트:freeparkovka.ru");
    client.println("사용자 에이전트:ArduinoWiFi/1.1");
    client.println("연결:닫기");
    client.println();
    직렬. println(응답);
    지연(10); }
    else {
    // 연결 없음
    Serial.println("연결 실패");
    }
    }

    8단계. 입력 활성화/비활성화를 위한 릴레이 추가

    온도 값에 따라 기업 입구를 활성화/비활성화하는 릴레이를 추가합니다. 연결 다이어그램:

    그리고 온도 데이터에 따라 입력을 열거나 닫도록 릴레이 활성화/비활성화 코드에 추가합니다.

    if(temp<37.5) { // OPEN
    display.setCursor(10,0);
    display.print(F("OPEN"));
    직렬 .println("OPEN");
    digitalWrite(pinRelay,HIGH);
    }
    else { // 닫기
    display.print(F("CLOSE"));
    display.setCursor(10,0);
    display.print(F("온도 높음!!!"));
    Serial.println("CLOSE");
    직렬 .println("온도 높음!!!");
    digitalWrite(pinRelay,LOW);
    }

    그리고 전체 스케치 코드((mlx90614_07.ino))

    // 라이브러리 연결
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    // 객체 인스턴스 생성
    Adafruit_MLX90614 mlx =Adafruit_MLX90614();
    Adafruit_SSD1306 display(128, 32, &Wire, -1);
    MFRC522 mfrc522(7, 6);
    WiFiClient/귀하의
    네트워크 SSID(이름)
    // 및 암호(WPA)
    char ssid[] ="my_DLink";
    char pass[] ="********";
    // 이름 주소
    문자 서버[] ="www.freeparkovka.ru";
    int pinRelay=5;
    int 상태 =WL_IDLE_STATUS;
    문자 응답[40 ];
    byte cardUID[4] ={0,0,0,0};
    int res=0;
    int rr;
    부동 온도;
    부호 없음 long millis1=0;
    unsigned long millis2=0;
    unsigned long millis3=0;

    void setup() {
    Serial.begin(9600);
    // 릴레이
    pinMode(pinRelay,OUTPUT);
    digitalWrite(pinRelay,LOW);
    // d isplay
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.clearDisplay();
    display.display();
    // 센서 시작 MLX90614
    mlx.begin();
    // запуск SPI
    SPI.begin();
    // MFRC522 초기화 중
    mfrc522.PCD_Init();
    Serial.println("WiFi 연결 ....");
    display.setCursor(10,10);
    display.print (F("WiFi 연결"));
    display.display();
    // 쉴드가 있는지 확인:
    if (WiFi.status() ==WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // 계속하지 않음:
    while (true);
    }
    // 연결 시도 WiFi 네트워크에 연결:
    while ( status !=WL_CONNECTED) {
    Serial.print("WPA SSID 연결 시도:");
    Serial.println(ssid);
    // WPA/WPA2 네트워크에 연결:
    status =WiFi.begin(ssid, pass);
    // 연결을 위해 5초 대기:
    delay(5000);
    }
    display.setCursor( 30,20);
    display.print(F("ok"));
    display.display();
    printWiFiStatus();
    delay(2000);
    /> Serial.println("RFID 대기 ....");
    }

    void loop() {
    switch(res) {
    사례 0://
    send_display("Wait RFID....");
    res=1;
    break;
    사례 1:// RFID 대기
    // 카드 부착 여부 확인а
    if ( mfrc522.PICC_IsNewCardPresent()) {
    // 지도 정보 읽기
    if ( mfrc522.PICC_ReadCardSerial()) {
    // UID 저장
    Serial.print(F("카드 UID:"));
    display.setCursor(10,20);
    for (byte i =0; 나는 <4; i++) {
    cardUID[i]=mfrc522.uid.uidByte[i];
    Serial.print(cardUID[i],HEX);
    display.print(cardUID[i], HEX);
    }
    Serial.println();
    res=2;
    display.display();
    delay(2000);
    직렬 .println("서버에 uid 보내기....");
    }
    mfrc522.PICC_HaltA();
    mfrc522.PCD_StopCrypto1();
    }
    표시 .display();
    break;
    case 2:// 데이터베이스에서 UID 서버로 요청
    send_display("서버 보내기...");
    rr=send_uid_to_server ();
    if(rr==1) {
    res=3;
    display.setCursor(10,0);
    display.print(F("uid ok" ));
    millis3=millis();
    }
    else if(rr==2) {
    res=0;
    display.setCursor(10,0 );
    display.print(F("잘못된"));
    }
    else {
    res=0;
    display.setCursor(10,0);
    display.print(F("오류 404"));
    }
    display.display();
    지연(3000);
    중단;
    case 3:// 온도 측정 대기
    if(millis()-millis3<10000) {
    sen d_display("대기 온도...");
    temp=mlx.readObjectTempC();
    display.setCursor(10,20);
    display.print(temp);
    display.print(F(" *C"));
    display.display();
    if(temp> 34.0 &&temp<42.0) {
    res=4;
    delay(2000);
    }
    }
    else {
    res=0;
    }
    break;
    사례 4:/ / 서버에 온도 데이터 전송
    send_display("Wait temp....");
    send_temp_to_server();
    res=5;
    delay(2000);
    break;
    경우 5:// 열기 또는 닫기
    display.clearDisplay();
    display.setCursor(10,10);
    display.print(F(" Temp="));
    display.print(temp);
    display.print(F("*C"));
    display.setCursor(10,20);
    if(temp<37.5) { // OPEN
    display.print(F("OPEN"));
    Serial.println("OPEN");
    digitalWrite(pinRelay,HIGH);
    }
    else { // 닫기
    display.print(F("CLOSE"));
    display.setCursor(10,0);
    표시. print(F("온도 높음!!!"));
    Serial.println("CLOSE");
    Serial.print ln("온도 높음!!!");
    digitalWrite(pinRelay,LOW);
    }
    display.display();
    delay(3000);
    Serial.println("RFID 대기 ....");
    res=0;
    break;
    기본값:
    break;
    }
    }

    //
    void printWiFiStatus() {
    // 연결된 네트워크의 SSID를 인쇄합니다.
    Serial.print("SSID:");
    Serial.println(WiFi.SSID());
    // WiFi 실드의 IP 주소 인쇄:
    IPAddress ip =WiFi.localIP();
    Serial.print( "IP 주소:");
    Serial.println(ip);
    // 수신된 신호 강도 출력:
    long rssi =WiFi.RSSI();
    Serial.print ("신호 강도(RSSI):");
    Serial.print(rssi);
    Serial.println(" dBm");
    }
    //
    int send_uid_to_server() {
    int ret=3;
    unsigned long previos;
    int x=0;int f=0;
    char s;
    client.stop ();
    if (client.connect(server, 80)) {
    //// 서버에 데이터 보내기
    // 문자열 형성
    // 줄당 uid
    문자열 str ="/firm/get_uid.php?uid=";
    (바이트 i =0; 나는 <4; i++) {
    str+=String(cardUID[i],HEX);
    }
    Serial.print("str=");Serial.println(str);
    클라이언트 .println("GET "+str+" HTTP/1.1");
    client.println("호스트:freeparkovka.ru");
    client.println("사용자 에이전트:ArduinoWiFi/1.1");
    client.println("연결:닫기");
    client.println();
    // получение ответа
    previos=millis();
    for( int i=0;i<40;i++)
    response[i]=0;
    do {
    if(client.available()> 0) {
    // 가져오기 서버의 데이터
    s =client.read();
    if(s=='#')
    f=1;
    if(f==1) {
    응답[x]=s;
    x++;
    }
    Serial.write(s);
    }
    }
    while((밀리 () - 이전) <5000);
    if(response[0]='#') {
    ret=command(response);
    }
    Serial.println(응답 );
    //client.stop();
    return ret;
    }
    else {
    // 연결되지 않음
    Serial.println("연결 실패");
    //client.stop();
    return 3;
    }
    }
    //
    send_temp_to_server() 무효 {
    client.stop();
    if (client.connect(server, 80)) {
    //// 서버에 데이터 보내기
    // 문자열 형성
    // 줄당 uid
    String str="/firm/get_temp.php?uid=";
    for (byte i =0; 나는 <4; i++) {
    str+=String(cardUID[i],HEX);
    }
    str+="&temp="+String(temp);
    Serial.print("str =");Serial.println(str);
    client.println("GET "+str+" HTTP/1.1");
    client.println("호스트:freeparkovka.ru");
    client.println("사용자 에이전트:ArduinoWiFi/1.1");
    client.println("연결:닫기");
    client.println();
    Serial.println( 응답);
    지연(10); }
    else {
    // 연결 없음
    Serial.println("connection failed");
    }
    }
    //에서 온 명령 확인 서버
    int 명령(char* arr) {
    String str(arr);
    //
    if(str.indexOf("yes")!=-1) {
    return 1;
    }
    else if(str.indexOf("no")!=-1) {
    return 2;
    }
    return 3;
    }
    // 출력 표시
    void send_display(String str) {
    display.clearDisplay();
    display.setCursor(10,10);
    display.print(str);
    display.display();
    }

    STEP 9. 직원 체온 데이터 원격 보기 페이지

    서버로 전송된 데이터를 보려면 사이트 페이지를 엽니다. 페이지 파일 view_temp.php를 출력하는 스크립트의 내용

    //
    $location="localhost";
    $user="********";
    $pass ="********";
    $db_name="********";
    // DB 연결
    if(! $db=mysqli_connect( $location,$user,$pass,$db_name))
    {echo "connect error";}
    else
    {;}
    $query0=" SELECT * FROM temp WHERE uid='".$_GET['uid']."' ";
    $rez0=mysqli_query($db,$query0);
    $content1.=date('Ym-d'). "

    ";
    $content1.="";
    $query1="SELECT * FROM temp WHERE day>=CURDATE() ";
    $rez1 =mysqli_query($db,$query1); $i=1;
    while($row1=mysqli_fetch_assoc($rez1)) {
    $content1.="";
    $content1.="";
    $rez2=mysqli_query($db,"SELECT name FROM users WHERE id =".$row1['id_user']." ");
    $row2=mysqli_fetch_assoc($rez2);
    $content1.="";
    $content1.="";
    if($row1['temp']>37.5)
    $content1.="";
    else
    $content1.="";
    $content1.="";
    $i++;
    }
    $content1.="
    ".$i."".$row2['name']."".mb_substr($row1['day'],10,9)."".$row1['temp']."".$row1['temp']."
    ";
    echo $content1;
    ?>


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

    코드

    <울>
  • Scetch Arduino
  • Step 2. Connecting an IR temperature sensor MLX90614 to an Arduino MKR 1000 Wi Fi Board
  • Step 3. Connecting an OLED display to an Arduino MKR 1000 WiFi Board
  • Step 4. Connecting the rc522 RFID reader module to the Arduino MKR 1000 WiFi Board
  • Step 6. Creating a database of employees on the company's website and a database for collecting dail
  • Step 6. Creating a database of employees on the company's website and a database for collecting dail
  • Step 9. Page for remote viewing of employee temperature data
  • Scetch ArduinoArduino
    // #include #include #include #include #include #include #include // Adafruit_MLX90614 mlx =Adafruit_MLX90614();Adafruit_SSD1306 display(128, 32, &Wire, -1);MFRC522 mfrc522(7, 6);WiFiClient client;// your network SSID (name)// and password (WPA)char ssid[] ="my_DLink"; char pass[] ="marina11"; // name address char server[] ="www.freeparkovka.ru"; int pinRelay=5;int status =WL_IDLE_STATUS; char response[40];byte cardUID[4] ={0,0,0,0};int res=0;int rr;float temp;unsigned long millis1=0;unsigned long millis2=0;unsigned long millis3=0;void setup() { Serial.begin(9600); // relay pinMode(pinRelay,OUTPUT); digitalWrite(pinRelay,LOW); // display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.setTextSize(1); display.setTextColor(흰색); display.clearDisplay(); 디스플레이.디스플레이(); // MLX90614 mlx.begin(); // SPI SPI.begin(); // MFRC522 mfrc522.PCD_Init(); Serial.println("connect WiFi ...."); display.setCursor(10,10); display.print(F("Connect WiFi")); 디스플레이.디스플레이(); // check for the presence of the shield:if (WiFi.status() ==WL_NO_SHIELD) { Serial.println("WiFi shield not present"); // don't continue:while (true); } // attempt to connect to WiFi network:while ( status !=WL_CONNECTED) { Serial.print("Attempting to connect to WPA SSID:"); Serial.println(ssid); // Connect to WPA/WPA2 network:status =WiFi.begin(ssid, pass); // wait 10 seconds for connection:delay(5000); } display.setCursor(30,20); display.print(F("ok")); 디스플레이.디스플레이(); printWiFiStatus(); 지연(2000); Serial.println("Wait RFID ...."); }void loop() { switch(res) { case 0:// send_display("Wait RFID...."); res=1; 부서지다; case 1:// RFID // if ( mfrc522.PICC_IsNewCardPresent()) { // . if ( mfrc522.PICC_ReadCardSerial()) { // UID Serial.print(F("Card UID:")); display.setCursor(10,20); for (byte i =0; i <4; i++) { cardUID[i]=mfrc522.uid.uidByte[i]; Serial.print(cardUID[i],HEX); display.print(cardUID[i],HEX); } Serial.println(); res=2; 디스플레이.디스플레이(); 지연(2000); Serial.println("send uid to server...."); } mfrc522.PICC_HaltA(); mfrc522.PCD_StopCrypto1(); } display.display(); 부서지다; case 2:// UID send_display("Send server..."); rr=send_uid_to_server(); if(rr==1) { res=3; display.setCursor(10,0); display.print(F("uid ok")); millis3=millis(); } else if(rr==2) { res=0; display.setCursor(10,0); display.print(F("incorrect")); } else { res=0; display.setCursor(10,0); display.print(F("error 404")); } display.display(); 지연(3000); 부서지다; case 3:// if(millis()-millis3<10000) { send_display("Wait temp...."); temp=mlx.readObjectTempC(); display.setCursor(10,20); display.print(temp); display.print(F(" *C")); 디스플레이.디스플레이(); if(temp>
    34.0 &&temp<42.0) { res=4; 지연(2000); } } else { res=0; } 부서지다; case 4:// send_display("Wait temp...."); send_temp_to_server(); res=5; 지연(2000); 부서지다; case 5:// display.clearDisplay(); display.setCursor(10,10); display.print(F("Temp=")); display.print(temp); display.print(F("*C")); display.setCursor(10,20); if(temp<37.5) { // OPEN display.print(F("OPEN")); Serial.println("OPEN"); digitalWrite(pinRelay,HIGH); } else { // CLOSE display.print(F("CLOSE")); display.setCursor(10,0); display.print(F("Temp high!!!")); Serial.println("CLOSE"); Serial.println("Temp high!!!"); digitalWrite(pinRelay,LOW); } display.display(); 지연(3000); Serial.println("Wait RFID ...."); res=0; 부서지다; default:break; }}//void printWiFiStatus() { // print the SSID of the network you're attached to:Serial.print("SSID:"); Serial.println(WiFi.SSID()); // print your WiFi shield's IP address:IPAddress ip =WiFi.localIP(); Serial.print("IP 주소:"); 직렬.println(ip); // print the received signal strength:long rssi =WiFi.RSSI(); Serial.print("signal strength (RSSI):"); Serial.print(rssi); Serial.println(" dBm");}// int send_uid_to_server() { int ret=3; unsigned long previos; int x=0;int f=0; char s; client.stop(); if (client.connect(server, 80)) { //// narodmon.ru // // uid String str="/firm/get_uid.php?uid="; for (byte i =0; i <4; i++) { str+=String(cardUID[i],HEX); } Serial.print("str=");Serial.println(str); client.println("GET "+str+" HTTP/1.1"); client.println("Host:freeparkovka.ru"); client.println("User-Agent:ArduinoWiFi/1.1"); client.println("Connection:close"); 클라이언트.println(); // previos=millis(); for(int i=0;i<40;i++) response[i]=0; do{ if(client.available()> 0) { // s =client.read(); if(s=='#') f=1; if(f==1) { response[x]=s; //Serial.print(response[x]); x++; } Serial.write(s); } } while((millis() - previos) <5000); if(response[0]='#') { ret=command(response); } Serial.println(response); //client.stop(); return ret; } else { // Serial.println("connection failed"); //client.stop(); 반환 3; }}//void send_temp_to_server() { client.stop(); if (client.connect(server, 80)) { //// narodmon.ru // // uid String str="/firm/get_temp.php?uid="; for (byte i =0; i <4; i++) { str+=String(cardUID[i],HEX); } str+="&temp="+String(temp); Serial.print("str=");Serial.println(str); client.println("GET "+str+" HTTP/1.1"); client.println("Host:freeparkovka.ru"); client.println("User-Agent:ArduinoWiFi/1.1"); client.println("Connection:close"); 클라이언트.println(); Serial.println(response); 지연(10); //client.stop(); } else { // Serial.println("connection failed"); //client.stop(); }}// int command(char* arr) { String str(arr); // if(str.indexOf("yes")!=-1) { return 1; } else if(str.indexOf("no")!=-1) { return 2; } return 3;}// void send_display(String str) { display.clearDisplay(); display.setCursor(10,10); display.print(str); display.display();}
    Step 2. Connecting an IR temperature sensor MLX90614 to an Arduino MKR 1000 Wi Fi BoardArduino
    #include #include Adafruit_MLX90614 mlx =Adafruit_MLX90614();void setup() { Serial.begin(9600); Serial.println("시작"); mlx.begin(); }void loop() { Serial.print("Ambient ="); Serial.print(mlx.readAmbientTempC()); Serial.print("*C"); Serial.print("\tObject ="); Serial.print(mlx.readObjectTempC()); Serial.print("*C"); Serial.print("\tObject ="); Serial.print(mlx.readObjectTempF()); Serial.println("*F"); delay(3000);}
    Step 3. Connecting an OLED display to an Arduino MKR 1000 WiFi BoardArduino
    #include #include #include #include Adafruit_MLX90614 mlx =Adafruit_MLX90614();Adafruit_SSD1306 display(128, 32, &Wire, -1);float temp;unsigned long millis1=0;void setup() { Serial.begin(9600); // display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.setTextSize(1); display.setTextColor(흰색); // display.clearDisplay(); 디스플레이.디스플레이(); // mlx.begin(); // Serial.println("start");}void loop() { if(millis()-millis1>=3000) { display.clearDisplay(); display.setCursor(10,10); display.println(F("Wait temp....")); temp=mlx.readObjectTempC(); display.setCursor(10,20); display.print(temp); display.print(F(" *C")); 디스플레이.디스플레이(); // millis1=millis(); }}
    Step 4. Connecting the rc522 RFID reader module to the Arduino MKR 1000 WiFi BoardArduino
    // #include #include #include #include #include #include // Adafruit_MLX90614 mlx =Adafruit_MLX90614();Adafruit_SSD1306 display(128, 32, &Wire, -1);MFRC522 mfrc522(7, 6);byte cardUID[4] ={0,0,0,0};int res=1;float temp;unsigned long millis1=0;void setup() { Serial.begin(9600); // display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.setTextSize(1); display.setTextColor(흰색); display.clearDisplay(); 디스플레이.디스플레이(); // MLX90614 mlx.begin(); // SPI SPI.begin(); // MFRC522 mfrc522.PCD_Init(); Serial.println("시작"); Serial.println("Wait RFID ....");}void loop() { switch(res) { case 1:// RFID display.clearDisplay(); display.setCursor(10,10); display.print(F("Wait RFID....")); // if ( mfrc522.PICC_IsNewCardPresent()) { // . if ( mfrc522.PICC_ReadCardSerial()) { // UID Serial.print(F("Card UID:")); display.setCursor(10,20); for (byte i =0; i <4; i++) { cardUID[i]=mfrc522.uid.uidByte[i]; Serial.print(cardUID[i],HEX); display.print(cardUID[i],HEX); } Serial.println(); Serial.println("Wait temp...."); res=3; } mfrc522.PICC_HaltA(); mfrc522.PCD_StopCrypto1(); } display.display(); 부서지다; case 2:// UID break; case 3:// delay(2000); display.clearDisplay(); display.setCursor(10,10); display.println(F("Wait temp....")); temp=mlx.readObjectTempC(); display.setCursor(10,20); display.print(temp); display.print(F(" *C")); 디스플레이.디스플레이(); if(temp>
    34.0 &&temp<42.0) { res=5; } 부서지다; case 4:// break; case 5:// display.clearDisplay(); display.setCursor(10,10); display.print(F("Temp=")); display.print(temp); display.print(F("*C")); display.setCursor(10,20); if(temp<37.5) { display.print(F("OPEN")); Serial.println("OPEN"); } else { display.print(F("CLOSE")); display.setCursor(10,0); display.print(F("Temp high!!!")); Serial.println("CLOSE"); Serial.println("Temp high!!!"); } display.display(); 지연(3000); Serial.println("Wait RFID ...."); res=1; 부서지다; default:break; }}
    Step 6. Creating a database of employees on the company's website and a database for collecting dailPHP
    get_uid.php checks for an ID in the database and returns in the response:
    0) { $row0=mysqli_fetch_assoc($rez0); echo "#yes".";".$row0['name']."$";}else { echo "#no"."$";} ?>
    Step 6. Creating a database of employees on the company's website and a database for collecting dailPHP
    get_temp.php sends the employee's temperature to the database
    0) { $row0=mysqli_fetch_assoc($rez0); $query1=" INSERT INTO temp SET id_user='".$row0['id']."', temp='".$_GET['temp']."', day='".date('Y-m-d H:i:s')."' "; mysqli_query($db,$query1); echo "#yes";}else { echo "#no";} ?>
    Step 9. Page for remote viewing of employee temperature dataPHP
    view_temp.php

    ";$content1.="";$query1="SELECT * FROM temp WHERE day>=CURDATE() ";$rez1=mysqli_query($db,$query1); $i=1;while($row1=mysqli_fetch_assoc($rez1)) { $content1.=""; $content1.=""; $rez2=mysqli_query($db,"SELECT name FROM users WHERE id =".$row1['id_user']." "); $row2=mysqli_fetch_assoc($rez2); $content1.=""; $content1.=""; if($row1['temp']>37.5) $content1.=""; else $content1.=""; $content1.=""; $i++; }$content1.="
    ".$i."".$row2['name']."".mb_substr($row1['day'],10,9)."".$row1['temp']."".$row1['temp']."
    ";echo $content1;?>

    회로도

    24_pAT1JQdrD1.fzz 05_ZnJZPiMYsB.fzz 08_RyXONO1VtK.fzz 12_jyWaOQUelW.fzz

    제조공정

    1. QR, RFID 및 온도 확인을 통한 출입 통제
    2. 온도 제어 팬
    3. Raspberry Pi의 온도 모니터링
    4. Raspberry Pi로 온도 모니터링
    5. LM35를 사용한 온도 기반 장치 제어 시스템
    6. 라즈베리 파이 온도 센서
    7. 수영장 채우기 제어
    8. 냉각 산업용 제어 패널 인클로저의 실수
    9. 다이캐스팅 공정 중 온도 제어 및 영향
    10. 작업장 온도 제어 — 건설 전문가를 위한 대여 안내서