My Final Project: PXL

A Spatially-Resonsive Immersive NeoPixel Experience

The project I propose building for Fab Academy is a spatially-responsive immersive, interactive NeoPixel experience- PXL. The project tracks users' movements using a TOF sensor and responds through unique patterns of light using a NeoPixel Matrix. The project itself will have mounted to it addressable RGB LEDs as well as a sensor that will track users' movement and distance. The user is an individual curious about this device and who is interested in experiencing a sensory experience. The exhibit is intended to engage, entertain, and create a sense of wonder. The project is designed to grab users’ attention and shape their behavior through responsive light-based interactions. As users walk by the exhibit, approach it, stand in front of it, or walk away, the exhibit responds through animated addressable NeoPixel lighting patterns.

Final Project Slide and Video:

presentation.png
presentation.mp4

The project is intended to signal to a passersby that it is interactive and to demonstrate how movement maps to visual output.

Final projectNeopixel strands display display

The animations are designed not only to react to movement, but also to encourage movement. For example, animations that move from the outer perimeter of the matrix toward the center are intended to encourage users to move closer to the exhibit.

The project was intended to be installed as a semi-permanent wall-mounted exhibit in the mezzanine exhibit space of the Design, Media, and Technology department at Lebanon Valley College. Intended audiences include students, faculty, staff, prospective students, parents, and employers visiting the space. The t-slot extrusion will not be installed until early August, however, so I have instead created a free-standing display.

The 32 laser-cut 12" by 18" acrylic slats project outward from the wall and form a concave interactive space. A 16 × 56 NeoPixel matrix with 16 meters of Neopixels is mounted underneath, the light moves through the edge lit acrylic slats creating an interactive, immersive space.

Curved Laser Cut acrylic

The exhibit reacts to users as they walk by, approach, stand in front of it, or walk away. The concave form is a compromise derived from the original concept of creating an immersive geodesic dome. Due to space constraints at both home and school, a full dome that I had originally proposed was impractical as the footprint for such a project would be prohibitively large. The concave form is intended to evoke a similar sense of immersion while accommodating the space available for the installation.

Ideally, the project is also intended to function as a platform that my students can later use to learn about interaction design, embedded programming for TOF sensors and neopixels/addressable LEDs, and the use of feedback systems to shape user behavior.

To demonstrate input/output device programming and embedded programming, I created a software system running on the Jeffuino board that categorizes six interaction states:

  1. No one present
  2. User approaching
  3. User standing still in front of the exhibit
  4. User walking away
  5. walking right to left
  6. walking left to right

Each interaction state will trigger a corresponding NeoPixel animation function. Sound functions using a DFPlayer Mini MP3 module may be added during a spiral if time permits.

For my system integration documentation, see my week 16 link.

For my applications and implications documentation, including what it does, who has done what before, etc, see my week 18 link.


What Have I learned?

I have really enjoyed this project and am fairly pleased with how it turned out.

Because I took this class to learn more about the knowledge and processes of a fab lab, I will start with what I have learned. I have listed a number of observations below, which I realized these last few weeks:

First and foremost, I learned that I can literally make (almost) anything (obviously within reason and the abilities of the machines in the maker space). This realization, that I don't need to choose/buy what I need, that I am not relegated to being a consumer, but am actually a maker--hell- we are all makers- is probably the most powerful take away. This is, in itself, life altering. That I write this while sitting at a desk I made during Week 7 (Computer controlled cutting), is in itself testimony to this lesson.

Second, while I knew it before, I never really "knew" how the iterative the design process actually is-- and how gradual refinements can steadily improve a project.

That being said, I've learned that having a clear version control while working is exceptionally important. I can experiment and build on ideas and go back to those ideas that worked better. This means, and it is something that the documentation requirement forced me to do, that makers need to document each iteration- identify versions (as in version numbers), specifically enumerate what works and what doesn't. This class required that I do this and while I could improve the specificity and granularity of my documentation, I found it remarkably useful.

I've learned how to run quick, throw-away prototype tests in order to test a design concept without sinking a lot of time and resources.

I've learned that when designing, I need to pay attention to how all of the elements in a system interact. I have read about systems theory, and understood it, but, like my comments on the design process, there is a difference between knowing something and "knowing" something. Case in point, I designed the enclosure to attach to 4040 T-slot extrusion. I neglected to think about the acrylic slats when prototyping. Likewise, my slat design looked nice- but didn't really accommodate assembly.

Lastly, I have learned the importance of non-permanent fasteners. Designs change...if you're doing your job. To design something that doesn't accommodate this change is, well, short sighted.

Final Project Development

I've worked on this project over the last 20 weeks, which I've listed here.

Final Project Flow Chart

Flow Chart for Final Project

Weeks 18-20 work

I iteratively designed the holders that I would use to affix the acrylic "slats" to the base. I worked through 11 versions before I was happy with the single holder (to be placed on the 0 and 15th slats) and then mirrored the single to create a dual holder (which would reduce the number of bolts/nuts and holes I would have to create. Design away extra steps....)

iterative design of slat holders

Images of holders - dual and single

iterative design of slat holders iterative design of slat holders

Link to files

Single holder
Dual holder

Assembly

I cut and painted the base and then laser cut the 32 slats. I created IDs for each slat to understand where it goes on the base


slat design slat design slat design

Link to files


I assembled the base and had to create a t-slot exhibit- a sort of self-standing structure to which I could mount the base. Facilities in my institution advised me that they will not have the t-slot installed on the wall until early August.

slat design slat design slat design

I then 3d printed the 102 slat holders and then mounted the holders to the base. Before I fastened them to the base, I first mounted the holders to the base to make sure that they worked and that the slats were aligned and fit the space. So many holders.

slat designslat design
slat design

I installed the neopixels on the base along with the holders. I had estimated 60 per slat and then 58, but the number is actually 56 per slat. The materials are to be reused, which required that I change my initial plan to cut the strips into meter long strips. Instead, I will loop the neopixels, count the "dead" addresses and then program the code to avoid those addresses in the animations.

I used the holders and the acrylic slats to hold the neopixels in place- which worked well and didn't require the use of double-sided tape as I had initially thought.

slat design slat design


I attached/mounted all 32 of the slats, (which took approximately 17 minutes per pair of slats).
assembled assembled

I finalized the enclosure design, which involved prototyping and testing:

  • wire mgmt integration (I incorporated the 4040-tslot wire mgmt doodads into my enclosure file).
    test prototype
  • the spacing and dimensions of pins for mounting boards to enclosure
    test prototype
  • on off power button integration into enclosure wall (for future spiral)
    test prototype
  • mounting TOF sensor to front of enclosure (pins and double sided tape)
  • mounting a mini-mp3 player to the enclosure (for future spiral)
  • mounting a speaker to the enclosure (for future spiral)
  • test prototype
  • Testing enclosure mounts to ensure that they fit the project/attach to the 4040 t-slot
  • To do this, I would use the split tool in the Prusa slicer save time printing. Doing this allowed me to quickly see if the part worked as expected and allow me to quickly iterate. For instance, I tested the attachment of the enclosure to the 4040 t-slot extrusion and found that my dimensions were off (I had neglected to account for the thickness of the NeoPixel strip and the acrylic slats descending down lower than the base).


    Split tool

    That being said, the downside to this prototyping strategy is that the parts as a whole might not reveal problems.

  • I first created a spreadsheet of the slats/columns and 60 NeoPixel addresses, to get a sense of how to program the neopixels. This was made easier by numbering each slat (0-15) so that I could identify addresses and slats by number. For the final project, I have focused on creating six different animation states. What I have found particularly difficult is how best to calibrate/differentiate the z and x axis movements. In testing the embedded program, I used Codex to work through a number of different changes (forty-five versions in fact) that I wanted to make to calibrate the experience. Much of my work here was in differentiating between approaching/withdrawing (movement tracked along the z axis) with right to left (rtl) and left to right (ltr) movement (movement tracked along the x axis).

  • Testing the neopixels

    Excel spreadsheet of slats/columns and NeoPixel addresses (originally created by me, then modified with Codex)

    There are a lot of pixels (960) to keep track of. I numbered each of the 16 slats to correspond with the code (0-15) to aid in troubleshooting. I counted the pixels by hand under one slat and realized how laborious that process would be. When I placed the neopixels on the back and had determined that in order to reuse the NeoPixel strips I would wrap them rather than cut them, this design decision resulted in neopixels at the top and bottom that would not be usable in the animations. Rather than count each NeoPixel to determine the addresses where each slat would start and stop, I used the following prompt on Codex to create a program to test the NeoPixel addresses as I'd set them up:

    I would like to have you create a program that tests the addresses of the neopixels. I will video the animation and you/we can fine tune the addresses.

    I would like to have you create a program that tests the addresses of the neopixels. I will video the animation and you/we can fine tune the addresses. The pixel addresses are listed in this program. Don't change any existing programs. Instead, create a new program using version number- as in this program is version 21. In this program, the first LED in the slat is red, and the last LED in the slat is green.

    link to calibration/test program

    I then worked through each slat, ensuring that the program would map the correct physical start and end of each pixel column/slat, which gave me both the .eoPixel matrix addresses for my animations and also a map of the "dead" pixel addresses in the NeoPixel strings. Deadpixel address map. The .eoPixel address matrix is below.

    NeoPixel Address Matrix
    Slat 0Slat 1Slat 2Slat 3 Slat 4Slat 5Slat 6Slat 7 Slat 8Slat 9Slat 10Slat 11 Slat 12Slat 13Slat 14Slat 15
    55111167223279335391447503559615671727783839895
    54110166222278334390446502558614670726782838894
    53109165221277333389445501557613669725781837893
    52108164220276332388444500556612668724780836892
    51107163219275331387443499555611667723779835891
    Rows 50 through 5 omitted for brevity
    460116172228284340396452508564620676732788844
    359115171227283339395451507563619675731787843
    258114170226282338394450506562618674730786842
    157113169225281337393449505561617673729785841
    056112168224280336392448504560616672728784840
    Prompt: "Create an HTML table that illustrates this NeoPixel address matrix. Cut out the middle rows but indicate that values are missing. Remove the Row column and include the prompt used to create the table."
    Generated by: ChatGPT 5.5

    I used these addresses later in the project code to trigger the animations.


  • I designed and fabricated a new Jeffuino board to include a Schottky diode between 5v power input and the board
  • Jeffuino v3 with schottkey diode

    Link to updated KiCad Jeffuino (XIAO ESP32C3) reusable board file with Schottky diode

  • wire management for the project overall (macro) - I used zip ties for the macro-level wire mgmt.

  • Wire mgmtWire mgmt

    For the enclosure, I used a combination of hot glue for wires, double-sided tape, and tabs that aligned with the boards so that I could permanently attach them to the enclosure drill holes using a soldering iron. You can see in the image below the wire management bump outs that I used to attach the wires to the enclosure using zip ties.


    Wire mgmt

    I am experimenting with the melted-post process here on an earlier prototype. Note the wire management pop outs on the sides of the enclosure.

    Wire mgmt

    The wire mgmt for the project on the macro level worked really well. The wire management in the enclosure was not as effective as needed. Don't use permanent means of fixing anything in projects- even when you think that they are finished. It is just a really bad idea- it makes repairing or replacing components inordinately difficult and doesn't really allow for iterative improvement.

    Embedded Programming

    I calibrated the sensor and worked on refining the LED animations using Codex (45 versions of the program at last count). The version that the project is running is linked here.

    I had used Codex a great deal in creating the embedded programming for the project. I have set up in Codex a preference to include as a comment in the code the prompt used to create all of my programs.


    Week 17 notes

    I have designed a prototype of the enclosure, wire management, and have fabricated t-slot nuts using a water jet to hold the base onto 40mm t-slot that will be used as a structure. The sensor that will trigger the animations will be a Pololu VL53L5CX TOF sensor, and the MCU will be a XIAO ESP 32 C3 board. I will like the project using 960 addressable neopixels, 16 meters of LEDs.

    The sensor tracks six motion states:

    This is the sketch that was created

    link

    It currently is not registering my approach (standing still seems to be the default) and doesn't seem to register when I move my hand from left to right or right to left in front of it.

    I worked with codex to create this program.

    We determined that the default is standing still- when it should be no person. the sensor is tuned so that it recognizes movement in the 8x8 grid-

    The process in the program is that it scans a raw 8x8 depth grid and then calibrates by "subtracting"the empty-room background. After it calibrates, it will find foreground body/person zones and estimate X and y positions and z distance in order to classify motion state.

    Initially, the code inferred these motion states from two values: x = horizontal position across the 8x8 grid, and z = distance/depth from the sensor in millimeters So side-to-side motion comes from changes in x, and approach/retreat comes from changes in z.

    Just using z / distance created problems as it has a lot of noise. I decided to use by changes in z and the number of zones as a means of tracking approaching and walking away. As an object/person gets closer to the VL53L5CX, two things should happen- the z distance decreases (as the the measured distance in millimeters decreases) and the number of foreground zones should increase (the person takes up more cells in the 8x8 grid).

    I gave codex the following prompt: Would it be more effective to revise the sketch to use both x and z values as well as zone count as a means to calculate the six motion states?

    Sketch VL53L5CXTOFScanner8x8grid_distandzonecount_v5

    The code does a better job at identifying approaching and walking away, but doesn't do a great job identifying left to right/right to left movement. if the user is walking at an angle- where they are passing the sensor but are coming closer to the sensor, the program confuses RTL or LTR with approaching. I had instructed it that side-to-side movement should win whenever distance movement is clear. Approach/walk-away should mainly describe movement where the person’s x position is relatively stable.

    The project worked well at mapping movement. Now to connect animation sketches to the motion states.

    This is the prompt that I used with Codex. I uploaded the LED animations from week 4 embedded programming.

    "now create a sketch that takes the six motion states and maps them to a NeoPixel pattern. I've attached four sketches of NeoPixel patterns as an example. When the person is standing still- I want the breathing sketch. Movement should be two new sketches- lighting up the 16 slats of 60 neopixels in the direction of movement. traveling tails can be moving from high #LED to low # led when viewer approaches (the LEDs are moving down) and when the view moves away, the LEDs move up (low to high). The excel spreadsheet will be the address of each .eoPixel in the LED matrix. bottom left is the origin.""

    I included the sketches and files from week 4 and

    LEDMatrixConcept excel file

    I worked through eighteen versions of this software. The Eighteenth version used the following prompt:

    "Revise VL53L5CXTOFScanner8x8grid_distandzonecount_neopixelpatterns_V7.
      Keep the six VL53L5CX motion states and the 16 slats of 60 NeoPixels on D7.
      Improve the user experience and power behavior. NO_PERSON should invite
      interest and movement toward the exhibit by moving lights from the four
      corners of the LED matrix toward the center. The NeoPixel system is powered
      by a 10 amp supply, while 960 NeoPixels at full white could require about
      57 amps, so do not use white or full brightness. Keep all patterns low power,
      use mostly one or two color channels, and avoid lighting the full matrix at
      high intensity. Include this prompt in the header comments for Fab Academy
      documentation.
    
      Version 9 revision:
      Create a new version in which the program only lights every third NeoPixel in
      all animations. Apply this as a global power-saving rule so the attract mode,
      breathing pattern, left/right slat sweeps, approaching tails, and walking-away
      tails all obey the same every-third-pixel limit.
    
      Version 10 revision:
      Revise the APPROACHING animation so that the display gradually turns on more
      lights as the viewer gets nearer to the sensor. Keep the global every-third
      NeoPixel limit for power safety, avoid white, and scale the fill amount and
      brightness from the measured z distance.
    
      Version 11 revision:
      Add a global maximum brightness cap so no color helper can request more than
      half of the possible 8-bit brightness value. This keeps every animation at or
      below 127 out of 255 before the NeoPixel library's global brightness scaling
      is applied.
    
      Version 12 revision:
      Add a one-second delay before publishing STANDING_STILL. Brief pauses during
      approach, walking away, or side-to-side movement should not immediately switch
      the display into the standing-still breathing animation.
    
      Version 13 revision:
      Add explanatory comments throughout the program and create a companion HTML
      document that identifies each major part of the program and explains how it
      functions.
    
      Version 14 revision:
      Reduce false STANDING_STILL classifications when no person is present. Add a
      stronger foreground requirement for standing still, track how long a valid
      foreground person has been present, and force weak still detections back to
      NO_PERSON instead of allowing small background noise to become STANDING_STILL.
    
      Version 15 revision:
      Make the NO_PERSON attract animation more visible and inviting while keeping
      the every-third-pixel and half-brightness safety rules. Replace the subtle
      corner comets with broader corner-to-center fan waves plus a soft center pulse.
    
      Version 16 revision:
      Revise the NO_PERSON default animation so it starts from the full perimeter of
      the LED matrix: slat 1, slat 16, the top row of every slat, and the bottom row
      of every slat. The spreadsheet and Arduino code now use zero-based addresses,
      so the visible top row is 59, 119, 179 ... 959 and the bottom row is
      0, 60, 120 ... 900.
    
      Version 17 revision:
      Make the movement animations more seamless and directly controlled by sensor
      values. LEFT_TO_RIGHT and RIGHT_TO_LEFT now use smoothX to place the lit slat
      band, so reversing direction moves the band back instead of restarting a
      canned sweep. APPROACHING and WALKING_AWAY now both use the same smoothZ depth
      fill, so walking forward fills the display and backing up removes the fill.
    
      Version 18 revision:
      Make approach and walking-away easier to see by dividing the depth interaction
      into 20 visible steps, matching the 60-pixel slats with the every-third-pixel
      power rule. The depth fill amount is based mostly on distance from the sensor
      and partly on foreground zone count, so moving closer and taking up more of
      the VL53L5CX grid both increase the number of lit levels."

    Mounting

    I was initially to use four foot lengths of permanently mounted T-Slotted Framing Rail, Single Four Slot Rail, Silver, 40 mm Square as the base. This is meant to be a permanent installation that will afford displaying other interactive projects in the future. (Facilities was unable to install the mounts in time for this class.)

    Week 14 notes

    I am working on the sensor that will trigger the animations. I am experimenting with either a time of flight sensor or the XIAO ESP 32 sense board and using tensorflow. In addition, the weight of the project is enough that it would need a solid foundation. I will work on creating a mounting system using T slot that can be mounted to a wall that would accommodate an 18 x 24 modular panel.

    When I design and cut the pieces of the assignment, it will be hard to determine which boards are which. When fabricating the pieces, I will need to clearly yet unobtrusively identify each piece.

    In addition, I will need to change the MCU that will control the Neopixels in the project. The XIAO RP2040 doesn't have WIFI capability. I will instead use a XIAO ESP32C3 or ESP32S3-Sense. I can use the following resource to control the neopixels from the esp32:

    Lily. “Control Your NeoPixel LEDs with WLED and XIAO ESP32 MCUs.” Latest News from Seeed Studio, May 6, 2024. https://www.seeedstudio.com/blog/2024/05/06/exciting-update-wled-now-supports-xiao-esp32-mcus/.

    XIAO ESP32 Pinout

    Weeks 11-12- Rethinking the Final Project

    I thought the geodesic dome concept was interesting, however the problem is that to make the form factor of the geodesic dome large enough for someone to walk inside of it, the project would require a footprint too large for any space that I currently have at my institution. As a result, I needed to rethink what the form factor of this project would be.

    Because horizontal space is such a constraint on my campus, the idea of using vertical space is appealing, as there are a number of spaces such as stairwells or hallways in which I could mount this project.

    Hallway/vertical space Hallway/vertical space

    As a result, I decided on focusing on a vertical form factor, as that would not take up any horizontal space. I brainstormed a number of different ideas, and for the first spiral, I think I’m going to do just one wall.

    Brainstorming Brainstorming Brainstorming

    The new form factor of my final project will look something like this:

    Brainstorming Brainstorming Brainstorming Brainstorming

    The LEDs will be mounted along the edges of the cut acrylic, with the microprocessor, sensors and audio/mp3 player mounted at the base of the installation.


    To build out this project, there are a number of different components that I’ll need to consider. The first is the mount. I will need some means of mounting the project to a wall. I’ll need some means of creating a space to hold the LEDs and the mini MP3 player and speaker, as well as the microprocessor. I’ll need to be able to run wiring from all of the different power source and micro-controller and LEDs to one another. I am going to opt to use quarter inch, 12 by 24 inch acrylic sheets, and laser cut the form. I would like to use the idea of a concave surface with LEDs and a speaker mounted on it. I believe I will mount the speaker on the bottom to make it closer to the power source. I think I’m unsure of the material used to mount the pieces to the wall. Acrylic would be nice, but it does pose some problems in terms of seating the bolts that would hold the slats on. I could 3D print, using a stronger material such as PETG, the mounts that would hold the acrylic sheets to the back plate. The back plate would be a series of 12 by 24 inch sheets, essentially. I will continue to use the laser cutter. Obviously, I will create the microprocessor using the desktop mill. I will be using outputs in the mini MP3 player playing music and a set number of animations that the LEDs would perform as responses to user behavior. I will use some type of sensor to capture motion or movement--or color. If there is time, I am entertaining the idea of using some type of computer vision, which could provide some really interesting means of interaction.

    I will likely use some of the patterns from the embedded programming week.

    breathe

    Final Project Task List (Weeks 12–20)


    Week 10 progress and questions

    I built out an LED PCB and a mini-mp3 player PCB for this project.

    light

    I used the NeoPixel addressable LED from week 10.

    Neopixel Prototype

    Each board requires a capacitor across voltage and ground and the tutorial on Adafruit recommends a resistor on the first digital in of a NeoPixel string. That being said, because the resistor only needs to be in series with the first NeoPixel it would be pretty wasteful to add resistors to every board AND would add up (80 330ohm resistors would create a lot of problems for the circuit by adding that much unneeded resistance). I decided to redesign the jeffuino (now v3) to include a 330 ohm resistor on the d6 pin. This would keep the PCBs modular and allow me to add the resistor easily.

    Going forward, I will need to think about how to run the data and the 5V power across all 80 some LED boards. The current setup doesn't really allow for running data in a "net" nor does it allow for adding multiple instances of five volt power to the neopixels throughout the net of LEDs.

    Sound

    Mini-MP3 player, using the DFROBOT DFR0299 DFPlayer Mini MP3 player.

    Mini Mp3 player

    I began to work through the project and build out a BOM. A 5/9th geodesic dome that would allow a person to stand inside it would have a diameter of 4 meters/13 feet. My campus has little space that would accommodate such a footprint. It would present ADA and safety concerns.

    To build a 3v 5/9 geodesic dome that is 2.375 meters tall (7.79 feet), would require 83 total struts (requiring 131 meters or 430 feet of material for the struts) and 61 connectors. My campus has limited space indoors to place this and my goal had been to make something that would be a permanent installation.

    The form of a geodesic dome is likely not a viable option for this project, given the space and material requirements that it wold pose. As a result, I will need to rethink the form. The goal is to immerse the user in the experience through providing both visual and auditory feedback stemming from user actions. The form factor that this could take could be slightly different, yet allow for the constraints listed above. I began to brainstorm alternate form factors for the assignment, listed below.

    Brainstorming Brainstorming

    Week 8- Questions I need to answer

    Fabricating and assembling the electronics for my final project will pose a number of problems.

    1. Quantity. If the dome has an LED in each hub in the dome, I will need to fabricate, solder, attach to the dome, and then connect in a series approximately 80 LED PCBs. Each LED PCB would need an addressable LED, a capacitor across voltage/ground, and a means of daisy chaining (input and output). I need to determine the best means of creating 80 small boards. One solution I have is based on the tabs created when cutting using the CNC. Adding tabs that don't get cut all of the way would allow me to create an entire sheet of semi-attached PCBs that I can break out as I fabricate and use them.

    2. Ease of assembly / daisy chaining. I need a means of connecting and disconnecting the LED PCBs to one another for power and data. This would likely involve connectors on the boards themselves and easily attachable and detachable wires, or some other way to connect each board.

    3. Sequencing. I had not thought about how the PCBs and LEDs would be connected in the dome. Initially, I had just thought that the LEDs would be connected in a series, but that might not be the optimal way to do so. Is this a line running around and up the height of the dome, like an inclined plane wrapped around a screw, or is it some other pattern? How I connect the LEDs will likely affect the programming and the overall effect of the lights in the experience. Do I arrange them as a series of concentric circles going from the base to the top, or is there some other means of arranging the LEDs? I will likely need to explore this in the outputs week.

    4. Power. I am a little rusty in this area. I will need to figure out how to power 80 LEDs, plus the micro-controller or board I will make, plus the means of input for the whole experience. I assume I will need to figure out the forward voltage drop and current used by each LED. I also think that I will likely need to use multiple power sources at different points in the LED net rather than just one running through the length of the LED circuit.

    5. Input. My initial idea was some form of sensor that would collect input on user actions in the dome and, based on this input, change what the LEDs do. I need to begin to think about what sensor would make the most sense, how this sensor would shape the user experience so that it is desirable, and clearly map user inputs to the corresponding sensory outputs provided by the LEDs, and possibly sounds. I will work on this in inputs week.

    6. Struts. I do not think it practical to CNC struts for this project and think, right now, that PVC tubing might be a better solution. The biggest issue is that the CNC and the node are 7.5 hours away. If I make a mistake or need to fabricate new struts, I have a problem. In addition, I am unsure if cut plywood would be structurally able to support the weight of the dome. PVC tubing would be lighter and the circular cross section of a PVC tube might be stronger It seems that I need to explore the question of what would make for the most cost-effective means to create struts for this project. The strut design will in turn shape the redesign of the hubs.

    7. Hubs. I have a rough concept of the hubs now, but I need to determine a design that will hold the weight of individual struts and the dome itself. I can use PETG to make it a little tougher. I can lighten the weight of the struts. I know that a dome will have slightly different angles for each of the triangles in the geodesic dome: the internal angles of the triangle and the dihedral angle of the planes. The hubs will need to be slightly different, some with five intersecting struts, some with four, and account for the different angles.

    8. Form. I need to design the dome in such a way that the form allows people to enter and exit. Given the size of the project, I might need to rethink the dome being placed on the floor, such as placing it on a ceiling or in a corner. I have to figure out what this dome will look like in the context in which it will be set up. This will in turn affect the design of the struts and hubs and the placement of the input sensors. I need to determine the viability and feasibility of the existing design in terms of the context in which it will be located and work through how I can design the user experience of the project to best accommodate the space. This might require changing the scope or concept of the work.

    9. Research and work through the project in order to get a better understanding of how users would enter/move through it/engage with it and any ADA requirements that might need to be accommodated. Some of these questions will be answered during the input and output weeks, but how they use it will shape the design.

    10. Wire management. I need to determine how this project will manage the different wires required for it to work. I need to address power and data for LED PCBs, power for the main controller, and power and data for input sensors. The wires could be attached to struts or run through the struts if hollow. What makes the most sense for fabrication, setup and assembly, and the overall user experience?


    Week 6 - electronics design

    During week 6 I wanted to simulate a NeoPixel circuit similar to what my final project would use. Image of board forthcoming.

    The Neopixels require a higher voltage and ampage than the RP2040 can provide. I will need to power the NEOPIXELs using an external power supply rather than through the Vout of the RP2040 as the RP2040 only provides 3.3 v through its GPIO pins.  In addition, the neopixels data line also requires a higher voltage than what is provided by the RP2040. For the final project I will likely need to add a logic converter. (I need to look at the data sheets of the neopixels and the XIAO/RP2040 to gather more details on forward voltage drop, current, etc). The NeoPixel in the simulation was not very bright, but did flash as expected. As an experiment, I had tried running the vdd and vss from the board to each NeoPixel and daisychaining the data through a series of neopixels. Both appeared to work in the simulation. Good to know. For my final project, I will research whether I can daisychain power, ground and data or whether I need to power sections of the LEDs separately.

    The link to the sketch is: https://wokwi.com/projects/457408666709350401

    Wokwi simulation of a circuit using neopixels

    For week six our task was to design an embedded microcontroller system and check its design rules for fabrication. Based on the results of my simulation, I had intended to design a simple board that affords a "daisy-chainable" NeoPixel circuit that would easily connect with other NeoPixel circuit boards and provide the required capacitor between ground and power. The requirements of this week's assignment mean that instead I would need to build a microcontroller- not this LED board I had initially considered. I used an XIAO RP2040 and built it out to allow for inputs/outputs on the board. I will likely use this board (or one using an RP2040) for my final project.


    Week 2- Preliminary Designs

    In week two I began working through the design of a geodesic dome.

    My initial design concepts for the hub include the following:



    hub
    hub

    Early Concept work

    The user would shape the colors, patterns and sounds through either movement (registered by a sensor in a hub at the top of the dome), RFID tags to choose the patterns, or possibly a mobile app.

    Dome Sketch

    The project would be composed of three parts- the hub which contains the sensors and the braces and connectors, which would be modular.

    Modular Parts for project

    Brainstorming

    To come up with this idea, I worked through the posted earlier projects, listing those that I found interesting. I then used chatgpt 5.2 to categorize earlier fab academy projects. My initial prompt was:

    “You are a student taking the fab academy class. You want to categorize the different projects that have been made in previous classes, with the aim of understanding what is possible in the class, given the technologies taught, areas in which successful projects seem to focus, and as a means to brainstorm your own project. The URL for the class is https://fabacademy.org/2026/prior.html”

    The engine asked me a few questions for clarification- I've prompted the engine to always ask me questions to clarify the context and intent. The link to the chat is here. There are some serious problems with the links it provided, but the goal was to help me start considering what is possible given the technologies taught and brainstorm ideas.

    I then used listing and free association for about an hour to brainstorm possible project ideas or problems that I would like to solve. I reviewed the list to see if any interested me and wrote them out separately for further elaboration. I had about ten possible ideas that I could pursue.

    brainstorming

    To refine the list, I thought about how I could evaluate this semi-final list of topics. I remembered an evaluation tool on choosing ideas in a book on brainstorming and creativity (p. 181) - Keith Sawyer, Zigzag. Jossey Bass, 2013.amazon link here- not a plug. This book explained how you could plot your ideas on a matrix:

    Normal/Ordinary Ideas Breakthrough ideas
    Highly feasible and useful Not so original ideas that are highly feasible- Ideas that might be worth pursuing but would require an effective and efficient implementation plan Ideal concepts- build it.
    Difficult to make and unclear use Not so original ideas that are not feasible. Throw it out. Very original ideas that are not feasible- would need to be really high value/importance to proceed

    I plotted out my ten ideas and the geodesic dome concept appeared to be the concept that would be best suited for this project.

    choice matrix

    Bill of Materials (BOM)

    Component Quantity Supplier URL Price
    Exhibit
    Acrylic (Clear) 12” x 24” x 1/8” 16 MakerStock link 8.50
    Backing/Mount Structure
    Plywood ¼ in 24" x 36"2Lowesno link11.29
    T-Slotted Framing Rail, Single Four Slot Rail, Silver, 40 mm Square, 4 Feet Long (mounted on wall) 3 McMaster Carr link 40.22
    M3 6 mm bolts/nuts/washers
    T-slot nuts
    PETG (1kg spool SUNLUU) 1 Amazonlink 14.43
    NeoPixel addressable LEDs
    Adafruit NeoPixel Digital RGB LED Strip - Black 60 LED 4m 4 Adafruit link 54.95
    Female DC Power adapter - 2.1mm jack to screw terminal block 1 Adafruit link 2.00
    2-pin JST SM Plug + Receptacle Cable Set 15 Adafruit link 0.75
    User Input sensors
    VL53L5CX Time-of-Flight 8×8-Zone Distance Sensor Carrier with Voltage Regulator, 400cm Max 1 Pololu link 19.95
    MCU/Processing
    XIAO ESP32C3 1 digikey link 4.99
    Sound (built in but for future spiral)
    DFPLAYER - A MINI MP3 PLAYER DFR0299 1 digikey link 5.9
    36mm Speaker w/ Wires - 8 Ohm 2 Watt 1 Adafruit link 1.95
    SD Card 1 Amazon link 31.99
    Power
    5V 10A switching power supply 1 Adafruit link 29.95

    Files for my Final Project

    Files for the acrylic slats- in two pieces

    Top