إنشاء نظام حاجز مروري بتقنية RFID وشاشة OLED اكتب تعليقُا

تم نشر هذا المشروع لجميع الأشخاص المهتمين في مجال تصنيع وابتكار المشاريع الإلكترونية والبرمجية، و نود التنويه أن موقع انا الكتروني يخلي مسؤوليته التامة في حال لم يعمل المشروع لدى العميل أو في حال الاستخدام الخاطئ للمكونات الإلكترونية والكهربائية التي قد تؤدي لحدوث أي مشكلة لا سمح الله.

شرح فكرة المشروع

  • في هذا المشروع، سنقوم بتصميم نظام حاجز مروري بتقنية RFID وشاشة OLED، باستخدام لوحة أردوينو.
  • قبل استخدام النظام، يجب على كل مستخدم تسجيل بطاقة RFID الخاصة به في قاعدة بيانات هذا النظام.
  • عند تشغيل النظام، يقوم أردوينو بتهيئة وحدة RFID وشاشة OLED ومحركي سيرفو.
  • يقوم النظام بعدها بمراقبة قارئ RFID باستمرار لكشف أي بطاقات RFID ضمن نطاقه.
  • عندما تقترب البطاقة من نقطة الحاجز، يتم قراءة الرقم المعرف الخاص بالبطاقة.
  • يقوم أردوينو بمقارنة الرقم المعرف الذي تم استلامه من بطاقة RFID مع البطاقات المسجلة في قاعدة بياناته.
  • إذا تم العثور على تطابق، يتم اعتبار البطاقة صحيحة.
  • بعد عملية التحقق الناجحة، يقوم أردوينو بتشغيل محركي السيرفو، مما يؤدي إلى رفع الحاجز المروري.
  • من أجل السماح للمركبة بالمرور، يبقى الحاجز مرفوعا لفترة زمنية محددة.
  • بعد انقضاء فترة العبور، يقوم أردوينو بتفعيل محركات السيرفو مرة أخرى، مما يؤدي إلى إنزال الحاجز ومنع المرور غير المصرح به.
  • يمكن للشاشة OLED أن تعرض معلومات ذات صلة مثل “مسح بطاقتك، قبول المرور أو ررفضه”.
  • إذا لم يتم العثور على تطابق بين بطاقة RFID أو أي بطاقة مسجلة في قاعدة البيانات، فلن يتم فتح نظام الحاجز.
  • بدلاً من ذلك، سيتم عرض رسالة “رُفض المرور”، للإشارة إلى أن البطاقة غير صالحة.
  • افتح نافذة Serial Monitor وقم بمسح بطاقة RFID، وستحصل على مُعرف البطاقة الخاص (UID).
  • لفتح نافذة Serial Monitor، اختر Tools ثم Serial Monitor.
  • في الكود البرمجي، قم بكتابة معرفك الخاص وأعد تحميل الكود على الأردوينو.
  • الآن، قم باختبار الدائرة عن طريق مسح البطاقة المسجلة، يجب أن يتم رفع الحاجز ثم إنزاله وفقًا لذلك.

ادوات المشروع

تنويه: استخدم لوحة Bread board لتوصيل الوحدات بمنفذ 5V و GND
  • اردوينو اونو مع سلك توصيل Arduino Uno: عدد 1
  • موديول RFID مع البطاقة وسلسلة المفتاح 13.56 Mhz Reader/Writer with RFID Card: عدد 1
  • محرك سيرفو 180 درجة SG90 Rotation Servo Motor: عدد 2
  • شاشة عرض 0.96 بوصة OLED: عدد 1
  • لوح تجارب 400 نقطة لون ابيض Solderless Breadboard: عدد 1
  • أسلاك توصيل من ذكر إلى أنثى 40 دبوس 20 سم wires 40pcs Male to Female
  • أسلاك توصيل من ذكر إلى ذكر 40 دبوس 20 سم wires 40pcs Male to male
  • 9V Maxell Alkaline Battery بطارية قلوية: عدد 1
  • موصل بطارية 9 فولت + مقبس تيار مستمر (غطاء موصل البطارية) Battery snap connector: عدد 1

مخطط المشروع

طريقة توصيل الادوات مع أردوينو

وحدة servo1 و servo2:

yellow wire -> 6

red wire -> 5V

brown wire -> GND

وحدة OLED:

SDA -> A4

SCL -> A5

GND -> GND

VCC -> 5V

وحدة RFID:

SDA -> 10

SCK -> 13

MOSI -> 11

MISO -> 12

IRQ -> not connected

GND -> GND

RST -> 9

3.3V -> 3.3V

الكود البرمجي

تنبيه : في حال لم تكن متأكد من قدرتك على تنفيذ خطوات المشروع يرجى استشارة شخص متخصص في هذا المجال.
  • للتعرف على تجهيز لوحة أردوينو للبرمجة قم بزيارة الرابط التالي.
  • للإطلاع على كيفية تحميل وتنصيب المكتبات قم بزيارة الرابط التالي.
  • قبل تحميل الكود البرمجي، عليك تحميل المكتبات التالية:
  • SPI.h
  • MFRC522.h
  • Wire.h
  • Adafruit_GFX.h
  • Adafruit_SSD1306.h
  • Servo.h
  • في حال لم يعمل هذا الكود البرمجي، قم بتحميل ملف الكود بالضغط على زر التحميل الموجود في الأسفل.

#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Servo.h> // Include the Servo library

#define RST_PIN 9
#define SS_PIN 10

byte readCard[4];
String My_ID = “B3156C9F”;
String ID = “”;

MFRC522 mfrc522(SS_PIN, RST_PIN);
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire, -1);
Servo servo; // Create a servo object

void setup()
{
SPI.begin();
mfrc522.PCD_Init();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
servo.attach(6); // Attach the servo to pin 6

display.clearDisplay();
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.setTextSize(1);
display.print(“Scan Your Card…”);
display.display();
closeServo();
}

void loop()
{
while (getID())
{
display.clearDisplay();
display.setCursor(0, 0);
display.setTextSize(1);

if (ID == My_ID)
{
display.print(“ACCESS GRANTED!”);
openServo(); // Call the openServo function if access is granted
}
else
{
display.print(“ACCESS DENIED!”);
}

display.display();
display.setCursor(0, 10);
display.print(” ID : “);
display.print(ID);
display.display();

delay(2000);

display.clearDisplay();
display.print(” Access Control “);
display.setCursor(0, 10);
display.print(“Scan Your Card…”);
display.display();
closeServo(); // Call the closeServo function after a delay
}
}

boolean getID()
{
if (!mfrc522.PICC_IsNewCardPresent())
{
return false;
}
if (!mfrc522.PICC_ReadCardSerial())
{
return false;
}
ID = “”;
for (uint8_t i = 0; i < 4; i++)
{
//readCard[i] = mfrc522.uid.uidByte[i];
ID.concat(String(mfrc522.uid.uidByte[i], HEX));
}
ID.toUpperCase();
mfrc522.PICC_HaltA();
return true;
}

void openServo()
{
servo.write(90); // Set the servo to the open position (adjust the angle as needed)
delay(1000); // Delay to allow the servo to move
}

void closeServo()
{
servo.write(0); // Set the servo to the closed position (adjust the angle as needed)
delay(1000); // Delay to allow the servo to move
}

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *