Key technologies: Bluetooth, motor control, Qt, control algorithms
For my senior design project, our group was told to create a traction-control system. We were given flexibility in choosing an implementation. Since we had a mechanical engineer on our team, we decided to build a remote-controlled car with electric motors.
Our project consisted of four technical aspects: mechanical design and chassis wiring of the RC car, a controller PCB, firmware for the controller PCB, and a desktop application to view telemetry data. I was responsible for the controller software as well as the desktop application.
Mechanical Design and Chassis Wiring: We settled on a “home plate” shape for the robot after we decided on a three-wheeled vehicle design. This allowed for a couple angled sides and the rest of everything at right angles, making fabrication very simple. The three-wheeled design was important since we want the rear wheel to provide only stability and directional guidance.
Controller PCB: We chose to use an Arduino MEGA2560 board as our main controller. However, since this board did not have the sensors and motor controllers that we needed, we also designed a custom PCB.
Controller Firmware: The controller firmware was responsible for 1) reading data from all of the on-board sensors, 2) controlling the DC motors, and 3) sending the telemetry data via Bluetooth to the desktop viewing application. The control algorithm was, as expected, the most difficult portion of this project. I dusted my floor with flour and spent hours testing and tuning the motor control routines.
Desktop Application: We needed to have a good way to demonstrate that the wheels were actually slipping and that our control algorithm was working. The desktop application connected to our on-car Bluetooth module and displayed the data in a simple window. I chose the Qt development framework so that our application would be cross-platform (in case we needed to port it to a Windows machine for our professor to use).