Arduino based crank/cam wheel simulator: ardu-stim
UPDATE 07/14/2015: Precompiled binaries of the Ardu-Stim arduino code are available at: http://builds.libreems.org/Ardu-Stim/
UPDATE 9/19/2014: ardustim now has analog pot control for when you don’t want to use the serial interface. Connect a pot between 5V and ground with the wiper connected to Analog-0. 5 seconds after power-up it’ll default to reading the pot for it’s RPM source, resolution is a bit poor at low RPM’s (about 16 RPM) but the control is liquid smooth, range is 16-16,000 RPM which should cover the majority of cases. Firing up druid4arduino will take control away from the Pot, and closing druid4arduino will reconnect to the pot after 5 seconds.
We are pleased to announce a rapidly developing tool for generating precise crank/cam trigger wheel patterns with an Arduino. This tool is called “ardu-stim”, thus it leverages an off-the-shelf Arduino Uno or clone, an inexpensive, low cost, super easy to program micro-controller. Arduino’s and their clones are currently very popular, inexpensive, and readily available from multiple places like SparkFun, Adafruit, Amazon.com and Ebay among others. There’s a huge amount of easy to access tutorials and knowledge out there, and they work well for all sorts of special purpose applications.
Ardu-stim is currently in heavy development, but even at it’s young age it is capable of simulating 30+ wheels at in excess of 12,000 “virtual” RPM, and most wheel patterns are precisely emitted to well over 65,000 virtual RPM (user controlled via a USB/serial interface with either druid4arduino or a simple serial terminal). This tool is designed at current to be used for regression testing ECU firmware, and to test edge cases. “Bad” wheel patterns can be created to test how well different ECU’s deal with suspect/marginal and garbage patterns.
Right now, development is done on an Arduino Uno or clone, (ATMega 328 CPU ONLY). It has NOT BEEN TESTED on other ardunio capable CPU’s, however we recommend that you stay with the Uno for the time being, as its developed on that platform. The code utilizes processor specific low level resources (Timers 1 and 2 in CTC mode). So for optimal compatibility if you want to try it, we’d recommend you pick up an Arduino Uno (from $15-30 depending where you find it).
Why did we create this, when there’s other solutions out there (JimStim, FreeEMS+Lacerated Pempheridae (winner of the most interesting name award) Well: Jimstim is closed source, somewhat expensive, and has signal/pattern degradation at high rpm and cannot do all the wheel types that we needed for our project (LibreEMS), and tends to brick itself at the most inopportune moment (happened on 4 separate occasions to yours truly). FREEMS+LP requires a whole ECU or TA card which is very expensive (for a pattern generator), and cannot do all wheel patterns either. Ardu-stim is Open-Source, cheap, extensible, and reasonably easy to use, can handle 1-deg resolution wheel patterns up to 12,000+ RPM, and other less complex patterns to much higher RPM ranges.
The code is located at the following git repository and you’ll need the Arduino tools (available for Mac, Linux (check your repo’s) and Windows). You’ll need to setup the SerialUI arduino library on your end as well as it’s required to compile the ardu-stim code for your Arduino device. It’s by far easiest to setup on Linux (apt-get install arduino for debian/ubuntu systems) as there’s no need to worry about USB->serial drivers like on windows or OS-X as they tend to”just work” on linux, unlike windows and Mac which require manually installing the driver specific to the USB->Serial bridge chip soldered onto your arduino or clone board.
The primary (typically crank) signal is output on Arduino digital pin 8, and the (secondary) cam signal (or inner ring signal on dual ring crank/cam wheels) is on pin 9. Pin 7 is currently a debug signal used to verify ISR timing, so don’t use that pin. Interaction is provided by the Arduino SerialUI Library, in conjunction with either Druid4Arduino or a generic serial terminal client (minicom, cutecom, putty, etc). The Arduino SerialUI library provides simple interactive menus to work with ardu-stim.
An issue tracker is set up at https://redmine.libreems.org/projects/ardu-stim/issues to file bug reports or feature requests.
To clone the repository run the following: git clone https://git.libreems.org/libreems-suite/ardu-stim.git Due to heavy development there are usually changes often, so pull often to stay current…