Simple LEGO-Based Continuously Variable Transmission (CVT)

by indium13 in Living > LEGO & K'NEX

100 Views, 0 Favorites, 0 Comments

Simple LEGO-Based Continuously Variable Transmission (CVT)

IMG_3012.JPEG

Overview

Instead of changing the speed ratio between the input and output of a gearbox by switching between multiple combinations of different gears, continuously variable transmissions use two or more pieces that can interact as if they are gears of any speed ratio within a certain range. It is the positioning or state of these pieces that determines the ratio, which can be changed continuously. A simple CVT can be made with a conical gear and a regular gear that slides along the conical one. This instructable attempts to describe the process of creating a simple LEGO-based CVT which can be used to precisely control the speed of an axle, useful for LEGO models of amusement park rides or animals.

Notes

  1. This project is designed to work with a variety of parts. There are certain steps which seem to require specific parts, but, with some modification, many parts will work.
  2. There are many parts that could have been 3D printed, but I designed this project to require none, so that it is more accessible. Feel free to substitute 3D printed parts for the tube, thick plastic piece, conical gear, motor holder, etc.
  3. There aren't very many conical things that can be used as molds to make conical gears. In this instructable, a piping tip is used, but other things such as 3D printed molds may be better.

Supplies

LEGO components

  1. 2x2 round brick with axle hole
  2. 16x16 plate (2)
  3. 8M axle
  4. Worm gear
  5. 2x2 plate, tile, or tile with center stud (2)
  6. 1x6 tile (8-9)
  7. 1x4 plate (5)
  8. 1x4 brick (4)
  9. 1x4 brick with three axle holes (4)
  10. 6x6 plate
  11. 2x4 brick (3)
  12. 12M axle
  13. Technic bush (2)
  14. Universal joint (2)
  15. 3M axle (2)
  16. 1x6 brick (2)
  17. 1x6 plate (1-3)
  18. 2x6 plate

Other parts

  1. Metal piping tip with hole that a LEGO axle can just fit through
  2. Thick plastic sheet, such as a piece of a container or a rectangle of Perler beads ironed flat
  3. Ball bearing
  4. M4 nut
  5. Plastic pipe, about 80mm long, with inner diameter larger than LEGO worm gear and outer diameter just smaller than ball bearing, such as PVC pipe

Electronics

  1. Mini DC geared motor with 55mm M4 threaded shaft (available from Amazon and elsewhere online)
  2. DC geared motor adapted to work with LEGO or other motor
  3. Wires
  4. Arduino
  5. Limit switch (optional)
  6. 10K resistor (optional)

Tools

  1. Cooking spray can
  2. Hot glue gun
  3. Scissors
  4. Drill
  5. Toothpick
  6. Superglue
  7. Thick tape, such as duct tape
  8. Thick double-sided tape, such as mounting tape
  9. Soldering iron and solder
  10. Wire stripper

Prepare Conical Gear

IMG_2963.jpg
IMG_2964.jpg
IMG_2965.jpg

This "gear" is made of hot glue and attached to a LEGO axle, and it will drive the other gear.

  1. Place the round 2x2 brick on the 16x16 plate and add the 8M axle.
  2. Rub a small bit of cooking spray on the inside of the metal piping tip and place it on the axle with the smaller end at the bottom.
  3. Fill the piping tip 2/3 of the way to the top with hot glue, and adjust the piping tip so that the axle is exactly in the center of it.
  4. Once the glue dries, add more to fill the piping tip the rest of the way.
  5. Wait for the hot glue to dry again. Take apart the LEGO setup and remove the metal piping tip from around the glue gear.
  6. Clean the gear, still attached to the axle, at the tap.

Prepare Ball Bearing Gear

IMG_2930.jpg
IMG_2933.jpg
IMG_2934.jpg

This step will turn a ball bearing into a "gear" that can be shifted horizontally using the geared motor while being driven by the conical gear.

  1. Using scissors, cut a 16x36mm rectangle out of a thick plastic sheet.
  2. Drill a 5mm hole in one end and cut the corners off at that end. Make sure the piece can fit on the ball bearing with the holes overlapping while leaving one end of the ball bearing uncovered (picture is very helpful).
  3. Place the ball bearing on top of the plastic piece and line up the holes perfectly.
  4. Keeping the pieces together, use a toothpick to apply superglue to the region where the inside of the inner ring of the ball bearing meets the plastic piece. Make sure not to glue the outer ring of the bearing.
  5. Wait for the superglue to dry. On the other side of the plastic piece, position the M4 nut over the hole and apply glue at its edges.

Attach Axle Adapter

IMG_2966.jpg
IMG_2974.jpg
IMG_2975.jpg
IMG_2976.JPEG

Since the outer ring of the ball bearing will spin, it needs to be attached to the output of the device, another LEGO axle.

  1. Superglue the plastic pipe to the side of the ball bearing without the cut plastic piece, making sure it is centered and only attached to the outer part of the bearing. (Ignore black tape in picture; I used it to hold the pipe together).
  2. Wrap thick tape around the LEGO worm gear until it fit snugly inside the plastic pipe.
  3. Use a small amount of superglue to glue the gear beneath the lip of the open end of the pipe.
  4. Screw the shaft of the geared motor through the M4 nut and into the pipe.

Assemble LEGO Base

IMG_2978.JPEG
IMG_2980.JPEG
IMG_2981.JPEG

The LEGO-based nature of this project makes everything not only accessible and compatible with many systems but also easier to customize and adjust so that the gears connect properly.

  1. Connect the two 16x16 plates together with two 2x2 plates or tiles.
  2. Place seven 1x6 tiles and two 1x4 plates as shown in the image above.
  3. Build four stacks of a 1x4 plate, a 1x4 brick, and a 1x4 brick with axle holes, omitting the 1x4 plate from one of them. Place two on top of the 1x4 plates that have already been put down.
  4. Place the stack without the bottom 1x4 plate vertically at the top left corner of the 6x6 plate.
  5. Place a stack of three 2x4 bricks as shown in the picture (the bricks are gray).

Setup Geared Parts

IMG_2982.JPEG
IMG_2983.JPEG
IMG_2984.JPEG
IMG_2985.JPEG

This is where it gets a bit complicated, and adjustments should be made if not everything fits as expected. Luckily, because some parts are connected to the base by means of double-sided tape, minor differences between the parts used here and the parts you use shouldn't be problematic.

  1. Use double-sided tape to mount the motor horizontally onto the stack of 2x4 bricks so that the tube lines up with the middle holes of the mounted 1x4 bricks with axle holes.
  2. Push a 12M axle through the middle hole of the first 1x4 brick with holes, through two technic bushes, through the other 1x4 brick, and through the hole of the worm gear at the end of the plastic pipe. Push it until it reaches the threaded shaft of the geared motor, and pull it out just a small amount.
  3. To either end of the axle with the conical gear on it, add a universal joint and a 3M axle.
  4. Put the end of the conical gear setup closer to the wide end of the gear through the farthest right hole of the unused stack of 1x4 plates and bricks. Put the other end through the farthest left hole of the 1x4 brick with holes mounted on the 6x6 plate. (In the image, all of this is positioned where it will eventually go, but this does not have to be done immediately).

Add Conical Gear

IMG_2986.JPEG

This is the most important step, responsible for making sure the gears will actually turn properly.

  1. Cut and place pieces of double-sided tape that fit on the 1x6 tiles on the LEGO base. (I added a second 1x6 tile next to the single tile on the left, for stability. This is helpful but not necessary).
  2. Line the gears up properly. The big end of the conical gear should be far from the geared motor, and the edge of the conical gear should be parallel to the edge of the ball bearing, while the bricks holding the end of the conical gear setup should be parallel to the edges of the LEGO base.
  3. It should look like, when the M4 nut is as close as possible to the geared motor, the ball bearing will be in contact with only the smallest end of the conical gear.
  4. The axles and universal joints should not touch the geared motor or the pieces holding it.
  5. Stick everything down once the proper alignment is found.

Add Motion Restrictor for M4 Nut

IMG_2987.JPEG
IMG_2988.JPEG

Restricting the rotation of the M4 nut and the plastic piece will make it so that, when the shaft on the geared motor spins, the M4 nut will push the ball bearing gear along the conical gear rather than just spinning.

  1. Place a 1x6 tile as shown so that the bottom corner of the thick plastic piece can rest on it.
  2. Behind it, build a stack two 1x6 bricks and as many 1x6 tiles as needed to make a 2x6 plate placed on top sit just a short distance above the top of the thick plastic piece.
  3. Now, the plastic piece should be able to wiggle a small amount but it should be restricted by the 2x6 plate on the top and the 1x6 plate on the bottom.
  4. The plastic piece can be cut to make the fit better or the build easier.

Wire Everything Up

IMG_2989.JPEG
FUBM2D1MJD3YPOF.jpg

This is the final step to make everything turn and move.

  1. Add a motor to the 6x6 plate, powering the conical gear through the M3 axle. It would be best for this to be a geared DC motor adapted to work with LEGO, but a genuine LEGO motor will also do.
  2. Solder two wires to the geared motor with the shaft. Strip the loose ends of the wires and put them into output pins 2 and 4 of the arduino, or any similar pair of output pins.
  3. If the motor powering the conical gear is a geared motor adapted to work with LEGO, solder two wires to its terminals and put the ends into the arduino's GND and 5V pins. If the motor is a LEGO motor, power it with a LEGO power source.
  4. You can attach the arduino to the LEGO base with more double-sided tape if desired.
  5. Optionally, add a limit switch. Use double-sided tape and a few more LEGO pieces to attach the switch to the motion restrictor, so that the piece of thick plastic will trigger the switch when the ball bearing gear is in a certain position (see image). Wire the limit switch between 5V and a pin
  6. Code the arduino. Set pins 2 and 4 (or whatever pins are used) to LOW and HIGH, HIGH and LOW, or LOW and LOW to make the geared motor run in one direction, in the other direction, and not at all, shifting the ball bearing gear along the conical gear and changing the gear ratio. If you used a limit switch, add if statements to move the ball bearing in a certain way when the limit switch is triggered.

Code Example (uses Limit Switch)

  1. Open the arduino online editor and plug in the arduino. Write code and upload to the arduino to test it. The editor is somewhat straightforward, but there is plenty of information online about how to use it.
  2. Use the following lines of code:
  3. Make a comment (does not do anything): // comment here
  4. Set pin to input or output (done within void setup): pinMode(#, INPUT/OUTPUT)
  5. Set pin to 5V or GND (like + and -): digitalWrite(#, HIGH/LOW)
  6. Wait a number of milliseconds: delay(#)
  7. Get limit switch input: int buttonstate = digitalRead(#)
  8. If statement: if (buttonstate == HIGH/LOW) {
  9. code
  10. } else {
  11. code
  12. }
  13. Make sure to put a semicolon after every line except for those that end in } or {.


Example code

// Pins not used in setup: LEGO motor pin 1 (GND), LEGO motor pin 2 (5V), limit switch pin 1 (5V)
// 10K resistor between GND and 11

void setup() {
pinMode(2, OUTPUT); // Pin 1 of geared motor
pinMode(4, OUTPUT); // Pin 2 of geared motor
pinMode(11, INPUT); // Pin 2 of limit switch
}

// Highs and lows for pins 2 and 4 only work if geared motor is wired in a particular way
// Switch them if ball bearing keeps moving away from limit switch

void loop() {
int buttonState = digitalRead(11); // Gets output from limit switch, may be messed up without resistor from GND to 11
if (buttonState == LOW) {
digitalWrite(2, HIGH);
digitalWrite(4, LOW);; // Moves ball bearing slowly towards limit switch
} else {
digitalWrite(2, LOW);
digitalWrite(4, HIGH); // Moves ball bearing away from limit switch back to wide end of conical gear
delay(8000); // Adjust to bring bearing exactly to end of conical gear
}
}