Arduino + PIR + RFID + Relay
อุปกรณ์
- Arduino UNO R3 SMD
- PIR Pyroelectric Infrared PIR Motion Sensor HC-SR501
- RFID 13.56 MHz RC522 และ Tag
- 1 Ch Relay 5V
การทำงาน อ่านความเคลื่อนไหวจาก PIR แล้ว มาอ่านค่า Tag จาก RFID หาก ตรงกัน ให้ Relay ทำงาน
ถ้าเอา tag ผ่าน RFID โดยไม่มีการเคลื่อนไหว จะไม่ทำงาน
ระยะ PIR
#include <SPI.h>
#include <RFID.h>
// ส่วนของ rfid
#define SS_PIN 10
#define RST_PIN 9
RFID rfid(SS_PIN,RST_PIN);
int serNum[5];
int cards[][5] = {
{22,227,22,203,40}
};
bool access = false;
int ledPin1= 7;
int rfidPPin1= 6;
int inputPin= 3;
int relay=2;
void setup(){
Serial.begin(9600);
pinMode(ledPin1, OUTPUT);
pinMode(inputPin, INPUT);
pinMode(relay, OUTPUT);
SPI.begin();
rfid.init();
}
void loop(){
int value= digitalRead(inputPin);
if (value == HIGH)
{
digitalWrite(ledPin1, HIGH);
Serial.println(” LED ON”);
//delay(100) ;
}else
{
digitalWrite(ledPin1, LOW);
Serial.println(” LED OFF”);
}
// rfid.isCard();
//
// while(digitalRead(7) == HIGH) ****** I try to use with while and if but the loop continue to run without the input signal condition even when the input wire is disconnected.
if(rfid.isCard()&& (value == HIGH)){
// if(rfid.isCard()){
if(rfid.readCardSerial()){
Serial.print(rfid.serNum[0]);
Serial.print(” “);
Serial.print(rfid.serNum[1]);
Serial.print(” “);
Serial.print(rfid.serNum[2]);
Serial.print(” “);
Serial.print(rfid.serNum[3]);
Serial.print(” “);
Serial.print(rfid.serNum[4]);
Serial.println(“”);
for(int x = 0; x < sizeof(cards); x++) {
for(int i = 0; i < sizeof(rfid.serNum); i++ ) {
if(rfid.serNum[i] != cards[x][i]) {
access = false;
break;
} else {
access = true;
}
}
if(access) break;
}
}
if(access);
Serial.println(“Get In—>”);
// while(digitalRead(7) == HIGH);
digitalWrite(relay, HIGH);
delay(500);
}else {
Serial.println(“You Blocked(-)”);
digitalWrite(relay, LOW);
delay(100);
}
rfid.halt();
}
ที่มา : http://forum.arduino.cc/index.php?topic=407081.0 แก้ไขโดย PualS