ELECTRIC CASTER FOR WHEELCHAIRS (USU ETEC 2310 FINAL PROJECT)
by J0mbo in Circuits > Arduino
32 Views, 1 Favorites, 0 Comments
ELECTRIC CASTER FOR WHEELCHAIRS (USU ETEC 2310 FINAL PROJECT)
This project is a prototype caster wheel replacement designed for a standard non-electric wheelchair. Our goal was to create a concept that could evolve into an affordable short-to-medium-term mobility option for individuals who are unable to walk or propel a wheelchair on their own.
The design incorporates a 3D-printed frame, an omniwheel, and a pulley reduction system, all paired with electronics. The prototype uses two separate circuits: one dedicated to powering the wheel and another for monitoring battery level. We have not yet fully merged these two systems.
Project by Tysen Marshall and Ky Ashcraft
Supplies
Main Powered Wheel:
- Access to a 3D printer and Printer Filament (0.5kg)
- Arduino Nano
- Motor Controller link
- Motor link
- 280mm Timing Belt link
- Hall Effect Joystick link
- 2S Lipo link
- Bread Board
- xt60 connector
- 2x M3x0.5 8mm long screws
- assorted wires
Battery Level Indicator Circuit:
- Arduino Uno
- 2S lipo (same as above)
- protoboard
- 33 kOhm Resistor
- 47 kOhm Resistor
- 10 kOhm Resistor
- 220 Ohm resistor
- 2x 1N4001 Diodes
- Red LED
- assorted wires
3D Print Mounting Structure
All components were printed using Bambu Labs PETG-HF on a Bambu Lab P1S, using standard 0.2mm settings and tree supports. The orientation shown in the picture reflects how we positioned the parts to achieve optimal strength in the required load directions.
For convenience, we’ve included all 3D print files separately.
Assemble Parts
- Insert the motor into the mounting structure and secure it using M3 screws.
- Position the 3D-printed omniwheel, then slide the rod through the mounting structure and wheel to lock it in place.
- Press the timing belt pulleys onto both the rod end and the motor shaft. Insert and screw down the motor to the mounting structure using M3 screws.
- Place the timing belt onto the pulleys.
The motor that we used ended up having a much higher RPM than was needed; because of this, we used a 6 - 1 pulley reduction.
Wire Arduino
Motor Controller:
- Connect the corresponding wires on the motor to the M+ and M- terminals on the motor controller.
- Connect the corresponding wires on the battery to the B+ and B- terminals on the motor controller.
- Connect the VCC pin to the 5V supply on the Arduino and the GND pin to the ground on the Arduino.
- Connect the R_EN pin to pin D7 on the Arduino.
- Connect the L_EN pin to pin D8 on the Arduino.
- Connect the RPWM pin to pin D9 on the Arduino.
- Connect the LPWM pin to pin D10 on the Arduino.
- R_IS and L_IS do not need to be connected.
Joystick:
- Solder Wires onto the side of the joystick that you want to use.
- Complete the next three steps using the breadboard to allow easier connections.
- Connect the GND pin to GND on Arduino.
- Connect the VCC to the 5V supply on the Arduino
- Connect the Data pin to A0 on the Arduino
The joystick used in this project is a Hall effect joystick. For both the X and Y directions, an orange and black housing contains a Hall effect sensor, which detects changes in the magnetic field rather than relying on physical contact or resistance. A small magnet located behind the sensor shifts as the joystick is moved, altering the magnetic field around it. The sensor converts those changes into an electrical signal, allowing the controller to determine the joystick’s position.
Since this circuit only uses the Y-axis for forward and reverse control, only the three pins associated with that direction are required.
The signal from the joystick is fed into an H-bridge motor controller, which is the component responsible for driving the motor. An H-bridge works by using four electronic switches (typically MOSFETs or transistors) arranged in an “H” shape. By turning on specific pairs of these switches, the controller can reverse the polarity of the voltage going to the motor. This allows the motor to spin forward, spin in reverse, or stop entirely.
Program Arduino
Finally, connect your Arduino to a laptop or PC and upload the code included in the ZIP folder for this project. Once uploaded, you will be able to control both the speed and direction of the wheel using the joystick.
The program reads input from the joystick and generates a PWM (Pulse Width Modulation) signal that is sent to the motor controller. The motor controller then modulates the power delivered to the motor based on the PWM signal. In this project, the PWM frequency is set to 25 kHz, which is above the range of human hearing and prevents audible motor whine.
The code also includes adjustable calibration values and a configurable deadzone to ensure the motor fully stops when the joystick is in its resting position. These settings can be manually edited in the code if they need to be fine-tuned.
Battery Level Detection Wiring and Programming
For this project to become an end-use product, it would require a battery level sensing circuit to tell the user when the battery needs to be charged. This circuit does just that. For this Instructable, it is built separately from everything else, but it can be easily incorporated with the other components. The battery we are testing is a 2S LiPo with a voltage range of 6V to 8.4V. However, the maximum voltage the Arduino A0 pin can handle is 5V, so this circuit includes a voltage divider to scale down the maximum voltage A0 might receive at any time. We can determine which resistors will work best using the equation for a voltage divider:
V_out=V_in x R_2/((R_1+R_2))
Using a 33 kOhm resistor and a 47 kOhm resistor gives us:
8.4V×33k/(47k+33k)=3.465V
This setup ensures that even when the battery is fully charged, it will not exceed the maximum voltage of A0.
Connect the components as shown using a breadboard; it can be soldered to a PCB later. Please note that it is crucial that there is a wire connecting the battery ground to the Arduino ground; otherwise, the Arduino will not have a reference point to determine the battery level. Upload the following code found in the ZIP file named "Battery Detection". This code takes the measured voltage at A0 and works backwards to determine the actual battery voltage. It then determines if that voltage is low enough, in this case below 7.2V, to turn on the red LED.