Arduino + PIR + RFID + Relay

arduino-rfid_rc522-pir_hc-sr501-1ch_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

Arduino Uno + PIR Sensor

hc-sr501-labelled-althc-sr501

PIR Motion Sensor Module (HC-SR501)

จำนวน 1 ตัว

ตรวจจับความเคลื่อนไหว
Color: White + Green
Dimension: 3.2cm x 2.4cm x 1.8cm (approx)
Infrared sensor with control circuit board
The sensitivity and holding time can be adjusted
Working Voltage Range: DC 4.5V- 20V
Current drain:<60uA
Voltage Output: High/Low level signal:3.3V TTL output
Detection distance: 3–7M(can be adjusted)
Detection range: <140°
Delay time: 5-200S(can be adjusted, default 5s +-3%)
Blockade time: 2.5 S (default)
Trigger: L: Non-repeatable trigger H: Repeat Trigger (default)
Work temperature:-20-+80°C
Trigger Method: L unrepeatable trigger / H repeatable trigger

arduino-pir

 

int ledPin= 13;
int inputPin= 3;

void setup(){
pinMode(ledPin, OUTPUT);
pinMode(inputPin, INPUT);
}

void loop(){
int value= digitalRead(inputPin);

if (value == HIGH)
{
digitalWrite(ledPin, HIGH);
delay(1000) ;
}

else
{
digitalWrite(ledPin, LOW);
}
}

 

ที่มา:https://www.arduinoall.com/product/29/pir-hc-sr501-%E0%B9%80%E0%B8%8B%E0%B8%99%E0%B9%80%E0%B8%8B%E0%B8%AD%E0%B8%A3%E0%B9%8C%E0%B8%95%E0%B8%A3%E0%B8%A7%E0%B8%88%E0%B8%88%E0%B8%B1%E0%B8%9A%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B9%80%E0%B8%84%E0%B8%A5%E0%B8%B7%E0%B9%88%E0%B8%AD%E0%B8%99%E0%B9%84%E0%B8%AB%E0%B8%A7-motion-sensor-module-hc-sr501

esp8266 Deep Sleep Max

esp8266 Deep sleep โดยต่อ ขา GPIO16 (D0) ไปขา Reset

node.dsleep(15 * 60 * 1000000)

โดย 1,000,000 ไมโครวินาที (microseconds) = 1 วินาที (second) โดยตัวอย่างจะ deep sleep ได้ 15 นาที

การตั้งค่า  โดยทฤษฎี จะสามารถทำ deep sleep ได้  4,294,967,295, which is about 71 minutes แต่

เนื่องจากข้อจำกัด จะทำได้แค่ 35 นาที (2,100,000 milliseconds)