I'm working on a project where I want to detect presence of multiple (200-300) RFID tags on a specific surface. I have a general understanding of electronics, but no experience with antennas and RFID.

The surface would typically be a 20x20cm-30x30cm flat antenna on a table connected to a raspberry pi, and I would like to somehow get access to a list / array of the ID's for all RFID tags present on top of the antenna.

For example; Les say I tag 300 Lego pieces with RFID tags and use 250 of them to build a 30cm high structure on top of my antenna, then I would like to access the ID's of the 250 pieces I've used in an application on my raspberry pi.

Is this doable with reasonably affordable components? Any suggestions to what sort of antenna I should be looking for, and where I can get one?

  • \$\begingroup\$ Are their any restrictions on the type of RFID? As noted in the answers the standard short range RFID may have issues with that many tags. If however you can use 900MHz RFID (ISO 18000-6C, also known as Gen2 RFID) then it is designed to rapidly scan for large numbers of tags, audits of hundreds of tags per second are possible. \$\endgroup\$
    – Andrew
    Commented Sep 23, 2016 at 13:05
  • 1
    \$\begingroup\$ The average RFID tag is quite a bit larger than the average lego piece, which might present a problem here. \$\endgroup\$
    – pjc50
    Commented Sep 23, 2016 at 14:13

2 Answers 2


In the ISO14443 protocol (the protocol used by most contactless smart cards), there is a mechanism that does that: it is called anticollision.

Basically (and simplifying things), this is how it works for ISO14443 type A (which is one of the two flavors of contactless card):

  • The reader regularily polls the field, asking all tags to respond with their Unique ID (that is assigned during the manufacturing of the tag).
  • The reader is able to detect when two tags answer different things at the same time. When it happens (say, at then nth bit), the reader re-polls the tags in the field, but providing the first n bits he got right, plus one bit set to 0, so only the tags with the ID starting with these bits answer.
  • He'll also try with the n bits he got right, plus one bit set to 1, to get the other tags.
  • This way, and eventually using multiple levels and tries, he finally gets all unique IDs of all tags in the field.
  • Later on, when he wants to send a command, he'll indicate to which tag the command is targeted, so only this tag processes the command and answers.

for ISO14443 type B, the anticollision is done differently, and is based on time slots. I don't have the details in mind, but it's in the spec.

So from the protocol point of view, you could theoretically do what you want, no problem.

Now, 200/300 tags is a lot, and you'll therefore certainly need a specifically-designed antenna to be able to power all those tags at the same time. Moreover, it implies that the communication range certainly needs to be higher than usual, because 300 lego parts takes more room than 5 cards stacked on the top of each other.

Edit: the above only suggest HF (13.56Mhz) solutions. These solutions are made for limited range (10-20cm or so), but extended capabilities (cryptography, ...). What is actually more appropriate in your case are UHF (860-960MHz) solutions, mainly ECP Gen2 tags. I haven't worked myself with this technology, but it seems to be what you need.

It can work over a few meters (even when passively powered), but it is primarily made for simple tagging. Of course, it also supports some anticollision scheme, so you can have a lot of tags in the field. Bonus: these tags are usually cheaper than the 13.56Mhz tags. The readers, however, seem more expensive (typically in the 500$-1000$ range), and I'm not sure how you can easily interface them with a raspi (although some of them seem to have a USB interface, you'll have to check for the drivers).

  • \$\begingroup\$ Your explanation of the Type A system is helpful. I wasn't aware of it before. It seems similar to the Dallas 1-wire polling system whereby it can identify all the tags on the network very quickly. \$\endgroup\$
    – Transistor
    Commented Sep 23, 2016 at 12:33

Common RFID tags and readers work 1:1 so if there are two tags present this would cause a problem because both tags would respond potentially at the same time and the data read would be corrupted.

EDIT - dim's answer explains that there is a protocol for sorting out the presence of multiple tags should their responses collide and this, as far as I can tell, results in several 1:1 communiques between master and slave(s).

A better idea might be to power all the tags from the inductive coil antenna but then use a sweeping address interrogation method whereby the tags act like slaves listening for their specific address and reply on receipt of that request to the master.

Powering tags may be a problem when those tags sit high-up on the pile of other lego bricks but given that the "power" antenna is fairly large, it's magnetic field will extend quite a distance and, a good rule of thumb is that you should be able to "harvest" sufficent energy from the magnetic field at about half the radius of the coil (this would be about 10 cm in the case of a square coil). Much beyond this the magnetic flux density falls as distance cubed i.e. rapidly becoming too small to extract sufficient energy.

So if the lowest lego brick were in the plain of the 20cm coil and were moved to 10 cm away, the field it receives drops by 2\$\sqrt2\$ (i.e. reduces to about 35%). At 2x this distance it has reduced to about 9%. At 4x it is about 1.4%. It's starting to approach an inverse cube law.

You can use the calculator on this page to confirm or just use the formula: -

enter image description here

enter image description here

  • \$\begingroup\$ The ISO14443 protocol is able to handle multiple cards in the field. The standard has been written with this problem in mind since the beginning, so the fact it works 1:1 isn't true. Otherwise, you wouldn't be able to open the door of you workplace building by just putting your wallet in front of the reader, if you happen to have a contactless payment card in this same wallet. For contactless applications in everyday usage, that would actually be a big problem. \$\endgroup\$
    – dim
    Commented Sep 23, 2016 at 11:27
  • \$\begingroup\$ Sounds like I've proposed an idea that already has a potential solution. \$\endgroup\$
    – Andy aka
    Commented Sep 23, 2016 at 12:13
  • \$\begingroup\$ I'm not saying your solution isn't right, I'm just saying that the "Common RFID tags and readers work 1:1" sentence is inaccurate. \$\endgroup\$
    – dim
    Commented Sep 23, 2016 at 12:16
  • \$\begingroup\$ @dim if both tags answer at the same time or generally significantly overlap their transmissions, given that they use the same transmission frequency there has to be destructive collisions and this, I would estimate means that it cannot cope with true simultaneous collisions despite the hype. They may look simultaneous but if it's all over in a few milli seconds then who is able to tell? \$\endgroup\$
    – Andy aka
    Commented Sep 23, 2016 at 12:32
  • \$\begingroup\$ The reader is able to tell for sure when there is a collision. The spec is made to solve that problem. Just like the CAN protocol can guarantee that if two nodes are talking at the same time, the one that will send the first dominant bit will take over, and that will not lead to a corrupted frame at any point of the network. \$\endgroup\$
    – dim
    Commented Sep 23, 2016 at 12:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.