Overview
In order to maintain an updated list of the products in our fridge, we used radio-
frequency identification (RFID). Each item was tagged with an RFID card upon entering our
fridge for the first time. Every time a product was placed in or removed from the fridge, the RFID
antenna installed inside the fridge recognized the product's unique RFID tag, and registered it
as either in or out of stock. The RFID reader did not require much configuration in our hardware
project. We needed only to add another CoreUARTApb peripheral to our APB bus and one top
level pin to receive the data from the RFID reader. Every time the antenna read an RFID tag,
the tag was sent to the processor which then updated the fridge's stock.
Difficulties
The biggest problem our team faced with the RFID reader was deciding how to trigger
an interrupt whenever an RFID tag was read. Unfortunately, the RFID reader had only three
wires for us to interface with: data in, data out, and ground. There was no line that could be
conveniently used as an interrupt for the line the data was sent on. We eventually decided to
use the data as an interrupt for itself.
Another challenge resulted from the core functionality of the RFID reader - it would
consistently transmit a few header bytes even when it had not successfully read an RFID tag.
This caused an interrupt to be generated about every 10 ms. Since the receiving of the data
triggered our RFID interrupt handler function, we were forced to acknowledge all of the faulty
reads in addition to the reads of actual RFID tags. We left the task of differentiating legitimate
and illegitimate reads to our software. This was done by reading the first three headers bytes
sent by the RFID reader and determining whether or not a tag was read. If there was a
legitimate read, our software would continue to read 16 more bytes, representing the RFID tag.
If there was not a legitimate read, we cleared the UART buffer and waited for the next interrupt
to be triggered.
Outcome
Once we had completed all software and hardware development for the RFID reader,
we had it functioning exactly as we had hoped it would. It was able to accurately and
consistently detect products as they were put in or taken out of the fridge. Ideally, the RFID
reader would only have sent data when it completed a successful read, which would decrease
the amount of CPU time used to process invalid reads. Unfortunately, the reader that we used
did not support this functionality. This is one way we could improve our project if we were to re-implement it.