Electric Vehicle
2025-2026 Electric Vehicle project for Science Olympiad - custom, hand-made, and tuned.
Created by
loliipoppi 🚀
Tier 3
6 views
0 followers
loliipoppi 🚀
added to the journal ago
Redid the limit switch mount & tested
I realized that the bumper for the limit switch would also hit the limit switch body and lock the car in place, so I reCADed it for better positioning. I also realized that the set screw (I was using an external screw) to lock the bumper on the shaft was going to hit the limit switch, so I came up with a simple solution to just make the bumper longer so that the limit switch would not be in the path of the screw.


After that, I tested it, and it worked perfectly (yes!). I put on the remaining wires and buttons while I waited to get a limit switch from school.
loliipoppi 🚀
added to the journal ago
Coded & Tested V3
After building V3, I got right to work revamping the code. This code would track the accurate amount of distance traveled by taking in feedback from the limit switch. When it hits about one wheel revolution from the finish line, it will slow down to a creep speed I will explain later.
Gemini helped me weigh the distance and time error penalties (distance error = 2pts/cm, time error = 1pt/sec), with the equation Error = 1/(2*Velocity). If I found the Error-Velocity graph from testing my robot and found the intersection of the graphs, I would find the maximum speed at which I could reduce time penalties while not over-sacrificing distance errors.

I first ran several tests holding different parameters constant (time, distance, etc.). I got an insane error - and the error increased as I slowed down (since I held the diminished speed for longer). I realized this was because the relationship between the servo speed (s.s.) (what you put into servo.write(speed)) and the true speed (in cm/s) was NOT linear, but more logistic. More tests helped me find that equation. Who knew that doing school physics labs could come in handy?


Fortunately, from about s.s. 0-65, the relationship was pretty much linear (actually, it was almost perfectly linear, surprisingly). This simplifies calculations. After I regressed a logistic model to the s.s.-true speed relationship, I reran the error tests, found the intersection, found the optimal servo speed, and finished the firmware code.
Results:

loliipoppi 🚀
added to the journal ago
Designed V3
The following night (I think?), I suddenly realized a much better solution. Since I couldn't rely on the servo to provide accurate speed, I would use odometry instead by positioning a bumper on the shaft of the wheels that would hit a limit switch every time the wheels made one revolution. This eliminated many sources of error and ensured much more reliable distance tracking.
Soon after, I reCADed my robot for V3. This one was much more compact in size (both width and length), utilizing stacked surfaces to increase the efficiency of surface area use. This allowed me to print it all in one go, which also meant that I didn't have to screw the plates together and risk wheel alignment errors. I also made a mount for the limit switch.

After 3D printing the plate and building, here's what it looked like!

p.s. I don't know why it took me so long, things were difficult, I guess :sob:
loliipoppi 🚀
added to the journal ago
Built V2 & Tested
After I designed my robot V2, I 3D printed the parts and built it mainly using REV Robotics components with an Arduino, Gobilda speed servo, and a battery pack. Here is part of the finished bot (I only have a picture of this part :( ):

After I built it, my friend kindly helped me test it. I used the code I had quickly written a bit before and inputted the parameters: distance - 800cm, time - 15s. After it had run at the speed computed by distance/time for 15s, it ended up about at ~1120cm, which was ~40% error. I knew something was wrong - later I would realize that, even though the datasheet said 180 max RPM for 4.8V, inputting servo.write(180) (full power) can't necessarily reach the topmost speed, and the max rpm itself wasn't accurate to my battery and setup.
loliipoppi 🚀
added to the journal ago
Designed V1/V2 robot
I got right to work this January, since I had time. The first thing I did was plan out the robot on a sheet of paper:

I gathered my materials from the school's robotics lab. They had most of the materials, so I didn't need to buy much. I then CADed the first version of the robot, V1, which matched the long form factor of the other robots:

However, I realized that the long form factor would definitely not fit within even two of my printers, so I reCADed it for a slightly shorter and more thoughtful design, V2:

loliipoppi 🚀
added to the journal ago
Planned the project
Back in November and December, when we got our team event assignments, I met with my partner for the Electric Vehicle Science Olympiad event, and we decided to make an Arduino-style robot. We considered using the robotics team's prebuilt robot (I was part of the robotics team), which was probably more accurate, but I wanted to do this to experience more of the engineering process. I took the lead on this event in designing and building (while my partner took the lead on other events we had together).
I watched some videos for external inspiration. It seemed like a long form factor was popular (video was kinda blurry):

As I planned the project, I came up with a simple list of materials:
- Gobilda super speed servo (my assumption was that this was both fast and accurate... turns out all servos aren't accurate to some degree)
- arduino uno
- button
- battery
- basically it
loliipoppi 🚀
started Electric Vehicle ago
1/18/2026 8:45 PM - Planned the project
Back in November and December, when we got our team event assignments, I met with my partner for the Electric Vehicle Science Olympiad event, and we decided to make an Arduino-style robot. We considered using the robotics team's prebuilt robot (I was part of the robotics team), which was probably more accurate, but I wanted to do this to experience more of the engineering process. I took the lead on this event in designing and building (while my partner took the lead on other events we had together).
I watched some videos for external inspiration. It seemed like a long form factor was popular (video was kinda blurry):

As I planned the project, I came up with a simple list of materials:
- Gobilda super speed servo (my assumption was that this was both fast and accurate... turns out all servos aren't accurate to some degree)
- arduino uno
- button
- battery
- basically it
1/18/2026 8:56 PM - Designed V1/V2 robot
I got right to work this January, since I had time. The first thing I did was plan out the robot on a sheet of paper:

I gathered my materials from the school's robotics lab. They had most of the materials, so I didn't need to buy much. I then CADed the first version of the robot, V1, which matched the long form factor of the other robots:

However, I realized that the long form factor would definitely not fit within even two of my printers, so I reCADed it for a slightly shorter and more thoughtful design, V2:
1/18/2026 9:01 PM - Built V2 & Tested
After I designed my robot V2, I 3D printed the parts and built it mainly using REV Robotics components with an Arduino, Gobilda speed servo, and a battery pack. Here is part of the finished bot (I only have a picture of this part :( ):

After I built it, my friend kindly helped me test it. I used the code I had quickly written a bit before and inputted the parameters: distance - 800cm, time - 15s. After it had run at the speed computed by distance/time for 15s, it ended up about at ~1120cm, which was ~40% error. I knew something was wrong - later I would realize that, even though the datasheet said 180 max RPM for 4.8V, inputting servo.write(180) (full power) can't necessarily reach the topmost speed, and the max rpm itself wasn't accurate to my battery and setup.
1/18/2026 9:08 PM - Designed V3
The following night (I think?), I suddenly realized a much better solution. Since I couldn't rely on the servo to provide accurate speed, I would use odometry instead by positioning a bumper on the shaft of the wheels that would hit a limit switch every time the wheels made one revolution. This eliminated many sources of error and ensured much more reliable distance tracking.
Soon after, I reCADed my robot for V3. This one was much more compact in size (both width and length), utilizing stacked surfaces to increase the efficiency of surface area use. This allowed me to print it all in one go, which also meant that I didn't have to screw the plates together and risk wheel alignment errors. I also made a mount for the limit switch.

After 3D printing the plate and building, here's what it looked like!

p.s. I don't know why it took me so long, things were difficult, I guess :sob:
1/19/2026 10 AM - Coded & Tested V3
After building V3, I got right to work revamping the code. This code would track the accurate amount of distance traveled by taking in feedback from the limit switch. When it hits about one wheel revolution from the finish line, it will slow down to a creep speed I will explain later.
Gemini helped me weigh the distance and time error penalties (distance error = 2pts/cm, time error = 1pt/sec), with the equation Error = 1/(2*Velocity). If I found the Error-Velocity graph from testing my robot and found the intersection of the graphs, I would find the maximum speed at which I could reduce time penalties while not over-sacrificing distance errors.

I first ran several tests holding different parameters constant (time, distance, etc.). I got an insane error - and the error increased as I slowed down (since I held the diminished speed for longer). I realized this was because the relationship between the servo speed (s.s.) (what you put into servo.write(speed)) and the true speed (in cm/s) was NOT linear, but more logistic. More tests helped me find that equation. Who knew that doing school physics labs could come in handy?


Fortunately, from about s.s. 0-65, the relationship was pretty much linear (actually, it was almost perfectly linear, surprisingly). This simplifies calculations. After I regressed a logistic model to the s.s.-true speed relationship, I reran the error tests, found the intersection, found the optimal servo speed, and finished the firmware code.
Results:
1/19/2026 6 PM - Redid the limit switch mount & tested
I realized that the bumper for the limit switch would also hit the limit switch body and lock the car in place, so I reCADed it for better positioning. I also realized that the set screw (I was using an external screw) to lock the bumper on the shaft was going to hit the limit switch, so I came up with a simple solution to just make the bumper longer so that the limit switch would not be in the path of the screw.


After that, I tested it, and it worked perfectly (yes!). I put on the remaining wires and buttons while I waited to get a limit switch from school.