Tag: vibration motor

Silicone overmolded vibrator – balls revisited

molded-quermolded-with-ueberh-querBuilding your own silicone molded vibrator becomes now easier. We already have presented 3d printed forms for building your personal vibrator (massage wand, wireless charged vibrator). The vibrator uses the body interaction vibrator development board. The body interaction board has a Arduino compatible microcontroller, vibration strength control by motion, a vibration motor and a rechargeable battery.


balls_revisited_3_inlay_part_bWhat is new? The electronics including battery are in the base of the vibrator. We developed a 3d printed enclosure for the electronics. This has several benefits: The assembling of the electronics and the molding itself is easier as everything is fixed within the enclosure. And it is more safe as the enclosure shields the electronics from the environment (and vice versa). In addition we used a different charging module from Seeed Studio. The input voltage is only 5V. Now you can connect the charging module with a USB connector and don’t need another power supply. (Look here for an explanation of wireless charging sender and receiver.)


Another improvement is the placing of the vibration motor. The vibration motor can now be placed in the center of the vibrator and it different heights. Just were you need the power.

balls_revisited_3_inlay_part_aFinally the mounting is improved. The mounting holds the enclosure when it is inserted into the form.

balls_revisited_3_finalThe mounting (together with the enclosure with the electronics) is inserted into the form. The form consists of two parts which must be fastened together by tinker wire. It is a variation of the ball theme.

We present a step by step procedure for tinkering the vibrator. You need:

  • 3d printed form (molding form, 2 parts)
  • 3d printed enclosure
  • 3d printed mounting
  • body interaction vibrator development board
  • silicone with a high shore A value (eg. shore A 45 which is quiet hard but still flexible), approx. 100 ml
  • wireless charging module eg. from Seeed studio
  • soldering station, (hot) glue

Step by step procedure:

A. Print out all forms. You can download the forms from Thingiverse.


B. Connect the wireless charging module to the body interaction vibrator development board.

B.1 You have to solder a wire connecting (-) on the wireless charging module and GND on the body interaction board.

B.2 Now comes the tricky part. You have to connect (+) from the charging module with the body interaction board. Solder a wire at (+) of the charging module. But where do you solder the wire on the body interaction board? Unfortunately the wireless charging option was not taken into consideration during the development of the board. So there is no appropriate connection on the board.

circuitThe best solution is to unsolder the USB connector and connect to + of the USB connection. The easiest way to unsolder the surface mounted USB connector is done with a hot air soldering station.  Alternatively you can solder the wire directly to the MAX1555 module – this solution is presented here. In any case: Be careful not to break the tiny pads connecting pcb and USB connector.

B.3 Connect the sender module with a 5V power supply. You can use a USB cable, dismantle the cable and connect the black and red wires.


C. Place the receiver charging coil on top of the enclosure. The diameter of the top side is a bit larger than the diameter of the bottom side. Use some glue to fix the coil. Don’t fix the mounting now. It is easier to do it later (step E).


D. Put the electronics into the enclosure: Begin with the body interaction board. The RFM12b is quite large so place it at an outer position. Then insert carefully the LiPo battery. Don’t force it! The plugs for the battery and the motor could break. If you have done so insert the tiny wireless charging receiver board. At the end fix the wires of the vibration motor in the middle of the enclosure.

E. Connect the mounting with the enclosure. There are 2 holes provided where the mounting fits into the enclosure. Use some glue to stick together both parts. (see picture above step C).



F. Put together both parts of the molding form. Use tinkering wire to attach both parts tight together. Then insert the enclosure into the form. Check the wireless charging function. The yellow LED must be on when you place the charging coil over the receiver coil.


G. Now poor silicone into the molding. We use Shore A 45 silicone which is rather hard. The silicone has to dry for some hours or days. Read the instructions of your silicone provider.


H. When the silicone is hard, you can remove the tinkering wire. Then carefully remove the form.


I. Remove the overhang.


J. Test the wireless charging. The orange LED must be on when both coils are near together.

molded-bottom IMG_20160303_184830

K. Remove the mounting.


Design your own forms using Tinkercad. Start now and share!

Old versions of the enclosure:Enclosure & mounting togther, Enclosure , Mounting

Download the STL files for 3d printing from Thingiverse.

Update 2016/03/12: Added image of circuits showing where to solder the wireless charging module.

Update 2016/04/05 redesign of mounting and enclosure due to different versions of the wireless charging receiver coil

Programming Tutorial part 4: Sinus

Nervous Optic by Ben Felten, CC BY-ND 2.0

Nervous Optic by Ben Felten, CC BY-ND 2.0

In tutorial 3 – “ramps” we learned how to repeat instructions again and again using the for statement. In this tutorial we need the for loop again, bur instead of changing the motor speed by a constant value we want a more dynamic behavior. Therefore we use the sinus function – a classical pattern used for controlling vibrators.

Here is a straight forward approach:

for (float i = 0; i < 20000; i = i + 0.05) {
  analogWrite(motor, (sin(i)); //motor speed set to sin(i) 

We are changing the variable i in small steps of 0.05. So the variable i will become 0, 0.05, 0.1, 0.15, 0,2 … and so on.

But this doesn’t work. Let’s have a look at the sinus function. Just use the google search and type in “sin(x)”. You will see  the following curve:

sin(x) in google

There are two problems:

  • There are values below 0 (on the vertical or y-axis). If the value is 0 or below 0 the motor is off.
  • The maximal value is 1. But  we need values between the minimal motor speed (around 40) and the maximal speed (always 255).

You can try to adjust the function and visualize it with google search. Maybe you will discover an interesting variant of the sinus curve.

We use the following function:

(sin(x)+1) 0.5 * (maximal motor speed – minimal motor speed)) + minimal motor speed

  • Sin(x)+1: add 1 to get positive values only between 0 and 2 instead of -1 and 1.
  • Multiply by 0.5: get values between 0 an 1 instead 0 and 2
  • Multiply with maximal motor speed  (255) – minimal motor speed (40): values are now between 0 and 215
  • Add minimal speed: values are between 40 and 255. So the motor will always be on.



This is the script. Please have a look at tutorial 2 if you don’t know how to upload the script.

 // www.bodyinteraction.com tutorial sinus 
int motor = 3; 
int minimal_motorspeed = 50; 

void setup() { 
  pinMode(motor, OUTPUT); 
void loop() { 
  for (float i = 0; i < 20000; i = i + 0.05) { 
    analogWrite(motor, ((sin(i) + 1) * 0.5 * 215) + 40); 

If you want to slow down the changes in the motor speed change delay(5) and take larger values.

Go back to tutorial 3: ramps

Vibrating 3d Printed Necklace

necklace-frontThere are a lot of sensible areas of the body which are also erogenous zones (see Wikipedia). The neck is one of them. Stimulation can be achieved eg. by licking and kissing. The stimulation can be quite strong. So why not try to stimulate your neck with vibration? We think it works.

Think of an artistic designed necklace or collar with a vibration function. The vibration will be turned on when you move and gets more intense when you shake our head eg. while dancing. Or the vibration function will be turned on remotely by your friend.

necklace tinkercadBody interaction has made a 3d design for a vibrating necklace. It can be secured by a solid clip closure at the back of the neck. At this place the vibration motor is positioned which gives an intense vibration especially at the back of the neck but also at the whole neck.



necklace-circuitsThe body interaction vibrator development board is inserted into the collar. It controls the vibration motor. The more you move the more it vibrates. There is also place for the battery. Wires and boards can be hidden. Unhidden it has a scifi look-alike.





closure-topIn the front there is a solid but easy to close hook closure.







Download 3d files from Thingiverse and print it.

Get the vibrating electronics from Tindie.

Edit and design your own with Tinkercad https://tinkercad.com/things/8stCwczMAkp


Programming the body interaction 1 – part 3 – ramps


by darkday, CC BY 2.0

“Milf Ramp attack” by darkday, CC BY 2.0

In this tutorial the continuous change of the vibration motor speed is regarded. Typical vibrator pattern are ramps. They start at a given value. Then the motor speed is continuously changed. The values could be increasing or decreasing.

In our example we have two ramps.

  • Increasing ramp: It starts with the minimal motor speed (40). The vibration is slowly increased up to maximal speed (255).
  • Decreasing ramp: It starts with maximal motor speed and decreases very fast until minimal motor speed is reached.




We will achieve this by using the for statement.

for (int i=minimal_motorspeed; i &lt;=255; i++) {
  analogWrite(motor, i);
  delay(10); // wait for 1/100 second

The code after the for statement will be repeated so long a condition remains true.

  • int i =minimal_motorspeed: a new local variable i is introduced and given the value of minimal_motorspeed (40)
  • i <= 255: this is the condition – until the variable is below or equal 255 the code will be executed
  • i++: each time the code is executed the variable i will be increased by 1

The values of i are 40, 41, 42, 43, … , 255. We use the variable i to change the motor speed. The speed of the motor will be changed at each iteration. So the motor speed will be set to 40 (which is the minimal speed), 41, 42, …, 255 using the following statement:

analogWrite(motor, i);

The delay statement changes the pitch of the ramp. If the delay time is high the pitch will be low:



The following code will realize the function visualized above. You can change the pitch by adjusting the delay time.

// www.bodyinteraction.com tutorial ramp
int motor=3;
int minimal_motorspeed=40;
void setup() {
  pinMode(motor, OUTPUT);
void loop() {
  for (int i=minimal_motorspeed; i &lt;=255; i++) {
    analogWrite(motor, i);
  for (int i=255; i &gt; minimal_motorspeed; i--) {
    analogWrite(motor, i);
  analogWrite(motor, 0); //motor off

Copy the code to Arduino and try out. In tutorial 2 it is explained how to upload the code to the body interaction 1.

Next tutorial: Classical vibration pattern – the sinus curve

Go back to tutorial acceleration

Danniel Ramirez, CC BY 2.0

Ramp to the beach by Danniel Ramirez, CC BY 2.0

Programming the body interaction 1 (BI) – part 1

Controlling the vibration motor

The vibration motor is an analog device. You can control the vibration on a scale between 0 and 255. If you set the vibration to 0 the motor is off, if you set the vibration to 255 the motor will be at full speed.

Good vibrations Tokyo by Kevin Dooley, CC BY 2.0

Good vibrations Tokyo by Kevin Dooley, CC BY 2.0

The motor is connected to a pin of the controller (“ATtiny84”), the heart of the BI. Every pin has a number and the motor is always connected to pin 3.

on off chartNow we can start with the first script (or program). The script will set the motor to full speed for one second. Then the motor will be off for 1 second. And this will be repeated infinite.





Here is the complete script:

int motor=3;
void setup() {
  pinMode(motor, OUTPUT);

void loop() {
  analogWrite(motor, 255); //motor on
  delay(1000);  // wait for 1 second
  analogWrite(motor, 0); //motor off

Now the script is explained line by line:

int motor=3;

First we declare a variable called “motor” and assign the value 3. The variable is of type int (integer) which is used to store a number. Now we could use “motor” instead of “3” whenever we want to control the vibration motor – this will help us to understand and debug our script.

void setup() {

This is function which is part of every Arduino script. It is called setup and well be executed at first and only once.

pinMode(motor, OUTPUT);

Each pin can be in INPUT or OUTPUT mode. In input mode sensor data can read, in output mode a motor or a LED can be controlled. We set the motor pin to OUTPUT.

void loop() {

In the function loop we put all the instructions which should be carried out. When all instructions are done the script doesn’t stop but starts again. Therefore the loop will be repeated infinite.

analogWrite(motor, 255);

The motor is set to full speed (255).


The delay function stops all processing for 1000 milliseconds. 1000 millisecond are 1 second.

analogWrite(motor, 0);

Then motor is set off (0). In the second part of the tutorial uploading of the script to the body interaction 1 is explained.



Read part 2: the accelerometer

Assembling the new violet vibrator form

We ordered the organic vibrator form from Sculpteo. They offer material which can be used for food – so it’s very safe.









IMG_20150901_212010[2]All you need for assembly is the body interaction motion controlled vibrator development board and two M3 screws (about 6mm long).


Assembled board

boards arrived one box








The video explains how-to assemble the Arduino compatible body interaction vibrator board and the form. Watch in Youtube

Unboxing and assembling of vibrator development board

The body interaction development board includes everything to start: the board, the LiPo battery and a vibration motor. Put it together in a few minutes. All you need now is a 3d printed case.

We give away a limited number of body interaction development boards for free. Please send a short description of your project with your email, mail address (and website) to info@bodyinteraction.com. Only available outside the US due to patent trolls.  Please send us a photo or video when the project is finished. Your data are not given to anyone else and will be deleted on request.

Video in Youtube

In the next post we show you how to assemble a 3d printed case and the body interaction development board.

%d bloggers like this: