آموزش رزبری پایپروژه رزبری پای

پروژه حضور و غیاب اداره با کارت RFID و رزبری پای

سلام. پروژه حضور و غیاب اداره ها با کارت RFID و رزبری پای را آماده کردیم.

سیستم حضور و غیاب مبتنی بر RFID با Raspberry Pi

در این پروژه رزبری پای ، ما یک سیستم حضور و غیاب مبتنی بر RFID میسازیم. در این پروژه هر فرد میتواند به راحتی با قرار دادن تگ های RFID (کارت، دستبند ، برچسب و …) در کنار دستگاه، شناسایی شود و حضورش ثبت شود. فناوری RFID معمولا در مدارس، استخر ها، دانشگاه ها، اداره ها و … برای اهداف مختلفی استفاده میشود.

در اینجا Raspberry Pi 3 کل فرایند های این پروژه را کنترل می کند (کاربر می تواند از هر برد رزبری پای استفاده کند). خواننده RFID شناسه کارت RFID را می خواند، این داده ها توسط Raspberry Pi از طریق UART دریافت می شود، سپس RPi کارت را تأیید می کند و نتایج را روی صفحه LCD نشان می دهد.

وقتی شخصی برچسب RFID خود را نزدیک به خواننده RFID قرار می دهد، RFID اطلاعات تگ را خوانده و آنرا به Raspberry Pi ارسال می کند. سپس رزبری پای شماره شناسایی منحصر به فرد آن برچسب RFID را می خواند و سپس این داده ها را با داده ها یا اطلاعات از پیش تعریف شده مقایسه می کند. اگر داده ها با داده های از پیش تعریف شده مطابقت داشته باشند، Raspberry Pi حضور شخص دارنده برچسب را ثبت میکند و اگر همسان نشود پیام “Invalid Card” در LCD نشان داده میشود وبازر برای مدتی بوق می زند. ما در اینجا برای تست از 4 کارت استفاده میکنیم. یکی از این کارت ها را تعریف نکردیم تا پیام کارت نامعتبر را مشاهده کنیم.

فیلم زیر عملکرد پروژه حضور و غیاب را نشان میدهد. این فیلم به شما در درک نحوه کار پروژه کمک میکند.

اگر با Raspberry Pi آشنا نیستید، ما مجموعه ای از آموزش ها و پروژه های Raspberry Pi را را در سایت قرار داده ایم. برای مشاهده آن ها از منوی بالای سایت استفاده کنید.

ماژول خواننده آرفید و تگ ها

RFID یک وسیله الکترونیکی است که دارای دو بخش است. یکی خواننده RFID و دیگری تگ RFID. وقتی تگ RFID (میتواند به شکل کارت، برچسب، دستبند و … باشد) را به خواننده RFID نزدیک می کنیم، خواننده آرفید داده های برچسب را به صورت سریال می خواند. برچسب RFID دارای کد 12 رقمی منحصر به فرد است. RFID با سرعت 9600 bps کار می کند. RFID از الکترومغناطیس برای انتقال اطلاعات از خواننده به تگ یا تگ به خواننده استفاده می کند.

ماژول خواننده آرفید و تگ ها

توضیحات مدار پروژه

شماتیک مدار برای پروژه سیستم حضور و غیاب بسیار ساده است. مدار شامل Raspberry Pi 3 ،  خواننده RFID ، تگ RFID ، بازر ، LED و LCD است.

سیستم حضور و غیاب مبتنی بر RFID با Raspberry Pi

اتصالات ساده هستند. LCD در حالت 4 بیتی به Raspberry Pi متصل می شود. پین های RS ، RW و EN به طور مستقیم به  11 ، gnd و 10 وصل شده اند.

قطعات مورد نیاز

  1. برد رزبری پای (با کارت SD)
  2. ماژول خواننده RFID EM-18
  3. برچسب ها یا کارت های RFID
  4. ال سی دی کاراکتری 16*2
  5. پتانسیومتر 10 کیلو اهم
  6. مقاومت 10 کیلو اهم
  7. مقاومت 1 کیلو اهم
  8. کابل اترنت
  9. ال ای دی
  10. دکمه
  11. بازر
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

توضیح کد پروژه

کد کامل پروژه در فایل انتهای صفحه قرار داده شده است در اینجا قسمت های مهم کد را بررسی میکنیم. برای استفاده از کد نیاز به نصب کتابخانه Wiringpi دارید : آموزش نصب کتابخانه wiringPi برای پین های GPIO رزبری پای

در ابتدای کد برخی کتابخانه ها را فراخوانی میکنیم و پین های مورد نیاز را تعریف میکنیم.

#include<wiringPi.h> // کتابخانه های مورد نیاز
#include <wiringSerial.h>
#include<stdio.h>
#include <string.h>

#define RS 11 // پین های ال سی دی
#define EN 10
#define D4 6
#define D5 5
#define D6 4
#define D7 1

#define led1 23 // پین های ال ای دی
#define led2 24
#define led3 25
#define led5 14
#define buzz 7 // پین بازر

پس از آن ، برخی از متغیرها و آرایه ها را برای محاسبه مقادیر تعیین میکنیم.

int sp ;
int count1=0,count2=0,count3=0;
char ch;
char rfid[13];
int i=0;
char temp[5];

سپس توابع برای اجرای فرایند ها نوشته شده است. برخی از آنها در زیر آورده شده است :

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

از عملکرد lcdcmd برای ارسال دستور به LCD استفاده می شود

void lcdcmd(unsigned int ch)
{
    int temp=0x80;
    digitalWrite(D4, temp & ch<<3);
    digitalWrite(D5, temp & ch<<2);
    digitalWrite(D6, temp & ch<<1);
    digitalWrite(D7, temp & ch);
    digitalWrite(RS, LOW);
    digitalWrite(EN, HIGH);
    .... ....
    .... .....

از عملکرد void write برای ارسال داده به LCD استفاده می شود.

void write(unsigned int ch)
  {
    int temp=0x80;
    digitalWrite(D4, temp & ch<<3);
    digitalWrite(D5, temp & ch<<2);
    digitalWrite(D6, temp & ch<<1);
    digitalWrite(D7, temp & ch);
    digitalWrite(RS, HIGH);
    digitalWrite(EN, HIGH);
    .... ....
    .... .....

ساخت سیستم حضور و غیاب

تابع  void clear() برای پاک کردن LCD استفاده می شود، از void setCursor برای تنظیم موقعیت مکان نما و از void printبرای ارسال به LCD استفاده می شود.

  void clear()
  {
     lcdcmd(0x01);
  }

  void setCursor(int x, int y)
  {
    int set=0;
    if(y==0)
    set=128+x;
    if(y==1)
    set=192+x;
    lcdcmd(set);
  }

  void print(char *str)
  {
    while(*str)
    {
     write(*str);
     str++;
    }
  }

از تابع fill void برای تنظیم اولیه LCD در حالت 4 بیتی استفاده می شود.

  void begin(int x, int y)
  {
    lcdcmd(0x02);
    lcdcmd(0x28);
    lcdcmd(0x06);
    lcdcmd(0x0e);
    lcdcmd(0x01);
  }

توابع void buzzer () و void bend () برای بوق زدن بازر استفاده می شوند. تابع void serialbegin برای پیکربندی ارتباط سریال استفاده می شود.

void buzzer()
{
     digitalWrite(buzz, HIGH);
     delay(1000);
     digitalWrite(buzz, LOW);
}

void wait()
{
     digitalWrite(led5, LOW);
     delay(3000);
} 
  
void serialbegin(int baud)
  {
    if ((sp = serialOpen ("/dev/ttyS0",baud)) < 0)
   {
     clear();
     print("Unable to open"); 
     setCursor(0,1);
     print("serial Port");
   }
  }

با استفاده از تابع void setup() ، پیکربندی ال سی دی ها ، داده های سریال UART و پین های GPIO را پیکربندی میکنیم.

void setup()
{
   if (wiringPiSetup () == -1)
   {
     clear();
     print("Unable to start"); 
     setCursor(0,1);
     print("wiringPi");
   }
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  ..... ......
  ...... .......

از عملکرد void get_card () برای دریافت داده ها از ماژول خواننده RFID استفاده می شود.

در تابع void main() ، ما برخی پیام ها را بر روی LCD نشان میدهیم. و داده های برچسب را با داده های از پیش تعریف شده برای اعتبارسنجی مقایسه کرده ایم.

... ......
.... .....
if(strncmp(rfid,"0900711B6003",12)==0)
    {
        count1++;
        clear();
        print("Attd. Registered");
        setCursor(0,1);
        print("Studnet 1");
        digitalWrite(led1, HIGH);
        buzzer();
        digitalWrite(led1, LOW);
        wait();                 
    }       
else if(strncmp(rfid,"090070FE6EE9",12)==0)
    {
        count2++;
        clear();
        print("Attd. Registered");
        setCursor(0,1);
        .... .....
        .... .....

در آخر ، تابع  void check_button() برای نمایش تعداد حضور و غیاب ها استفاده میشود.

void check_button()
{
   if(digitalRead(in1)==0)
        {
          digitalWrite(led5, LOW);
           clear();
           setCursor(0,0);
           print("std1  std2  std3");
            .... ....
            .... .....

موارد موجود در فایل : سورس کد ، شماتیک پروژه

5 (4 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *