Arduino based attendance logger | অ্যাটেনডেন্স লগার
ইতোমধ্যে আমরা এভিআর মাইক্রোকন্ট্রোলার দিয়ে আরএফআইডিভিত্তিক এক্সেস কন্ট্রোল ডিভাইস তৈরী করেছি। আগের এক্সপেরিমেন্টের যন্ত্রটি আরএফআইডি কার্ড রিড করে,শুধুমাত্র একটি নির্দিষ্ট নাম্বারের কার্ডের জন্যই একটি ডোরলক খুলতে পারত। এবারের এক্সপেরিমেন্টটি একটু আলাদা। এবারের প্রজেক্টটি আরএফআইডি কার্ড সনাক্ত করতে পারবে এবং কার্ড পাঞ্চ করার সময়টি একটি এসডি কার্ডে একটি টেক্সট ফাইলে লিপিবদ্ধ করবে। টেক্সট ফাইল থেকে আমরা মাইক্রোসফট এক্সেলে ডেটা এক্সপোর্ট করতে পারব।
প্রয়োজনীয় যন্ত্রপাতিঃ
প্রয়োজনীয় যন্ত্রপাতি | পরিমাণ | প্রোডাক্ট লিংক |
Arduino UNO- R3 | 1 | এখানে ক্লিক করুন |
RTC module | 1 | এখানে ক্লিক করুন |
MicroSDHC Class 10 (8 GB) | 1 | |
Micro SD Storage Board (SDIO/SPI) | 1 | এখানে ক্লিক করুন |
125Khz RFID Module – UART(Low price edition) | 1 | এখানে ক্লিক করুন |
RFID Tag (125KHz) | 1 | এখানে ক্লিক করুন |
16×2 LCD with headers | 1 | এখানে ক্লিক করুন |
Variable Resistor 103 | 1 | এখানে ক্লিক করুন |
Lithium battery CR2032 | 1 | এখানে ক্লিক করুন |
Breadboard | 1 | এখানে ক্লিক করুন |
Male to male jumpers | 11 | এখানে ক্লিক করুন |
Male to female jumpers | 16 | এখানে ক্লিক করুন |
Female to female jumpers | 2 | এখানে ক্লিক করুন |
Rechargeable battery unit | 1 | এখানে ক্লিক করুন |
সার্কিট কানেকশনঃ
আরডুইনো এবং আরএফআইডি রিডারের মধ্যে নিম্নোক্ত কানেকশন সম্পন্ন করি।
Arduino UNO- R3 | RFID module |
VCC | VCC |
GND | GND |
TX | RX |
RX | TX |
আরডুইনো এবং আরটিসি মডিউলের মধ্যে নিম্নোক্ত কানেকশন সম্পন্ন করি।
Arduino UNO- R3 | RTC module |
VCC | VCC |
GND | GND |
SDA(A4) | SDA |
SCL(A5) | SCL |
এবার আরডুইনো এবং Micro SD Storage Board এর মধ্যে নিম্নোক্ত কানেকশনটি সম্পন্ন করি। এক্ষেত্রে, Micro SD Storage Board এর পেছনের দিকের পিনআউট অনুসরন করতে হবে।
Arduino UNO- R3 | Micro SD Storage Board |
3.3V | 3.3V |
GND | GND |
12 | MISO |
11 | MOSI |
13 | SCLK |
10 | CS |
এবার ব্রেডবোর্ডে বসানো এলসিডির সাথে আরডুইনোর কানেকশনটি নিচের চার্ট অনুযায়ী সম্পন্ন করলেই কানেকশন শেষ।
Arduino UNO R3 | LCD |
VCC | VDD,A, 1st pin of the volume POT |
GND | VSS,K,RW,2nd pin of the volume POT |
V0, 3rd pin of the volume POT | |
5,4,3,2 | D4,D5,D6,D7 |
8 | RS |
9 | E |
আমাদের পুরো সেটআপটি দেখতে ছিল এইরকমঃ
এবার কোডিং
কোডঃ
আরডুইনো আইডিইতে নিচের কোডটি লিখে কম্পাইল করুন এবং আপলোড করুন। এই কোডটি কম্পাইল করার জন্য অবশ্যই RTClib.h লাইব্রেরি ইন্সটল করা থাকতে হবে। যদি লাইব্রেরি ইন্সটল করা না থাকে তাহলে এখান থেকে ডাউনলোড করুন।
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib #include <Wire.h> #include "RTClib.h" #include <LiquidCrystal.h> #include <SD.h> #include <SPI.h> LiquidCrystal lcd(8, 9, 5, 4, 3, 2); // RTC_DS1307 rtc; int dat; File myFile; int pinCS = 10; // Pin 10 on Arduino Uno void setup () { lcd.begin(16, 2); // set up the LCD's number of columns and rows: lcd.clear(); // clear the screen Serial.begin(9600); pinMode(pinCS, OUTPUT); // SD Card Initialization if (SD.begin()) { Serial.println("SD card is ready to use."); } else { Serial.println("SD card initialization failed"); return; } #ifdef AVR Wire.begin(); //#else // Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due #endif rtc.begin(); if (! rtc.isrunning()) { lcd.println("RTC is NOT running!"); // following line sets the RTC to the date & time this sketch was compiled rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // This line sets the RTC with an explicit date & time, for example to set // January 21, 2014 at 3am you would call: // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0)); } } void loop () { DateTime now = rtc.now(); lcd.setCursor(0, 0); // put cursor at colon 0 and row 0 lcd.print("Date:"); lcd.setCursor(5, 0); // put cursor at colon 5 and row 0 if(now.day()<10)lcd.print('0'); dat=now.day(); lcd.print(dat); Serial.print(dat); lcd.setCursor(7, 0); // put cursor at colon 7 and row 0 lcd.print('/'); Serial.print('/'); lcd.setCursor(8, 0); // put cursor at colon 8 and row 0 if(now.month()<10)lcd.print('0'); lcd.print(now.month(), DEC); Serial.print(now.month(), DEC); lcd.setCursor(10, 0); // put cursor at colon 9 and row 0 lcd.print('/'); Serial.print('/'); lcd.setCursor(11, 0); // put cursor at colon 10 and row 0 lcd.print(now.year(), DEC); Serial.print(now.year(), DEC); Serial.println(); lcd.setCursor(0, 1); // put cursor at colon 0 and row 1 lcd.print("Time:"); lcd.setCursor(5, 1); // put cursor at colon 5 and row 1 if(now.hour()<10)lcd.print('0'); lcd.print(now.hour(), DEC); Serial.print(now.hour(), DEC); lcd.setCursor(7, 1); // put cursor at colon 7 and row 1 lcd.print(':'); Serial.print(':'); lcd.setCursor(8, 1); // put cursor at colon 8 and row 1 if(now.minute()<10)lcd.print('0'); lcd.print(now.minute(), DEC); Serial.print(now.minute(), DEC); if(now.minute(),DEC==0) { lcd.setCursor(9, 1); // put cursor at colon 9 and row 1 lcd.print(' '); } lcd.setCursor(10, 1); // put cursor at colon 10 and row 1 lcd.print(':'); Serial.print(':'); lcd.setCursor(11, 1); // put cursor at colon 10 and row 1 lcd.print(" "); lcd.setCursor(11, 1); // put cursor at colon 10 and row 1 if(now.second()<10)lcd.print('0'); lcd.print(now.second(), DEC); Serial.print(now.second(), DEC); Serial.println(); myFile = SD.open("test.txt", FILE_WRITE); if (myFile) { myFile.print(now.day(), DEC); myFile.print('/'); myFile.print(now.month(), DEC); myFile.print('/'); myFile.print(now.year(), DEC); myFile.println(); myFile.print(now.hour(), DEC); myFile.print(':'); myFile.print(now.minute(), DEC); myFile.print(':'); myFile.print(now.second(), DEC); myFile.println(); if (Serial.available()) { while (Serial.available()) { char p = Serial.read(); Serial.write(p); lcd.clear(); lcd.print("Welcome"); myFile.print(p); } } myFile.close(); // close the file } else { Serial.println("error opening test.txt"); } delay(1000); }
কার্যপ্রনালীঃ
কোড আপলোড করার পর সার্কিটে ইউএসবি দিয়ে পাওয়ার দেওয়া যেতে পারে, আবার রিচার্জেবল ব্যাটারি ইউনিটের মাধ্যমেও পাওয়ার দেওয়া যেতে পারে। সার্কিটে পাওয়ার দিলে এলসিডিতে তারিখ ও সময় দেখা যাবে। আরএফআইডি রিডারটির সংস্পর্শে কোনো আরএফআইডি কার্ড আসলে এলসিডিতে ‘Welcome’ লেখা দেখাবে। এসডি কার্ডটিতে test.txt নামক ফাইলে ১ সেকেন্ড পরপর তারিখ এবং সময় লিপিবদ্ধ হবে। সেইসাথে যখন কোনো কার্ড পাঞ্চ করা হবে তখন সেই কার্ডের নাম্বারও লিপিবদ্ধ হবে। একটি এসডি কার্ড অ্যাডাপটারের মাধ্যমে আমরা ফাইলটি ওপেন করলে নিচের ছবির মতো কিছু ডেটা দেখতে পাব।
ডেটাগুলো আমরা চাইলে এক্সেল ফাইলেও নিতে পারি।
মাইক্রোসফট এক্সেলে টেক্সট ফাইল থেকে ডেটা ট্রান্সফার করার প্রক্রিয়াঃ
১)মাইক্রোসফট এক্সেলে নতুন ফাইল ওপেন করে DATA তে ক্লিক করি। তারপর From text সিলেক্ট করে আমাদের ‘test. txt’ নামক ফাইল ওপেন করি।
২)’Delimited’ সিলেক্ট করি।
৩)Delimiters থেকে ‘comma’ সিলেক্ট করি।
৪)OK ক্লিক করি।
৫)ফাইনাল আউটপুট দেখতে এরকম হবে।