I decided to begin with Adafruit's Huzzah board, for its built-in level shifting, reset and bootloader buttons, and easy (unobstructed) access to the ESP-12E module, which I may use in future projects. I also wanted to support Adafruit's awesomeness! Their guides and released schematics are golden!
The tank base comes in several easy-to-assemble parts from Tamiya (bought off Pololu), and is controlled by a DRV8833 Dual H-Bridge breakout by Pololu. I made some standoffs from metal strapping to mount a plexiglass platform to the base tank.
Power is provided by a pair of 18650s from a laptop battery I tore apart a while back, which I charge with a Turnigy Accucell 6 (although any Li-Ion Charger should work with some caution). These are held in a 3D-printed battery pack designed by [enif] on Thingiverse. On the first working version, there is a Breadboard Power Supply by Adafruit for regulation, but it is only used to supply 3.3V to the Huzzah. I have since realized that this is completely unnecessary, as the Huzzah has an on-board 3.3V regulator (updated pictures to come).
Just for fun, I recently added a small 3-6V buzzer I found (as the "horn") to add some comedy to the test runs, although it's probably not very good on the '8266 current-wise.
If anyone is interested, I can make some Fritzing schematics for how everything goes together (I will be adding a basic written pinout to the github repo at some point).
There are several ways the tank can run at the software level (which I have thought of so far):
- Autonomous Loop
This is the easiest to implement, and I have tested several of the tank's features this way (the current github repo has a simple loop for testing the hardware).
- Blynk App
This was the platform that I used for my first attempt at wireless control. Blynk is awesome: amazing graphics, an easy interface, and rich platform support make it powerful. It's one downfall for my situation was that it requires a connection to their server to work. My tank worked indoors at my house, but with some lag depending on where I was in regards to my router. Good for prototyping, but on to better solutions!
- RoboRemo App
A somewhat less documented and professional-looking solution came up in my search for a direct connection solution between my tablet and the tank. The video below looked promising though, and I thought I would give it a try.
It worked great! The app works by taking values from virtual sliders and buttons much like Blynk, but instead of going to a remote server and back via a router, they go directly to your ESP8266 (which you set up as a TCP server) in a continuous string. Code on the '8266 breaks up the string by pre-defined keyword, and interprets the values from the inputs as commands.
It took some head-scratching to port the example code for my purpose, but it works now (and is up on the github repo for anyone to take a look at). Thanks RoboRemo!
[Edit]: Now that I have attempted testing this at school and other locations unsuccessfully, I have found that though my tablet always directly connects to the tank, the ESP8266 refuses to connect to the app with any stability unless the tank is also connected to a router. I have found that it works at home because it stores WiFi credentials in memory until replaced. If anyone has any suggestions/help they could offer, it would be much appreciated.
- Local HTML Server
I haven't gotten around to this yet (It's high school robotics season, and I have some exciting projects coming up!), but I would like to build a simple web server with HTML buttons on the '8266 to make the interface more universal among devices.