If you're like me, you nearly always carry your phone or are frequently at a computer. I often find it more convenient when I can interact with the things around me like the garage doors, car starter, sprinklers, electric blankets, holiday decorations, etc. via my phone or computer.
It is relatively easy to Bluetooth enable many devices. These instructions will explain how I Bluetooth enabled my garage doors and car starter. The implementation is quite generic. Similar techniques could be used to Bluetooth enable many other things too.
The Bluetooth board that was used has at least six different connections that could each possibly control a different thing.
There is a corresponding free Android application that you can download; Daisy On/Off. It allows dynamically creating, labeling, and configuring multiple buttons so that you can easily control the various things that are Bluetooth enabled.
There are risks associated with wireless control and modifying any equipment. You assume full responsibility and associated risks related to your use of this information.
- Bluetooth board - newer plug & play version
- Perf board - approximately 1.1" x 1.5" (29mm x 38mm)
- BS170 N-Channel MOSFET, or similar transistor
- Resistor 1K - 1M
- Wire for hookup - old phone wire works well
- Soldering iron and solder
- Wire cutters/strippers
Step 1: Getting to know the circuit and parts
The Bluetooth board has at least six pins that can be used for general purpose input/output (GPIO). The Bluetooth module on the board operates at 3.3V, however the board has a voltage regulator so that it can be powered from USB power or via other power sources like wall-warts or batteries up to 18VDC. By connecting the Bluetooth module to a general purpose MOSFET switch it can switch higher voltages and currents.
The BS170 MOSFET is a general purpose N-Channel transistor. This means that the switch turns on when the voltage on the gate is positive ~2.1V with respect to the source. The MOSFET source and Bluetooth module ground are connected together so they are properly referenced to each other. The gate of the MOSFET is the control and gets connected to one of the Bluetooth board GPIO pins. The MOSFET is turned on by driving the corresponding GPIO pin high.
When the Bluetooth module is reset or not set as an output, the pin effectively floats - it actually has a weak pull-down. By connecting a resistor between the MOSFET gate and source, we ensure that it always turns off.
Alternatively, if we wanted to turn positive power on to a device instead of grounding it for control, we could connect a P-Channel MOSFET to the N-Channel MOSFET. The source would connect to power, the gate to the drain of the N-Channel MOSFET and the drain to the devices positive terminal. The device would be directly connected to ground. A resistor should be connected between the MOSFET gate and source to ensure proper turn-off.
The Bluetooth board GPIO 3, 6, 7, 10, and 11 default to low upon power-up and will be off. GPIO 8 and 9 default to high upon power-up and will be on. The power-up state of each pin is configurable, see the quick reference manual and/or user manual.
Step 2: Initial assembly
- Attach the headers to the board
- Place the perforated board over the headers
- Place the transistor and resistor in the perf board - leave an extra row of holes between the resistor and headers and transistor and outside edge of board for connecting wires
- Connect the resistor leads to the transistor leads
Step 3: Final assembly and connections
- Add more transistor and resistor pairs to switch more things if desired
- Connect the transistor source to the Bluetooth board ground pins - connect to both header grounds to physically stabilize the board
- Connect the transistor gates (center pins) to Bluetooth board GPIO pins - each one to a different pin (recommend 3, 6, 7, 10, 11)
- Connect wires to the devices to be controlled
I used old phone cable, but most any wire could be used. Cut two phone cables, each long enough to run to one garage door opener. The green and black wires were connected together and red and yellow together - this is not necessary though. The black/green wire pair is connected to the transistor source which is ground. The red/yellow wire pair is connected to the transistor drain.
The spare car starter key FOB was opened and the battery and switch pins were identified. One end of the switch connected directly to the battery. This pin was connected to the transistor source. The other switch contact pin was connected to the transistor drain.
The MOSFETs contain protection diodes between the source and drain. If the car starter FOB is connected backwards, it will conduct through the protection diode and activate the starter immediately. If this happens just reverse the wires.
Step 4: Connect the garage doors
The MOSFETs contain protection diodes between the source and drain. If the garage door opener is connected backwards, it will conduct through the protection diode and activate immediately. If this happens just reverse the wires.
Step 5: Configure and Test
The device can be tested many ways. The simplest way to test it would be to use the free Daisy On/Off application for Android. Just download, configure, and test. The device can also be controlled through any Bluetooth serial port connection (SPP). I like to use BlueTerm on my Android for command line testing and GtkTerm on Ubuntu Linux.
- Power up the Bluetooth module by connecting it to a USB host or a USB power adapter. The LED should blink red indicating waiting for connection.
- Enable Bluetooth and open the Bluetooth manager
- Scan for new devices - the device can be renamed so it can easily be identified, see the manual
- Pair with the device - default pin code if requested is 1234, can be changed for security (up to 20 characters)
- Connect with SPP - the Bluetooth module should change to green indicating connected
- Open a terminal like GtkTerm, on Linux
- Connect to the rfcomm port
- Immediately send just $$$ not followed by Enter - the device should respond with 'CMD', if it doesn't, the internal command mode timer has expired. Power cycle the Bluetooth module and try again.
- Once in command mode, send 'st,255' followed by Enter - this sets the command mode timer to indefinite
Use the quick reference manual to figure out exactly which commands to enter to control the Bluetooth module GPIO pin that was selected for control, e.g., if GPIO pin 3 was selected enter the following commands:
- s@,0808 followed by Enter - sets GPIO 3 to an output
- s&,0808 followed by Enter - sets the pin high and turns on the transistor
- s&,0800 followed by Enter - sets the pin low and turns off the transistor
The direction command only needs to be sent once after the device is reset or power-cycled. Optionally you can send s%,0808 to set the GPIO 3 direction to output on power-up. The direction command would then never have to sent again unless the device is factory reset for some reason.
Step 6: Package
Since I have a MakerBot Thing-O-Matic, it is quick and easy to whip up a custom project case. Just draw one up in Google SketchUp, convert it to STL, and print it out. I can print for you.
The components were then test fit into the cases. Had to do a little filing on the perf board since I measured it close and it breaks slightly uneven. The starter FOB fit, but was also a little tight. Probably a bit of shrinkage in the plastic as it cooled.
After testing, the Bluetooth case was closed with hot glue and the starter FOB with duct tape. No respectable project would be complete without a little duct tape and hot glue.
To mount it to the garage rafters, I used some Velcro dots. The dots were stapled to the wood since the sticky back might come loose in the heat and humidity. The dots will probably stick OK to the plastic since it is clean and not very permeable.