Recommendation for RFID hardware for 5-8 tags in a 4-6 inches range

Hi,

I am new to RFID hardware on Arduino.

I am looking for RFID reader that could detect multiple passive tags in an only small range of 4-6 inches (~15 cm). Imagine we have about 8 objects with RFID tags on it and we move all these 8 objects into this small area, and the RFID reader detecting all of the tags.

Googling around, I found this, and that further leads me to several hardware. For example, the common MFRC522 and the PN532. But the range are 6 cm only, and the shopkeeper said it could actually be even as low as 1 cm and it is pretty much for 1 tag at a time, so these do not fit the bill.


Eventually, I found some more appropriate ones:

--> RFID Module - SM130 MIFARE

From the datasheet, this one has read distance of 9.5 cm only. (~24 cm) Also, I'm not sure about reading multiple tags.

This one seems like it fits the bill:

--> M6E Nano

Once you’ve started, this board will read EPCglobal Gen 2 tags (see Recommended Products) at up to 150 tags per second. Writing of tags is also possible at 80msec standard write. The board has adjustable power output from 0dBm to 27dBm, meaning that with the correct antenna you can read up to 16 feet (4.9m), or 1 to 2 feet (60 cm) with the onboard antenna.

...although the range is quite overkill and the price is quite high.

So does anybody know any hardware that fits the bill more appropriately? Or is the M6E Nano the best candidate here?

The RFID reader I required needs to be able to read up to 8 tags simultaneously in a 4-6 inches range only. Preferably, if it's cheaper than M6E Nano, it would be great. But if not, that's ok too.

Iono

I have purchased https://robokits.co.in/wireless-solutions/rfid/pn532-nfc-rfid-module-v3-kit-reader-writer-breakout-board?gclid=EAIaIQobChMIvfS7ofm33wIVGw4rCh2g3wclEAYYASABEgL1E_D_BwE

Below sample code its working fine in I2c mode.

#include <Wire.h>
#include <PN532_I2C.h>
#include <PN532.h>
#include <NfcAdapter.h>
  
PN532_I2C pn532i2c(Wire);
PN532 nfc(pn532i2c);
 
void setup(void) {
  Serial.begin(115200);
  Serial.println("Hello!");

  nfc.begin();

  uint32_t versiondata = nfc.getFirmwareVersion();
  if (! versiondata) {
    Serial.print("Didn't find PN53x board");
    while (1); // halt
  }
  
  // Got ok data, print it out!
  Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX); 
  Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); 
  Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
  
  // Set the max number of retry attempts to read from a card
  // This prevents us from waiting forever for a card, which is
  // the default behaviour of the PN532.
  nfc.setPassiveActivationRetries(0xFF);
  
  // configure board to read RFID tags
  nfc.SAMConfig();
    
  Serial.println("Waiting for an ISO14443A card");
}

void loop(void) {
  boolean success;
  uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };  // Buffer to store the returned UID
  uint8_t uidLength;                        // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
  
  // Wait for an ISO14443A type cards (Mifare, etc.).  When one is found
  // 'uid' will be populated with the UID, and uidLength will indicate
  // if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight)
  success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength);
  
  if (success) {
    Serial.println("Found a card!");
    Serial.print("UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes");
    Serial.print("UID Value: ");
    String hex_value = "";
    for (uint8_t i=0; i < uidLength; i++) 
    {
      Serial.print(" 0x");Serial.print(uid[i], HEX);       
      //Serial.print(" ");Serial.print(uid[i], HEX);       
      hex_value += (String)uid[i];
    }

    Serial.println(", value="+hex_value);

    if(hex_value == "6610042131") {
      Serial.println("This is Key Tag. ");
    }
    else if(hex_value == "115231429") {
      Serial.println("This is Card Tag. ");
    }
    else if(hex_value == "63156295") {
      Serial.println("This is Phone Tag. ");
    }
    else
      Serial.println("I don't know.");


    Serial.println("");
    // Wait 1 second before continuing
    delay(1000);
  }
  else
  {
    // PN532 probably timed out waiting for a card
    Serial.println("Waiting for a card...");
  }
}