lca2019-talk/index.html

1031 lines
47 KiB
HTML

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Plastic is Forever: Making Tomu's Injection-Molded Case</title>
<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
<meta name="author" content="Sean &quot;xobs&quot; Cross">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="css/reveal.css">
<link rel="stylesheet" href="css/theme/lca2019.css" id="theme">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement('link');
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match(/print-pdf/gi) ? 'css/print/pdf.css' : 'css/print/paper.css';
document.getElementsByTagName('head')[0].appendChild(link);
</script>
<!--[if lt IE 9]>
<script src="lib/js/html5shiv.js"></script>
<![endif]-->
<style>
/*********************************************
* ZOOM REVERSE TRANSITION (i.e. zoom out)
*********************************************/
.reveal .slides section[data-transition=zoomrev],
.reveal.zoomrev .slides section:not([data-transition]) {
transition-timing-function: ease;
}
.reveal .slides > section[data-transition=zoomrev].past,
.reveal .slides > section[data-transition~=zoomrev-out].past,
.reveal.zoomrev .slides > section:not([data-transition]).past {
visibility: hidden;
-webkit-transform: scale(0.2);
transform: scale(0.2);
}
.reveal .slides > section[data-transition=zoomrev].future,
.reveal .slides > section[data-transition~=zoomrev-in].future,
.reveal.zoomrev .slides > section:not([data-transition]).future {
visibility: hidden;
-webkit-transform: scale(16);
transform: scale(16);
}
.reveal .slides > section > section[data-transition=zoomrev].past,
.reveal .slides > section > section[data-transition~=zoomrev-out].past,
.reveal.zoomrev .slides > section > section:not([data-transition]).past {
-webkit-transform: translate(0, 150%);
transform: translate(0, 150%);
}
.reveal .slides > section > section[data-transition=zoomrev].future,
.reveal .slides > section > section[data-transition~=zoomrev-in].future,
.reveal.zoomrev .slides > section > section:not([data-transition]).future {
-webkit-transform: translate(0, -150%);
transform: translate(0, -150%);
}
</style>
</head>
<body>
<!-- Start of main presentation -->
<div class="reveal">
<div class="footer">
<a class="url" href="https://p.xobs.io/lca2019/">p.xobs.io/lca2019</a>
<span class="theme">The Linux of Things</span><span class="hashtag"> | #LCA2019</span><span class="twitter"> |
@linuxconfau</span>
</div>
<div class="slides">
<section>
<h2>Plastic is Forever</h2>
<img src="img/tomu-fomu-case-superwide.jpg">
<p>
Fomu (with case): an FPGA in your USB port. Crowdfunding now! One week to go. <a href="https://t.xobs.io/fomu">t.xobs.io/fomu</a>
</p>
</section>
<section data-background-image="css/theme/lca2019-title-bg-transparent.svg">
<h1>Plastic is Forever</h1>
<h4>Making Tomu's Injection-Molded Case</h4>
<p align="right">
<small>Sean Cross - <a href="https://xobs.io/">https://xobs.io/</a> - @xobs</small>
</p>
</section>
<section>
<h3>Tomu</h3>
<img data-src="img/tomu-item.jpg" alt="I'm Tomu!">
<aside class="notes">
This is Tomu. If you attended LCA last year, you will have gotten one. Tomu is a fantastic little device -- it's a
computer in your USB port! It's a single printed circuit board, but the thing about USB ports is that they're
mostly metal, which shorts out circuit boards. There was a 3D printed case available when I first joined the Tomu
project, but it was really more of a slug. The easiest solution for most people to use Tomu was to fold a business
card in half.
</section>
<section>
<h3>Case</h3>
<img data-src="img/tomu-case.jpg" alt="I'm Tomu Case!">
<aside class="notes">
This is the injection molded case, after production. It's clear, which normally costs a bit extra, but since the
material we used is so little there was no extra charge. The case is made from polycarbonate, called PC.
</aside>
</section>
<section>
<h3>Tomu + Case</h3>
<img data-src="img/tomu-in-case.jpg" alt="I'm in my case!">
<aside class="notes">
This is a Tomu in its case. It fits very snugly, and even has a satisfying "click" when you insert Tomu. For the
next 45 minutes or so, I'll talk about what it took to build this, and the motivation for doing it in plastic. I
hope to convince some of you out there that plastic is not out of the question when it comes to projects.
</aside>
</section>
<section>
<h3>Tomu + Fomu + Case</h3>
<img data-src="img/tomu-fomu-case.jpg" alt="Tomu and Fomu in case">
<aside class="notes">
And here is Fomu in a Tomu case.
</aside>
</section>
<section data-transition="slide-in fade-out">
<h3>About Me</h3>
<img data-src="img/map-1.png">
</section>
<section data-transition="fade-in zoomrev-out">
<h3>About Me</h3>
<img data-src="img/map-2.png">
</section>
<section data-transition="zoomrev-in fade-out">
<h3>About Me</h3>
<img data-src="img/map-3.png">
</section>
<section data-transition="fade-in slide-out">
<h3>About Me</h3>
<img data-src="img/map-4.png">
</section>
<section>
<h3>About Me</h3>
<img data-src="img/project-listing.jpg">
</section>
<section>
<h1>Outline</h1>
<ol>
<li>Manufacturing the Case</li>
<li>Designing the Case</li>
<li>Understanding Plastics</li>
</ol>
</section>
<section>
<section>
<h3>Factory Tour!</h3>
<div>
<img data-src="img/xkcd-tasks.png" alt="It's hard to know when something is easy and when it's hard">
</div>
<small>
<a href="https://xkcd.com/1425/">XKCD 1425</a>
</small>
<aside class="notes">
I find the best way to understand something is to take it appart. This is the world of open source, after all.
The nice thing about manufacturing is that you're free to inspect all of the ingredients that go into a product,
just like how you can inspect the source code. So before starting on a project, I find it a good idea to take a
tour of the factory. That way you have a better understanding of what's possible and what's not possible. I'd
like to show you some photos of a recent trip I took to our plastics factory in Shenzhen, and I swear this isn't
just an excuse to show off my holiday photos.
</aside>
</section>
<section>
<h3>Front Door</h3>
<img data-src="img/factory-entrance-horizontal.jpg">
<aside class="notes">
This is the front door of the factory. Actually, it's the front door to a few factories, the one we're interested
in is on the fourth floor. They probably get a discount for it being on the fourth floor. There are a few other
factories in this building.
</aside>
</section>
<section>
<h3>Bags of Plastic Pellets</h3>
<img data-src="img/factory-plastic-bags.jpg">
<aside class="notes">
Factories have an "OQC" area, where they inspect parts before they're shipped. They also have an "IQC" area to
inspect stuff that comes in. Raw plastic comes from the factory in bags like this. There can be a variety of
blends available, such as ABS, PC, PVC, and so on. Talk with your factory to find the right blend for you,
they're probably really good at it.
</aside>
</section>
<section>
<h3>Pellets of Plastic</h3>
<img data-src="img/factory-plastic-blurry-contents.jpg">
<aside class="notes">
This isn't a very good shot, but it gives you an idea of what the pellets look like. This is half black and half
white, but once you melt it down it will be entirely black. It's possible to change colors, but they need to
waste a lot of material and throw away a lot of parts to flush the previous color. Fun fact: Black is usually
what they test with because defects show up really easily. Even if your final design is another color, your
prototype plastic shots will all be black to help them tune the machine and refine the steel tool.
</aside>
</section>
<section>
<h3>Into the Machine</h3>
<img data-src="img/factory-machine-hopper-horizontal.jpg">
<aside class="notes">
This is the injection molding machine. Well, the front half. You can see the plastic hopper up on top. You can
also see the linear sliders.
</aside>
</section>
<section>
<h3>Into the Machine</h3>
<img id="bunnie-ij-machines" alt="Rows of injection molding machines" data-src="img/bunnie-ij-machines.jpg">
<cite for="bunnie-ij-machines"><small>&copy; bunnie@bunniestudios.com</small></cite>
<aside class="notes">
Here's another shot with a lot more machines. This was taken at a different factory at lunchtime, when the
factory floor clears out.
</aside>
</section>
<section>
<h3>Into the Machine</h3>
<img id="bunnie-ij-machines-2" alt="Rows of injection molding machines" data-src="img/bunnie-ij-machines-2.jpg">
<cite for="bunnie-ij-machines-2"><small>&copy; bunnie@bunniestudios.com</small></cite>
<aside class="notes">
More machines. Believe it or not this was a different factory.
</aside>
</section>
<section>
<h3>Pulling a Shot</h3>
<video data-autoplay>
<source data-src="img/factory-inject.mp4" type="video/mp4" />
</video>
<aside class="notes">
This is what it looks like when the machine closes to make a shot. You can see the base mold here, and watch it
disappear. A single shot takes 30-60 seconds. If the tool is fancy, it will have various pieces that move. If
it's just a simple box, it will stay in place.
</aside>
</section>
<section>
<h3>Factory Mold Bases</h3>
<img data-src="img/factory-molds-stacked.jpg">
<aside class="notes">
What does that mold look like? Here are a bunch of carefully-indexed molds. Each one of these is a chunk of
nearly-solid steel. Around 1/3 of the cost of a tool is the raw cost of metal. These things are heavy. And steel
isn't cheap.
</aside>
</section>
<section>
<h3>Tomu on its Mold</h3>
<img data-src="img/factory-tomu-on-mold.jpg">
<aside class="notes">
And here we have a Tomu, sitting on top of its mold. You can see this is a "Family" mold, so there are four cases
that get made with each shot. Inside the base you can see the core. It's actually possible to reuse the base and
replace the core. Or as a cheap hack, you can modify the core, plug up some cavities, and do something completely
different. In this photo you can also see the gate, where the plastic flows into the mold, as well as the
runners, which is where the plastic flows as it makes its way to the cavities.
</aside>
</section>
<section>
<h3>Both Mold Halves</h3>
<img data-src="img/factory-mold-both-halves.jpg">
<aside class="notes">
Here's a different angle, and includes the top and the bottom halves of the mold. When the machine runs, these
two pieces come together, and plastic is injected. After it cools, these pieces separate. This is why injection
molding has a no-overhangs rule: If there was an overhang, then the halves couldn't separate.
</aside>
</section>
<section>
<h3>Bottom Half</h3>
<img data-src="img/factory-mold-bottom-half.jpg">
<aside class="notes">
This is a closeup of the bottom side of the mold. This shows the texture of the inside of the case nicely. For
Fomu, since the shape of the components is different, we're going to replace this half of the core. One thing to
note is the texture of the steel. If the steel is rough, your part will be rough. To get it smooth and shiny,
they must polish the tool, which is labor-intensive. Then they must re-polish it every few thousand shots. And
you still need to have someone polish each piece as it comes out of the machine. Smooth, shiny plastic is very
labor intensive manual work, so try to opt for matte finish if you can.
</aside>
</section>
<section>
<h3>Ejectors</h3>
<img data-src="img/factory-mold-lifter.jpg">
<aside class="notes">
Here's a closeup of the base. Interestingly the factory calls it a "USB Case" here. You can also see these giant
springs, which are for the ejectors. After the plastic flows in and is cooled, it has to be removed from the mold
somehow. Ejector pins slide through the tool and pop the piece out, leaving it clean for another shot.
</aside>
</section>
<section>
<h3>Ejectors</h3>
<img id="bunnie-ejectors" data-src="img/bunnie-ejector-pins.jpg" alt="Ejectors from another mold, clearly visible">
<cite for="bunnie-ejectors"><small>&copy; bunnie@bunniestudios.com</small></cite>
<aside class="notes">
And just so you get a good idea of what ejectors look like, here's a mold base that's been partially diassembled.
You can see just how many ejector pins there are on this relatively large piece.
</aside>
</section>
<section>
<h3>Cases on Runners</h3>
<img data-src="img/factory-cases-on-runner.jpg">
<aside class="notes">
Here is one piece from the machine. You can see four cases come out at once. You can also see the runners, as
well as where the plastic flowed in. There's a small bubble, which is fine. Normally the plastics factory will
break these off for you. Sometimes there's a small defect where the piece attaches to the runner, which you can
pay to have someone manually file off.
</aside>
</section>
<section>
<h3>Factory Edits</h3>
<img data-src="img/factory-proe.jpg">
<aside class="notes">
And here's the factory working on the Tomu case. Everyone in China uses ProE (Creo Elements Pro). I don't know
why. Fortunately there is a well-defined interchange format called STEP, and everyone is able to read and write
that format regardless of what they use to create it.
</aside>
</section>
<section>
<h3>Tool Model</h3>
<img data-src="img/factory-tool-model.png">
<aside class="notes">
This is the 3D model for the steel tool. It's in the Tomu Hardware repo alongside the case. The factory
took the model I made, then created this tool around it. They gave me the file when I asked for it. I put it up
so you can see what a real 3D tool looks like, since you don't see them very often. There are a few things I'd
like to point out here.
</aside>
</section>
<section>
<!--<h3>Gate + Ejector Pins</h3>-->
<img data-src="img/tomu-tool-4.png">
<aside class="notes">
Here's a good shot of the gate (in green), where the plastic (in dark grey) flows in. You can also see the
ejector pins (in orange), and the big steel plate (pink) that moves when the shot is complete to eject the molded
part.
</aside>
</section>
<section>
<!--<h3>Lifters</h3>-->
<img data-src="img/tomu-tool-5.png">
<aside class="notes">
Here we have some static lifters. Remember that nice "snap" I mentioned the Tomu case has? That comes from these.
Also remember how I said no overhangs? That was a tiny lie. Kind of. These were relatively cheap to add, costing
only a few hundred dollars. They don't move, but instead the poke into the case and cause an overhang. These pins
have the nice benefit in that they make the case much easier to use, and totally do away with the need to do the
heat staking thing. Unfortunately, they make this case impossible to 3D print now, which is why we have the old
version in the repo.
</aside>
</section>
<section>
<!--<h3>Lifters (Another Shot)</h3>-->
<img data-src="img/tomu-tool-6.png">
<aside class="notes">
This is a good shot to show you just how these don't actually cause an overhang. This was a really clever
suggestion that the factory made to me, and I'm super happy with it.
</aside>
</section>
</section>
<section>
<section>
<h1>Designing the Case</h1>
<aside class="notes">
And with that, let's move on to the creative question: How is the case created in the first place?
</aside>
</section>
<section>
<h3>3D Printing</h3>
<img data-src="img/3d-printed-cases.jpg" alt="3D case prototypes">
<!-- <h3>Almost (but not quite) entirely unline injection molding</h3>
<ul>
<li>STL vs STEP</li>
<li>Overhangs</li>
<li>Support structures</li>
<li>Flow rate/lines</li>
<li>Time taken</li>
<li>Family molds</li>
</ul> -->
<aside class="notes">
Who here has worked with 3D printers before? 3D printers are great. They let you rapidly prototype ideas and are
much cheaper to iterate on. The finished product tends to be denser than most plastics. Individual pieces can be
relatively expensive, and they are not fast to create in volume. 3D printing is fantastic for prototyping
plastics, and even your plastics vendor will have some contacts for 3D printers so you can see your ideas before
they cut any steel.
</aside>
</section>
<section>
<h3>Reference</h3>
<img data-src="img/usb-schematics.png" alt="USB recepticle schematics">
<aside class="notes">
The USB specification is a five-megabyte PDF. Chapter 6 is the "Mechanical" chapter, and has lots of schematics
that are very important to this sort of project. This is a section of the "recepticle" schematic. It's important
to know the dimensions of where this connector will fit.
</aside>
</section>
<section>
<h3>Reference</h3>
<img data-src="img/usb-schematics-plug.png" alt="USB plug schematics">
<aside class="notes">
And this is a portion of the USB plug. Our goal is to have the case plus the PCB come out to roughly the same
shape as this plug, and still be able to fit into the recepticle. How do we do that, you ask?
</aside>
</section>
<section>
<h3>Hardware</h3>
<img data-src="img/tools-ruler-calipers.jpg" alt="Ruler and Caliper">
<aside class="notes">
This PCB ruler is, surprisingly, the most useful ruler I've ever owned. It's great for designing PCBs, but also
handy for doing case design. These vernier calipers are also super handy, epsecially when you want to see just
how tiny various things are. And it's one thing to read a number on a schematic, but it's another thing entirely
to measure it in the real world.
</aside>
</section>
<section>
<h3>Software: FreeCAD</h3>
<img data-src="img/freecad-start.png" alt="FreeCAD Example">
<aside class="notes">
ISO 10303-21. FreeCAD is an excellent piece of software. It's parametric, which means you define the object as a
series of
steps. It's great for ensuring what you create in the virtual world closely matches the real world.
</aside>
</section>
<section>
<h1>FreeCAD can create STEP files</h1>
<aside class="notes">
STEP is the main interchange format for factories, so you really want to be able to read/write this format.
OpenSCAD is also a good piece of software if you're a fan of programming, but you still need to use something to
convert its output into a STEP file, which FreeCAD can do.
</aside>
</section>
<section>
<h3>FreeCAD can read KiCad PCBs</h3>
<img data-src="img/freecad-kicad.png" alt="KiCad PCB inside FreeCAD">
<aside class="notes">
This is huge for ensuring your PCB fits. FreeCAD will read any STEP models for components that exist. It will
also read the PCB thickness from KiCad.
</aside>
</section>
<section data-transition="slide-in fade-out">
<h3>1) Open the PCB</h3>
<img data-src="img/freecad-case-creation-01.png" alt="First, open the PCB in FreeCAD">
<aside class="notes">
Open the PCB in FreeCAD. You'll probably have a bunch of errors about missing STEP files, but that's okay it just
means you'll be missing components. They're mostly a guideline anyway, and may not be accurately sized. You can
hide components by clicking them on the left and pressing "Spacebar".
</aside>
</section>
<section data-transition="fade">
<h3>1) Open the PCB</h3>
<img data-src="img/freecad-case-creation-01b-makesketch.png" alt="Click 'Create Sketch'">
<aside class="notes">
We must create a "sketch", which is a 2D drawing. To create a sketch, click on this "Create Sketch" button. It'll
ask you which plane you want. Usually I get it wrong, and have to abandon the sketch. But you want it to be on a
plane that lets you see the PCB.
</aside>
</section>
<section data-transition="fade">
<h3>2) Create a sketch</h3>
<img data-src="img/freecad-case-creation-02-constraints.png" alt="Creating constraints on the first sketch">
<aside class="notes">
This is your sketch. You can freely create elements like rectangles and circles, much like in a
2D drawing program like Inkscape. The difference here, and this is a big one, is that we must constrain these
shapes by defining precise dimensions. These constraints are what makes this a parametric modeler, because you
define the parameters for the various elements.
</aside>
</section>
<section data-transition="fade">
<h3>2) Create a sketch</h3>
<img data-src="img/freecad-case-creation-02b-features.png" alt="Creating constraints on the first sketch">
<aside class="notes">
These are the Elements. They include things like rectangles, circles, ovals, points, tangents, and other basic
primitives.
</aside>
</section>
<section data-transition="fade">
<h3>2) Create a sketch</h3>
<img data-src="img/freecad-case-creation-02c-constraints.png" alt="Creating constraints on the first sketch">
<aside class="notes">
These are constraints. These limit the parameters of the primitives.
</aside>
</section>
<section data-transition="fade">
<h3>2) Create a sketch</h3>
<img data-src="img/freecad-case-creation-02-constraints.png" alt="Creating constraints on the first sketch">
<aside class="notes">
You can tell that this green box is 12mm x 12.2mm, and that
the left and bottom sides are offset from the middle by 6.5mm and 6.1mm. Furthermore, the sides are defined to be
parallel, which means we only have to constrain one side. You need to have just enough constraints. Too many, and
it's "overconstrained". Too few, and it doesn't have a defined shape. When you're done, and it says "Fully
constrained sketch", click "Close".
</aside>
</section>
<section data-transition="fade">
<h3>2) Create a sketch</h3>
<img data-src="img/freecad-case-creation-03-extrude-start.png" alt="Sketch done, starting pad">
<aside class="notes">
And here's what it looks like in 3D view. We want to bring this 2D sketch into the 3D world, and we do that by
extruding it. Click on the sketch on the left, then click on the "Pad" button.
</section>
<section data-transition="fade">
<h3>3) Pad the sketch</h3>
<img data-src="img/freecad-case-creation-04-extrude-done.png" alt="Done with the pad">
<aside class="notes">
And here's what it looks like. Note that we have a 3D shape now, and we've defined that it's 2.0mm tall. Note
that in this image I've named this box "Board shield" for ease of remembering what it is.
</aside>
</section>
<section data-transition="fade">
<h3>3) Pad the sketch</h3>
<img data-src="img/freecad-case-creation-04b-extrude-done.png" alt="Done with the pad">
<aside class="notes">
The only setting of interest is the Length field here, which indicates how much padding to add. Since the USB
slot is about 2.4 MM thick, and we want to have some tolerance between the case and the PCB, let's make it 2.0
mm.
</aside>
</section>
<section data-transition="fade">
<h3>3) Pad the sketch</h3>
<img data-src="img/freecad-case-creation-05-extrude-angle.png" alt="Pad at an angle">
<aside class="notes">
And finally, here's what it looks like at an angle. And that's it! Repeat steps 2-3 until you're done.
</aside>
</section>
<section data-transition="fade">
<h3>4) Repeat as necessary</h3>
<img data-src="img/freecad-case-creation-06-begin-carve.png" alt="Create sketch for pocket">
<aside class="notes">
Click on the face that you want to add a pocket to, and click "Create sketch"
</aside>
</section>
<section data-transition="fade">
<h3>4) Repeat as necessary</h3>
<img data-src="img/freecad-case-creation-07-pocket-sketch.png" alt="Complete sketch for pocket">
<aside class="notes">
Create the sketch, ensuring it's fully constrained just like before. Click "Close" once you're done.
</aside>
</section>
<section data-transition="fade">
<h3>4) Repeat as necessary</h3>
<img data-src="img/freecad-case-creation-08-create-pocket.png" alt="Create a pocket">
<aside class="notes">
Create a pocket by clicking the "Create pocket" button.
</aside>
</section>
<section data-transition="fade">
<h3>4) Repeat as necessary</h3>
<img data-src="img/freecad-case-creation-09-pocket-created.png" alt="Create a pocket">
<aside class="notes">
There, a nice pocket.
</aside>
</section>
<section data-transition="fade">
<h3>4) Repeat as necessary</h3>
<img data-src="img/freecad-case-creation-09b-pocket-created.png" alt="Create a pocket">
<aside class="notes">
The length here is 0.8mm, because the PCB is 0.6mm, plus some tolerance.
</aside>
</section>
<section data-transition="fade">
<h3>4) Repeat as necessary</h3>
<img data-src="img/freecad-case-creation-10-pocket-pcb-hidden.png" alt="Pocket with no PCB">
<aside class="notes">
And here's what it looks like if we hide the PCB.
</aside>
</section>
<section data-transition="fade">
<h3>4) Repeat as necessary</h3>
<img data-src="img/freecad-case-creation-10a-pocket-passives-start.png" alt="Click on face for sketch">
<aside class="notes">
Click on the face that we want our sketch...
</aside>
</section>
<section data-transition="fade">
<h3>4) Repeat as necessary</h3>
<img data-src="img/freecad-case-creation-11-passives-sketch.png" alt="Pocket with no PCB">
<aside class="notes">
Create a sketch for the passives...
</aside>
</section>
<section data-transition="fade">
<h3>4) Repeat as necessary</h3>
<img data-src="img/freecad-case-creation-12-passives-pocket.png" alt="Pocket with no PCB">
<aside class="notes">
Create a pocket for the passives...
</aside>
</section>
<section data-transition="fade">
<h3>4) Repeat as necessary</h3>
<img data-src="img/freecad-case-creation-13-mcu-sketch.png" alt="Pocket with no PCB">
<aside class="notes">
Create a sketch for the MCU...
</aside>
</section>
<section data-transition="fade">
<h3>4) Repeat as necessary</h3>
<img data-src="img/freecad-case-creation-14-mcu-pocket.png" alt="Pocket with no PCB">
<aside class="notes">
Create a pocket for the MCU...
</aside>
</section>
<section data-transition="fade">
<h3>4) Repeat as necessary</h3>
<img data-src="img/freecad-case-creation-15-edge-sketch.png" alt="Pocket with no PCB">
<aside class="notes">
Create a sketch for the edge LEDs and components...
</aside>
</section>
<section data-transition="fade">
<h3>4) Repeat as necessary</h3>
<img data-src="img/freecad-case-creation-16-edge-pocket.png" alt="Pocket with no PCB">
<aside class="notes">
Create a pocket for the edge LEDs and components...
</aside>
</section>
<section data-transition="fade">
<h3>4) Repeat as necessary</h3>
<img data-src="img/freecad-case-creation-17-mounting-peg.png" alt="Pocket with no PCB">
<aside class="notes">
We'd like to create a mounting peg, so create a circle.
</aside>
</section>
<section data-transition="fade">
<h3>4) Repeat as necessary</h3>
<img data-src="img/freecad-case-creation-18-mounting-peg-pad.png" alt="Pocket with no PCB">
<aside class="notes">
And pad the mounting peg sketch.
</aside>
</section>
<section data-transition="fade">
<h3>4) Repeat as necessary</h3>
<img data-src="img/freecad-case-creation-19-alignment-bump-sketch.png" alt="Pocket with no PCB">
<aside class="notes">
Create a sketch for the passives...
</aside>
</section>
<section data-transition="fade">
<h3>4) Repeat as necessary</h3>
<img data-src="img/freecad-case-creation-20-alignment-bump-pad.png" alt="Creating a pad for the alignment bump">
<aside class="notes">
And now pad the alignment bump to bring it into 3D.
</aside>
</section>
<section data-transition="fade">
<h3>4) Repeat as necessary</h3>
<img data-src="img/freecad-case-creation-21-guiding-slots-sketch.png" alt="Creating the sketch for the guiding slots">
<aside class="notes">
Here are the guiding slots. Note that they're not strictly necessary, and in fact the 0.4mm thickness is
bordering on the smallest feature that our 3D printer can create. A good rule of thumb is that injection molding
doesn't work so well below 0.5mm, but we're bending that rule a bit here because this piece is very small, and
it's not load-bearing.
</aside>
</section>
<section data-transition="fade">
<h3>4) Repeat as necessary</h3>
<img data-src="img/freecad-case-creation-22-guiding-slots-pad.png" alt="Finished case without PCB">
<aside class="notes">
If we turn off the PCB, here's what the finished product looks like.
</aside>
</section>
<section data-transition="fade">
<h3>4) Repeat as necessary</h3>
<img data-src="img/freecad-case-creation-23-case-with-pcb.png" alt="Finished case with PCB">
<aside class="notes">
And here's what the finished product looks like with the PCB enabled.
</aside>
</section>
<section data-transition="fade-in slide-out ">
<h3>5) Check with reference parts</h3>
<img data-src="img/freecad-case-creation-24-usb-port.png" alt="Test with models">
<aside class="notes">
This is a USB port I got from a vendor. Somewhere off Digikey. They provide STEP files for just this sort of
thing. You can move the camera around and make sure the part will actually fit. Of course, 3D printing is
generally the best option, but this gives you an idea of hw well it'll fit before printing.
</aside>
</section>
<section>
<h3>Here's what we submitted</h3>
<img data-src="img/freecad-sent-to-factory.png" alt="STEP model we sent to factory">
<aside class="notes">
Here's what we sent to the factory. FreeCAD generated this STEP file, and we just emailed it to them. They
received the file, along with a sample PCB, and we got to talking. They understood roughly what the usecase was,
and they had some suggestions. They made some modifications to the STEP file and sent it back to me for approval.
</aside>
</section>
<section>
<h3>And here's what they made</h3>
<video data-autoplay>
<source data-src="img/final-model-spinning.mp4" type="video/mp4" />
</video>
<aside class="notes">
I'm really happy with this. You can see the changes they made. They added the lifters on the bottom, which is
what causes those holes. You wouldn't normally notice them, but they give those latches that let the PCB snap
into place. They also added the grips on the side, which are just kind of a nice touch. Overall they managed to
quickly understand the design and make some simple improvements. And then I was able to approve their design
decisions, including the extra cost incurred from the additional lifters, and get the tool made.
</aside>
</section>
<section>
<h3>3D Printed Prototype</h3>
<aside class="notes">
The factory wanted to create a 3D printed prototype. These were very accurate, but were heavier than the final
thing. They did this to ensure the PCB would fit. These 3D printers must be super fancy, because they're able to
handle the undercuts and weird features of the case.
</aside>
</section>
<section>
<h3>Cutting Steel - EDM</h3>
<img id="bunnie-edm" src="img/bunnie-edm.jpg" alt="An EDM machine cutting steel">
<cite for="bunnie-edm"><small>&copy; bunnie@bunniestudios.com</small></cite>
<aside class="notes">
Once we approved the 3D printed prototype, they started cutting steel. They use a variety of techniques here, and
frequently use EDM. This process involves cutting a soft copper positive with a CNC tool, then passing high
current through the copper as it comes near steel. They run dielectric fluid on it both to cool the piece and to
help the electrons ablate the steel.
</aside>
</section>
<section>
<h3>T0 Shot</h3>
<img id="bunnie-pvt-case-outside" data-src="img/bunnie-pvt-case-outside.jpg" alt="Outside of the Novena case">
<cite for="bunnie-pvt-case-outside"><small>&copy; bunnie@bunniestudios.com</small></cite>
<aside class="notes">
After they finish milling, they do a test shot. Usually this is not in the final color you specified, because it
helps them to tune features
such as how quickly to flow plastic. This T0 shot also lets them test to make sure it fits the final product. The
tool is still relatively soft, so changes can easily be made. If they need to remove material, they simply grind
it off. If they need to add material, they weld it on and then grind it off.
A good plastics vendor will have a functional tool after T0, but it's not at all uncommon to have to do T1, T2,
and more.
</aside>
</section>
<section>
<h3>T0 Shot - Annotated</h3>
<img id="bunnie-pvt-case-t0-explained" data-src="img/bunnie-pvt-case-t0-explained.jpg" alt="Outside of the Novena case">
<cite for="bunnie-pvt-case-t0-explained"><small>&copy; bunnie@bunniestudios.com</small></cite>
<aside class="notes">
This is an annotated version of the case. You can see three major problems here: flow lines,
where the plastic partially cooled as it was still moving. Knit lines are where two rivers of molten plastic
meet. And sink marks, where not enough plastic flowed, and features on the inside can be seen through on the
other side. The factory will tune the mold and the flow rate to address these issues.
</aside>
</section>
<section>
<h3>Finishing</h3>
<img id="moldtech" data-src="img/moldtech-sampleboard1.jpg" alt="Moldtech Sample board">
<cite for="moldtech"><small>&copy; Moldtech JP</small></cite>
<aside class="notes">
They may need to move on to subsequent test shots as they refine the tool. Each step takes a few weeks, so the
fewer test shots you need the better. Factories are getting pretty good now in that most of the ones I've worked
with get it right on the first or second try. After they're happy with the tool, they harden it, which means it's
good for about 100,000 shots before it needs to be refinished. This process usually involves picking a texture,
which is usally done out of a book. Textures are easy to add, and can cover up many manufacturing defects.
</aside>
</section>
<section>
<h3>Manufactured!</h3>
<img data-src="img/manufactured.jpg" alt="Bag of Tomu cases">
<aside class="notes">
And then you have your final tool, ready to shoot thousands of copies of your model!
</aside>
</section>
</section>
<section>
<section>
<h1>Real World Fun</h1>
<h2>And the problems you'll face</h2>
<aside class="notes">
Now that we know the basics of how plastic is made, we can see some of the consequences in the real world. While
many of these designs aren't open source, it shouldn't be too difficult to work backwards and imagine how the
tool was built.
</aside>
</section>
<section data-transition="slide-in fade-out">
<h3>Clothes peg</h3>
<img data-src="img/clothespeg-side.jpg" alt="A clothes peg (side view)">
<aside class="notes">
This is a clothes peg from my house. It's very cheap.
</aside>
</section>
<section data-transition="fade-in slide-out">
<h3>Clothes peg</h3>
<img data-src="img/clothespeg-side-arrows.jpg" alt="A clothes peg (side view)">
<aside class="notes">
You can clearly see parting lines along the side here.
</aside>
</section>
<section data-transition="slide-in fade-out">
<h3>Clothes peg</h3>
<img data-src="img/clothespeg-inside.jpg" alt="A clothes peg (inside view)">
<aside class="notes">
If we open it up, we can see some of the magic on the inside. One clever feature is that both halves of the
clothes peg are identical, which means they don't have to match up pairs when manufacturing.
</aside>
</section>
<section data-transition="fade">
<h3>Clothes peg</h3>
<img data-src="img/clothespeg-inside-gate.jpg" alt="A clothes peg (inside view)">
<aside class="notes">
This is a bit of flashing left from the gate. This is where plastic flowed in when it was still molten. Because
this is a cheap piece, they didn't care too much about hiding it.
</aside>
</section>
<section data-transition="fade">
<h3>Clothes peg</h3>
<img data-src="img/clothespeg-inside-ejectors.jpg" alt="A clothes peg (inside view)">
<aside class="notes">
These are the ejector pin markings. This is where those steel pegs pushed this piece out of the mold. The bottom
ejectors are thicker because this also serves to reinfrce the metal wire that puts a lot of force on this area.
</aside>
</section>
<section data-transition="fade-in slide-out">
<h3>Clothes peg</h3>
<img data-src="img/clothespeg-inside-wtf.jpg" alt="A clothes peg (inside view)">
<aside class="notes">
The pattern down here is effectively free, because this piece is entirely flat. There aren't any fancy tool
options here -- no lifters or sliders or anything complicated. The plastic also has a very rough surface,
indicating they probably aren't cleaning the tool very often. I'm not sure what's going on here, or why this
looks different between the two pieces. Maybe this was modified by an amateur.
</aside>
</section>
<section>
<h3>Aircon Remote (Front)</h3>
<img data-src="img/examples-aircon-top.jpg" alt="Front of the aircon remote">
<aside class="notes">
</aside>
</section>
<section data-transition="slide-in fade-out">
<h3>Aircon Remote (Back)</h3>
<img data-src="img/examples-aircon-back.jpg" alt="Back of the aircon remote">
<aside class="notes">
This is a very important tool in Singapore. It's the air conditioning remote.
</aside>
</section>
<section data-transition="fade">
<h3>Aircon Remote (Back)</h3>
<img data-src="img/examples-aircon-back-gate.jpg" alt="Back of the aircon remote">
<aside class="notes">
This is the gate. You'll see this pattern a lot now. Again, this is where plastic flowed in from the machine, and
was clipped off when it was delivered to the manufacturer.
</aside>
</section>
<section data-transition="fade">
<h3>Aircon Remote (Back)</h3>
<img data-src="img/examples-aircon-back-text.jpg" alt="Back of the aircon remote">
<aside class="notes">
They've added some text on the
backside here. This text could be a swappable plate, which means they could take this piece of metal out of the
core and replace it with another. That would allow them to localize it easily. Also, it's sunken in, which means
it's easier to make typo corrections, because all you have to do is file down the tool and try again.
</aside>
</section>
<section data-transition="fade-in slide-out">
<h3>Aircon Remote (Back)</h3>
<img data-src="img/examples-aircon-back-slider.jpg" alt="Back of the aircon remote">
<aside class="notes">
Curiously, there's something that seems to violate our "no overhangs" policy. And indeed it does.
How do they do that? They use something called a "slider". Basically, a piece that starts out in one position
when the plastic flows, and then slides out of the way to let the piece eject. Sliders add a lot of cost, because
they quickly complicate the steel tool. You can have multi-stage sliders to get all sorts of complicated
features, but it can get very expensive very quickly.
</aside>
</section>
<section data-transition="slide-in fade-out">
<h3>Aircon Remote (Front Cover)</h3>
<img data-src="img/examples-aircon-cover.jpg" alt="Cover from aircon remote front">
<aside class="notes">
Here's the inside of the front cover. It can slide up and down, which means it has a lip on the side.
</aside>
</section>
<section data-transition="fade">
<h3>Aircon Remote (Front Cover)</h3>
<img data-src="img/examples-aircon-cover-ejector.jpg" alt="Cover from aircon remote front">
<aside class="notes">
Here are the ejector pin markings again. This piece has three ejectors.
</aside>
</section>
<section data-transition="fade">
<h3>Aircon Remote (Front Cover)</h3>
<img data-src="img/examples-aircon-cover-gate.jpg" alt="Cover from aircon remote front">
<aside class="notes">
And here's the gate.
</aside>
</section>
<section data-transition="fade">
<h3>Aircon Remote (Front Cover)</h3>
<img data-src="img/examples-aircon-cover-text.jpg" alt="Cover from aircon remote front">
<aside class="notes">
They were also kind enough to indicate that this came
from the second cavity in the mold. They could probably hide some of these marks if they put more effort into it,
but it's really very little payoff. Most people won't notice, and it doesn't impact the functionality of the
product.
</aside>
</section>
<section data-transition="fade-in slide-out">
<h3>Aircon Remote (Front Cover)</h3>
<img data-src="img/examples-aircon-cover-lifter.jpg" alt="Cover from aircon remote front">
<aside class="notes">
They used a
slider here, too. In fact, the slider left small marks here.
</aside>
</section>
<section>
<h3>Wine bottle opener</h3>
<img data-src="img/wine-bottle-overview.jpg" alt="Wine bottle bottle opener">
<aside class="notes">
This wine bottle opener has one very visible parting line. Interestingly, it's overmolded, which is where one
piece gets two shots, and the overmolded piece hides the parting line along the top.
</aside>
</section>
<section>
<h3>Wine bottle opener</h3>
<img data-src="img/wind-bottle-flashing.jpg" alt="Some flashing on the wine bottle, plus overmolding">
<aside class="notes">
You can do some pretty cool
thigns with overmolding, because the base doesn't even need to be plastic. You can overmold anything that will
fit inside of a plastic tool. That includes circuit boards, if you don't need to worry about heat or debug pins.
This is how most cables are made, where they put the wires directly into the injection molding tool.
</aside>
</section>
</section>
<section>
<section>
<h3>Summary</h3>
<ol>
<li>Understand production process</li>
<li>Design with open source tools</li>
<li>Take baby steps</li>
<li>Design artifacts are everywhere</li>
</ol>
</section>
<section>
<h2>Thank You</h2>
<h3>Questions?</h3>
<table>
<tr>
<td>Fomu:</td>
<td><a href="https://www.crowdsupply.com/sutajio-kosagi/fomu">t.xobs.io/fomu</a></td>
</tr>
<tr>
<td>Case:</td>
<td><a href="https://github.com/im-tomu/tomu-hardware/tree/master/case">t.xobs.io/tomu-case</a></td>
</tr>
<tr>
<td>Tool:</td>
<td><a href="https://raw.githubusercontent.com/im-tomu/tomu-hardware/master/case/tomu_0.4_case_manufactured_tool.step">t.xobs.io/tomu-tool</a></td>
</tr>
<tr>
<td>Talk:</td>
<td><a href="https://raw.githubusercontent.com/im-tomu/tomu-hardware/master/case/tomu_0.4_case_manufactured_tool.step">p.xobs.io/lca2019</a></td>
</tr>
</table>
</section>
</section>
</div>
</div> <!-- class="reveal" -->
<!-- End of main presentation -->
<!-- Start of configuration section -->
<script src="lib/js/head.min.js"></script>
<script src="js/reveal.js"></script>
<script>
var presenter = !!Reveal.getQueryHash().s;
// More info https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: presenter ? false : true,
progress: true,
history: true,
center: true,
controlsTutorial: presenter ? false : true,
slideNumber: presenter ? null : 'c/t',
// The "normal" size of the presentation, aspect ratio will be preserved
// when the presentation is scaled to fit different resolutions. Can be
// specified using percentage units.
width: 960,
height: 700,
// Factor of the display size that should remain empty around the content
margin: 0.1,
multiplex: {
url: 'https://p.xobs.io/',
id: '631bb3db6fbaea78',
secret: Reveal.getQueryHash().s || null
},
// Bounds for smallest/largest possible scale to apply to content
minScale: 0.02,
maxScale: 5.5,
transition: 'slide', // none/fade/slide/convex/concave/zoom
// More info https://github.com/hakimel/reveal.js#dependencies
dependencies: [
{ src: 'lib/js/classList.js', condition: function () { return !document.body.classList; } },
{ src: 'plugin/markdown/marked.js', condition: function () { return !!document.querySelector('[data-markdown]'); } },
{ src: 'plugin/markdown/markdown.js', condition: function () { return !!document.querySelector('[data-markdown]'); } },
{ src: 'plugin/highlight/highlight.js', async: true, callback: function () { hljs.initHighlightingOnLoad(); } },
{ src: 'plugin/search/search.js', async: true },
{ src: 'plugin/zoom-js/zoom.js', async: true },
{ src: 'plugin/notes/notes.js', async: true },
{ src: 'lib/js/socket.io.js', async: true },
{
src: presenter ?
'plugin/multiplex/master.js' :
'plugin/multiplex/client.js', async: true
},
]
});
</script>
</body>
</html>