Advertisement
Sierra_ONE

RFID System

Mar 26th, 2023 (edited)
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Arduino 10.30 KB | Source Code | 0 0
  1. #include <LiquidCrystal_I2C.h>
  2. #include <MFRC522.h> // for the RFID
  3. #include <SPI.h> // for the RFID and SD card module
  4. #include <SD.h> // for the SD card
  5. #include <RTClib.h> // for the RTC
  6. #include <Servo.h>
  7.  
  8.  
  9. #define CS_RFID 53
  10. #define RST_RFID 5
  11. #define CS_SD 49
  12.  
  13.  
  14. File myFile;
  15. MFRC522 rfid(CS_RFID, RST_RFID);
  16. LiquidCrystal_I2C lcd(0x27, 16, 2);
  17. RTC_DS1307 rtc;
  18. Servo myservo;
  19.  
  20.  
  21. const int numOfCards = 20;//the number of cards used. this can change as you want
  22. byte cards[numOfCards][4] = {{0x1A, 0x8C, 0xCD, 0x0A},{0xDA , 0xBF, 0xE8, 0x3B}, {0x09, 0xB3, 0x16, 0xCD}};// array of UIDs of rfid cards
  23. int n = 0;//n is for the total number of students//j is for to detect the card is valid or not
  24. int numCard[numOfCards]; //this array content the details of cards that already detect or not .
  25. String names[numOfCards] = {"Stephen Villorejo","Chris Olivera","Amithyst Ceniza"};//student names
  26. long sNumbers[numOfCards] = {22209670 , 17918616 , 22205488};//student sNumbers
  27.  
  28.  
  29. const int redLED = 29;
  30. const int greenLED = 36;
  31. const int buzzer = 31;
  32.  
  33. void setup() {
  34.  
  35.  
  36.   pinMode(redLED, OUTPUT);  
  37.   pinMode(greenLED, OUTPUT);
  38.   pinMode(buzzer, OUTPUT);
  39.   myservo.attach(28);
  40.  
  41.  
  42.   Serial.begin(9600);
  43.   SPI.begin();
  44.   rfid.PCD_Init();
  45.   lcd.init();
  46.   lcd.backlight();
  47.  
  48.  
  49.   Serial.print("Initializing SD card...");
  50.   lcd.print("Initializing ");
  51.   lcd.setCursor(2, 2);
  52.   lcd.print("SD card...");
  53.   delay(3000);
  54.   lcd.clear();
  55.   if(!SD.begin(CS_SD)) {
  56.     Serial.println("initialization failed!");
  57.     lcd.print("Initializing ");
  58.     lcd.setCursor(0, 1);
  59.     lcd.print("failed!");
  60.     return;
  61.   }
  62.   Serial.println("initialization done.");
  63.   //lcd.print("Initialization ");
  64.   //lcd.setCursor(3, 3);
  65.   //lcd.print("Done...");
  66.  
  67.  
  68.   if(!rtc.begin()) {
  69.     Serial.println("Couldn't find RTC");
  70.     while(1);
  71.   }
  72.   else {
  73.     rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  74.   }
  75.   if(!rtc.isrunning()) {
  76.     Serial.println("RTC is NOT running!");
  77.   }
  78.  
  79.  
  80.   digitalWrite(CS_SD,LOW);
  81. File myFile = SD.open("test.txt", FILE_WRITE);
  82.   if  (myFile) {
  83.     myFile.print(F("  \t<<<< School Bus Passenger Attendance >>>>\n"));
  84.     myFile.println(F("COUNT\tID-NO.\tNAME\t\tDATE\t\tTimeIn\t\tTimeOut"));
  85.     // close the file:
  86.     myFile.close();
  87.     Serial.println(F("done."));
  88.   } else {
  89.     // Serial.println(F("error opening test.txt"));
  90.   }
  91.   digitalWrite(CS_SD,HIGH);
  92. }
  93.  
  94.  
  95. void loop() {
  96.   DateTime now = rtc.now();
  97.   if (now.hour() < 7 || now.hour() >= 18) {
  98.   }
  99.   printLoopLCD();
  100.   readRFID();
  101. }
  102.  
  103.  
  104. void readRFID() {
  105.   int j = -1;
  106.   byte card_ID[4];
  107.  
  108.   if ( ! rfid.PICC_IsNewCardPresent()) {
  109.     return;
  110.   }
  111.   if ( ! rfid.PICC_ReadCardSerial()) {
  112.     return;
  113.   }
  114.  
  115.   for (byte i = 0; i < rfid.uid.size; i++) {
  116.     card_ID[i] = rfid.uid.uidByte[i];
  117.   }
  118.  
  119.   for (int i = 0; i < numOfCards; i++) {
  120.     if (card_ID[0] == cards[i][0] && card_ID[1] == cards[i][1] && card_ID[2] == cards[i][2] && card_ID[3] == cards[i][3]) {
  121.       j = i;
  122.     }
  123.   }
  124.  
  125.   if(j == -1) {
  126.     invalid();
  127.   }
  128.   else if (numCard[j] == 1) {
  129.     alreadyRead(names[j], sNumbers[j], j);
  130.   }
  131.   else {
  132.     logCardData(names[j], sNumbers[j], j);
  133.   }
  134.   delay(500);  
  135. }
  136.  
  137.  
  138. void servo(){//method for servo motor
  139.   int pos = 0;    // variable to store the servo position
  140.    for (pos = 90; pos >= 0; pos -= 1) { // goes from 0 degrees to 90 degrees
  141.     // in steps of 1 degree
  142.     myservo.write(pos);              
  143.     delay(5);                      
  144.   }
  145.   delay(5000);
  146.    for (pos = 0; pos <= 90; pos += 1) {// goes from 90 degrees to 0 degrees
  147.     myservo.write(pos);            
  148.     delay(5);                      
  149.   }
  150. }
  151.  
  152.  
  153. void logCardData(String name, long sNumber, int j){
  154.   displayAllow(name,sNumber);
  155.   DateTime now = rtc.now();
  156.   numCard[j] = 1;
  157.   n++;
  158.  
  159.  
  160.   Serial.print(n);
  161.   Serial.print(F("\t"));
  162.   Serial.print(sNumber);
  163.   Serial.print(F("\t"));
  164.   Serial.print(name);
  165.   Serial.print(F("\t"));
  166.   Serial.print(now.year(),DEC);
  167.   Serial.print(F("-"));
  168.   if(now.month()<10){Serial.print("0");Serial.print(now.month(),DEC);}
  169.   else Serial.print(now.month(),DEC);
  170.   Serial.print(F("-"));
  171.   if(now.day()<10){Serial.print("0");Serial.print(now.day(),DEC);}
  172.   else Serial.print(now.day(),DEC);
  173.   Serial.print(F("\t"));
  174.   if(now.hour()<10){Serial.print("0");Serial.print(now.hour(),DEC);}
  175.   else Serial.print(now.hour(),DEC);
  176.   Serial.print(F(":"));
  177.   if(now.minute()<10){Serial.print("0");Serial.print(now.minute(),DEC);}
  178.   else Serial.print(now.minute(),DEC);
  179.   Serial.print(F(":"));
  180.   if(now.second()<10){Serial.print("0");Serial.print(now.second(),DEC);}
  181.   else Serial.print(now.second(),DEC);
  182.   Serial.print(F("\t"));
  183.   Serial.println(F("--:--:-- "));
  184.  
  185.  
  186.   digitalWrite(CS_SD,LOW);
  187.   File  myFile = SD.open("test.txt", FILE_WRITE);//record the data to the sd card
  188.   if (myFile) {
  189.       myFile.print(n);//print number
  190.       myFile.print(F("\t"));
  191.       myFile.print(sNumber); //print name of student
  192.       myFile.print(F("\t"));
  193.       myFile.print(name); //print name of student
  194.       myFile.print(F("\t"));
  195.       myFile.print(now.year(),DEC); //print year
  196.       myFile.print(F("-"));
  197.       if(now.month()<10){myFile.print("0");myFile.print(now.month(),DEC);}
  198.       else myFile.print(now.month(),DEC); //print month
  199.       myFile.print(F("-"));
  200.       if(now.day()<10){myFile.print("0");myFile.print(now.day(),DEC);}
  201.       else myFile.print(now.day(),DEC);
  202.       myFile.print(F("\t"));
  203.       if(now.hour()<10){myFile.print("0");myFile.print(now.hour(),DEC);}
  204.       else myFile.print(now.hour(),DEC);
  205.       myFile.print(F(":"));
  206.       if(now.minute()<10){myFile.print("0");myFile.print(now.minute(),DEC);}
  207.       else myFile.print(now.minute(),DEC);
  208.       myFile.print(F(":"));
  209.       if(now.second()<10){myFile.print("0");myFile.print(now.second(),DEC);}
  210.       else myFile.print(now.second(),DEC);
  211.       myFile.print(F("\t"));
  212.       myFile.println(F("--:--:--"));
  213.       myFile.close();
  214.       Serial.println(F("done."));
  215.   } else {
  216.     // Serial.println(F("error opening test.txt"));
  217.   }
  218.   digitalWrite(CS_SD,HIGH);
  219. }
  220.  
  221.  
  222. void invalid(){
  223.   Serial.println(F("Invalid Card."));
  224.  
  225.   lcd.home ();
  226.   lcd.clear();
  227.   lcd.setCursor (1, 0);
  228.   lcd.print(F("Invalid Card!"));
  229.   digitalWrite(redLED, HIGH);
  230.   tone(buzzer, 300);
  231.   lcd.setCursor (1, 1);
  232.   lcd.print(F("Access Denied!"));
  233.   delay(1500);
  234.   lcd.clear();
  235.   digitalWrite(redLED, LOW);
  236.   noTone(buzzer);
  237.   delay (500);
  238. }
  239.  
  240.  
  241. void alreadyRead(String name, long sNumber, int j){
  242.   DateTime now = rtc.now();
  243.   numCard[j] = 0;
  244.   n--;
  245.  
  246.  
  247.   Serial.print(n);
  248.   Serial.print(F("\t"));
  249.   Serial.print(sNumber);
  250.   Serial.print(F("\t"));
  251.   Serial.print(name);
  252.   Serial.print(F("\t"));
  253.   Serial.print(now.year(),DEC);
  254.   Serial.print(F("-"));
  255.   if(now.month()<10){Serial.print("0");Serial.print(now.month(),DEC);}
  256.   else Serial.print(now.month(),DEC);
  257.   Serial.print(F("-"));
  258.   if(now.day()<10){Serial.print("0");Serial.print(now.day(),DEC);}
  259.   else Serial.print(now.day(),DEC);
  260.   Serial.print(F("\t"));
  261.   Serial.print(F("--:--:--"));
  262.   Serial.print(F("\t"));
  263.   if(now.hour()<10){Serial.print("0");Serial.print(now.hour(),DEC);}
  264.   else Serial.print(now.hour(),DEC);
  265.   Serial.print(F(":"));
  266.   if(now.minute()<10){Serial.print("0");Serial.print(now.minute(),DEC);}
  267.   else Serial.print(now.minute(),DEC);
  268.   Serial.print(F(":"));
  269.   if(now.second()<10){Serial.print("0");Serial.println(now.second(),DEC);}
  270.   else Serial.print(now.second(),DEC);
  271.   Serial.println(" ");
  272.  
  273.  
  274.   digitalWrite(CS_SD,LOW);
  275.   File  myFile = SD.open("test.txt", FILE_WRITE);
  276.     if (myFile) {
  277.       myFile.print(n);
  278.       myFile.print(F("\t"));
  279.       myFile.print(sNumber);
  280.       myFile.print(F("\t"));
  281.       myFile.print(name);
  282.       myFile.print(F("\t"));
  283.       myFile.print(now.year(),DEC);
  284.       myFile.print(F("-"));
  285.       if(now.month()<10){myFile.print("0");myFile.print(now.month(),DEC);}
  286.       else myFile.print(now.month(),DEC);
  287.       myFile.print(F("-"));
  288.       if(now.day()<10){myFile.print("0");myFile.print(now.day(),DEC);}
  289.       else myFile.print(now.day(),DEC);
  290.       myFile.print(F("\t"));
  291.       myFile.print(F("--:--:--"));
  292.       myFile.print(F("\t"));
  293.       if(now.hour()<10){myFile.print("0");myFile.print(now.hour(),DEC);}
  294.       else myFile.print(now.hour(),DEC);
  295.       myFile.print(F(":"));
  296.       if(now.minute()<10){myFile.print("0");myFile.print(now.minute(),DEC);}
  297.       else myFile.print(now.minute(),DEC);
  298.       myFile.print(F(":"));
  299.       if(now.second()<10){myFile.print("0");myFile.print(now.second(),DEC);}
  300.       else myFile.println(now.second(),DEC);
  301.       myFile.close();
  302.       Serial.println(F("done."));
  303.     } else {
  304.       // Serial.println(F("error opening test.txt"));
  305.     }
  306.   digitalWrite(CS_SD,HIGH);
  307.  
  308.  
  309.   digitalWrite(greenLED, HIGH);
  310.   digitalWrite (buzzer, HIGH);
  311.   delay(300);
  312.   digitalWrite(greenLED, LOW);
  313.   digitalWrite (buzzer, LOW);
  314.  
  315.  
  316.   lcd.home ();
  317.   lcd.clear();
  318.   lcd.setCursor (3, 0 );
  319.   lcd.print(F("Thank You!"));
  320.   lcd.setCursor (0, 1 );
  321.   lcd.print(F("Enjoy Your Day..."));
  322.   delay(1000);
  323.   servo();
  324.   lcd.clear();
  325. }
  326.  
  327.  
  328. void printLoopLCD(){
  329.   DateTime now = rtc.now();
  330.   lcd.home();
  331.   lcd.clear();
  332.   lcd.setCursor (0, 0);
  333.   lcd.print(F("Student Count:"));
  334.   lcd.setCursor (14, 0 );
  335.   lcd.print(n);
  336.   lcd.setCursor (0, 1 );
  337.   if(now.month()<10){lcd.print("0");lcd.print(now.month(),DEC);}
  338.   else lcd.print(now.month(),DEC);
  339.   lcd.print(F("."));
  340.   if(now.day()<10){lcd.print("0");lcd.print(now.day(),DEC);}
  341.   else lcd.print(now.day(),DEC);
  342.   lcd.print(F("."));
  343.   lcd.print(now.year(),DEC);
  344.   lcd.setCursor (11, 1);
  345.   if(now.hour()<10){lcd.print("0");lcd.print(now.hour(),DEC);}
  346.   else lcd.print(now.hour(),DEC);
  347.   lcd.print(F(":"));
  348.   if(now.minute()<10){lcd.print("0");lcd.print(now.minute(),DEC);}
  349.   else lcd.print(now.minute(),DEC);
  350.   lcd.print(F(":"));
  351.   if(now.second()<10){lcd.print("0");lcd.print(now.second(),DEC);}
  352.   else lcd.print(now.second(),DEC);
  353.   delay(5000);
  354. }
  355.  
  356. void displayAllow(String name,long sNumber){
  357.  
  358.   digitalWrite(greenLED, HIGH);
  359.   digitalWrite (buzzer, HIGH);
  360.   delay(300);
  361.   digitalWrite(greenLED, LOW);
  362.   digitalWrite (buzzer, LOW);
  363.  
  364.   lcd.home ();
  365.   lcd.clear();
  366.   lcd.setCursor (4, 0 );
  367.   lcd.print(F("Welcome!"));  
  368.   lcd.setCursor (0, 1 );
  369.   lcd.print(name);
  370.   delay(1000);
  371.   servo();
  372.   lcd.clear();
  373. }
  374.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement