As we prepare to launch our first B&B events and products we're working to keep our B&B provided bots cheap and durable. One of the problems we need to solve is wireless bot control, so let's look at the options:
Option 1: Conventional/Analog RC
This option is pretty straight-forward, using traditional RC controllers, typically used for RC cars, boats, drones, etc., for example, our FlySky 3 Channel Receiver/Transmitter sets. These sets range in price from 10's to 100's of dollars, depending on the manufacturer, the options, and the number of channels, and provide a more-or-less out of the box wireless control option and good ergonomics.
Number of Channels and User Interface
Generally, a simple/straightforward RC car will only require 2 channels for control. Generally one channel is hooked to throttle (via a motor driver or ESC), and the second is connected to a steering servo. Most RC car controllers, like our FlySky controller mentioned above are therefore 2 or 3 channel controllers (the third channel tends to be an on/off switch for lights, etc.) These 2-3 channel transmitters usually have a push/pull trigger for throttle control and a rotary "steering wheel" for steering.
RC airplanes, some drones, and other RC devices need additional control channel (throttle, roll/pitch/yaw via ailerons, rudders, and other control surfaces, so they tend to offer 6 or more RC control channel and a dual stick configuration.
Mixing and Calibration
As most of our bots are currently "tank drive" style, we need mixing logic to convert the steering and throttle (or throttle, rudder, etc) signals drive instructions for the drive motors of our tank. More on our mixing algorithms and approaches in a future post.
Another challenge with these RC systems is that they're all just a little bit different. If we monitor the throttle signal (PWM) with an Arduino, we'll find a min and max value of around 1000-2000 and a "deadband" somewhere around 1500 in the "neutral" position on all of our control axis. All of this requires some calibration logic to make the controllers usable. More on this too.
The "new" thing in RC controllers are bi-directional communication and internal sensor packages (especially for drones, including gyros, temperature, etc., etc.), such as the Fly-Sky iBus system. These additional bells and whistles are very cool, but probably are overkill for most of our bots - until we figure out something cool to do with them.
Option 2: Your Phone
Whether we use wifi or some flavor of bluetooth, the general concept is basically the same. The idea is to use the touchscreen of your phone as the input device (another option is the phone's gyro, if it has one) to replace the hand-held RC transmitter, and a Wifi host or Bluetooth receiver on the bot.
Dialing it in..
There's a lot that's good about this solution including the fact that you probably already have a phone or tablet around that works as a controller in your pocket. The not-as-good bit is that the phone screen really doesn't provide the tactile feedback that a hand-held RC controller offers, and it seems like people need to reset their fingers on the screen from time to time.
There are a lot of wifi-enabled micro controllers available like the ESP8266 series of boards. You can typically get these for $8-10 retail, and program them via the Arduino IDE - which is cool. From a competition bot perspective we're not sure how would work out. Either your bot and phone would need to join our hosted network and authenticate with each other, or you'd need to host your own ad hoc network (the AR Parrot Drones and others take this approach for example). Doable, but probably not ideal.
The major issues as of this moment with Bluetooth solutions as of this moment appear to be either A) device compatibility between the Bluetooth receiver and your phone (for example, the HC-06 and HC-07 modules are generally not compatible with IOS, the HC-08 modules generally are), and cost. Most of the well documented, well supported Bluetooth modules run in the near $30/ea range - which is most of the cost of the whole RC xmitter/rcvr set we considered originally.
These guys, such as the NRF24L01 are the new thing in low-cost RF communication. Retailing at <$2 each these guys are transceivers that (depending on the package, antenna, etc.) have reasonable range and are currently pretty well supported for Arduino and other microcontrollers. If we partner one of these guys with a micro controller (Arduino Nano for example) and a small joystick and we've got our transmitter. On the bot side, we need a few spare pins and another nRF module, and we're good to go.
In our next post, we're going to describe some adventures in sorting out some generic brand Joystick Shields with nRF support, including pin-outs and some code. Check back soon!