Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ If you have a project to share, feel free to create a branch and send me a merge
- Python Flask robo-cam control
- Intravenous usage with SIM900 module
- Fingerprint TTL and Adafruit based Door lock security system
- RFID Tag based door lock & logger system
- Height measurer with ultrasonic sensor
- Automated Incubator system code
- Magic mirror widget using Python Flask
Expand Down
159 changes: 159 additions & 0 deletions gorjaw-projects/rfid_door.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
#include "SPI.h"
#include "MFRC522.h"
#define SS_PIN 10
#define RST_PIN 9

int button_state = 0;
int buttonPin = 7;
int ledIndicator = 2;
int resetPin = 5;

int btn_state_pin = 3;
int wifi_serial_pin = 4;
int rfid_validation_pin = 6;


int doorDelay = 500;
long reset_timeout = 2400000;


MFRC522 rfid(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;

int qtyOfCards = 15;
String registeredCards[] = {
"46:0C:C8:0F", //gulbahar
"26:B8:3C:1E", //mike
"A6:88:E8:21", //selbi ilmyradova
"23:BB:97:79", //dowletyar
"C6:1D:D6:21", //Merdan
"06:75:BC:1E", //dowlpack
"86:FA:DF:21", //mati
"6A:2B:5C:9C", //mekan
"66:E5:D6:21", //dayanch
"8A:4B:81:7F", //keychain (line)
"C9:CE:B1:C2", //keychain
"56:9B:CC:0F", // merdan (green cutted)
"A6:5C:37:11", // merdan (blue bus card)
"80:86:80:74", // Gelneje (cleaner)
"96:D2:CB:0F", // Bagtyyar, berkarar LANY

};


void setup() {
Serial.begin(115200);
SPI.begin();
rfid.PCD_Init();

pinMode (buttonPin,INPUT_PULLUP);
pinMode (ledIndicator,OUTPUT);
digitalWrite(resetPin,1);
pinMode (resetPin, OUTPUT);
digitalWrite(ledIndicator, 0);

pinMode (btn_state_pin, OUTPUT);
digitalWrite(btn_state_pin, 0);
pinMode (wifi_serial_pin, OUTPUT);
digitalWrite(wifi_serial_pin, 0);
pinMode (rfid_validation_pin, OUTPUT);
digitalWrite(rfid_validation_pin, 0);
}


void loop() {
buttonModule();
rfidModule();
wifiSerialModule();
autoResetTimeout();
}


void openDoor(){
digitalWrite(ledIndicator, 1);
delay(doorDelay);
digitalWrite(ledIndicator, 0);
delay(500); // for electrical security
}


void validateCard(String ID_key){
for (int i = 0; i < qtyOfCards; i++){
if (ID_key.indexOf(registeredCards[i]) >= 0){

Serial.println("card validated " + millis());
digitalWrite(rfid_validation_pin, 1);
openDoor();
Serial.println(registeredCards[i]);
}
}
}


void buttonModule(){
button_state = digitalRead(buttonPin);
if (button_state == 0){
Serial.println("button clicked " + millis());

digitalWrite(btn_state_pin, 1);
openDoor();
}
}


void rfidModule(){
if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial())
return;

MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
// Serial.println(F("Your tag is not of type MIFARE Classic."));
return;
}

String ID_key = "";
for (byte i = 0; i < 4; i++) {
ID_key +=
(rfid.uid.uidByte[i] < 0x10 ? "0" : "") +
String(rfid.uid.uidByte[i], HEX) +
(i!=3 ? ":" : "");
}
ID_key.toUpperCase();

// Serial.print("Card key: ");
Serial.println(ID_key);

validateCard(ID_key);

delay(1000);

rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}

void wifiSerialModule(){
String stream="";
if (Serial.available()!=0){
stream = Serial.readStringUntil('\n');
stream.trim();
if (stream.length()>0){
if (stream == "open_door"){
digitalWrite(wifi_serial_pin, 1);
openDoor();
}
}
}
}


void(* resetFunc) (void) = 0;

void autoResetTimeout(){
if (millis() >= reset_timeout){
digitalWrite(resetPin, 0);
Serial.println("reset called " + millis());
resetFunc();
}
}
115 changes: 115 additions & 0 deletions gorjaw-projects/sensorSlave.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
#include <dht.h>
int dhtSensor = 5;
dht = DHT;
long x=millis();
// gas sensor
int gasSensor = A0;
int gasThreshold = 400;
int waterSensor = 15; // 15 or A1
// indicators and states
int buzzer = 11;
int greenIndicator = 12;
int redIndicator = 13;
// relays and throttles
int wentilationFan = 6;
int heaterRelay = 7;
int windowRelay = 8;
int gasThrottle = 9;
int waterThrottle = 10;

// treshold of temperature
int minTempTresh = 10;
int maxTempTresh = 25;

String stream;
SoftwareSerial master (2,3);

void setup() {
pinMode(gasSensor,INPUT);
pinMode(waterSensor,INPUT_PULLUP);

pinMode(greenIndicator, OUTPUT);
pinMode(redIndicator, OUTPUT);
pinMode(windowRelay, OUTPUT);
pinMode(heaterRelay, OUTPUT);
pinMode(gasThrottle, OUTPUT);
pinMode(waterThrottle, OUTPUT);
pinMode(wentilationFan, OUTPUT);
// stabilize the relays and outputs
digitalWrite(gasThrottle,0);
digitalWrite(waterThrottle,0);
digitalWrite(wentilationFan,0);
digitalWrite(heaterRelay,0);
digitalWrite(windowRelay,0);

Serial.begin(9600);
master.begin(9600);
}

void loop() {
if (master.available()){
stream = master.readStringUntil('\n');
stream.trim();
if (stream.length()>0){
if (stream == "1ach"){
Serial.println("planZat")
}
}
}
gas();
temp();
heater();
water();
}

void gas(){
int analogSensor = analogRead(gasSensor);
if (analogSensor>gasThreshold){
digitalWrite(greenIndicator,0);
digitalWrite(redIndicator,1);
digitalWrite(gasThrottle,1);
digitalWrite(wentilationFan,1);
tone(buzzer,1000,200);
}
else{
digitalWrite(greenIndicator,1);
digitalWrite(redIndicator,0);
digitalWrite(gasThrottle,0);
digitalWrite(wentilationFan,0);
noTone(buzzer);
}
}

void temp(){
if((x+4000)<millis()){
float readData = DHT.read11(dhtSensor);
unsigned int t=DHT.temperature;
unsigned int h=DHT.humidity;
Serial.println(t);
x=millis();
}
}

void heater(){
if(DHT.temperature<minTempTresh){
// digitalWrite(windowRelay,1);
digitalWrite(heaterRelay,1);
}
else if(DHT.temperature>maxTempTresh){
digitalWrite(heaterRelay,0);
// digitalWrite(windowRelay,0)
}
}

void water(){
int waterState = digitalRead(waterSensor)
if(waterState==0){
// digitalWrite(windowRelay,1);
digitalWrite(waterThrottle,1);
tone(buzzer,700,200);
}
else{
digitalWrite(waterThrottle,0);
// digitalWrite(windowRelay,0)
}
}