The Hardware
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).
The Software
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.
Hi Benjamin!
Any new control methods for the tank you've found? I'm looking for some simple beginner friendly Logo turtle-like programming environment for such an ESP robot, not bumped into a decent one yet. The idea would be to make it follow simple programs like "L30 F50" (left 30 degrees, forward 50 units) to accomplish missions, like the ones kids nowadays have in their schoolbooks, to transfer these on-paper excercises to the physical world.
BTW, been a while since the conversation about battery terminals, but these are good for printed battery cases. Also these strips I have used, with bumps printed in the minus end under the strip.