Introduction: InfoBell
I spend a lot of time in my small workshop at the end of my garden.
I have a wireless door bell with a repeater in my workshop. I'm getting on a bit so it can take me about 30 seconds to get to the front door if someone rings the bell. By the time I get there, the delivery guy is already knocking on neighbours doors to drop off a parcel and get a signature.
My InfoBell tells callers that I will be with them within 30 seconds (user configurable) or lets them know if I am otherwise engaged/out!
I wanted the doorbell to be battery operated and completely self contained. The messages displayed had to be user configurable and extremely easy to change from the IN to OUT message.
I use bluetooth with a MIT App inventor Android phone app to program the messages.
The buttons to initialise the Bluetooth comms and set the IN / OUT messages are located at the bottom of the device. The required function is selected by pressing the relevant button and pressing the main door bell push button.
These buttons are only active when the door is open ! Whether the door is open or closed is determined by the use of a digital compass (QMC5883) and some trigonometry. I must confess I had to use Google for some assistance here as its been a while (around 46 years) since I sat in a classroom !
I could have hard coded the readings from the QMC5883, but I figured that if someone decided to make this project, the chances that their door faced the same direction as mine were reasonably slim!
The only button which is active if the door is closed is the one which sets the 'door closed' information.
Step 1: Problems to Overcome
I had three difficulties.
The first was synchronising the actual bell push and the button to initialise the arduino and display.
I tried many methods of 2 switches and micro switches but they were unreliable, so eventually I opted for a DP relay.
The next problem was with the wireless doorbell itself. It worked fine with no back on the 3D printed box but did not want to cooperate when it was installed on the front door! My solution was to have a section of the back cover about 1mm thick - that did the trick !
The final problem to overcome was to squeeze all of the components into a reasonable sized box !
Step 2: The Components, the Build & How It Works
For such a simple device I used the following !!
3D printed box & button
1 x SSD1306 OLED display
1 x QMC5883
1 x bluetooth shield
1 x double pole relay
1 x self latching relay
5 x PCB mount tactile switch
2 x 3v batteries
1 x original door bell
1 x diode
1 x pnp transistor
I had to 'birds nest' the wiring to ensure there was enough room to squeeze all the componets into the box - its not the neatest project I've ever done!
I used 2 x 3v batteries with a diode to drop the supply a tad.
The original doorbell came with a 12v battery.
When the door bell button is pressed, relay contacts close and operate the original door bell simultaneously setting the self latching relay which supplies 5v to the Arduino, Bluetooth shield and QMC5883.
When the Arduino has done its work, pin 12 is pulsed low which resets the latching relay (via a transistor) removing the supply.
When the device is first attached to the CLOSED door, the button connected to Arduino pin 4 is pressed while the doorbell button is pressed. This supplies power to the Arduino and reads the orientaion of the QMC5883 and stores the value in the eeprom. See the Software page and Arduino sketch for how this works.
The other 3 buttons will now only operate when the door is not in this position, i.e.closed.
To set the messages and countdown timer, the button connected to pin 7 is pressed while the main bell push is pressed AND the door is open, this initiates the bluetooth routine. Settings are entered via the Mit App Inventer App. The app saves the details automatically and stores the details in the Arduino eeprom.
To set the IN / OUT message the buttons connected to Arduino pins 5 or 6 are pressed while the main door bell button is pressed AND the door is open.
Depending on which button is pressed, eeprom address 0 is either set or reset. There is a limit on the amount of read/writes the Arduino eeprom will tolerate. According to most references, the limit is around 100,000 which means If the eeprom is written to 4 times a day, it should be about 55 years or so before problems may arise.
Step 3: The Software
The software for the Ardiuno sketch is pretty well documented by my standards !
To ensure there is reasonable data in the eeprom, uncomment the following, and compile.
After compilation, re apply the comment markers and re compile once more.
EEPROM.begin();
/*
outone="0";
outtwo="1";
outthree="2";
outfour="3)";
inone="0";
intwo="1";
inthree=10;
*/
When the finished project is mounted on the door, with the door closed, press and hold the button connected to Arduino pin 4 and press the bell. A message will confirm your action.
This stores the values read from the digital compass in the Arduino eeprom.
The function 'diffy' determines whether the door is open or closed.
void diffy(int froma, int toa )
{
int diff;
diff=froma - toa;
diff=(diff+180)%360;
if(diff <=0)
{
diff+=180;
}
else
{
diff -=180;
}
Next load up the bluetooth .APK on a mobile phone. With the door OPEN, press and hold the button connected to Arduino pin 7 and press the bell push. The unit will power up in bluetooth mode. Pair the BT module with your phone, fill in the required information and send it to the door bell.
The doorbell will remain powered on until it has received some information from the phone.
When the information has been sent to the door bell, the app will retain the information. So, if you want to make any alterations you do not need to rekey all of the text.
The APK can be found at the following address.
http://ai2.appinventor.mit.edu/#5902371463495680
For security reasons your phone should ask you to verify that you wish to install this app. On my phone there is a setting called 'Install Unknown Apps'.