Shaker control with pwm

Using a Arduino mini pro as extension to a TILT!Audio board, you can easily control a shaker motor via pwm (pulse width modulation).

First we need a motor driver module that is capable of driving the high current motor power. e.g. something like this:

Dc motor driver module for up to 10A

The picture is more or less self-explaining the only thing that need to be connected to the Arduino mini pro is the GND / PWM input.

Now looking at the Arduino mini pro we use pin 5 as pwm output and to connect to the TILT!Audio board we use the i2c bus the is controlled by the SCL / SDC pins (together with GND / Vcc of course):

Be sure to choose a 5v type for Arduino mini pro as there are also available in 3.3v but the TILT!Audio connector for the i2c bus provides 5v. Also the 5v type runs on 16Mhz instead of only 8Mhz for 3.3v with is also good.

So connections are:

FromTo
TA-Board: GNDGND (right side)
TA-Board: VccVCC (right side)
TA-Board: SDASDA (green)
TA-Board: SCLSCL (green)
Arduino: GNDPower Driver: GND (right)
Arduino: Pin5 (PWM)Power Driver: PWM (right)

Now we create a script for the Arduino mini pro like this (see https://github.com/sker65/tiltaudio-extensions). We start with initial setup stuff:

First thing we do is switch shaker on, off and set speed (within a limited range to not make to pinball machine jump):

Second we wire these functions to i2c control:

And additionally we can create “sequences”. A sequence would play back some schema of on and off or speed up and speed downs. The idea is to define a sequence as 3 integers: command byte, value, interval in milliseconds. We define these commands:

  • 0x00: stop -> end of the sequence
  • 0x01: switch on, value -> speed
  • 0x02: switch off, value -> don’t matter
  • 0x03: ramp up, value -> target speed at end of interval

We delegate playing those sequences to the Arduino and later just trigger it from the TILT!Audio board by sending some command to the i2c bus:

And again create a function that triggers the sequence playback and wire it to i2c control:

Find the complete example on github.

To get an idea, how it finally will play all together I did a test installation:

Test a TILT!Audio board

In order to test your TILTAudio board including the WPC bus interface to the pinball machine you can use an arduino mega board.

Just connect the mega with the TILT!Audio board like this:

Connections from the Arduino mega to WPC bus on TILT!Audio

Connecting also the 5v power line is optional. You need to choose either to power everything from on source or just skip the red 5v wire and power the 5v on the TA board and the Arduino separately.

For the address decoder (the smd chips) to work the raspberry pi needs to be plugged in as the 3v3 power for the decoder comes from the pi’s onboard regulator.

Also the resistor network RN3-5 must be installed, without them bus connections are not there. 12V can be skipped for testing, which means amps will not work, but you could also connect a speaker either to the PI’s audio jack directly or use the audio jack on the DAC module.

Then load the following ino script to the Arduino:

This way you can emulate sound effect commands to would normally come from the pinball machine.

I will upload a more detailed example on the github repo: https://github.com/sker65/tiltaudio-extensions

Connections needed:

ArduinoTILT!Audio
PA0:22CD0 wpc15
PA1:23CD1 wpc13
PA2:24CD2 wpc11
PA3:25CD3 wpc9
PA4:26CD4 wpc7
PA5:27CD5 wpc5
PA6:28CD6 wpc3
PA7:29CD7 wpc1
PC0:37CA0 wpc25
PC1:36CA1 wpc23
PC2:35CA2 wpc21
PC3:34CA3 wpc19
PC4:33CA4 wpc17
PC5:32RW:wpc31
PC6:31WDEN:wpc29
GNDGND