نمایش نتایج: از 1 به 7 از 7
Like Tree7 لایک
  • 4 Post By magmagmary
  • 1 Post By SAADATMAND
  • 1 Post By mr.ansaripour
  • 1 Post By mr.ansaripour

موضوع: RFID logger ( ارتباط سریال بین دو ماژول SPI )

Threaded View

  1. #1
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064

    RFID logger ( ارتباط سریال بین دو ماژول SPI )

    در ساخت این پروژه اولین مشکل وجود دو deviceبا ارتباط spi می باشد .به نظر می رسد که شاید نتوان هر دو این قطعه ها را به یک arduino اتصال داد .ولی با کمک یک تغییر نرم افزاری میتوان این اشکال سخت افزاری را حل نمود .به شکل زیر دقت کنید:
    برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: 2.jpg
مشاهده: 430
حجم: 18.5 کیلو بایت
    در حقیقت میتوان برای هر chip select یک پایه دلخواه دیجیتال آزاد را انتخاب نمود .و در بحث نرم افزاری همان طور که خواهیم دید تغییرات مورد نظررا اعمال کنیم .یکی از نتایج بسیار مهم در این پروژه این است که میتوان چندین SPI را به یک ARDUINO متصل نمود.
    در این پروژه هدف این است که از RFID اطلاعات را خوانده و آن ها را به یک SD CARD بفرستد .
    اتصالات سخت افزاری آن در شکل زیر مشاهده می شود .

    برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: RFID @ SD CARD_bb.jpg
مشاهده: 503
حجم: 93.0 کیلو بایت
    در مورد مباحث نرم افزاری در این پروژه روند جدیدی برای برنامه نویسی ارائه می شود.همانطور که می دانیم در استفاده از قطعات جدید باید LIBRARARY مخصوص آن قطعه را اضافه کنیم . LIBRARARY مربوط به RFID را اضافه می کنیم .و اسم آن را به MFRC522 تغییر میدهیم .وارد این کتابخانه می شویم .فایلی با پسوند CCP را انتخاب می کنیم .در این فایل تابع هایی را که در طول برنامه های مختلف استفاده می کنیم تعریف شده اند.و تغییر این تابع ها به هر صورت دلخواه برای ما میسر خوهد بود .
    در این کتابخانه تابع MFRC522::PICC_GetUID وجود دارد .از این تابع در روند برنامه نویسی در محیط SKETCH استفاده شده است . ولی فرم برنامه نویسی آن مناسب این سطح از پروژه نبود لذا آن را تغییر دادیم .فرم تغییر یافته آن در زیر مشاهده می شود .

    کد:
    char* MFRC522::PICC_GetUID(Uid *uid    )///< Pointer to Uid struct returned from a successful PICC_Select().
     {
        MIFARE_Key key;
        char Code[15];
        int j=-1;
        int num=0;
        int index=0;
        for (byte i = 0; i < uid->size; i++) {
            for(byte c=0 ;c<3 ;c++){
                j++;
                Code[j]='0';
            }
            index=j;
            num=uid->uidByte[i];
            while(num>10){
                Code[index]=(num%10)+48;
                index--;
                num=num/10;
            }
            Code[index]=num+48;        
        }
        Code[index+1]='\0';
        PICC_HaltA(); // Already done if it was a MIFARE Classic PICC.
        return Code;
    } // End PICC_GetUID()
    در تایع اولیه آن خروجی void بود ولی در تابع جدید تعریف شده خروجی از نوع آرایه کاراکتری است .در خود کتابخانه فایل با پسوند h را انتخاب میکنیم و خروجی تابع مذکور را به char* تغییر میدهیم .
    هدف کلی این تغییر این بود که وقتی داده های rfid را بایت بایت از کارت خواندیم آن ها را به صورت کاراکتر رشته ای تبدیل کنیم


    در قسمت زیر کد اصلی پروژه دیده می شود. برای درک بهتر این پروژه پیشنهاد میشود که اول خود rfid را به تنهایی با مثال های موجود در خود arduino پروگرم کنید .
    File > example > mfrc522 >dumpinfo



    کد اصلی پروژه:

    کد:
    #include <SD.h>
    #include <SPI.h>
    #include <MFRC522.h>
    #define SS_PIN 9  
    #define RST_PIN 3
    MFRC522 mfrc522(SS_PIN, RST_PIN);
    
    
    
    
    void setup()
    {
      // Open serial communications and wait for port to open:
      Serial.begin(9600);
      while (!Serial) {
        ; // wait for serial port to connect. Needed for Leonardo only
      }
      SPI.begin();            // Init SPI bus
      mfrc522.PCD_Init(); 
    
      Serial.print("Initializing SD card...");
      // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
      // Note that even if it's not used as the CS pin, the hardware SS pin 
      // (10 on most Arduino boards, 53 on the Mega) must be left as an output 
      // or the SD library functions will not work. 
    
      if (!SD.begin(10)) {
        Serial.println("initialization failed!");
        return;
      }
      Serial.println("initialization done.");
    }
    
    void loop()
    {
      rfidData();
    }
    void rfidData(){
      char Code[100];
      if ( ! mfrc522.PICC_IsNewCardPresent()) {
        return;
      }
    
      if (  mfrc522.PICC_ReadCardSerial()) {
        strcpy(Code ,mfrc522.PICC_GetUID(&(mfrc522.uid))); 
       // Serial.println(Code);
        writeFile(Code);
      }
    }
    void writeFile(char* data){
      File myFile;
      Serial.print("Saving data: ");
      myFile = SD.open("data2.txt", FILE_WRITE);
      //  Serial.println(data);
      myFile.println(data);
      delay(50);
      myFile.close();
      Serial.println(data);
    
    }
    فایل های پیوست شده فایل های پیوست شده
    • نوع فایل: zip MFRC522.zip (31.7 کیلو بایت, 158 مشاهده)
    ویرایش توسط magmagmary : 12-01-2013 در ساعت 12:00 PM

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

SEO by vBSEO