Introduction: RFID Seating Plan
I wanted to make something special for my wedding tables chart, and I thought this was a good way of making it personal, as it reflects my love (addiction) for electronic projects.
So the plan was to make a big wood panel with the plan of the room on it, including, of course, the tables and their names (they are plant names, in french). The guests received a card with an RFID sticker on it along with their invitation. On the back of the card was written (in french) something like "This card is of great importance, keep it safe and carry it on you at the wedding". I didn't want them to know what it was for until the wedding.
The chart has several elements : a TFT display, an RFID reader, a green LED and a red LED, a push button and one strip of 3 LEDs for each table. When the RFID tags are scanned, the green LED turns on if it is recognized, and a personalized message is displayed on the screen, including the name of the table where the guest is seated. In addition, the LED strip associated with the table is turned on, shedding light on the table on the room's plan. If the card is misread or unrecognized, the red LED is turned on with an "access denied" message on the screen. The button is for those who did not succeed in not losing or forgetting the card. It displays a message on the screen, asking them to go to the bar and say something like "I am not reliable", in exchange of which they get a backup chart to find their seat.
I changed a few things along the way : I wanted to paint the wood panel but changed my mind because I was scared I'd make a mess and have to start over with a new panel. Since I have a cricut machine I decided to make the writings and drawings with vinyl.
I also had a 20x04 character LCD screen in the beginning, but I upgraded to a 7" TFT screen because it's bigger and not as limiting in terms of message length.
Step 1: Materials
Here is a list of the components I used for the final product (Arduino Mega, TFT screen and vinyl)
- Arduino Mega
- Mega protoshield for Arduino
- Adafruit 7" TFT screen (no touch necessary, bought on Adafruit)
- RA8875 Driver Board for 40-pin TFT Touch Displays (bought on Adafruit)
- RC522 RFID reader
- Number of tables x N-channel MOSFETs
- Number of tables x 10k Ohms resistors
- 12V LED strip, cutable (I used https://www.amazon.ca/gp/product/B01FH3QH1A/ref=p...
- In-line power switch for 2.1mm barrel jack
- 8x AA battery pack (12V) and batteries
- 1 x green 5 mm LED
- 1 x red 5 mm LED
- 1 x Push button
- 3 x resistors for push button and LED (recommended, value can vary)
- Piece of PCB
- Lots of wire and solder
- Heat shrink is a good idea
- Small screws and nuts (M2 or M3)
- Wood canvas or panel (I used this https://www.deserres.ca/apbreg)
- Vinyl and transfer tape
- 2 x 5mm Plastic Bevel LED Holder
- 3D printed parts
- Super glue for lids on LED strips holders
- Peace of fabric and velcro
Tools (some are not mandatory) :
- Wire cutters
- Soldering iron
- Drill and bits
- Cricut or Silouhette Cameo or some other way to cut vinyl
- Scrapper for vinyl
- 3D printer or friend with one (like me) or use of 3D hubs
- Sewing machine for fabric cover
Step 2: Prototype With Arduino Uno
I was new to the Arduino world so I decided to make a prototype with the Uno first. I say first because I eventually moved it to the Arduino Mega to get more output pins for the LEDs that I wanted to light up the corresponding table (this means I needed one pin for every table). If you want to make this without LEDs or with only one or two to tell if the RFID scan worked (like my green and red ones), the Arduino Uno is sufficient (depending on your display).
Here is the pinout diagram I used for the Uno :
SDA to pin 10
SCK to pin 13
MOSI to pin 11
MISO to pin 12
RQ is unused
GND to ground
RST to pin 9
3.3V to 3.3V output on the Uno
LCD (in my case, a 20x04 LCD with I2C shield, before the upgrade to TFT):
SDA to A4
SLC to A5
VCC to 5V output on the Uno
GND to Gnd
You could also use an LCD without the I2C, but would need more pins.
Step 3: Moving to the MEGA
When I got the LED strip and the transistors I had to move the prototype to the Arduino Mega. I also bought a prototyping shield to make things permanent but still removable from the Arduino itself. Here is my input and output layout with the Mega :
LED strips for tables : 30 to 45
Red LED : 27
Green LED : 28
Button : 29
TFT shield :
CS : 7
INT : 3
RESET : 12
Vin : Arduino's 5V
GND : ground
RFID reader :
SS/SDA : 9
RST : 8
GND : ground
3.3V : Arduino's 3.3V
COMMON SPI :
SCK : 52
MOSI : 51
MISO : 50
For those who are not familiar with SPI devices, like my RFID and TFT screen, there is only one port available on the arduino Uno and Mega. With multiple devices, they have to be connected to the same MOSI, MISO and SCK, and they need one different normal pin each for the arduino to tell them if they have to listen or not (slave select).
To run the LED strips, I connected a female barrel connector to the shield, that connects to a 12V power supply. The Vin of the Arduino is also connected to this power source.
The LED strips all need a MOSFET to manage power and control (because the power source is external and the voltage is high). I soldered these with their resistors on the arduino shield. Red wires are for power, and black wires for control. I started with shorter wires and soldered them to LED strips wires when I assembled the panel. As you can see, every black wire is identified but red ones are all the same (12V) so they didn't need identification.
Every LED strip is connected as follows : LED Gnd to center pin of MOSFET, right MOSFET pin to resistor and arduino pin, left MOSFET pin to arduino Gnd.
I had to leave some space on the shield for the screen and RFID reader wiring. The connections are as stated above, directly to the pins/GND/5V, except for the SPI connections for which I used an extra PCB because both the screen and the RFID reader had to be connected to the same pins. I also soldered the resistors for the LEDs (green and red) and the button on the PCB.
The shield soldering was rather delicate but I'm happy with the results and I'm glad I used a shield, as it made a cleanier job and the Arduino easily reusable. The connections are solid and they won't fall off during the wedding (as it would have with wires inserted into headers).
Step 4: RFID Cards
Since this was for a wedding, we wanted the RFID chips to be elegant. We had pictures taken as pre-wedding photoshoot and we took a few ones with a frisbee (we are both Ultimate frisbee players). Then I chose 3 pictures and ordered business cards, with the pictures on one side and a message on the other. The RFID stickers fit nicely on the frisbees and the result looks great, plus it fits easily in a wallet!
Step 5: The Panel
As I said earlier I gave up on painting the panel, because I was too scared of making a mistake.
I bought a wood canevas in an art store, which is 3' tall by 4' wide. This is ideal because it has a rim in the back like a normal canevas, so I had space to put the components and wiring. It was then easy to hide it all with a piece of fabric and velcro, and it was still accessible.
My husband-to-be applied lacquer to get a nice finish. Then I designed the writings and shapes on cricut design space and cut my vinyl sheets. Sticking them to the wood panel was no easy task, but I got it done. My main mistake was to put the vinyl on transfer tape and not making the transfer right away. It allowed the vinyl to stick more to the tape and made the transfer more difficult.
For the TFT screen and RFID reader, I designed frames that my friend printed on his 3D printer. The push button didn't need any sort of frame, only a big hole drilled carefully. I bought plastic holders for the single LEDs and they were great, they created a neat finish.
For the LED strips, I asked a friend to design a holder for me, because I'm not that good with 3D design and they were a little more complex than the frames. Basically, they needed to hold the strips so they pointed the panel at a 45 degrees angle. I also asked for wire "hooks" under the main arm, a hole to get the wires through and two screw holes on the base. She ended up leaving space in the head, neck and base for the wires to come through, so they were completely invisible. I assembled the LED strips by cutting them every 3 LED, scraping the copper protection, soldering my wires, sticking the strips on the holder, passing the wires through the holes and gluing the lids on.
After all this was ready, it was a matter of drilling holes carefully and screwing all those small screws and nuts. Be careful with the screen's flexible PCB, it can be damaged easily. I protected mine with electrical tape. I protected the connections with heat shrink.
I added some screws and wood pieces to secure the arduino and the battery pack (which is removable easily by lifting the wood). I also have a wire with a switch between the arduino shield and the battery pack to turn the panel on and off without having to unplug anything.
Step 6: The Code
Here's how the panel works :
There is a home screen with our wedding logo and a message saying "Scan your card" (in french). When a card is scanned and recognized, a personnalized message is displayed, with the name of the table where the guest is seated. At the same time, the correct LED strip is turned on, illuminating the guest's table on the plan. This is held for a few seconds (around 10), enough for the guests to read it and look at the plan, and then it gets back to the home screen. A green led also lights up when a card is recognized.
If the card is not recognized, the hole screen becomes red and says ACCESS DENIED. This will most likely not happen on the wedding night, but still a cool feature. A red LED is also lit when that happens. I had to add a delay before the denied access message was displayed because sometimes it took a few miliseconds for the card to be read correctly.
If the button is pressed, a message is displayed telling the guests to go to the bar and say a code ("I am not a reliable person") to the bartender, who has an emergency seating chart.
If a card is scanned or the button is pressed before the home screen is back, it still works (the new message is displayed). I wanted this to avoid waiting between guests, because there is always a queue when it's time to go seat.
Our logo is drawn with lines and text, but it is possible to load images from SD cards on TFT screens. Google it!
The code is built with a structure type. For each guest, a structure includes the message to display, the table name and the led strip to light up. The strange words in the code represent the table names!
Step 7: All Done!
If you do things like this at your wedding, have someone take videos because you want to see peoples reactions, but you probably won't be there when people use it.
Also, test your board! I had a card for every table to test the lights until the very last minute.
This project is highly adaptable and was very rewarding, even if I spent many hours working on it and was used for one night only (definition of wedding planning).
Participated in the
Epilog X Contest