1014 lines
46 KiB
HTML
1014 lines
46 KiB
HTML
<!doctype html>
|
|
<html>
|
|
|
|
<head>
|
|
<meta charset="utf-8">
|
|
|
|
<title>Paying It Forward: Documenting your Hardware</title>
|
|
|
|
<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
|
|
<meta name="author" content="Sean "xobs" 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/lca20-pif/">p.xobs.io/lca20-pif</a>
|
|
<span class="theme">The Linux of Things</span><span class="hashtag"> | #LCA2020</span><span class="twitter"> |
|
|
@linuxconfau</span>
|
|
</div>
|
|
<div class="slides">
|
|
<section data-background-image="css/theme/lca2019-title-bg-transparent.svg">
|
|
<h1>Paying it Forward: Documenting Your Hardware Project</h1>
|
|
<h4>Approaches to documenting a hardware description language</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>© 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>© 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>© 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>
|
|
<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>
|
|
<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>
|
|
<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">
|
|
<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>© 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>© 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>© 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>© 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>
|