Week 01
Project Initiation & Scope Definition
Goal this week: Figure out exactly what this project is going to be. I’ve wanted to work on something related to CubeSats for a long time, so the goal was to find a mechanical and optical research problem I could actually design and fabricate on my own within a 10-week timeframe.
What I did
- Spent the week reading up on small satellite payloads, specifically looking into the volume versus accuracy contradiction that affects high-accuracy star trackers.
- Researched how deployable optical baffles solve this issue by staying completely packed down during launch to save space, and then deploying in orbit to block stray light.
- Finalized my core concept: I am going to build a deployable optical baffle designed to fit inside the tight volume constraints of a 1U CubeSat.
Problems and blockers
- I realized pretty quickly that building a true, space-grade deployment structure and hold-down-release mechanism (HDRM) requires massive budgets and extreme environmental testing.
Decisions
- I decided to downgrade the scope to make a ground-based prototype using DIY equipment and materials. This keeps the costs low and turns the project into a fun, hands-on learning experience focused on the mechanics and kinematics, rather than stressing over aerospace-grade flight requirements.
Next week
- Do a trade study on different deployment mechanisms to figure out how this thing will actually open up
Week 02
Literature Review & Optical Baffle Fundamentals
Goal this week: Dive deep into academic literature and technical papers to understand how optical baffles are actually designed, how deployable mechanisms work in CubeSats, and what fabrication methods are feasible for prototyping.
What I did
- Studied the core optical theory behind traditional fixed baffles, specifically the geometric rules laid out by Arnoux (1996) and Heinisch & Jolliffe (1971).
- Reviewed the traditional graphical design method versus analytical models for vane positioning. While classical designs rely on manual CAD ray-tracing to place vanes at the intersection of the field of view (FoV) boundary, modern approaches use parametric analytical equations to compute vane coordinates.
- Examined how existing space missions handle deployable structures, noting that CubeSats traditionally use deployables for solar panels and antennas, but rarely for optics due to tight alignment tolerances.
- Read through key papers on deployable baffles to see how different groups tackle the mechanism
Problems and blockers
- The math behind conical deployable baffles gets tricky fast because of the wall thickness and overlapping stop-tab clearances between nested stages.
Decisions
- I threw out the traditional "optics-first" mathematical approach.
- Instead, I decided to reverse-engineer the system based on fabrication requirements. I will design the mechanical structure first, basing the segment lengths, wall thicknesses, and sliding clearances on what I can reliably 3D print and only then apply the necessary optical features to fit within those physical constraints.
Next week
- Do a full trade study on various deployment mechanisms to lock in exactly how the baffle will deploy and stove itself.
References
Yalagach et al. (2024) - Development of a deployable mechanism for a conical optical baffle for a small satellite
Liu et al. (2021) - A compressed and high-accuracy star tracker with on-orbit deployable baffle for remote sensing cubesats
Arnoux (1996) - Star sensor baffle optimization: some helpful practical design rules
Week 03
Deployment Mechanism Trade Study
Goal this week: Find the perfect deployment mechanism for the deployable optical baffle.
What we did
- Conducted a formal trade study evaluating six different candidate mechanisms.
- Looked at traditional aerospace approaches, such as using a torsion spring to store deployment energy alongside a burn-wire hold-down release mechanism (HDRM).
- Compared those against more prototype-friendly mechanical solutions, like servo-driven string releases, 3-stage side screws, and direct servo arms.
- Scored each mechanism across 10 weighted parameters, (Note: The full scoring matrix and parameter breakdown is uploaded as a separate Trade Study document in the repo)
Problems and blockers
- A true flight ready system, like the torsion spring with a burn-wire release, is incredibly compact and requires very low electrical energy. However, the burn-wire is effectively a one-time release. Having to replace the melted wire and re-tension the system for every single test cycle
Decisions
- For the Ground Demonstrator: I selected Mechanism 6: Direct Servo Arm. This setup will use a dual-servo slotted lever (Scotch Yoke) system to physically push the baffle open and pull it closed.
- For a Future Flight Model: I concluded that Mechanism 2 (Torsion Spring + Servo-Driven Pin-Puller) or Mechanism 1 (Burn-Wire Release) would be the actual choices for space.
Next week
- Move from theory to physical form factor. I need to understand press-fit clearances for the sliding tubes, figure out the actual dimensions to keep this within the 1U constraints etc.
Week 04
CAD Basics & 1U Enclosure Fabrication
Goal this week: Get hands-on with CAD software and actually build the physical 1U CubeSat chassis that will house the deployable baffle prototype.
What I did
- Installed and spent time exploring Fusion 360 for 3D modeling and Inkscape for 2D vector graphics.
- Looked into the mechanical concept of press-fits and sliding clearances, which will be crucial for making the telescoping tubes of the baffle work later on.
- Designed the 1U CubeSat body based on standard 10 cm x 10 cm x 10 cm outer dimensions. I used an open-source box generator (boxes.hackerspace-bamberg.de) to create the initial design using finger joints.
- Modified the SVG file in Inkscape to be laser-cut from 2.88mm thick transparent acrylic. Taking the roughly 2.8mm wall thickness into account, I calculated the exact usable inner space to be 94.4 mm x 94.4 mm. This is the hard physical boundary my stowed baffle has to fit inside. (Note: This SVG file is in the CAD file's section)
- Successfully laser cut and assembled the transparent acrylic box.

Problems and blockers
- According to the official CubeSat Design Specification, standard 1U CubeSats require specific rails (minimum 8.5mm width) along their edges so they can slide smoothly out of a standard P-POD deployer.
- Trying to integrate these rails into a flat laser-cut acrylic design adds a lot of unnecessary structural complexity.

Decisions
- I decided to completely remove the standard CubeSat rails from my design, since this is a ground-based prototype. Dropping them kept the fabrication fast and simple.
Next week
- Make designs of baffle and servo mechanism.
Links
Week 05
Mechanism Sketches & Mathematical Modeling
Goal this week: Figure out the exact math for the baffle stages, lock in the physical dimensions, sketch the mechanism, and prove the MG90 servos can actually lift it without jamming.
What we did
- Sat down and made proper pen-and-paper sketches of the baffle and its lifting mechanisms, putting real dimensions to the ideas. Sketched out the top, side, and bottom views of the stowed and deployed states.
- Finalized the structural plan: it will be a 3-stage deployable baffle with a stowed length of 35mm and a fully deployed length of 80mm.
- Calculated the exact inner and outer radii for each stage. Assuming a 2mm wall thickness and a 0.4mm sliding clearance gap for 3D printing, the dimensions are: Innermost stage (7.78mm inner / 9.78mm outer), Middle stage (10.18mm inner / 12.18mm outer), and Outermost stage (12.58mm inner / 14.58mm outer).
- Compiled all these computations, along with the mechanical constraints, into a detailed document titled Baffle_Kinematics_and_Torque_Analysis.md (Note: this is uploaded in the repo documentation section).

Problems and blockers
- I was worried if two tiny MG90s servos could handle lifting the entire 3-stage baffle assembly, especially since the lever arm needs to be 8cm long to achieve the 4.5cm vertical stroke.
- Because the servos sit on opposite sides, pushing up could introduce a twisting rotational torque. With only a tight 0.40mm clearance between the walls, any slight twist causes the 3D-printed layer lines to catch, triggering a mechanical jam
Decisions
- Ran a proper torque study (included in the Baffle_Kinematics_and_Torque_Analysis.md doc) and confirmed the MG90s definitely have the strength to lift the required weight at that arm length.
- To prevent the tubes from locking up, I decided that every segment will be sanded incredibly smooth during fabrication. I also decided to use liquid dish soap as a quick DIY lubricant between the stages to reduce friction.
Next week
- Start building out the parametric CAD models of the baffle. (Though looking at the calendar, Onam is coming up, so the schedule might shift)
Week 06
Onam Break & Unexpected Downtime
Goal this week: The original plan was to jump straight into the parametric CAD models of the baffle, but reality stepped in. The actual goal shifted to celebrating the holidays and then recovering from a sudden illness.
What I did
- Took time off to celebrate Onam with my family.
- Intentionally stepped away from the sprint rather than trying to power through mechanical CAD models while sick.
Problems and blockers
- Getting sick completely stalled the hardware fabrication timeline. Losing a full week in a tight 10-week sprint is significant
Next week
- Strategize how to compress the timeline for the CAD modeling, 3D printing, and electronics assembly to get back on track.
- Make the CAD models and 3D print them.
Week 07
Parametric CAD Design
Goal this week: Make 3D CAD models with perfect tolerances of the baffle.
What I did
- Transcribed my pen-and-paper sketches and mathematical calculations from Week 5 into highly specific text constraints, down to the exact millimeter offsets and 0.40 mm sliding clearances and fed into Gemini to generate precise structural prompts.
- Took those optimized prompts and fed them into an AI CAD agent (Zoo Design Studio / ZooKeeper AI) to generate the parametric code scripts (.kcl files).
- main.kcl: The 94x94 mm, 8 mm thick base plate featuring custom 35x35 mm recessed pockets to clamp the MG90 servos horizontally without glue, ensuring the splines align perfectly.
- middle.kcl: The free-floating central telescoping tube.
- topart.kcl: The top plate and baffle, featuring the dual 90 mm slotted rails (track for the Scotch Yoke mechanism) aligned perfectly to the diagonal servo layout.
- arm.kcl: The custom 80 mm servo arms with a built-in 4 mm sliding pin to lock into the slotted rails.
- Exported these models from Zoo Design Studio and imported them into Autodesk Fusion for final assembly verification. (Note: All finalized CAD files have been uploaded to the CAD section of the repo).
Problems and blockers
- I simply didn't have the muscle memory in Fusion 360 to manually model complex interlocking sliding tubes and offset rails quickly enough for a sprint. Instead of fighting the software, I treated CAD generation like code generation. gave the AI agent perfectly structured, unambiguous prompts.
Next week
- Move into fabrication and electronics. I need to 3D print these CAD files, assemble the stages, and write the Python code to run the servos via a Raspberry Pi.
Week 08
Fabrication, Assembly, and Electronics
Goal this week: The main objective is to 3D print the entire three-stage baffle and get the mechanical setup done and also to get the required electronics working.
What I did
- I 3D printed the entire baffle assembly, which consists of the top plate (with the upper segment), the middle segment, and the bottom plate (with the lower segment).
- Right away, I ran into a major assembly issue based on how the tolerances were built. The original design had the lower baffle segment fused directly to the bottom base plate. Because of the overlapping lips on the tubes, it was physically impossible to slide the middle segment over it during assembly.
- To fix this issue I went back and printed the lower baffle segment as a completely separate piece. Once I slid the middle segment over it and had the tubes correctly nested, I just super-glued the lower segment down to the bottom plate. The assembled baffle perfectly fits together now, and you can see the fully nested structure and top plate in the photos.

Note: Ideally, an optical baffle should be printed in matte black to absorb maximum stray light. Unfortunately, I only had a white spool lying around, so I printed it in white for now to verify the mechanics. I will upgrade to black filament in the coming weeks if possible.
- On the electrical side, I locked in the final component list. I originally thought about using a 3-cell LiPo to power everything, but dropped that idea. Instead, I went with a simple 4x AA battery pack (giving the required 6V) dedicated just to the two MG90s servo motors. The Raspberry Pi 5 is powered completely separately by its official power supply.
- Wired everything up on a perf board. The ground from the battery pack is tied to Pi pin 39 to create a common ground with the servos. Since both servos mirror the exact same movement, they both receive their PWM signal from a single pin (Pi pin 32). Currently, there isn't a power switch for the servos; they just turn on as soon as the batteries are slotted in.
- I set up the electrical connections on a separate test bench and wrote the Python control software. The code features a clean state machine (toggling between STOWED and DEPLOYED) and uses hardware PWM so the servos don't jitter. It runs a simple command-line interface where I can type commands to move the servos using placeholder PWM values. I also added a safety feature in the code that automatically forces the servos back to the stowed position before the script shuts down.
- Right now, the mechanical baffle works, and the electronics/code work perfectly on the bench, but they haven't been physically integrated together yet.
Next week
- Full system integration. I need to physically mount the servos into the base plate, attach the arms to the top plate, and get the code to successfully lift the actual printed baffle.
Week 09
Full System Integration & Web Dashboard
Goal this week:: Physically integrate the mechanical baffle with the electronics, finalize the software control system with a proper user interface, and pack everything into the 1U CubeSat chassis.
What I did
- Mounted the servos to the bottom plate of the baffle and attempted to slot the 80mm arms into the tracking rails on the top plate. Unfortunately the arms jammed mid-stroke inside the rails, locking the entire mechanism and stalling out both servos.
- I spent time iterating the servo arms, shortening them from 8cm down to 7.5cm and making minor dimensional tweaks, but the binding persisted. It became clear that the slotted rails themselves needed a total redesign.
- Doing a proper redesign of the rails meant 3D printing a brand new top plate, and I just didn't have the time left in the sprint for that. So, went with a functional workaround to bypass the rails. Now the servo arms just push directly against the flat underside of the top plate.
- It actually deploys and stows incredibly smoothly now. With the tradeoff that without the rails keeping it constrained, the baffle twists a little bit as it rises and sometimes sits at a slight angle when fully deployed.
- Software Dashboard: Completely upgraded the Python controller. I built a web-based dashboard using flask that can be accessed over Wi-Fi by any device. It features three main tabs:
- Control Tab: Simple buttons to Deploy and Stow, alongside a live system log.
- Live Feed Tab: Streams real-time MJPEG video from the Pi Cam 3, complete with a button to download the last 15 seconds of footage.
- Analysis Tab: Automatically captures a frame when the baffle is stowed and another when deployed. It calculates the mean brightness in a predefined "glare" region, outputs a plain-English verdict on whether stray light increased or dropped, and generates a visual heatmap showing exactly where the light differences occurred.

- Rewrote the servo driving logic to use a "smoothstep" mathematical S-curve. Instead of snapping violently from one position to the next, the servos now gently accelerate, cruise, and smoothly decelerate over a 2.5-second window.
- Final Assembly: I placed the entire functioning stack the Raspberry Pi 5, the Pi Cam (mounted underneath looking up through the baffle), the servos, and the 3D-printed baffle inside the clear laser-cut 1U acrylic chassis. Only the 6V AA battery pack and the Pi's power brick sit outside the box.