Introduction: Adapta-Wheel

Tires are expensive, and getting different treads put on tires for different weather situations can be a hassle. Because many people do not bother changing tires, their vehicles are unable to easily adapt to different road conditions.

The goal of this project is to construct a wheel that is capable of extruding blades to increase traction on loose terrains, such as sand, and mount it on a bot.

Step 1: Materials Needed

For this project, you will need access to a 3D printer and a soldering iron. We used a laser cutter to fabricate the acrylic chassis, but the chassis can be built with other tools instead.

  • Microservo 9g SG90 x2
  • NodeMCU
  • NodeMCU Motor Shield
  • 1" square base plastic swivel wheel
  • 0.3cm acrylic for laser cutting
  • 1/2" screws x16
  • tiny washers x16
  • 24mm cassette belts x2
  • hobby motors x2
  • Battery Pack
  • AA Batteries x4
  • Velcro Strip
  • 1/4" Rubber Band(size 63) x2

Step 2: 3D Print Files

All of these G-code files are formatted for a .8mm printing head. The files only need to be printed once, as they each contain multiple copies of the labelled components.

Step 3: Chassis Dimensions

Attached are the pdf's for laser cutting the motor mounts and chassis.

Step 4: Wiring

Please Note: the pin names on the physical NodeMCU do not directly translate to the pins that the computer reads in the code. Each servo was connected with 3 wires. The brown wire connected to ground, the red wire to voltage source, and the yellow wire to the corresponding pin. Servo 1 was connected to D6 and servo 2 was connected to D7. The motors were wired into the A-, A+, B-, B+ ports which corresponded to pins D1 and D2.

Step 5: Assembling Wheels

Step 1: Gather/ 3D print the materials. For easier assembly, pre-drill two small holes into the back of the blade carriages.

Step 2: Sand the axle and the outside of the cone. You may also want to sand the inside of the cone and the blade carriage channels for ease of movement.

Step 3: Insert one blade carriage into its blade slot. Carefully turn the wheel to the back, and screw the blade carriage into the carriage channel with 1/2" screws. Make sure the carriage slides smoothly. If it does not slide smoothly, unscrew the carriage and sand the carriage channel.

Step 4: Repeat Step 3 for each blade carriage.

Step 5: Attach 1/4" rubber bands to the sides for extra traction. On each wheel, lay a cassette belt around the 8 pegs on the blade carriages.

Step 6: Place the cone on the axle. Press the cone down and release to make sure the mechanism works properly.

Step 6: Assembling Vehicle

Step 1: Fix two of the small chassis pieces to the parallel slits in the main chassis piece as shown in the first photograph. Screw in the motor with six 1/2" screws.

Step 2: Repeat Step 1 on the other side of the chassis with the other motor. Make sure the motors are oriented correctly. Then, attach the 'hook' (rough) part of the Velcro strip to the chassis.

Step 3: Attach the wires to the motors, and thread the wires through the horizontal slots in the chassis. Attach the back wheel through the four holes in the back of the chassis.

Step 4: Screw the servo into the large gap in the chassis as pictured in the fifth image. Repeat on the other side, and check for proper orientation.

Step 5: Attach the 'loop' (soft) part of the Velcro to the bottom of the NodeMCU Motor Shield, and attach the Motor Shield to the chassis using the Velcro.

Step 6: Wire the servos to the Motor Shield: the right-side motor to physical pin 8, the left-side motor to physical pin 7. Insert the NodeMCU into the Motor Shield.

Step 7: Attach the motor wires to the Motor Shield, with the left-side motor's wires on the left side, as pictured in images 14 and 15.

Step 8: Attach the wheels by lining up the wheel axle to the motor axle and gently pressing them together. Make sure none of the interior pieces dislodge.

Step 9: Attach the battery pack to the Motor Shield and insert batteries. Rotate the battery pack so there are two loops of wire (one in each color) underneath where the battery pack will sit, and then place the battery pack on top of the wire loops. Tape the battery pack and the extra servo wire down.

Step 7: Code

import machine

import time

import math

s = machine.PWM(machine.Pin(12), freq = 50)

s2 = machine.PWM(machine.Pin(13), freq = 50)

m = machine.PWM(machine.Pin(5), freq = 50)

m2 = machine.PWM(machine.Pin(4), freq = 50)

s = s,s2

m = m,m2

def e(s):



def r(s):



def run(m):



def stop(m):



The code includes a function to make the wheels turn as well as a function to make the wheels stop. Also, there is a function to extend the servo motors as well as retract them.

Step 8: Controlling With WebREPL

Using WebREPL, the bot is able to be controlled via WiFi to the NodeMCU. In WebREPL, the different functions for the car are able to be controlled. For example, the car can be told to start moving or to stop moving, or it can be told to extrude or retract the tire blades. In order to set this up, the computer must be connected to the NodeMCU's WiFi connection and have WebREPL pulled up. Also, the code must be saved to the computer and then uploaded through WebREPL onto the NodeMCU. After this, functions can be ran and the NodeMCU will read the commands and perform the given task.

Step 9: Next Steps

There are multiple things that we would've done differently, if we had more time.

  • Include an optical encoder: would allow wheels to automatically deploy spikes when bot detected slippage
  • Make a working turning mechanism for 4 wheels
  • Use a potentiometer with analog input to control the amount of blade extension