This week was quite eventful. I fried one of our pwm expanders which was a critical part of our project. To fix this there were 4 possible solutions: connect 10 servos to the stm and 6 to the raspberry pi and use UART signaling to initiate servo motor movement (all servos would not be able to move at once, give up on 6 of them and only drive 26 servo motor, use an arduino to drive the remaining servo motors, or use an Arduino Mega. Originally, I borrowed an Arduino Mega from Roboclub, but their Mega was broken and the I2C did not work. We had to borrow one from Justin from Techspark. I had to rewrite the STM code on to the Arduino. We are on track to finish because we have to. Next week we hope to finish everything (duh).
Team Status Report – 11/22
The most significant risk that could jeopardize the success of the project is when our supplies for the reset mechanism and dowels come in. We are looking into alternatives for the reset mechanism, but the dowels do not have alternatives. No changes were made to the design. I would add pictures but our media quota has been reached.
Crystal’s Status Report – 11/22
This week I cut hundreds of dowels. I still need to cut more when the other dowels come in. This week I also successfully wrote the firmware to control 3 servo motors on the PWM expanders and 2 stepper motors. I was originally having issues with the PWM expander, but the issue was that I forgot to plug it into a power source. When I first flashed the code onto the STM, the stepper motor twitched. This was due to the step pulses being too fast. I then added the stepper motor code but the stepper motors just did not spin. I tried to debug this by unplugging the I2C PWM expander, but the stepper motor started twitching again. This was because with no I2C devices connected, the I2C reader was failing and was blocking for a short period of time. This made the stepping loop slower, allowing the motor to spin. When I reduced the timeout, the stepper pulses became fast again, causing the motor to twitch. So increasing the I2C blocking period was just slowed down the CPU to make the stepping speed possible. The second stepper motor also initially used illegal GPIO pins.
I am on schedule, but I am concerned about the ability to incorporate the reset actuators because that depends on when they come in. We also have not ordered all of the dowels yet because we need to wait for them to restock.
Next week I hope to write the firmware for the second PWM expander and write the button powered interrupt that will trigger the reset.
To accomplish my task, I needed to know how to use the CubeIDE, know how servo motors worked, and understand the ability / limitations of different microcontrollers. I practiced reading data sheets and how to internet search to acquire this knowledge.
Crystal’s Status Report – 11/15
This week I started working on incorporating the PWM expanders and big stepper motor driver. Previously the servo motors were directly plugged into the GPIO pins of the STM. This would not have been efficient because a single STM does not have enough ports to directly connect 32 servo motors, so we had to buy 2 PWM expanders. Similarly, our stepper motors were previously run on A4988 stepper motor drivers, which did not have enough current to support the weight of our carriage holding 32 servos and gantry belt. I slightly moved the schedule around by working on incorporating these components first instead of programming an interrupt for the rest mechanism. I am still on track. Next week I hope to have all 32 servos working on the PWM expanders and the stepper motors on the heavy duty driver.
Crystal’s Status Report – 11/8
This week I was able to somewhat concurrently run 4 servo motors and then sequentially run the stepper motor that powers the gantry. I am saying somewhat concurrently because timer 2 on the STM only has 3 usable channels. This leaves one of the servo motors running on a different timer, causing it to run out of sync with the other servos. I am investigating how to sync these two timers. While writing the stepper motor driver, I realized we never considered a stepper motor driver in our design. Given that our stepper motor will need to support the weight of the actuator carriage and 32 servo motors, I decided to purchase a heavy duty stepper motor driver. I also wrote a function that can convert the calculated depth to an angle the servo can rotate to. We also decided to use dowels as our pins. We tried hand sawing and using a miter saw to cut the dowels. The miter saw didn’t give a clean cut, so we will be hand-sawing for now. However we will try other saws.
I am on schedule. Hopefully, the pwm expanders will come in this week, so I can implement actuation with the pwm expanders.
Team Status Report – 11/1
Budget is still a big concern for the viability of this project. We currently cannot afford to buy dowels and 32 servo motors, so we are looking for other avenues to get free continuous servo motors. There has been a slight change to the design of the system, specifically the actuator subsystem. Though not specified in any documentation, we originally planned to use 180 servo motors. However, a rotation of 180 degrees is not sufficient enough to actuate the pins. Continuous rotation servos are more expensive, requiring us to spend $50, but I will see if I can hunt for some free ones.
Crystal’s Status Report – 11/1
This week I worked on the firmware of this project. I designed the architecture of the firmware by creating 4 schedulable tasks: the UART message, actuator movement, gantry movement, and reseting. I am on schedule. Next week I hope to be able to have the firmware working with at least 2 actuators, a gantry motor (since the other one didn’t come in), and actual UART messages with the actuator heights.
Team Status Report – 10/25
The most significant risk that could jeopardize the success of our project is our project. Some items for the gantry exceeded expect cost of the corresponding items. Due to this concern for budget, the size of the pins might be changing. We are finding alternatives through Ideate, RoboClub, or a more affordable pin solution like straws or chopsticks. Everything for the frame and gantry motion of live pin was ordered and we are waiting on delivery. In terms of the Cad there are some design changes being made to the frame to accommodate for 32×32 frame instead of 32×24. The file for the pin board was made and is ready to laser cut. We found cheapest material at ideate but are waiting to laser cut until we have a finalized pin size based off our budget/supplier.
Crystal’s Status Report – 10/25
I am currently trying to drive 4 servo motors. I was originally using 18349 code as a base, but was unsuccessful. I decided to pivot to using STM32CubeIDE projects because there are more resources on how to debug and approach common projects like driving servo motors. As I was trying to drive the servos, one of the servo motors had damaged wires due to strain and was therefore unusable. Setting up the CubeIDE was a bit of a challenge at first. The program was unable to detect my ST Link Server, and therefore unable to connect to my STM32. To fix this, I had to redownload the latest version of the CubeIDE. I was able to drive 3 servos! If I had a 4th servo, I am confident I will be able to drive it too.
I am now on schedule and next week I hope I can help with the physical assembly of the project.
Crystal’s Status Report – 10/18
I was able to get the LEDs to vary in brightness demonstrating a PWM signal. I am experimenting with different approaches to get 4 servos moving in parallel.
I am behind schedule. I will try to put in more hours to get more progress. Next week I hope to be able to have 4 servos moving in parallel.

