Crucial to my design is the ability to detect and identify keys. The potential solutions are divided into following categories: wireless, wired and explicit. The later means the user explicitly states „this is key #11“ through some interface. This is the least desired one and will be the fall-back if everything else fails. Therefore let's concentrate on the other two.
Because of the popularity of RFID tags wireless identification was the technology I thought about first when looking for a solution to this problem. But there are many more which fall into two categories: active and passive wireless.
Passive Wireless is the “classic” RFID tag we see as labels on high priced goods every day. The RF chip is powered “over the air” by the reader which limits distance, data rate and processing power of such solutions. But for identification, data rate and processing power requirements are very low, thus cheap solutions will perform well in this scenario.
I did not know that there are different frequencies with different characteristics in RFID technology. The following table lists properties relevant in this project.
Typical max sensing
Distance in m
Problematic to Operate near Metal
Low Distance, slow, expensive tags
ISM Band used for Smart Cards and Memory cards also NFC
+ cheap tags
~800 – ~900 MHz
ISM Band is also used for Bluetooth, BLE, ZigBee, WiFi, etc.
NFC and contact less Smart Cards use the same frequencies. 13.5 MHz readers and tags are easily available and cheap. UHF readers are very expensive so despite their good properties they will be excluded. 2.4 GHz passive tokens seem to exist only in theory. Therefore the choice boils down to two alternatives 125 kHz and 13.5 MHz which will be tested for their ability to communicate when the tag hangs between the keys. The metal may shield the tag and reliable reading might not be possible.
I have ordered one 125 kHz reader and key fobs and a NFC / RFID Arduino shield to try the most promising solutions.
(Foto by Adafruit Industries)
Active tokens are very similar to passive ones, only with a battery. This is of course very simplified, but is enough to get an idea. By actively powering the RF device many of the limitations of passive devices can be overcome. Plus RF technologies which are to power consuming for passive tags like WiFi and Bluetooth can be used. I was not able to find any passive token in the 2.4 GHz ISM band but there exist active ones. Because of size and weight constraints BLE tokens are most viable.
Wired solutions are often simpler and cheaper than wireless ones, but are less practical or convenient. My first idea to detect keys hanging on a hook was using switch which gets pressed or released by the weight of the keys. The detection part is really simple, more difficult is the identification. This has to be outsourced to the user: The hooks and key rings are marked with a colour and users have to hang their key on the respective hook. That violates my idea of how the user interface should be but would be a solution if everything else fails. (see explicit identification)
Since there is only one conductor between a key fob and the board 1-Wire devices came into my mind. Usually a circuit for 1-Wire looks like this:
But 1-Wire bus is a marketing lie: they do not count the ground wire!
The question now is where do we get the ground from?
I have two ideas which I have to test. First use the human body as ground. The mass should be big enough for the small charge which has to be transported (ca. 7 nano coulomb). The resistance of the skin can be several kilo Ohms which may be too much. Since I am not an electronics expert and everybody I’ve so far asked could not answer this question I have to try it. Parts are ordered, stay tuned for updates.
While testing it turned out that the human skin is a very bad conductor which makes this version impossible at least with 3,3 V.
Since this does not work I would insulate the hook form the board and use the board as ground. Not as elegant but should work.
And indeed the keys are good enough conductors and when they are large enough they touch the board. So I have a solution!