انجام پروژه با آردوینو, پروژه با آردوینو

کارت خوان آردوینو اترنت Rfid

کارت خوان آردوینو اترنت Rfid:

RFID به اترنت (Telnet)، خواننده Rfid خود را به اینترنت وصل کنید.

اقلام مورد نیاز:

آردوینو یونو Arduino UNO
ماژول rfid rc522
ماژول شبکه enc28j60 Ethernet blue
برد برد سایز متوسط breadboard
سیم برد بردی 40 تایی دو سر نری
سیم برد بردی 10 تایی نری به مادگی
ماژول مبدل ac به 5v 700ma dc
LED RGB an چهار پایه

پک اقلام مورد نیاز:

درباره این پروژه کارت خوان آردوینو اترنت Rfid:

آیا تا به حال به این فکر کرده اید که یک برچسب RFID/سیستم امنیتی کارت یا سیستم مانیتورینگ در خانه و/یا محل کار خود اضافه کنید. خوب اگر اینجا هستید، شرط می بندم که قبلاً بررسی کرده اید که چقدر گران قیمت هستند از 200 تا 2000 دلار، خیلی درست است!؟ خوب ما تصمیم گرفتیم سیستمی بسازیم که کمتر از 100 دلار قیمت دارد و می تواند حتی بیشتر از دسترسی به یک درب انجام دهد، بنابراین این پروژه چیزی است که به آن رسیدیم. یک تگ خوان آردوینو rfid با قابلیت اینترنت. که با بیشتر از 20 دلار می تواند درها را باز کند.

در اینجا نمونه اولیه کارت خوان آردوینو اترنت Rfid قابل مشاهده است:

ممکن است فکر کنید ممکن است زمان زیادی طول بکشد. با این حال، این مورد فقط برای ما حدود 6 ساعت طول کشید (چون مشکل برق داشتم)، اما تنظیم آن مانند مثال بالا می تواند حدود 30 دقیقه طول بکشد. تمام کدها و تصاویر در زیر آمده است، بنابراین اگر در مراحل بعدی گیج شده اید، ادامه دهید و به تصاویر/کد پایین تر نگاه کنید.

در اینجا تمام مراحل وجود دارد:

قبل از شروع (لازم):
قبل از اینکه بتوانیم کارت‌ها را اسکن کنیم و آنها را به سرور Telnet/TCP خود ارسال کنیم، به چند کتابخانه نیاز داریم UIPEthernet را از اینجا دریافت کنید.

MFRC522 را از اینجا دریافت کنید.

هر دوی این کتابخانه ها را در Program Files(x86)/Arduino/Libraries/ Restart arduino قرار دهید.

سخت افزار:
1. آردوینو نانو (شما همیشه می توانید کد خود را متناسب با دستگاه خود تغییر دهید)
2. MFRC522 با کارت های MAIFARE
3. سیم های جامپر (نر به نر) (نر به ماده)
4. ماژول/شیلد اترنت enc28j60
5. RGB LED
6. مبدل 3 ولت یا 5 ولت بیشتر از 700 میلی آمپر AC-DC
تنظیمات:
1. آردوینو را به برد برد (نانو یا میکرو) وصل کنید.
2. برای یافتن تنظیمات SPI (مقادیر زیر را تغییر دهید) برای پین‌آوت بردتان به‌صورت آنلاین جستجو کنید.
3. پین آردوینو 10 (SS) را به ماژول اترنت ss یا CS وصل کنید.
4. پین 12 آردوینو (MISO) را به MISO rfid و SO اترنت وصل کنید.
5. پین 11 آردوینو (MOSI) را به rfid MOSI و اترنت SI وصل کنید.
6. پین 13 آردوینو (SCK) را به rfid SCK و اترنت SCK وصل کنید.
7. پایه 9 آردوینو را به پایه rfid RST وصل کنید.
8. پین 8 آردوینو را به rfid SSN وصل کنید.
9. پین آردوینو 5 را به led سبز، 4 را به آبی و 3 را به قرمز وصل کنید.
10. AC خود را به DC به + و – روی بردبرد خود وصل کنید.
11. آردوینو خود را به ac to dc متصل و VCC و GND را روی هر دوی rfid و اترنت به ac-dc وصل کنید (به یاد داشته باشید که این دستگاه ها فقط 3 ولت هستند!!!!! 5 ولت را تامین نمی کنند) اگر مشکل داشت از مقاومت ها برای رساندن ولتاژ به 3 ولت استفاده کنید.
13. پین VCC را روی LED به آردوینو 3 ولت یا ac-dc 3 ولت وصل کنید.
14. کابل اترنت را به ماژول وصل کنید و مطمئن شوید که در همان شبکه رایانه شما قرار دارد.
15. کابل USB را از کامپیوتر به آردوینو وصل کنید.
16. کامپیوتر را به همان شبکه وصل کنید.

کد را متناسب با نیاز خود تغییر دهید:
1. کد به خوبی توضیح داده شده است، بنابراین می توانید وارد شوید و بخش های خاصی را تغییر دهید، اما یک چیز برای اطمینان ماژول ehternet است.
2. آدرس Mac می تواند ثابت بماند (مگر اینکه قصد ساختن چندین مورد از این موارد را داشته باشید)
3. اگر از 192.168 استفاده می کنید. شبکه ip پایه شما می توانید IP را نگه دارید.
4. باز هم می توانید dns را نگه دارید، تنها زمان تغییر به 8.8.4.4 است.

  1. ipconfig را اجرا کنید تا دروازه خود را پیدا کنید، پیش فرض 192.168.1.1 است (اگر آن را نمی دانید) (کد در حال حاضر 192.168.1.5 است.)
  2. خط فرمان را اجرا کنید و ipconfig را تایپ کنید تا آدرس IP رایانه خود را بفهمید.
  1. به پایین بروید تا SEND TO SERVER را پیدا کنید و ip رایانه خود را وارد کنید یا اینکه پورت router شما را به آدرس IP عمومی شما ارسال کرده است.
  2. مطمئن شوید که پایتون دارید و سرور را اجرا می کنید (به یاد داشته باشید که این فقط یک کد نمونه است که ما برای ارائه خود به مدرسه استفاده کردیم، بنابراین سرور پایتون قبلاً ساخته شده است و تقریباً اصلاح نشده است، می توانید از هر سرور Telnet/TCP استفاده کنید)
    و کد دیگری که احتمالاً باید تغییر دهید:

در حال اجرای کد:
1. برق AC-DC را وصل کنید.

2. مطمئن شوید که آردوینو شما در حال حاضر به کامپیوتر متصل است.

3. مطمئن شوید که هر دو دستگاه در یک شبکه هستند.
4. کد آردوینو اصلاح شده خود را فلش کنید یا اگر کدی که من دارم برای شما کار می کند عالی است (تقریباً شانسی برای تغییر آن وجود ندارد.)
5. پایتون خود را ، اسکریپت C++ یا هر سرور Telnet/TCP خود را در شبکه خود راه اندازی کنید.
6. برای ایمن شدن آردوینو خود را مجددا راه اندازی یا Restart کنید.
7. صبر کنید تا چراغ آبی شود و کارت را اسکن کنید، اگر سرور شما شناسه کارت را دریافت کرده است، آماده کار هستید.
8. به یاد داشته باشید که چراغ ها چه معنایی دارند بنفش/قرمز محو شده به معنای بالا آمدن است.
9. قرمز به این معنی است که هر خطایی مانند کارت در زاویه مرموزی قرار داشت و/یا سرور به موقع پاسخ نداد.
10. سبز به معنای عبور کردن است تا سرور با یک حرکت پاسخ دهد و شما بتوانید کارت بعدی خود را بخوانید.
11. آبی به معنای انتظار/بارگیری در انتظار کارت یا پاسخ است.
12. اگر آردوینو شما شروع به عقب افتادن کند و بیش از 30 ثانیه طول بکشد تا چراغ قرمز نشان داده شود به این معنی است که ماژول اترنت آردوینو به هیچ وجه نمی تواند به سرور متصل شود. این ممکن است به دلیل چندین چیز باشد که اولاً آردوینو شما توان کافی ندارد و ماژول اترنت آردوینو برای ارسال بسته مشکل دارد یا اینکه سرور رایانه شما در حال اجرا نیست یا اینکه آردوینو و رایانه شما در یک شبکه نیستند.
13. اگر آردوینو شما مدام عقب می ماند، این ترفندها را امتحان کنید تا آنها را برطرف کنید.

14. firewall ویندوز را خاموش کنید.

15. به تنظیمات پیشرفته firewall بروید و پورت ورودی/خروجی 23 را مجاز کنید.
16. با پورت 23 router خود را به رایانه خود منتقل کنید.
17. اگر بی سیم هستید، آردوینو را مستقیماً به router و رایانه خود را به همان router وصل کنید.
18. یک آداپتور برق AC-DC سنگین تر بخرید.
19. در غیر این صورت ممکن است آدرس IP یا آدرس اتصال خود را اشتباه وارد کرده باشید.

21. تو خوب هستی پس شروع کن!!!

به یاد داشته باشید که هیچ کدی برای سیستم قفل درب وجود ندارد، زیرا من آن را ندارم، این بدان معناست که اگر می خواهید از این نه تنها به عنوان یک سیستم ردیابی بلکه به عنوان یک سیستم ردیابی قفل درب استفاده کنید، باید کدی را اضافه کنید.

لطفا پایین را بخوانید:

من مسئولیتی در قبال دستگاه های آسیب دیده ندارم، در صورت عدم کنترل صحیح دستگاه شما آسیب می بیند. مطمئن شوید که مراقب خود باشید.

کد:

/*
 * ----------------------------------
 *             MFRC522     Arduino   
 *             Reader/PCD  Nano v3   
 * Signal      Pin         Pin      
 * ----------------------------------
 * RST/Reset   RST        D9  
 * SPI SS      NSS        D10 
 * SPI MOSI    MOSI       D11  
 * SPI MISO    MISO       D12 
 * SPI SCK     SCK        D13  
 */

// THE FIRST LIBRARY THAT NEEDS TO BE INSTALLED IS UIP ETHERNET SECOND IS MFRC522 BOTH ARE ON GITHUB

#include <UIPEthernet.h>
#include <SPI.h> //For the selection of the key
#include <MFRC522.h> //The RFID key library

#define RST_PIN         9           // Configurable, see typical pin layout above - This is for the Arduino Nano - For RFID
#define SS_PIN          8 //WE ARE USING 8 FOR RFID BECAUSE THE ETHERNET MODULE USES 10

  byte sector         = 0;
  byte blockAddr      = 0; ////////Access certain sector/blocks in the card, trailer block is the last block
  byte trailerBlock   = 1;

int red = 3;
int blue = 4; //Pins for RGB LED
int green = 5;

EthernetClient client;  //ETHERNET INSTANCE

MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.

MFRC522::MIFARE_Key key; //Set key instance

signed long timeout; //TIMEOUT SO IT DOESN'T SIT THERE FOREVER

void setup()
{
  //UI BEGIN
   pinMode(red, OUTPUT);
   pinMode(blue, OUTPUT); //Init the RGB LED
   pinMode(green, OUTPUT);
   Reset(); //Start with leds off

  Serial.begin(9600); //Start computer connection with a rate of 9600 bits per second
  //UI END

  //ETHERNET MODULE INITIAL
  SPI.begin();        // Init SPI bus
  uint8_t mac[6] = {0x00,0x01,0x02,0x03,0x04,0x05};     //MAC = 000102030405
  IPAddress mip(192,168,1,160);                         //IP = 192.168.1.160
  IPAddress mdns(8,8,8,8);                              //DNS = 8.8.8.8
  IPAddress mgate(192,168,1,5);                         //GATEWAY = 192.168.1.5
  IPAddress msubnet(255,255,255,0);                     //SUBNET = 255.255.255.0
  Ethernet.begin(mac, mip, mdns, mgate , msubnet);      //CONNECT USING ABOVE
  Serial.println("Succesful connection");
  // END OF ETHERNET
  
  for(int t = 255; t > 0; t--)
  {
    analogWrite(red, t);           ////More of show but let at least a second between the SPI of the ethernet and RFID
    delay(10);
  }

  //RFID INITIAL
  mfrc522.PCD_Init(); // Init MFRC522 card
  
     for (byte i = 0; i < 6; i++) {   // Prepare the key (used both as key A and as key B)
        key.keyByte[i] = 0xFF;        // using FFFFFFFFFFFFh which is the default at chip delivery from the factory
        }
    
    Serial.println(F("Scan a Card"));
    dump_byte_array(key.keyByte, MFRC522::MF_KEY_SIZE);     //Get key byte size
   timeout = 0;  
   delay(2000);
   Reset();
}
//END RFID INITIAL

void loop() //Run forever
{
  // Look for new cards
    if ( ! mfrc522.PICC_IsNewCardPresent())
    {
        digitalWrite(blue, LOW);
        return;
    }

    // Select one of the cards
    if ( ! mfrc522.PICC_ReadCardSerial())
        return;

        digitalWrite(blue, HIGH); //Show user that card has been read


    byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);

    // Check for compatibility with Mifare card
    if (    piccType != MFRC522::PICC_TYPE_MIFARE_MINI
        &&  piccType != MFRC522::PICC_TYPE_MIFARE_1K
        &&  piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
        Error();
        return;
    }
    
  byte status;
  byte buffer[18];
  byte size = sizeof(buffer);


  status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("PCD_Authenticate() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    Error();
    return;
  }

  
  // Read data from the block
  status = mfrc522.MIFARE_Read(blockAddr, buffer, &size);
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("MIFARE_Read() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    Error();
  }
      // Halt PICC 
    mfrc522.PICC_HaltA();
    // Stop encryption on PCD
    mfrc522.PCD_StopCrypto1();
    
// AFTER DONE READING CARD SEND TO SERVER
      if (client.connect(IPAddress(192,168,1,100),23))
        {
          timeout = millis()+1000;
          Serial.println("Client connected");
          const String ID = dump_byte_array(buffer, size);
          client.println(ID);
          Serial.println("sent :" + ID);
          delay(10);
          while(client.available()==0)
            {
              if (timeout - millis() < 0)
                goto close;
            }
          int size;
          while((size = client.available()) > 0)
            {
              uint8_t* msg = (uint8_t*)malloc(size);
              size = client.read(msg,size);
              Serial.write(msg,size);
              if(size == sizeof("g") - 1)
              {
                    Pass();
              }
              else
              {
                    Error();
              }
              free(msg);
            }
close:
          client.stop();
        }
        else
        {
    Serial.println("Couldn't connect to Server");
         Error();
        }
        //END OF SENDING TO SERVER
        
   Reset(); //RESTART LOOP WITH NO LEDS ON
}

// TURN THE BUFFER ARRAY INTO A SINGLE STRING THAT IS UPPERCASE WHICH EQUALS OUR ID OF THE SECTOR AND BLOCK
String dump_byte_array(byte *buffer, byte bufferSize) {
          String out = "";
    for (byte i = 0; i < bufferSize; i++) {
        //Serial.print(buffer[i] < 0x10 ? " 0" : " ");
        //Serial.print(buffer[i], HEX);
        out += String(buffer[i] < 0x10 ? " 0" : " ") + String(buffer[i], HEX);
    }
    out.toUpperCase();
    out.replace(" ", "");
    return out;
}
//END DUMP_BYTE_ARRAY

//BELOW ARE THE LED METHODS
void Error()
{
  digitalWrite(red, LOW);
  delay(700);
  digitalWrite(red, HIGH);
}

void Pass()
{
  digitalWrite(green, LOW);
  delay(700);
  digitalWrite(green, HIGH);
}

void Reset()
{
   digitalWrite(red, HIGH);
   digitalWrite(blue, HIGH);
   digitalWrite(green, HIGH);
}
//END OF FILE

کد آردوینو C/C++:
این نرم‌افزاری است که روی آردوینو تقریباً آماده کار است، بنابراین کاری که انجام می‌دهید فقط تنظیم دروازه، IP، دروازه، مک آدرس و dns است.

کد به روز شده در GitHub:
در اینجا می توانید به روزترین کد را دریافت کنید.

شماتیک ها:
نمودار سیم کشی ساده
مدار ساده است، بنابراین من فقط با سیم کشی عکس گرفتم.

منبع این مطالب:

https://create.arduino.cc/

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

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

برای امنیت، استفاده از سرویس کپتچا گوگل مورد نیاز است که تابع گوگل است سیاست حفظ حریم خصوصی و شرایط استفاده.

Iبا این شرایط موافقید.