Hi there! My name is Erik Strand.
I’m a student at The Center for Bits and Atoms. I like to use math and software to make better design and fabrication tools.
Previously, I studied math at the University of Chicago, consulted at Keystone Strategy, worked on the FabLight Laser at Otherlab, and developed automation tools for CNC Milling at Plethora.
This semester I’m taking MAS.863, also known as How to Make (Almost) Anything.
This is my giant final project tracking page. It covers everything from abandoned ideas through implemented ones through my plans beyond this course.
Idea 1: The Analog Analogue Synthesizer Every electronic circuit has an analogous mechanical circuit whose motion is governed by an equivalent differential equation. Analog synthesizers are electronic circuits, so analog synthesizers have mechanical analogues – analog analogue synthesizers.
The heart and soul of any classic subtractive synth is its filter section.
A Laser Cut Construction Kit Files: pentagon.dxf, connector.dxf
One of the assignments this week is to make a parametric cardboard construction kit on a laser cutter. I like platonic solids, so I’m going to base my kit on a dodecahedron. I sketched these tiles and connectors in Fusion 360.
For fit, there are three main parameters: thickness, kerf, and epsilon. Thickness and kerf are used to make shapes that should exactly interlock, and epsilon determines how much I intentionally undersize certain components in order to compress the cardboard.
Making a Microcontroller Programmer Files: Brian’s design
This week’s topic is how to make printed circuit boards (PCBs). Our assignment is two-fold: use a desktop format mill to cut the board, then solder on the components. The board will be used later this semester to program other microcontrollers.
Milling We’re using a Roland Modela MDX-20 milling machine, controlled with mods. The mods interface takes black and white PNG images as input, calculates toolpaths, and sends the resulting G-code to the milling machine.
Printing Files: starflake.io (render with libfive Studio)
This week’s primary assignment is relatively unconstrained: design and print something that couldn’t be made with subtractive techniques. I decided to explore curved surfaces with severely constrained accessibility. This was also a good excuse to learn libfive, since functional shape representations enable a more diverse palette of interesting deformations than traditional b-reps.
Design I modeled a small stellated dodecahedron, where each of the stellations is twisted along its axis.
PCB Design Files: echo.sch echo.brd echo_top.png echo_cutout.png (both 2000 dpi)
This week we’re learning how to go all the way from pcb design through milling, stuffing, and programming. I should end up with a board that can talk to a computer over a serial connection (masquerading as a USB device).
Design Since I’ve been using Fusion 360 so much, I decided to give EAGLE a try. (I’m also curious to use KiCad, but at this point I want to get comfortable in one environment before trying another.
Make Something Big Files: code (generates SVGs and ShopBot files)
I’ve been waiting for this week. Having just moved from California, my apartment is in need of some more furniture. My most pressing need is additional shelving.
Design I want a shelving unit that fits exactly between two doors in my bedroom, and occupies all the space between the floor and ceiling. To enable laziness, I’m also taking as a design constraint the ability to assemble and disassemble the shelves without any glue or fasteners.
Files: gear.io (render with libfive Studio)
This week we’re machining 3d wax models on a desktop ShopBot, using them to make silicone molds, and using those to cast a variety of materials.
Design For a research project I’ve been interacting with a lot of functional representations of gears, so I thought it would be nice to make one physically. For research I’ve been using extruded gears like the one below, but that doesn’t make a very exciting 3d model.
Files: attiny44a_blink
Time to lose the training wheels. This week we’re writing our own microcontroller code.
Turning on the LED Two weeks ago I added an LED and a button to Neil’s echo board, so I’ll start by making the LED turn on. I attached my LED to port PB2, and my switch to port PA7. To turn on the LED, we only need to do two things: enable PB2 as an output, and set it high.
Files: audio_input.sch audio_input.brd audio_top.png audio_cutout.png sampler.c
This week we’re exploring input devices, so our microcontrollers can start sensing the physical world. Since my final project involves manipulating signals from steel bass guitar strings, I will use an electromagnetic pickup as an input.
Design Considerations For my final project I plan on winding my own pickups, but I’d like to start by interfacing with existing ones so I can be certain that they work.
Files: midi_test.c
This week we’re exploring output devices. I need to send MIDI messages for my final project, so my goal for the week is to figure out this subsystem. (Edit: in the end I simplified things and didn’t use MIDI for my final project.)
Background MIDI is a relatively simple protocol, built on top of a standard 8-N-1 serial connection. There are two types of bytes: status bytes and data bytes.
Files: temp_control.sch temp_control.brd temp_control_cutout.png temp_control_routes.png (both images are 1000 dpi; ignore the embedded metadata) code
It’s here: machine week. Even with some helpful structure, it’s a lot. Let’s see how far we get!
My group’s collective documentation lives here. This page describes my individual contributions.
Mechanical Design Having the most Fusion 360 experience in the group, I did most of the modeling work. This was largely an exercise in arranging Jake’s parametric axes.
Files: embedded (see button_serial.c) serial_cpp shelf_app (see shelf_button.cpp)
This week we’re diving deeper into communication between microcontrollers and computers.
Recitation Since Amira doesn’t have her magnetic field detector from HTM(a)A 2016 (see week 12), I loaned her my hello world button board. But it needed a minor code update to be useful. I used Neil’s serial bit banging code once again, and made my board output a constant stream of characters on the FTDI header.
Files: audio_interface.sch audio_interface.brd audio_interface_2.sch audio_interface_2.brd serial_cpp lufa (see Demos/Devices/ClassDriver/VirtualSerial)
This week we’re making machines talk to each other. I’ve used I2C before, so I’m curious to venture into the wonderful world of USB.
Board Design For part of my final project I want to make my own USB audio recording device. So I’ll try to develop all the necessary electronics this week. I have the analog circuitry I need from inputs week.
Files: audio_interface_2.sch audio_interface_2.brd lufa (see Demos/Devices/ClassDriver/MIDI and Demos/Devices/ClassDriver/AudioInput)
This week there’s a lot on the menu: soft robotics, bioprinting, coil plotting, wire EDM, and many more. I’d like to learn them all, but for now I’ll continue my exploration of LUFA. So far I have a virtual serial port example working, but let’s see what else I can do. Throughout I’ll be using the board that I designed and fabricated last week.