Brello Umbrella Stand
Made by Dani Quan, kanikak, Benjamin Hecht, nsridhar, Qin Bian and Matthew M
The smart umbrella stand uses RFID to check in and out umbrellas in the Brello share.
Created: May 3rd, 2018
In designing the box, we were faced with a problem: how can we design an easy-to-use, intuitive box that would securely hold the umbrella within and prevent theft. Umbrella stands are usually very intuitive, the user just has to drop his or her umbrella into the stand, so we attempted to make something that would mimic this comfortable activity but with extra technology. The main way to do this was by making checking out one of our umbrellas as simple as scanning an ID to get onto a bus.
Two RFID scanners were required, one for receiving the umbrella, and one for scanning the fob. We started by wiring a servo motor and one of the RFID scanners. After doing some research about other projects which used the same RFID scanner on the photon, we found a library and wiring diagram to set up the scanner. The test code we ran printed the RFID serial number to the Serial port if a card was detected. From here we were able to modify the code so that an event was published whenever an RFID card was detected. We thought about checking the serial numbers as if we were checking for our specific devices, but decided to simply check for a valid card. From here, we looked into how to read two RFID scanners on the same photon. The RC522 scanners use a Serial Peripheral Interface bus to communicate, which uses a lot of pins on the photon. However, it makes hooking up a second scanner as simple as adding a different pin for the Slave Select Pin and sharing all the other pins with the first device.
The first version of our box can be seen below:
In our first version of the box, we created a small-scale version to test whether or not our design worked, if our components worked properly, and if there is anything we can improve upon. In this phase, we realized that we needed a way to lock the umbrella in that worked with our servo motor. So we decided to attach a hook to it and have a corresponding hole for the hook to go into. In our initial testing, this worked well, however, we soon realized that in order to most optimally function we would need to cut into the side of our box. Therefore we decided to create an external housing for the main box, which would help us cover up the various wires and holes necessary to creating a functional umbrella stand.
The next image features our hook design, and the image after that shows our boxes in the process of being clued.
After the final box was cut and glued, the electronics were integrated with the stand. The photon was mounted near the top of the umbrella stand near the servo motor. The RFID scanner for the fob is mounted on the front of the box near the top, and the umbrella RFID scanner is wired onto the bottom of the box. The Initial RFID test can be seen in the image below:
#include "RFID.h"
/* Define the pins used for the SS (SDA) and RST (reset) pins for BOTH hardware and software SPI */
/* Change as required */
#define SS_PIN_1 A1 // Same pin used as hardware SPI (SS)
#define SS_PIN_2 A2 // Same pin used as hardware SPI (SS)
#define RST_PIN D3
/* Define the pins used for the DATA OUT (MOSI), DATA IN (MISO) and CLOCK (SCK) pins for SOFTWARE SPI ONLY */
/* Change as required and may be same as hardware SPI as listed in comments */
#define MOSI_PIN A5 // hardware SPI: A5
#define MISO_PIN A4 // " " : A4
#define SCK_PIN A3 // " " : A3
#define SERVOPIN D0
Servo latch;
int close = 10;
int open = 90;
int angle = open;
/* Create an instance of the RFID library */
#if defined(_USE_SOFT_SPI_)
RFID RC522_1(SS_PIN_1, RST_PIN, MOSI_PIN, MISO_PIN, SCK_PIN); // Software SPI
#else
RFID RC522_1(SS_PIN_1, RST_PIN); // Hardware SPI
#endif
#if defined(_USE_SOFT_SPI_)
RFID RC522_2(SS_PIN_2, RST_PIN, MOSI_PIN, MISO_PIN, SCK_PIN); // Software SPI
#else
RFID RC522_2(SS_PIN_2, RST_PIN); // Hardware SPI
#endif
void setup()
{
Serial.begin(9600);
latch.attach(SERVOPIN);
latch.write(angle);
#if !defined(_USE_SOFT_SPI_)
/* Enable the HW SPI interface */
SPI.setDataMode(SPI_MODE0);
SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_CLOCK_DIV8);
SPI.begin();
#endif
/* Initialise the RFID reader */
RC522_1.init();
RC522_2.init();
}
void loop()
{
/* Has a card been detected? */
if (RC522_1.isCard())
{
/* If so then get its serial number */
RC522_1.readCardSerial();
if (angle == open) {
Particle.publish("diot/2018/brello/umbrella_status","returned");
angle = close;
latch.write(angle);
}
/* Output the serial number to the UART */
Serial.print("Umbrella RFID: ");
for(uint8_t i = 0; i <= 4; i++)
{
Serial.print(RC522_1.serNum[i],HEX);
Serial.print(" ");
}
Serial.println();
}
if (RC522_2.isCard())
{
/* If so then get its serial number */
RC522_2.readCardSerial();
if (angle == close) {
Particle.publish("diot/2018/brello/umbrella_status","taken");
angle = open;
latch.write(angle);
}
/* Output the serial number to the UART */
Serial.print("Key Fob RFID: ");
for(uint8_t i = 0; i <= 4; i++)
{
Serial.print(RC522_2.serNum[i],HEX);
Serial.print(" ");
}
Serial.println();
}
delay(500);
}
Click to Expand
Overall the process of creating and designing the interior and exterior boxes were a lot of fun. Granted, based on the dimensions we used we had to buy three 2x4 sized acrylic pieces. The main issue we ran into was lining up the hook with the umbrella to lock it in. Since the umbrella was a lot thicker than we intended, it would often knock the hook off of the servo motor, thus ruining the intended lock mechanism.
One thing that we could not accomplish in the class is to have the umbrella charge when it is in the box. If we were to actually create the product, we would have to find a way to have the top of the umbrella plug into the box for charging.
A hands-on introductory course exploring the Internet of Things and connected product experiences.
The smart umbrella stand uses RFID to check in and out umbrellas in the Brello share.