RFIDパススルーでの従業員の非接触温度制御
コンポーネントと消耗品
> ![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
アプリとオンラインサービス
> ![]() |
| |||
|
このプロジェクトについて
従業員がRFIDタグを使用して企業にアクセスする場合、非接触赤外線温度計を使用して従業員の体温をさらに測定します。温度が上昇すると(COVID19の症状の1つ)、アクセスがブロックされます。さらに、すべてのデータ(RFIDによる従業員の識別)は、会社のWebサイトにアクセスし、データの到着時刻と体温(UID RFIDの従業員の識別)タグを監視します。
<図>
<図>

温度制御付きRFIDを使用してオフィスに入る(テスト)
クラウドから送信されたデータの表示
<図>
温度制御付きRFIDを使用してオフィスに入る
video2
ステップ1.ソフトウェアのインストール
コントローラとしてArduinoMKR 1000WiFiボードを使用します。 ArduinoIDEでプログラミングします。デフォルトでは、ArduinoIDEはAVRボード用にのみ構成されています。 Arduino MK Wi-Fi 1000プラットフォームを使用するには、カードマネージャーでArduino SAMD(32ビットARM Cortex-M0 +)のサポートを追加する必要があります。ボードマネージャー内(ツール>ボード>ボードマネージャー )、Arduino SAMDを見つけて、[インストール]ボタンをクリックします。
<図>
Arduino IDEにソフトウェアをインストールした後、ツールボードメニューは、MKR 1000WiFiボードを含むArduinoZeroおよびMKRボードをサポートします。 USBケーブルを使用してMKR1000カードをコンピューターに接続します。ドライバーは自動的にインストールされます。
<図>
ステップ2.IR温度センサーMLX90614をArduinoMKR 1000 WiFiボードに接続する
MLX90614は、非接触温度測定用の赤外線センサーです。摂氏-70度から380度の範囲の温度を約0.5°Cの精度で測定できます。 MLX90614DAAの在庫がありました
<図>
センサーはI2Cプロトコルを使用します。連絡先を割り当てる
<図>
Arduino MKRWiFiボードへの接続図
<図>

プログラミングには、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 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);
}
そして、シリアルポートモニターを開きます。周囲温度と対象物温度は3秒ごとにシリアルポートに出力されます
<図>
ステップ3.OLEDディスプレイをArduinoMKR 1000WiFiボードに接続する
このプロジェクトでは、SSD1306チップに必要なバインディングを備えたモジュール形式の12x32モノクロOLEDディスプレイを使用しています。これらのモジュールはI2Cインターフェースで動作します。 Arduinoボードへの接続図
<図>
プログラミング時には、AdafruitSSD1306ライブラリを使用します。温度出力のスケッチをディスプレイにロードします。 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
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();
disp lay.setCursor(10,20);
display.print(temp);
display.print(F( "* C"));
display.display();
//
millis1 =millis();
}
}
<図> 
ステップ4.rc522RFIDリーダーモジュールをArduinoMKR 1000WiFiボードに接続する
多種多様なRFIDタグがあります。タグはアクティブおよびパッシブです(内蔵電源なしで、リーダーからの信号によってアンテナに誘導された電流によって電力が供給されます)。タグはさまざまな周波数で機能します:LF(125〜134 kHz)、HF(13.56 MHz)、UHF(860〜960 MHz)。タグから情報を読み取り、タグにデータを書き込むデバイスは、リーダーと呼ばれます。 Arduinoプロジェクトでは、RFID-RC522モジュールがリーダーとして非常に頻繁に使用されます。このモジュールは、NSP社のMFRC522チップで作成されており、RAタグ(13.56 MHzの周波数)で動作します。
<図>
SPIプロトコルを介したArduinoMCF 1000WiFiカードへの接続
<図>
RFIDカードのUID検出、温度測定、およびシリアルポート(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){
ケース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();
break;
ケース2://リクエストデータベースからUIDサーバーへ
ブレーク;
ケース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;
ケース4://サーバーに温度データを送信する
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){
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( "WaitRFID。 ... ");
res =1;
break;
default:
break; }
}
<図> 

ステップ5.Arduino MKR 1000WiFiボードをインターネットに接続する
Arduino MKR1000をWi-Fiネットワークに接続するには、WiFi101ライブラリを使用します。WiFi101ライブラリは、ライブラリマネージャーを使用してインストールします(スケッチライブラリを含めるマネージャーライブラリ)。
<図>
Arduino MK R 1000Wi-Fiボードを必要なアクセスポイントに接続するスケッチをダウンロードします。 connectWithWPA.ino から例をアップロードします タブにWiFiホットスポットのデータを入力して、ライブラリをボードに追加します:
#define SECRET_SID "my_D Link"
#define SECRET_PASS "********"
スケッチをダウンロードしたら、シリアルポートモニターを開きます。ここで、Arduino MKR1000Wi-Fiボードをアクセスポイントに接続するプロセスを見ることができます。
<図>
接続に成功したら、先に進んでください。
ステップ6.会社のWebサイトに従業員のデータベースを作成し、入り口で毎日の気温の測定値を収集するためのデータベースを作成します
ホスティング(MySQL)とその中の2つのテーブルでデータベースを作成する:
- ユーザー -従業員データとそのuid;
- 臨時雇用者 -入力で測定された体温のデータを収集するため。


ホスティングでは、Arduino MKR 1000WiFiによって送信されたデータを処理するための2つのスクリプトを作成します。スクリプト get_uid.php データベース内のIDをチェックし、応答で返します:
• #no –uidがデータベースにない場合
• #yes; <名前> -uidがデータベースにある場合
スクリプトの内容 get_uid.php
<?php
//
$ location ="localhost";
$ user ="************";
$ pass ="************";
$ db_name ="************";
//接続データベース
if(!$ db =mysqli_connect($ location、$ user、$ pass、$ db_name))
{echo "connect error";}
else
{;}
$ query0 ="SELECT * FROM users WHERE uid ='"。$ _ GET [' uid ']。 "'";
$ rez0 =mysqli_query($ db、$ query0);
if (mysqli_num_rows($ rez0)> 0){
$ row0 =mysqli_fetch_assoc($ rez0);
echo "#yes"。 ";"。$ row0 [name];
}
else {
echo "#no";
}
?>
ブラウザからリクエストを送信して、スクリプトをテストできます:
<図>


スクリプト get_temp.php 従業員の体温をデータベースに送信します
スクリプトの内容 get_temp.php
<?php
//
$ location ="localhost";
$ user ="************";
$ pass ="************";
$ db_name ="************";
//接続データベース
if(!$ db =mysqli_connect($ location、$ user、$ pass、$ db_name))
{echo "connect error";}
else
{;}
$ query0 ="SELECT * FROM users WHERE uid ='"。$ _ GET [' uid ']。 "'";
$ rez0 =mysqli_query($ db、$ query0);
if (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 1000WiFiから会社のWebサイトにデータを送信する
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(" 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;
x ++;
}
Serial.write(s);
}
}
while((millis()-previos)<5000);
if(response [0] ='#'){
ret =command(response);
}
Serial.println(response);
//client.stop();
return ret;
}
else {
//接続なし
Serial.println( "接続に失敗しました");
//client.stop();
戻り値3;
}
}
関数 send_temp_to_server()
void send_temp_to_server(){
client.stop();
if(client.connect(server、80)){
////サーバーにデータを送信する
//文字列の形成
//行ごとのuid
文字列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();
シリアル。 println(response);
delay(10); }
else {
//接続なし
Serial.println( "接続に失敗しました");
}
}
ステップ8.入力を有効/無効にするリレーを追加する
温度値に応じて、企業への入り口を有効/無効にするリレーを追加します。接続図:
<図>
そして、温度データに応じて、リレーが入力を開いたり閉じたりすることを有効/無効にするコードに追加します。
if(temp <37.5){// OPEN
display.setCursor(10,0);
display.print(F( "OPEN"));
シリアル.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);
}
そして、スケッチコード全体((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);
// display
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( "connect WiFi ....");
display.setCursor(10,10);
display.print(F( "Connect WiFi"));
display.display();
//シールドの存在を確認します:
if(WiFi.status()==WL_NO_SHIELD){
Serial.println( "WiFiシールドが存在しません");
//続行しない:
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( "Wait RFID ....");
}
void loop(){
switch(res){
case 0://
send_display( "Wait RFID ....");
res =1;
break;
ケース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();
delay(2000);
Serial .println( "send uid to server ....");
}
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
display .display();
break;
ケース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();
delay(3000);
break;
/>ケース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;
delay(2000);
}
}
else {
res =0;
}
break;
ケース4://サーバーに温度データを送信する
send_display( "Wait temp...。 ");
s end_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 {// 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();
delay(3000 );
Serial.println( "Wait RFID ....");
res =0;
break;
デフォルト:
break;
}
}
//
void printWiFiStatus(){
//印刷接続しているネットワークのSSID:
Serial.print( "SSID:");
Serial.println(WiFi.SSID());
// WiFiシールドを印刷しますIPアドレス:
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;
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=";
for(byte i =0; i <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){
// getサーバーからのデータ
s =client.read();
if(s =='#')
f =1;
if(f ==1){
response [x] =s;
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)){
////サーバーにデータを送信する
//文字列を形成する
// 1行あたりの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(応答);
delay(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
<?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。=""。$ i。 " ";
$ rez2 =mysqli_query($ db、 "SELECT name FROM users WHERE id ="。$ row1 ['id_user']。 "");
$ row2 =mysqli_fetch_assoc($ rez2);
$ content1。=""。$ row2 ['name']。 " ";
$ content1。=""。mb_substr ($ row1 ['day']、10,9)。 " ";
if($ row1 ['temp']> 37.5)
$ content1。=" "。$ row1 ['temp']。" ";
else
$ content1。=" "。$ row1 ['temp' ]。 " ";
$ content1。=" ";
$ i ++;
}
$ content1。="
";
echo $ content1;
?>
<図> 
コード
- Arduinoをスケッチする
- ステップ2.IR温度センサーMLX90614をArduinoMKR 1000 WiFiボードに接続する
- ステップ3.OLEDディスプレイをArduinoMKR 1000WiFiボードに接続する
- ステップ4.rc522RFIDリーダーモジュールをArduinoMKR 1000WiFiボードに接続する
- ステップ6.会社のWebサイトに従業員のデータベースを作成し、dailを収集するためのデータベースを作成します
- ステップ6.会社のWebサイトに従業員のデータベースを作成し、dailを収集するためのデータベースを作成します
- ステップ9.従業員の体温データをリモート表示するためのページ
Arduino Arduino をスケッチします
// #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 [] ="marina11"; //名前アドレスcharserver [] ="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); // 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( "Connect WiFi")); display.display(); //シールドの存在を確認します:if(WiFi.status()==WL_NO_SHIELD){Serial.println( "WiFiシールドが存在しません"); //続行しない:while(true); } // WiFiネットワークへの接続を試みます:while(status!=WL_CONNECTED){Serial.print( "WPA SSIDに接続しようとしています:"); Serial.println(ssid); // WPA / WPA2ネットワークに接続します:status =WiFi.begin(ssid、pass); //接続を10秒待ちます: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;壊す;ケース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(); delay(2000); Serial.println( "uidをサーバーに送信...."); } mfrc522.PICC_HaltA(); mfrc522.PCD_StopCrypto1(); } display.display();壊す;ケース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"));ミリス3 =ミリス(); } else if(rr ==2){res =0; display.setCursor(10,0); display.print(F( "incorrect")); } else {res =0; display.setCursor(10,0); display.print(F( "エラー404")); } display.display(); delay(3000);壊す;ケース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; delay(2000); }} else {res =0; } 壊す;ケース4:// send_display( "Wait temp ...."); send_temp_to_server(); res =5; delay(2000);壊す;ケース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(); delay(3000); Serial.println( "RFIDを待つ...."); res =0;壊す;デフォルト:ブレーク; }} // 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;署名されていない長い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( "ホスト: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){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(); retを返します。 } else {// Serial.println( "接続に失敗しました"); //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( "ホスト:freeparkovka.ru"); client.println( "ユーザーエージェント:ArduinoWiFi / 1.1"); client.println( "接続:閉じる"); client.println(); Serial.println(応答); delay(10); //client.stop(); } else {// Serial.println( "接続に失敗しました"); //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();}
ステップ2.IR温度センサーMLX90614をArduinoMKR 1000 WiFiボードに接続する Arduino
#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);}
ステップ3.OLEDディスプレイをArduinoMKR 1000WiFiボードに接続する Arduino
#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(); // 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.rc522RFIDリーダーモジュールをArduinoMKR 1000WiFiボードに接続する Arduino
// #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){ケース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();壊す;ケース2:// UIDブレーク;ケース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; } 壊す;ケース4://ブレーク;ケース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(); delay(3000); Serial.println( "RFIDを待つ...."); res =1;壊す;デフォルト:ブレーク; }}
ステップ6.会社のWebサイトに従業員のデータベースを作成し、dail PHP を収集するためのデータベースを作成します。
get_uid.phpはデータベース内のIDをチェックし、応答で返します:<?php //ПараметрыMySQL$ location ="localhost"; $ user ="bhx20666_parking"; $ pass ="parking12345678"; $ db_name ="bhx20666_firma"; // connect dbif(!$ db =mysqli_connect($ location、$ user、$ pass、$ db_name)){echo "connect error";} else {;} $ query0 ="SELECT * FROM users WHERE uid ='"。$ _ GET [' uid ']。"' "; $ rez0 =mysqli_query($ db、$ query0); if(mysqli_num_rows($ rez0)> 0){$ row0 =mysqli_fetch_assoc($ rez0); echo "#yes"。 ";"。$ row0 ['name']。 "$";} else {echo "#no"。 "$";}?>
ステップ6.会社のWebサイトに従業員のデータベースを作成し、dail PHP を収集するためのデータベースを作成します。
get_temp.phpは、従業員の温度をデータベースに送信します<?php //ПараметрыMySQL$ location ="localhost"; $ user ="bhx20666_parking"; $ pass ="parking12345678"; $ db_name ="bhx20666_firma"; // connect dbif(!$ db =mysqli_connect($ location、$ user、$ pass、$ db_name)){echo "connect error";} else {;} $ query0 ="SELECT * FROM users WHERE uid ='"。$ _ GET ['uid']。 "'"; $ rez0 =mysqli_query($ db、$ query0); if(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 :は')。"' "; mysqli_query($ db、$ query1); echo "#yes";} else {echo "#no";}?>
ステップ9.従業員の体温データをリモート表示するためのページ PHP
view_temp.php<?php // $ location ="localhost"; $ user ="**********"; $ pass ="**********"; $ db_name ="**********"; // connect dbif(!$ 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。="
"。$ i。 " | "; $ rez2 =mysqli_query($ db、 "SELECT name FROM users WHERE id ="。$ row1 ['id_user']。 ""); $ row2 =mysqli_fetch_assoc($ rez2); $ content1。=""。$ row2 ['name']。 " | "; $ content1。=""。mb_substr($ row1 ['day']、10,9)。 " | "; if($ row1 ['temp']> 37.5)$ content1。=""。$ row1 ['temp']。 " | "; else $ content1。=""。$ row1 ['temp']。 " | "; $ content1。="
回路図
24_pAT1JQdrD1.fzz 05_ZnJZPiMYsB.fzz 08_RyXONO1VtK.fzz 12_jyWaOQUelW.fzz 製造プロセス