You can do almost anything with the right combination of Feather microcontroller and FeatherWing! From blasting on a fan to opening a trap door, from making a playing card levitate to lighting up hundreds of NeoPixels, from cuing music and sound effects to detonating a smoke bomb, it's all possible.
But what about triggering these events remotely at long distances, in a cell-phone (and human) dense environment, such as a theatre or festival? Beginners often assume they can use WiFi or Bluetooth to find that once the theater is full of patrons, signals get slow and spotty. Or maybe you're outdoors at an arts festival? Good luck getting a WiFi signal working out there!
This is where sub-GHz transceivers shine. As long as you aren't trying to transmit a tons of data, you don't have to share any spectrum with 2.4GHz devices and the range is great. 900Mhz (433Mhz in ITU Europe) RF transceivers come in to save the day!
Using Feather Packet Radio boards (RFM69HCW or RFM9X LoRa), you can send encrypted commands at great distances -- 500 meters line of sight for RFM69HCW, and 2 kilometers for LoRa! -- with no worries about pairing, scanning, and so on. Just a good, old fashioned, magical, invisible wire that connects all of your devices easily!
This guide shows how you can build a versatile controller to take on a nearly limitless variety of remote triggering needs. You'll use a 16-button Trellis pad to send commands, rotary encoder knob to select effects banks, and an OLED display to keep it all straight!
With the Feather's built-in battery charging circuitry, you can keep the LiPoly battery topped off and ready to go!
The essential parts for your controller are:
- Packet radio Feather microcontroller and antenna as the brains of the transmitter. Your choice of 900MHz for US, 433MHz for ITU Europe, in either M0 or 32u4 processor variant. The RFM69HCW radios are the easiest to set up and a bit less expensive, while the LoRa boards are slightly more involved to set up, but longer range
- Trellis driver PCB, with silicone keypad for sixteen lighted buttons
- OLED display FeatherWing
- Rotary encoder for menu selection
See the right sidebar for specific product links.
On the effects side of things, you'll want additional Packet radio Feathers of the identical frequency and flavor (RFM69HCW or LoRa, you can't mix and match!). These can have any FeatherWing or additional circuits connected to them, depending on what you need to trigger.
Here are some examples:
Music Maker for remote MP3 playback
Power Relay to trigger high power, AC devices, such as motors, lamps, and fans
DC Motor + Stepper for actuating small DC motors or precisely position things with steppers
8-Channel PWM/Servo to rotate hobby servos (small robot arms...?) or light up lots of standard LEDs
NeoPixels on a 4x8 RGB LED board, or by stringing as many strips of externally powered NeoPixels as you like!
In addition to the parts listed on the sidebar of this guide, you'll also need six screws to fasten the enclosure:
And, if you're 3D printing the enclosure, you'll want some PLA filament for that, such as:
To build the transmitter, first solder the short female headers onto the Feather.
Using the short headers allows us to have a lower profile for the enclosure. Compare the short headers on the left to the regular ones on the right in this CG model.
Next, solder the antenna connector to the bottom of the Feather. OK, maybe my dissection microscope is overkill, but it sure is helpful to have some magnification!
I found it helpful to first tin the pads, then hold the part to the board while reheating the solder.
Now, snap on the antenna connector cable.
Thread on the antenna and you're ready to transmit!
Solder short male header pins onto the OLED FeatherWing.
Here's a quick test fit of the OLED and Feather together again for the first time.
Prep your Trellis board and 16 LEDs for a fun solder party. Please note, all of the through holes have a "+" sign to mark the positive hole -- place the longer legged anode side of each LED into these.
Push each LED through, bend the legs, and then flip the board over for soldering.
After soldering, clip the legs off. Sorry legs.
The connections from the Trellis to the Feather are SDA, SCL, GND, 5V, and INT.
Look at the breadboard diagram below to see the connections that will be made. We will actually solder the connections to the inner row of pin holes on the OLED FeatherWing, as seen in the second diagram and the photographs.
We'll drive the LEDs from the 3.3V output of the Feather, which works just fine.
Solder a 6" length of wire to each by tinning the pads, tinning the wires, and then heating them together.
Next, solder the Trellis wires to the inner row of the OLED FeatherWing, pushing the wires up from underneath.
See those long pieces of excess wire tips protruding from the top of the board?? Clip them off!
I absolutely love the Feather boards because they take care of so many functions for you without need of extra hardware! Case in point -- there is a built in LiPoly battery port and charging circuit as well as an Enable pin that can be used to make a neat little on/off switch without splicing battery wires.
Let's wire up the slide switch.
Strip and tin the short yellow wires, and add some heat shrink tubing. Tin the middle and one of the outer legs of the switch, then solder on the two wires and heat the tubing.
Tin one of the free GND pads on the Trellis and then solder on one of the yellow switch wires, it doesn't matter which one, all we're using the switch for is to tie the En pin to GND or not!
Solder the other yellow switch wire to the En pin on the OLED FeatherWing.
Here's the finished power switch, as well as a test fit to see how the wiring is routed between the FeatherWing and Feather.
Rotary Encoder Switch
The final component to solder on is the rotary encoder.
Again, solder the wiring to the proper pins on the OLED FeatherWing from below.
For the black GND wire, since there isn't a free one on the FeatherWing, use another GND pad on the Trellis.
Now, solder each wire to the rotary encoder, as shown in the diagram above and the animation below. Note, a short length of wire is used to connect the two GND pins of the encoder.
The parts to print are the case bottom, middle, and top, as well as two mounting parts, one for the Trellis, and one for the Feather.
These can be printed in any rigid material, although PLA seems to work best for the close tolerances of the snap fit parts. The case design is a remix of the Trellis Mini Untz MIDI controller by the amazing Ruiz Bros.
Download the files by clicking the button below.
Alternate Ending Alert: You can print the rFX_caseBatteryBot.stl file with integrated holder clips for the 2500mAh battery if you like!
Here's the order of assembly:
- Place the on/off switch into its spot in the case bottom
- Set the battery on the case bottom
- Push the antenna cable through the hole at the top of the case, allowing the lower nut to be held captive, then put the washer and other nut onto the outside and screw into place
- Fit the rotary encoder in place and screw down the washer and nut from the outside, then screw on the knob, leaving enough space to click the encoder shaft
- Slide the Trellis mount into its place in the mid case
- Slide the Feather mount into place as well
- Screw the Feather onto its mount using three 2.5mm nylon screws and nuts, then place the OLED FeatherWing onto the Feather.
Push the Trellis into its mount
- Set the silicone keypad into place, making sure to get the orientation correct by aligning the keyed rubber protrusions to their equivalent holes in the PCB
- Place the lid on top
- Screw the two top screws (1-1/4" long) into the case from the top, making sure they thread through all tabs, leave them about 1/2" unthreaded so you can add the case bottom later
- Next, screw in the middle two screws (1-1/8" long) from the top
- Screw in the bottom two screws (1-1/4") from the top
- Use double-stick tape or a piece of foam to prevent the battery from rattling around, then press the case bottom into place
- Screw all six screws the rest of the way down
- Thread the antenna into place
The wires connected to the rotary encoder are not shown here.
You'll need at least one frequency matched receiver to have any fun at all with your trigger box! What it does is entirely up to you. You can connect many different outputs to the receiver Feather -- it's entirely possible to have one unit for lights, sound, pyrotechnics, motors, door latches, mind controlled shark assassins, music.
For an environment such as an escape room, film set, or theatrical production, you can choose to use multiple receivers. Again, they will need to be the same flavor and frequency, but each can be programmed to interpret commands sent from the main transmitter in any way you see fit!
Here are three examples, one for motors, one for AC power, and one for NeoPixels.
Using the DC Motor + Stepper FeatherWing, you can send remotely trigger small motors, powerful and precise steppers, and even peristaltic pumps!
Without revealing too much, note that a very precise stepper can be used for some very magical illusions that involve steadily winding thread or monofilament...
Solder on the female headers and antenna connector as before to your second packet radio Feather, then connect the antenna cable and antenna.
Solder male headers to the Motor FeatherWing and connect it to the Feather.
Follow this guide for info on wiring and setting up your Motor FeatherWing to drive a stepper motor.
Power Relay Receiver
The Power Relay FeatherWing allows you to turn on and off powerful 120V-250V AC devices such as lamps, fans, and small appliances, up to 1200W! In this case, we'll use it to control a small-yet-powerful spotlight.
Working with high power electricity is dangerous. If you are unsure of what you're doing, work with someone who is experienced with it. Alternately, use the plug-and-play Controllable Four Outlet Power Relay Module shown on the sidebar.
Follow this guide to set up your Power Relay FeatherWing. You'll solder male header pins onto it. Again, solder female headers onto the Feather you'll use, and connect them.
To control the spotlight, first unplug it!, then cut one of its cord wires, and strip a 1/4" of insulation from each of the newly exposed wire ends. Insert one wire tip into the middle screw terminal on the Power Relay FeatherWing, and the other into the N.O. (normally open) terminal. Screw them both down.
Connect the FeatherWing to the Feather. The spotlight is now ready for our software setup later in the guide.
You can use the wires directly, or splice in a short extension of heavy gauge wire as seen here.
The third example is to drive NeoPixel patterns and colors remotely. You can use any NeoPixel configuration you like, but for this we'll use the 4x8 LED NeoPixel FeatherWing. This was actually the inspiration for building a 900MHz controller system -- I'm building some prop/set lighting pieces using many meters of NeoPixel strips for a touring circus and needed a good, robust way to control them wirelessly.
Follow the guide to set up the board, including soldering on the male headers.
Again, you'll use a matched packet radio Feather with antenna connector, wire, and antenna connected. Plug the board into your Feather's male header pins.
Your receivers are ready to go! Next, we'll program the transmitter.
Now, you're ready to make your controller do something!
First, make sure your Arduino IDE is configured properly with the board definition of your packet radio Feather. Use this guide to get started and this page to configure the Board Manager and board definition. Make sure you can properly upload the example blink sketch found in the Arduino IDE under File > Examples > 01 Basics > Blink before moving on.
You'll need at least two of the same (identical!) packet radio Feather boards (e.g., RFM69HCW to RFM69HCW or LoRa RFM95 to LoRa RFM95, no mixing and matching) set to the same frequency in order to send and receive messages -- one board on its own is very lonely, and semi-useless :(
Install the RadioHead library as shown here and then upload the RadioHead -> feather -> RadioHead69_RawDemo_TX example on one board and RadioHead -> feather -> RadioHead69_RawDemo_RX on the other. Open your serial port on one board and make sure that they're talking to each other properly.
You'll also need to download the OLED library for the Feather. Follow the directions here. Test out the example code as directed.
Use this guide to install the Trellis library so that your Feather can read the keypad data and light up the LEDs. It's fun!
The final library we'll need on the transmitter side of things is the Encoder library for reading the rotary encoder data.
Encoders are tricky. Here's a great explanation from PJRC, if you'd like to learn more.
Install the Encoder library by going to the Library Manager in the Arduino IDE Sketch > Include Library... > Library Manager and typing "Encoder quad linear" in the search filter field. Click on the Encoder by Paul Stoffregen entry and then click "install".
The trigger box can be programmed to do just about anything, and the user interface can be set up any way you like it!
In this example, the transmitter code is set up to send out commands that can be received by any number of receiver units, which each have their own code to determine how to react. The rotary encoder allows you to select different banks of effects from a menu, with each bank holding up to 16 commands -- one per button on the Trellis keypad.
For example, choose the "Motors" menu item with the knob, then press the first button to turn a stepper motor. Press the second button to turn the motor in the opposite direction. Perhaps the fifth button turns on a water pump for a few seconds.
This is all done by having a motor FeatherWing connected to a receiving packet radio Feather operating on the same frequency as the transmitter.
Then, you can rotate the knob on the transmitter to the "Radio" menu item. Now, each of the 16 buttons can be used to trigger a different song on a second receiver Feather with the Music Maker MP3 FeatherWing attached.
Follow the link below to download the code for the project.
Ada_remoteFXTrigger_TX is the Arduino sketch for the transmitter, including a few example effects. Download this code, unzip it, and save the directory in your Arduino sketches directory. Open the sketch in Arduino, and then upload it to your transmitter Feather.
Ada_remoteFXTrigger_RX_motor is the code to use on the motor receiver unit.
Save this sketch as you did before, and upload it to your receiver Feather with Motor FeatherWing attached.Make sure you have the Adafruit Motor Shield V2 library installed -- more info on setting up your Motor FeatherWing can be found here in this guide.
If you're using the Power Relay FeatherWing, upload the Ada_remoteFXTrigger_lamp code to your Feather.
And, lastly, if you're driving remote NeoPixels, grab the Ada_remoteFXTrigger_RX_NeoPixel code and send it to your NeoPixel-encrusted Feather.
It's action time! Power up the transmitter by turning on the switch, and then flip through the menus with the rotary encoder.
You can press the keypad buttons -- they won't do much yet, since we haven't turned on the receivers, but you'll see the latest pressed button light up. There are many unused buttons per menu item -- you'll have fun adding your own commands! -- but a few are preset. Try heading to the "NeoPixel" menu item, and press the first three buttons on the top row of the keypad. When pressed, the OLED display will read out "RED", "GREEN", and "BLUE".
If you scroll away from a menu item, when you return the last button that was lit will re-light. This is to tell you which trigger you last used for that item.
Here's the system with the NeoPixel Feather receiver powered up with a LiPoly battery. The three active buttons command the NeoPixel Feather to play a pre-designed color pattern.
Here's a test of controlling the NeoPixels from a block away. It works great!
Now it's up to you imagination to decide what sorts of amazing effects to control with your remote effects trigger box!