Turning Frog VL6180 Upgrade
Many years ago I got a soldering kit, the "ELENCO 21-882" which is a "frog robot" with two motors that reacts to sound. I had been thinking about ways to upgrade it, and I finally got around to doing that by controlling it with a Arduino Pro Mini and a VL6180 sensor to measure distance.
The original sound based control works by clocking a "4017 Decade Counter" IC with the input from a electret microphone. The easiest way to hijack the control is to remove this IC from the socket and wire the Arduino into it.
I used the following connections:
Arduino RAW <-> Socket pin 16 (VDD, 9V supply from battery.)
Arduino GND <-> Socket pin 8 (VSS)
Arduino D10 <-> Socket pin 1 (Output, diode for left motor.)
Arduino D11 <-> Socket pin 7 (Output, diode for right motor.)
Arduino D12 <-> Socket pin 2 (Output, diodes for both motors.)
Cobbled together it looks like this:
The FTDI is only used for uploading the program and can be removed of course.
The Arduino Sketch code is very simple:
#include "Adafruit_VL6180X.h" static Adafruit_VL6180X vl = Adafruit_VL6180X(); static int keep_going = 0; void setup() { pinMode(10, OUTPUT); // Left motor pinMode(11, OUTPUT); // Right motor pinMode(12, OUTPUT); // Both motors pinMode(13, OUTPUT); // On-board Arduino LED vl.begin(); } void loop() { uint8_t range = vl.readRange(); uint8_t status = vl.readRangeStatus(); if ((status == VL6180X_ERROR_NONE) && (range < 200)) { // Go left digitalWrite(12, LOW); digitalWrite(10, HIGH); keep_going = 10; // Keep going to finish the turn... } else { if (keep_going > 0) { keep_going--; } else { // Go forward digitalWrite(10, LOW); digitalWrite(12, HIGH); } } delay(50); }