Glenn's TTW Project
Create a building set which facilitates building a conceptual understanding of machine code and programming microcontrollers.
In the beginning...
Before I started with this module, I had some thoughts bouncing around in my head.
I knew I wanted to build a kind of construction kit, which would have versatile and creative applications (As Mitch referred to it, "Wide Walls").
Early on I gravitated towards focusing on different types of joints and connectors, as well as using scaffolding pieces - essentially a kind of K'Nex. But added features would include telescoping scaffolds (to allow finer control over length, as well as piston-like movement), and scaffolds which contained conductive rails, so that electronic devices could be mounted through them.
I've also been thinking a lot more about electronics design in general. I admit to being nearly a novice in this regard, but I got my first taste of micro-controller programming last semester in How to Make (Almost) Anything, and in addition to pursuing my own self-eductation, I wanted to think about how learning about programming in C could be made easier for kids.
For full disclosure, I am also in a class at the Harvard Graduate School of Education, T-581 Advanced Design Studio, where I am working on a group project to build a kind of electronics construction kit. I think in this project I am going to go in quite a different direction, by mixing in more construction-focused components as well as a way of "coding" the micro-controller (in my other class, we presume the code is available for download). But some of these ideas have been inspired by and conceived through conversations with this group, so I must acknowledge Anthony Landek, Daphne Baswanga, Matthew Joe, and Katherine Hashimoto for some creative input!
Good news is, construction kits and programming for kids are perennially hot topics, and so there are lots of examples to draw from. I expect this list will be expanded with time, and I will include relevant examples, links, and my experience with them, to more fully document my sources of inspiration in this project.
This being the first week, I am thinking expansively and trying to identify the domains I would like to focus on. As such I might be listing too much to be considered in the process, but keeping in mind the IDEO model, I think it's appropriate to be thinking generatively and expansively at this stage before honing in on a focal point.
[Sidebar, is there a way to make captions for images?]
[Image 1: Grasshopper network I created, which generates the following designs in the next three images]
[Image 2-4: Variations on the design I input in grasshopper, changing the width of the hexagon tiles. These designs were generated by only changing one input parameter in the network, making them nearly effortless to create]
I'm taking another class at the Harvard Graduate School of Design which focuses on using Grasshopper, a "parametric" design tool which is an extension to the popular design software Rhino.
The interface is somewhat unique - rather than designing shapes and forms with explicit geometry (which nearly every design software, including Rhino, does), it allows you to define designs through a kind of programming.
The grasshopper window looks like an open field, where you place down blocks which carry out functions. They might correspond to commands in Rhino (draw rectangle, extrude, construct line, etc), or they might be mathematical functions or ways of manipulating data. Every block has input and output node(s), and by linking them together, you programmatically lay out how you want the design to be made.
This involves a layer of abstraction and a strong conceptual understanding of the design software, but it allows for designs to be continuously modified and tinkered with. In the example above (which I created), I am experimenting with a kind of tiling design. The only parts I drew in Rhino were an arbitrary closed curve, and a point. The grasshopper network processes these inputs, and uses them to construct a hexagonal grid. The parameters can be modified, so the hexagons change size and position, and if the shape of the curve is modified or the point moved, it also changes the design on the fly.
While this nodes/networking approach is used here for design software, I also think it could be used for a kind of programming relevant to micro-controllers. By constructing a network which integrates devices (inputs and outputs) as well as functionality of those devices, it might be possible to visually create a network which represents a working device, and then in the final step generate C code which properly programs the micro-controller.
I certainly have more research to do, but in my preliminary search I stumbled across this blog post about a Kickstarter where someone is trying to create a visual programming format for Arduino. I definitely want to find more examples like this out there and see what I can learn from it.
I need to gain more experience with this kit (which I hear will happen this week!), but from my initial impressions Little Bits is a more literal electronics construction kit which facilitates circuit-building through easy-to-connect prefabricated electronics components.
Major questions I have at this point to be answered:
* To what level is programming integrated into the devices? Is this just about making simple circuits with human-operated switches and inputs, or can finer levels of computer-control be achieved?
* How sophisticated are the components? Are each a single component, or is there a "black box" where there hidden layers of micro-controllers and components which allow the pieces to function?
I've only had one interaction with Mindstorms, but I know that the programming aspect is handled by the large I/O block piece, where users use simple buttons to navigate menu options and change the output signals and input processing.
I would like to play with this toy more, as well as explore some of the grander applications that can be done with it. Major questions at this point include:
What are its limits?
What are common complaints about the interface?
Is there a graphical or computer/based way of programming it, or is everything handled on the "brick"?
What is the full range of output and input devices which can be attached to it, and the level of sophistication to which they can be programmed?
What are the specific skills that Mindstorms builds upon? Is it procedural thinking, or are there elements which encourage learners to think about programming in ways similar to micro-controller programming? How sophisticated is this understanding?
A major component of this toy is determining how kids will engage with coding the micro-controller. I would define this as the "ultimate" goal of the project, with the construction elements playing a complementary but subsidiary function.
Scratch's fame has made it the incumbent apotheosis of visual programming for kids, and I think there is a lot that can be learned from this. The intuitive "snap together" blocks as well as the continuously updating viewer, which allows users to see their program working (or not working) in real time allows for instantaneous feedback, which is one reason I think it's a very powerful learning tool. I think my final prototype might attempt to mix elements from Scratch into a Grasshopper-like network.
Here's my current, very paltry, Scratch Profile
Suddenly, I'm interested in looking into another avenue - molding and casting.
Like with electronics, this is something I first (meaningfully) did in How to Make (Almost) Anything. Mostly this change in heart was inspired by a few random ideas I had, and the desire to make something a little more "hands on" for a final toy (which might make it more appealing and accessible to younger learners).
I'm sure I'm not the first person to have this idea, so here begins my research.
Some useful results relating
Resin Casting: This is the kind of casting used by most hobbyists, due to its ease of setup and low equipment requirements. It usually involves mixing two materials (often liquid), which exothermically react and form a solid final product
Common Thermosetting Resins: Polystyrene, Polyurethane, Epoxy, Acrylic, Silicone, Polyester
Non-resins: Concrete, Plaster, Glass
Plastic Injection Molding [Engineer Guy]: First off, I love this video (and youtube channel). Injection molding is used for many plastics. While the injection aspect of it is probably overboard for this toy, many of the other details, such as ejector pins and runners/sprues could be part of an at-home kit.
Sand Casting: I've witnessed this done in How to Make, and today-I-learned this is the most common way of making metal castings on Earth. Using packed sand to make a 2-part mold, hot metal is poured through spure-holes (made with wide dowels). This process is interesting because the mold material can be recycled - the consistency of the sand is that it stays packed. Can a material of similar properties be used making home casts, with different materials?
Compression Molding: Like using play doh molds - put in an amount of material, squeeze it into a mold (with exits for excess material), and then remove the compressed piece. In commercial settings, may use plastics and a heated plate mold. Cannot have undercuts (except on parting line)
Great Overview of terms/techniques I found (documentation from a student comes in handy after all)
Sprue: where liquid is injected into the mold, may leave behind a solid remainder which needs to be broken off (also called a sprue). The part which connects the sprue to the actual mold cavity is the gate, which is often smaller (so it cools fastest and can be broken off).
Ejector Pins: In injection molding, these pins are on the interior side of the casting and push the casting out when it has solidified enough to be removed from the mold.
Silicone Caulk + Dishsoap: Creates a pliable, flexible, silly-putty like material for impressing a cast. It's a catalytic resin, unlike Oomoo or expoxies, which as 50% A and 50% B mixtures. This is just one base material, Silicone Caulk
These are some sketches for main components of the kit
Sheets, Beams, and Joints: These are the 3 integral pieces for making a box to cast the mold in. They are meant to be modular, and provide a secure seal for Oomoo and other viscous liquids.
The sheets are square, or long along one axis. The square sheets are better suited to 3D molds with depth, or creating a stacked, 2-part (or more) mold. The longer sheets are easier to use for 2D casting and many 1-part molds.
The modular nature of the pieces is meant to enable a greater variety of mold shapes than normal cubic (reducing material waste), and also facilitate the complicated process of making multi-part molds. By making it easy to replicate the mold sizes, it is possible to create molds which closely interlock, making multi-part molds possible.
Spues, End Effector
Ready-made sprue molds would allow easy positioning and creation of spues and gates for filling the mold. The End Effector (which I'm not nuts about in this prototype) serves the purpose of positioning the sprues in 3D space stably. I'd like to find a way which is simpler than the current end-effector, which involves moving parts.
Registers help keep molds which are greater than 1-part aligned. They could either be separate, dowel-like pieces (which are simplest, but might pose a challenge for positioning), or they can be embedded into plates of the mold. These plate registers would be half of the eventual register shape, and users would need to flip their mold between castings.
A novel idea - I wanted to see if ejector pins (from injection molding) could be somehow integrated into a resin-casting method, to make extraction easier. I was thinking it would be best accomplished by a large plate, embedded in a normal mold sheet, with a spring-loaded button on the other side. Pushing the button extends the plate and pushes on the mold, and when released in springs back to the sealed position.
Additional Components Needed
The design of the pieces allows regular and irregular shaped boxes to be made. This can more optimally utilize the casting materials available, while also allowing molds to be expanded, as well as disassembled when casting is complete with minimal damage to the mold.
More ideas, which currently lack sketches/blueprints
Packaging: a medium sized regtangular box, meant to double as a workspace (interior casting space is rigid, washable). Stores all necessary ingredients, has space for extra storage (molds, castings, etc)
Corner Release Mechanism: The joining of the corner joints, the beams, and the plates is going to require a lot of testing and thinking through. The process of making an expandable, sealed mold is the true design challenge of this toy. One alternate idea on the table would be to use a tapered bar for inserting into the corner joints. Removing this bar removes nearly all the tension on the walls, allowing dissassembly. When building the mold, the tapered design would allow pushing the mold until it was "tight", and sealed.
Tightening: Making the mold box is a two part problem - assembly, and sealing. Currently I'm hoping the design will be sealed enough to contain the viscous Oomoo. If it needs to be tighter, each brace could have a peg or stirrup, which could attach to elastic bands which pull the seals shut tighter with minimal obstruction
Tile: Many molds will not require 2 or multi-part molds, and can be done in 1 open-faced mold. The object could either be suspended in the top of the liquid by the end effector, or it can be secured to a base in the bottom. This may require hot-glue (especially for objects buoyant in Oomoo). In order to create a reusable base-plate which also weights the objects, perhaps dense ceramic tiles can be included. They can serve as a glue base, and can tolerate scraping and repeated washing
In How to Make (Almost) Anything, this was the casting I made. This method is useful for comparison, but must be heavily adapted in order to satisfy an at-home setup without CNC machinery.
First, I used terrain data from Google Maps, centered over my childhood home in Vermont. Then I used the CNC mill to machine a wax-block with the positive of the terrain. Then I poured an Oomoo negative, and then a final Hydrostone positive.
This initial attempt (modeled in Rhino 5) is not functional, but sought to explore the type of joints that might be possible. The cubic piece is a 6-way corner joint (2x, 2y, 2z), while the longer strut is a 4-way edge joint, and the last piece is a panel. In theory, these could be joined, but the pieces aren't actually possible to create, and there are some overlap issues.
A more functional model, based on the version 1 idea of having 3 components...
Unlike the last model, this one is actually geometrically feasible and possible to construct. But I'm still not satisfied. For one, it looks pretty bulky. the edge joints in particular are large columns which dominate the frame of the model. It seems like this would be sturdy against leaks.
One other issue is I have not yet thought about how to join differently sized panels, such as a 1x1 and a 2x2. Still, it's a start.
In the last round, I tried making a snap-together model. I think this version could be successfully made, but it had some problems.
In this new attempt, I want to do a couple things.
After a few more hours, this is what I've come up with. It's still not perfect, but I think it's going in the right direction. Instead of having edge-joints, there are only corner joints (3-way, and 2-way), along with nuts and bolts, which allow the corners to be tightened and can block holes which are not being used.
Current problems I anticipate
Ideas for Improvement