Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Бесконтактный временный контроль сотрудников при сквозном использовании RFID

Компоненты и расходные материалы

Arduino MKR1000
× 1
Считыватель RFID RC522
× 1
OLED 0.96 "128x32
× 1
MLX90614
× 1

Приложения и онлайн-сервисы

IDE Arduino
Фритзинг

Об этом проекте

Когда сотрудники заходят на предприятие с помощью RFID-меток, мы дополнительно измеряем температуру тела сотрудников с помощью бесконтактного инфракрасного термометра. При повышенной температуре (один из симптомов COVID19) доступ блокируется. Кроме того, все данные (идентификация сотрудника через RFID) поступают на веб-сайт компании, которая отслеживает данные о времени прибытия на работу и температуре тела (идентификация сотрудника для UID RFID) меток.

Вход в офис по RFID с контролем температуры (тест)

Просмотр отправленных данных из облака

Вход в офис с помощью RFID с контролем температуры

видео2

Шаг 1. Установка программного обеспечения

Мы используем плату Arduino MKR 1000 WiFi в качестве контроллера. Будем программировать в среде Arduino IDE. По умолчанию IDE Arduino настроена только для плат AVR. Для работы с платформой Arduino MK Wi-Fi 1000 необходимо добавить поддержку Arduino SAMD (32bit ARM Cortex-M0 +) в Диспетчере карт. В менеджере доски ( Инструменты> Доска> Менеджер доски . ), найдите Arduino SAMD и нажмите кнопку "Установить".

После установки программного обеспечения в Arduino IDE меню Tools  Board будет поддерживать платы Arduino Zero и MKR, включая плату WiFi MKR 1000). Подключите карту MKR 1000 к компьютеру с помощью кабеля USB. Драйвер должен быть установлен автоматически.

Шаг 2. Подключение ИК-датчика температуры MLX90614 к плате Wi-Fi Arduino MKR 1000

MLX90614 - это инфракрасный датчик для бесконтактного измерения температуры. Он может измерять температуру в диапазоне от -70 до 380 градусов Цельсия с точностью около 0,5 ° C. У меня на складе был MLX90614DAA

Датчик использует протокол I2C. Назначить контакты

Схема подключения к плате Arduino MKR WiFi

Для программирования мы используем библиотеку Adafruit_MLX90614.h, которую необходимо установить через библиотеки диспетчера ( Sketch> Включить библиотеку> Библиотеки диспетчера ). Загрузите эскиз на плату Arduino (mlx90614_01.ino)

  // Подключение библиотек 
#include
#include
// Создание экземпляра объекта
Adafruit_MLX90614 mlx =Adafruit_MLX90614 ();

void setup () {
Serial.begin (9600);
Serial.println ("start");
// запускаем Датчик MLX90614
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");
задержка (3000);
}

И откройте монитор последовательного порта. Температура окружающей среды и температура объекта выводятся на последовательный порт каждые 3 секунды

Шаг 3. Подключение OLED-дисплея к WiFi-плате Arduino MKR 1000

В проекте используется монохромный OLED-дисплей 12x32 в виде модуля с необходимой привязкой на микросхеме SSD1306. Эти модули работают на интерфейсе 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 ();
// запуск
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"));
display.display ();
//
millis1 =millis ();
}
}

Шаг 4. Подключение модуля RFID-считывателя rc522 к WiFi-плате Arduino MKR 1000

Существует большое количество RFID-меток. Метки бывают активными и пассивными (без встроенного источника питания, питаются током, наводимым в антенне сигналом считывателя). Метки работают на разных частотах:LF (125 - 134 кГц), HF (13,56 МГц), UHF (860 - 960 МГц). Устройства, которые считывают информацию с тегов и записывают в них данные, называются считывателями. В проектах Arduino очень часто используется модуль RFID-RC522 в качестве считывателя. Модуль выполнен на микросхеме MFRC522 компании NSP, обеспечивающей работу с метками RA (на частоте 13,56 МГц).

Подключение к WiFi-карте Arduino MCF 1000 по протоколу SPI

Эскиз обнаружения UID для карты RFID, измерения температуры и сообщений об открытии или закрытии входа с выходом на последовательный порт (mlx90614_03.ino).

  // Подключение библиотек 
#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 (WHITE);
display .clearDisplay ();
display.display ();
// запуск датчика MLX90614
mlx.begin ();
// запуск SPI
SPI.begin ();
// инициализация MFRC522
mfrc522.PCD_Init ();
Serial.println ("start");
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);
для (байт i =0; я <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 ();
break;
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"));
display.display ();
if (temp> 34.0 &&temp <42.0) {
res =5;
}
break;
case 4:// отправка данных о температуре на сервер
break;
case 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 ("CLOSE") );
display.setCursor (10,0);
display.print (F ("Temp high !!!"));
Serial.println ("CLOSE");
Serial.println ("Temp high !!!");
}
display.display ();
delay (3000);
Serial.println ("Wait RFID .... ");
res =1;
break;
по умолчанию:
break;
}
}

Шаг 5. Подключение платы Wi-Fi Arduino MKR 1000 к Интернету

Чтобы подключить Arduino MKR1000 к сети Wi-Fi, мы будем использовать библиотеку WiFi101, которую мы установим с помощью диспетчера библиотек (Sketch  Include library  Manager Libraries).

Скачайте скетч подключения платы Wi-Fi Arduino MK R 1000 к необходимой точке доступа. Загрузите пример из connectWithWPA.ino библиотеки на доску, введя данные для вашей точки доступа Wi-Fi во вкладке:

  #define SECRET_SID "my_D Link" 
#define SECRET_PASS "********"

После загрузки скетча откройте монитор последовательного порта, где вы сможете наблюдать за процессом подключения платы Wi-Fi Arduino MKR1000 к точке доступа.

Если соединение установлено, продолжайте.

Шаг 6. Создание базы данных сотрудников на сайте компании и базы для сбора суточных показаний температуры на входе

Создание базы данных на хостинге (MySQL) и двух таблиц в ней:

  • пользователи - данные сотрудников и их uid;
  • темп - для сбора данных о температуре тела на входе.

Сейчас на хостинге мы создаем 2 скрипта для обработки данных, отправленных Arduino MKR 1000 WiFi. Скрипт get_uid.php проверяет идентификатор в базе данных и возвращает в ответе:

# нет - если uid отсутствует в базе

# да; <имя> - если uid есть в базе

Содержимое скрипта get_uid.php

   // 
$ location ="localhost";
$ user ="************";
$ pass ="************";
$ db_name ="************";
// подключаем базу данных
if (! $ db =mysqli_connect ($ location, $ user, $ pass, $ db_name))
{echo "ошибка подключения";}
else
{;}
$ query0 ="ВЫБРАТЬ * ОТ пользователей WHERE uid ='". $ _ GET [' uid ']. "'";
$ rez0 =mysqli_query ($ db, $ query0);
если (mysqli_num_rows ($ rez0)> 0) {
$ row0 =mysqli_fetch_assoc ($ rez0);
echo "#yes". ";". $ row0 [name];
}
else {
echo "#no";
}
?>

Вы можете протестировать скрипт, отправив запросы из браузера:

Скрипт get_temp.php отправляет температуру сотрудника в базу данных

Содержимое скрипта get_temp.php

   // 
$ location ="localhost";
$ user ="************";
$ pass ="************";
$ db_name ="************";
// подключаем базу данных
if (! $ db =mysqli_connect ($ location, $ user, $ pass, $ db_name))
{echo "ошибка подключения";}
else
{;}
$ query0 ="ВЫБРАТЬ * ОТ пользователей WHERE uid ='". $ _ GET [' uid ']. "'";
$ rez0 =mysqli_query ($ db, $ query0);
если (mysqli_num_rows ($ rez0)> 0) {
$ row0 =mysqli_fetch_assoc ($ rez0);
$ query1 ="INSERT INTO temp SET
id_user ='". $ row0 [' id ' ]. "',
temp ='". $ _ GET ['temp']. "',
day ='". date ('Ymd H:i:s'). "'";
mysqli_query ($ db, $ query1);
echo "#yes";
}
else {
echo "#no";
}
?>

Вы можете протестировать скрипт, отправив запросы из браузера:

ШАГ 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;
беззнаковые длинные предыдущие;
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 (" Connection:close ");
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) {
response [x] =s;
x ++;
}
Serial.write (s);
}
}
while ((миллис ( ) - previos) <5000);
if (response [0] ='#') {
ret =command (response);
}
Serial.println (response);
//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 ("Host:freeparkovka.ru");
client.println ("User-Agent:ArduinoWiFi / 1.1");
client.println ("Connection:close");
client.println ();
Serial. println (ответ);
задержка (10); }
else {
// нет соединения
Serial.println ("соединение не удалось");
}
}

ШАГ 8. Добавление реле для включения / выключения входа

Добавление реле для включения / отключения входа на предприятие в зависимости от значения температуры. Схема подключения:

И добавьте в код включение / выключение реле для открытия или закрытия входа в зависимости от данных температуры.

  if (temp <37.5) {// ОТКРЫТЬ 
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 ("Temp high !!!"));
Serial.println ("CLOSE");
Serial .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 [] ="********";
// имя адреса
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);
// реле
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 ("подключить Wi-Fi ....");
display.setCursor (10,10);
display.print (F ("Подключить WiFi"));
display.display ();
// проверяем наличие щита:
if (WiFi.status () ==WL_NO_SHIELD) {
Serial.println ("WiFi Shield отсутствует");
// не продолжать:
while (true);
}
// пытаемся подключиться в сеть Wi-Fi:
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) {
case 0://
send_display ("Wait RFID ....");
res =1;
break;
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; я <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);
Serial .println ("отправить uid на сервер ....");
}
mfrc522.PICC_HaltA ();
mfrc522.PCD_StopCrypto1 ();
}
display .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 ("error 404"));
}
display.display ();
delay (3000);
break;
case 3:// ожидание измерения температуры
if (millis () - millis3 <10000) {
sen d_display ("Wait temp ....");
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;
case 4:/ / отправка данных о температуре на сервер
send_display ("Wait temp ....");
send_temp_to_server ();
res =5;
delay (2000);
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");
digitalWrite (pinRelay, HIGH);
}
else {// ЗАКРЫТЬ
display.print (F ("CLOSE"));
display.setCursor (10,0);
display. print (F («Высокая температура !!!»));
Serial.println («ЗАКРЫТЬ»);
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 ());
// выводим IP-адрес вашего WiFi-экрана:
IPAddress ip =WiFi.localIP ();
Serial.print ( "IP Address:");
Serial.println (ip);
// выводим мощность полученного сигнала:
long rssi =WiFi.RSSI ();
Serial.print ("мощность сигнала (RSSI):");
Serial.print (rssi);
Serial.println ("dBm");
}
//
int send_uid_to_server () {
int ret =3;
беззнаковые длинные предыдущие;
int x =0; int f =0;
char s;
client.stop ();
if (client.connect (server, 80)) {
//// отправка данных на сервер
// формирование строки
// uid на строку
Строка str ="/ firm / get_uid.php? uid =";
for (byte i =0; я <4; i ++) {
str + =String (cardUID [i], HEX);
}
Serial.print ("str ="); Serial.println (str);
клиент .println ("GET" + str + "HTTP / 1.1");
client.println ("Host:freeparkovka.ru");
client.println ("User-Agent:ArduinoWiFi / 1.1");
client.println ("Connection:close");
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) {
response [x] =s;
x ++;
}
Serial.write (s);
}
}
while ((миллис () - previos) <5000);
if (response [0] ='#') {
ret =command (response);
}
Serial.println (response );
//client.stop ();
return ret;
}
else {
// нет соединения
Serial.println ("connection не удалось ");
//client.stop ();
return 3;
}
}
//
void 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 (" Host:freeparkovka.ru ");
client.println ("User-Agent:ArduinoWiFi / 1.1");
client.println ("Connection:close");
client.println ();
Serial.println ( ответ);
задержка (10); }
else {
// нет соединения
Serial.println ("connection failed");
}
}
// проверка команд, пришедших из сервер
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 ();
}

ШАГ 9. Страница для удаленного просмотра данных о температуре сотрудников

Чтобы просмотреть данные, отправленные на сервер, откройте страницу сайта. Содержимое скрипта для вывода файла подкачки view_temp.php

   // 
$ location ="localhost";
$ user ="********";
$ pass ="********";
$ db_name ="********";
// подключаем базу данных
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;
?>


Код

  • 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(); display.display (); // MLX90614 mlx.begin(); // SPI SPI.begin(); // MFRC522 mfrc522.PCD_Init(); Serial.println("connect WiFi ...."); display.setCursor(10,10); display.print(F("Connect WiFi")); display.display (); // 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")); display.display (); 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; display.display (); задержка (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")); display.display (); 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 Address:"); Serial.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 ("Соединение:закрыть"); 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) { 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(); return 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 ("Соединение:закрыть"); client.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("start"); 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(); display.display (); // 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")); display.display (); // 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(); display.display (); // MLX90614 mlx.begin(); // SPI SPI.begin(); // MFRC522 mfrc522.PCD_Init(); Serial.println("start"); 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")); display.display (); 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. Датчик температуры Raspberry Pi
  7. Контроль заполнения бассейна
  8. Ошибки при охлаждении корпусов промышленных панелей управления
  9. Контроль и влияние температуры в процессе литья под давлением
  10. Контроль температуры на стройплощадке — руководство по аренде для строителей