Skip to content

Commit b882b8c

Browse files
authored
Merge pull request #2 from mikebionic/arduino_codes
Arduino codes readme update
2 parents 6250eff + 7ddc1f2 commit b882b8c

File tree

3 files changed

+275
-0
lines changed

3 files changed

+275
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ If you have a project to share, feel free to create a branch and send me a merge
1313
- Python Flask robo-cam control
1414
- Intravenous usage with SIM900 module
1515
- Fingerprint TTL and Adafruit based Door lock security system
16+
- RFID Tag based door lock & logger system
1617
- Height measurer with ultrasonic sensor
1718
- Automated Incubator system code
1819
- Magic mirror widget using Python Flask

gorjaw-projects/rfid_door.cpp

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
#include "SPI.h"
2+
#include "MFRC522.h"
3+
#define SS_PIN 10
4+
#define RST_PIN 9
5+
6+
int button_state = 0;
7+
int buttonPin = 7;
8+
int ledIndicator = 2;
9+
int resetPin = 5;
10+
11+
int btn_state_pin = 3;
12+
int wifi_serial_pin = 4;
13+
int rfid_validation_pin = 6;
14+
15+
16+
int doorDelay = 500;
17+
long reset_timeout = 2400000;
18+
19+
20+
MFRC522 rfid(SS_PIN, RST_PIN);
21+
MFRC522::MIFARE_Key key;
22+
23+
int qtyOfCards = 15;
24+
String registeredCards[] = {
25+
"46:0C:C8:0F", //gulbahar
26+
"26:B8:3C:1E", //mike
27+
"A6:88:E8:21", //selbi ilmyradova
28+
"23:BB:97:79", //dowletyar
29+
"C6:1D:D6:21", //Merdan
30+
"06:75:BC:1E", //dowlpack
31+
"86:FA:DF:21", //mati
32+
"6A:2B:5C:9C", //mekan
33+
"66:E5:D6:21", //dayanch
34+
"8A:4B:81:7F", //keychain (line)
35+
"C9:CE:B1:C2", //keychain
36+
"56:9B:CC:0F", // merdan (green cutted)
37+
"A6:5C:37:11", // merdan (blue bus card)
38+
"80:86:80:74", // Gelneje (cleaner)
39+
"96:D2:CB:0F", // Bagtyyar, berkarar LANY
40+
41+
};
42+
43+
44+
void setup() {
45+
Serial.begin(115200);
46+
SPI.begin();
47+
rfid.PCD_Init();
48+
49+
pinMode (buttonPin,INPUT_PULLUP);
50+
pinMode (ledIndicator,OUTPUT);
51+
digitalWrite(resetPin,1);
52+
pinMode (resetPin, OUTPUT);
53+
digitalWrite(ledIndicator, 0);
54+
55+
pinMode (btn_state_pin, OUTPUT);
56+
digitalWrite(btn_state_pin, 0);
57+
pinMode (wifi_serial_pin, OUTPUT);
58+
digitalWrite(wifi_serial_pin, 0);
59+
pinMode (rfid_validation_pin, OUTPUT);
60+
digitalWrite(rfid_validation_pin, 0);
61+
}
62+
63+
64+
void loop() {
65+
buttonModule();
66+
rfidModule();
67+
wifiSerialModule();
68+
autoResetTimeout();
69+
}
70+
71+
72+
void openDoor(){
73+
digitalWrite(ledIndicator, 1);
74+
delay(doorDelay);
75+
digitalWrite(ledIndicator, 0);
76+
delay(500); // for electrical security
77+
}
78+
79+
80+
void validateCard(String ID_key){
81+
for (int i = 0; i < qtyOfCards; i++){
82+
if (ID_key.indexOf(registeredCards[i]) >= 0){
83+
84+
Serial.println("card validated " + millis());
85+
digitalWrite(rfid_validation_pin, 1);
86+
openDoor();
87+
Serial.println(registeredCards[i]);
88+
}
89+
}
90+
}
91+
92+
93+
void buttonModule(){
94+
button_state = digitalRead(buttonPin);
95+
if (button_state == 0){
96+
Serial.println("button clicked " + millis());
97+
98+
digitalWrite(btn_state_pin, 1);
99+
openDoor();
100+
}
101+
}
102+
103+
104+
void rfidModule(){
105+
if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial())
106+
return;
107+
108+
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
109+
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
110+
piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
111+
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
112+
// Serial.println(F("Your tag is not of type MIFARE Classic."));
113+
return;
114+
}
115+
116+
String ID_key = "";
117+
for (byte i = 0; i < 4; i++) {
118+
ID_key +=
119+
(rfid.uid.uidByte[i] < 0x10 ? "0" : "") +
120+
String(rfid.uid.uidByte[i], HEX) +
121+
(i!=3 ? ":" : "");
122+
}
123+
ID_key.toUpperCase();
124+
125+
// Serial.print("Card key: ");
126+
Serial.println(ID_key);
127+
128+
validateCard(ID_key);
129+
130+
delay(1000);
131+
132+
rfid.PICC_HaltA();
133+
rfid.PCD_StopCrypto1();
134+
}
135+
136+
void wifiSerialModule(){
137+
String stream="";
138+
if (Serial.available()!=0){
139+
stream = Serial.readStringUntil('\n');
140+
stream.trim();
141+
if (stream.length()>0){
142+
if (stream == "open_door"){
143+
digitalWrite(wifi_serial_pin, 1);
144+
openDoor();
145+
}
146+
}
147+
}
148+
}
149+
150+
151+
void(* resetFunc) (void) = 0;
152+
153+
void autoResetTimeout(){
154+
if (millis() >= reset_timeout){
155+
digitalWrite(resetPin, 0);
156+
Serial.println("reset called " + millis());
157+
resetFunc();
158+
}
159+
}

gorjaw-projects/sensorSlave.cpp

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
#include <dht.h>
2+
int dhtSensor = 5;
3+
dht = DHT;
4+
long x=millis();
5+
// gas sensor
6+
int gasSensor = A0;
7+
int gasThreshold = 400;
8+
int waterSensor = 15; // 15 or A1
9+
// indicators and states
10+
int buzzer = 11;
11+
int greenIndicator = 12;
12+
int redIndicator = 13;
13+
// relays and throttles
14+
int wentilationFan = 6;
15+
int heaterRelay = 7;
16+
int windowRelay = 8;
17+
int gasThrottle = 9;
18+
int waterThrottle = 10;
19+
20+
// treshold of temperature
21+
int minTempTresh = 10;
22+
int maxTempTresh = 25;
23+
24+
String stream;
25+
SoftwareSerial master (2,3);
26+
27+
void setup() {
28+
pinMode(gasSensor,INPUT);
29+
pinMode(waterSensor,INPUT_PULLUP);
30+
31+
pinMode(greenIndicator, OUTPUT);
32+
pinMode(redIndicator, OUTPUT);
33+
pinMode(windowRelay, OUTPUT);
34+
pinMode(heaterRelay, OUTPUT);
35+
pinMode(gasThrottle, OUTPUT);
36+
pinMode(waterThrottle, OUTPUT);
37+
pinMode(wentilationFan, OUTPUT);
38+
// stabilize the relays and outputs
39+
digitalWrite(gasThrottle,0);
40+
digitalWrite(waterThrottle,0);
41+
digitalWrite(wentilationFan,0);
42+
digitalWrite(heaterRelay,0);
43+
digitalWrite(windowRelay,0);
44+
45+
Serial.begin(9600);
46+
master.begin(9600);
47+
}
48+
49+
void loop() {
50+
if (master.available()){
51+
stream = master.readStringUntil('\n');
52+
stream.trim();
53+
if (stream.length()>0){
54+
if (stream == "1ach"){
55+
Serial.println("planZat")
56+
}
57+
}
58+
}
59+
gas();
60+
temp();
61+
heater();
62+
water();
63+
}
64+
65+
void gas(){
66+
int analogSensor = analogRead(gasSensor);
67+
if (analogSensor>gasThreshold){
68+
digitalWrite(greenIndicator,0);
69+
digitalWrite(redIndicator,1);
70+
digitalWrite(gasThrottle,1);
71+
digitalWrite(wentilationFan,1);
72+
tone(buzzer,1000,200);
73+
}
74+
else{
75+
digitalWrite(greenIndicator,1);
76+
digitalWrite(redIndicator,0);
77+
digitalWrite(gasThrottle,0);
78+
digitalWrite(wentilationFan,0);
79+
noTone(buzzer);
80+
}
81+
}
82+
83+
void temp(){
84+
if((x+4000)<millis()){
85+
float readData = DHT.read11(dhtSensor);
86+
unsigned int t=DHT.temperature;
87+
unsigned int h=DHT.humidity;
88+
Serial.println(t);
89+
x=millis();
90+
}
91+
}
92+
93+
void heater(){
94+
if(DHT.temperature<minTempTresh){
95+
// digitalWrite(windowRelay,1);
96+
digitalWrite(heaterRelay,1);
97+
}
98+
else if(DHT.temperature>maxTempTresh){
99+
digitalWrite(heaterRelay,0);
100+
// digitalWrite(windowRelay,0)
101+
}
102+
}
103+
104+
void water(){
105+
int waterState = digitalRead(waterSensor)
106+
if(waterState==0){
107+
// digitalWrite(windowRelay,1);
108+
digitalWrite(waterThrottle,1);
109+
tone(buzzer,700,200);
110+
}
111+
else{
112+
digitalWrite(waterThrottle,0);
113+
// digitalWrite(windowRelay,0)
114+
}
115+
}

0 commit comments

Comments
 (0)