{"id":1393,"date":"2018-02-11T17:00:38","date_gmt":"2018-02-11T23:00:38","guid":{"rendered":"http:\/\/siever.info\/home\/?p=1393"},"modified":"2018-02-15T07:47:46","modified_gmt":"2018-02-15T13:47:46","slug":"mini-garage-project","status":"publish","type":"post","link":"https:\/\/siever.info\/home\/mini-garage-project\/","title":{"rendered":"Mini-Garage Project"},"content":{"rendered":"<h1>Mini-Garage: An IoT Example<\/h1>\n<p>This project was created in an effort to create a real-world example project for my introductory IoT courses.<\/p>\n<h2>Features<\/h2>\n<p>The mini-garage provides nearly the same features as a real garage door opener:<\/p>\n<ul>\n<li>Motorized door mechanism<\/li>\n<li>Safety feedback\n<ul>\n<li>Electric eye<\/li>\n<li>Physical interruption\/stall detection<\/li>\n<\/ul>\n<\/li>\n<li>Physical button to toggle door state<\/li>\n<li>A light<\/li>\n<li>Most importantly, it can be controlled by a Wi-Fi enabled platform, the Particle Photon.<\/li>\n<\/ul>\n<h2>Videos<\/h2>\n<p>The videos below shows the basic garage door control that developers (students) have to implement.\u00a0 They implement all control logic (direction of motor, when to start\/stop, etc.). Some of the required behaviors include:<\/p>\n<ul>\n<li>When the button is pressed the door opens\/closes and the light activates.<\/li>\n<li>The light turns off soon after the door motion is stopped.<\/li>\n<li>Faults can be caused by either the electric eye&#8217;s beam being broken when closing or if the door physically stalls.\u00a0 In either case the door should stop (or reverse) and the light should blink.\u00a0 The door should be able to be restarted by pressing the button again.<\/li>\n<\/ul>\n<p>Follow-up assignments implement internet-based control of and feedback from the door.\u00a0 These include features that aren&#8217;t feasible on traditional garage door openers, such as notifications if the door has been left open.<\/p>\n<p>Basic Opening Due to Button<br \/>\n<iframe loading=\"lazy\" title=\"Mini-Garage Normal Opening Cycle\" width=\"474\" height=\"356\" src=\"https:\/\/www.youtube.com\/embed\/our_w7Sq4J4?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><br \/>\n<a href=\"https:\/\/wustl.box.com\/s\/5ur8dtkra8lya07coapnbwchn9ytuwn6\">Alternate Video Source<\/a><\/p>\n<p>Detecting a Fault (Person in the Way)<br \/>\n<iframe loading=\"lazy\" title=\"Mini-Garage Detecting a Fault (Electric Eye Interruption)\" width=\"474\" height=\"356\" src=\"https:\/\/www.youtube.com\/embed\/QYxRTcIq-Vc?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><br \/>\n<a href=\"https:\/\/wustl.box.com\/s\/rsuepa1eof40jahxnivcz3nv2r3qwo2m\">Alternate Video Source<\/a><\/p>\n<p>View of the Mechanical Parts Opening\/Closing from Above<br \/>\n<iframe loading=\"lazy\" title=\"Garage Mechanical View\" width=\"474\" height=\"267\" src=\"https:\/\/www.youtube.com\/embed\/kDBj_fQkOPY?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><br \/>\n<a href=\"https:\/\/wustl.box.com\/s\/pvkegs5hephl0ejq6n2hq3iy7my3iknc\">Alternate Video Source<\/a><\/p>\n<p>View of the Mechanical Parts Opening\/Closing from Side<br \/>\n<iframe loading=\"lazy\" title=\"Mini-Garage Mechanical View from Side\" width=\"474\" height=\"267\" src=\"https:\/\/www.youtube.com\/embed\/yVblCfGQEww?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><br \/>\n<a href=\"https:\/\/wustl.box.com\/s\/je6lyxzyud90fvgi6jzli4zuzm3monfw\">Alternate Video Source<\/a><\/p>\n<h2>Pictures and Diagrams<\/h2>\n<figure id=\"attachment_1424\" aria-describedby=\"caption-attachment-1424\" style=\"width: 474px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageMechanicalDiagram.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageMechanicalDiagram-1024x632.jpg\" alt=\"\" width=\"474\" height=\"293\" class=\"size-large wp-image-1424\" srcset=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageMechanicalDiagram-1024x632.jpg 1024w, https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageMechanicalDiagram-300x185.jpg 300w, https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageMechanicalDiagram-768x474.jpg 768w\" sizes=\"(max-width: 474px) 100vw, 474px\" \/><\/a><figcaption id=\"caption-attachment-1424\" class=\"wp-caption-text\">Mechanical Diagram (top down)<br \/><\/figcaption><\/figure>\n<figure id=\"attachment_1423\" aria-describedby=\"caption-attachment-1423\" style=\"width: 474px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageElectricEye.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageElectricEye-1024x719.jpg\" alt=\"\" width=\"474\" height=\"333\" class=\"size-large wp-image-1423\" srcset=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageElectricEye-1024x719.jpg 1024w, https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageElectricEye-300x211.jpg 300w, https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageElectricEye-768x539.jpg 768w\" sizes=\"(max-width: 474px) 100vw, 474px\" \/><\/a><figcaption id=\"caption-attachment-1423\" class=\"wp-caption-text\">Electric Eye (looking in from door)<br \/><\/figcaption><\/figure>\n<figure id=\"attachment_1440\" aria-describedby=\"caption-attachment-1440\" style=\"width: 474px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageStepper.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageStepper-1024x769.jpg\" alt=\"\" width=\"474\" height=\"356\" class=\"size-large wp-image-1440\" srcset=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageStepper-1024x769.jpg 1024w, https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageStepper-300x225.jpg 300w, https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageStepper-768x577.jpg 768w\" sizes=\"(max-width: 474px) 100vw, 474px\" \/><\/a><figcaption id=\"caption-attachment-1440\" class=\"wp-caption-text\">Stepper and Back  Contact (Fully open contact). Photo looking up from garage floor.<br \/><\/figcaption><\/figure>\n<figure id=\"attachment_1441\" aria-describedby=\"caption-attachment-1441\" style=\"width: 474px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageContact-1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageContact-1-1024x769.jpg\" alt=\"\" width=\"474\" height=\"356\" class=\"size-large wp-image-1441\" srcset=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageContact-1-1024x769.jpg 1024w, https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageContact-1-300x225.jpg 300w, https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageContact-1-768x577.jpg 768w\" sizes=\"(max-width: 474px) 100vw, 474px\" \/><\/a><figcaption id=\"caption-attachment-1441\" class=\"wp-caption-text\">Front Contact (fully closed), Rotary Encoder (stall detect) and Traveller.  Photo taken looking up from garage floor.<\/figcaption><\/figure>\n<figure id=\"attachment_1416\" aria-describedby=\"caption-attachment-1416\" style=\"width: 474px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageWithoutPhoton-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageWithoutPhoton-2-1024x731.png\" alt=\"\" width=\"474\" height=\"338\" class=\"size-large wp-image-1416\" srcset=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageWithoutPhoton-2-1024x731.png 1024w, https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageWithoutPhoton-2-300x214.png 300w, https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageWithoutPhoton-2-768x548.png 768w, https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageWithoutPhoton-2.png 1500w\" sizes=\"(max-width: 474px) 100vw, 474px\" \/><\/a><figcaption id=\"caption-attachment-1416\" class=\"wp-caption-text\">Control Board without a Photon Installed (Battery pack underneath)<\/figcaption><\/figure>\n<figure id=\"attachment_1417\" aria-describedby=\"caption-attachment-1417\" style=\"width: 474px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageWithPhoton-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageWithPhoton-2-1024x716.png\" alt=\"\" width=\"474\" height=\"331\" class=\"size-large wp-image-1417\" srcset=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageWithPhoton-2-1024x716.png 1024w, https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageWithPhoton-2-300x210.png 300w, https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageWithPhoton-2-768x537.png 768w, https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageWithPhoton-2.png 1600w\" sizes=\"(max-width: 474px) 100vw, 474px\" \/><\/a><figcaption id=\"caption-attachment-1417\" class=\"wp-caption-text\">Control Board with a Photon Installed<\/figcaption><\/figure>\n<figure id=\"attachment_1429\" aria-describedby=\"caption-attachment-1429\" style=\"width: 474px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GaragesAll.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GaragesAll-1024x993.jpg\" alt=\"\" width=\"474\" height=\"460\" class=\"size-large wp-image-1429\" srcset=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GaragesAll-1024x993.jpg 1024w, https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GaragesAll-300x291.jpg 300w, https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GaragesAll-768x745.jpg 768w\" sizes=\"(max-width: 474px) 100vw, 474px\" \/><\/a><figcaption id=\"caption-attachment-1429\" class=\"wp-caption-text\">The Six Garages used by Students next to a Deck of <a href=\"http:\/\/tilestoolkit.io\/\">Tiles IoT Cards<\/a> for scale (playing cards)<\/figcaption><\/figure>\n<h2>Videos of the 3D Model<\/h2>\n<p>A Tour of the 3D Model<br \/>\n<iframe loading=\"lazy\" title=\"Mini-Garage 3D Model Tour (AutoDesk Fusion 360)\" width=\"474\" height=\"356\" src=\"https:\/\/www.youtube.com\/embed\/774LBEJBhew?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><br \/>\n<a href=\"https:\/\/wustl.box.com\/s\/gavxnyrr8m5tm7480afht8yy0wrvps7q\">Alternate Video Source<\/a><\/p>\n<p>An Overview of Constructing the 3D Model<br \/>\n<iframe loading=\"lazy\" title=\"Mini-Garage Model Construction (AutoDesk Fusion 360)\" width=\"474\" height=\"356\" src=\"https:\/\/www.youtube.com\/embed\/HZ5bVs2thpw?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><br \/>\n<a href=\"https:\/\/wustl.box.com\/s\/bkt718w1l5wf0w3tap3np2tq2w83vlq3\">Alternate Video Source<\/a><\/p>\n<h2>Why a Garage?<\/h2>\n<p>A garage was selected for a variety of reasons:<\/p>\n<ul>\n<li>Home automation aspects of IoT are appealing.<\/li>\n<li>Garage door openers are relatively familiar devices.<\/li>\n<li>The I\/O is digital, so\u00a0it doesn&#8217;t distract too much from other topics.<\/li>\n<li>Like many more significant IoT projects, developers need to learn how to work with proxies for the hardware due to safety\/space considerations.\u00a0 \u00a0Moreover, APIs serve as contracts for hardware interaction.<\/li>\n<li>The mechanical aspects and timing characteristics make for a richer project.<\/li>\n<li>The scale is appropriate.\u00a0 Over the course of a semester it&#8217;s possible to put together a nearly commercial quality solution.<\/li>\n<\/ul>\n<p>I also had some personal goals:<\/p>\n<ul>\n<li>Learn CAD\/CAM basics.<\/li>\n<li>Practice using laser cutters.<\/li>\n<li>Learn how to efficiently manufacture a small run of a product.<\/li>\n<\/ul>\n<h2>Implementation Issues and Choices<\/h2>\n<p>The intended purpose (classroom use), imposed some requirements on the mini-garages:<\/p>\n<ul>\n<li>They should be easy to build (I wanted to build ~6-7 of them)\n<ul>\n<li>They should be cheap.\u00a0 (I wanted to build ~6-7 of them!)<\/li>\n<\/ul>\n<\/li>\n<li>They should be reasonably reliable.\u00a0 They&#8217;ll be used for a few semesters and poor performance undermines the experience.<\/li>\n<li>They should be portable.\u00a0 Developers (i.e., students) will only have access while in the classroom and the garages will be carried from table-to-table.<\/li>\n<li>They should be electrically and mechanically robust.\u00a0 Errors in code should not damage either the developer&#8217;s test platform (the student&#8217;s processors) or the mini-garages.\u00a0 Moreover, errors like this should be reported, rather than just quietly prevented.<\/li>\n<li>Developers should be able to make their code interact with the hardware with minimal effort.<\/li>\n<\/ul>\n<p>Given the requirements, I decided on something that&#8217;s approximately shoe-box size. A 1\/24th scale was a good fit. The model is parameterized and many aspects of it will scale with a simple change to the scale parameter.\u00a0 The size of tabs on the box joints may need some adjustment and some elements, like the motors\/gears\/etc. are a set size and don&#8217;t scale.\u00a0 Consequently, modifications of scale often need some triage to get back to a working model and things go awry if the scale is significantly different than 1\/24th.<\/p>\n<p>I chose a two processor design to help protect hardware and to require compliance with an API. The students write code for a Particle Photon, which is then plugged into the garage hardware via a ZIF socket.\u00a0 \u00a0It interacts with an Arduino Pro Micro, which does the real I\/O.\u00a0 The only shared electrical connections from the Photon are power, ground, and RX\/TX from a UART.\u00a0 This minimal interface helps avoid a wayward short-to-ground due to an accidentally misconfigured output.\u00a0 (RX\/TX is relatively safe due to code review prior to using the hardware and because we don&#8217;t use that RX\/TX for any other aspect of class.  Circuits for other work only uses the DX and AX pins).<\/p>\n<p>When developing and testing code without the garage, developers use stubs for the API.\u00a0 The stubs typically simulate the garage via LEDs and switches, which is sufficient for most testing.\u00a0 Some aspects of the assignments require meeting timing constraints, which requires code instrumentation as well.<\/p>\n<p>The motors (steppers) were chosen partly due to size and, largely, due to price and availability.\u00a0 The choice of motors impacted both the technique for stall detection and the power requirements.\u00a0 Since it&#8217;s relatively difficult to detect stalls in steppers via changes in current, a mechanical rotary sensor on the front belt gear is used.\u00a0 If motion stops for a sufficiently long time it&#8217;s assumed that the door is stalled.\u00a0 This technique has some limitations if the mechanical strength of the motor\/belt can damage the mini-garage prior to a stall being detected, but fortunately this doesn&#8217;t seem to be the case.<\/p>\n<p>Typically the Arduino Pro Micro is connected via a USB cable to a PC, which monitors for errors.\u00a0 If the developer&#8217;s code attempts to overdrive hardware or misses timing constraints, it&#8217;s reported via a message. It was originally hoped that the USB cable could also satisfy all power requirements.\u00a0\u00a0\u00a0Unfortunately the total current used by all components may exceed the current supplied by either of the Arduino Pro Micro&#8217;s on-board voltage regulators, which could lead to erratic performance.\u00a0 Rather than using a custom USB cable and additional power supply, I decided to just use an independent power supply for the motors (4AA batteries).<\/p>\n<p><span style=\"font-size: 24px; font-weight: bold;\">Files \/ Source<\/span><\/p>\n<p><a href=\"https:\/\/github.com\/bsiever\/IoT-MiniGarage\">GitHub Repo<\/a><\/p>\n<ul>\n<li>3D Model &amp; Parts\n<ul>\n<li><a href=\"http:\/\/a360.co\/2BjsNtP\">A360 link<\/a>\u00a0or\u00a0<a href=\"https:\/\/grabcad.com\/library\/739288\">GrabCAD<\/a><\/li>\n<li><a href=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageParts.zip\">GarageParts.zip<\/a>\u00a0(Laser Cutter Parts on two sheets;\u00a0 Individual files as .dxf, and 3D printer parts as .stl)\n<ul>\n<li><a href=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageLaserParts.pdf\">GarageLaserParts.pdf<\/a>\u00a0(converted via <a href=\"https:\/\/www.zamzar.com\">Zamar.com<\/a>; Unknown fidelity\/scale)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>Wiring\n<ul>\n<li><a href=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageSchematic.zip\">GarageSchematic.zip<\/a>: Fritzing file of breadboard layout<\/li>\n<li><a href=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageBreadboardLayout.pdf\">GarageBreadboardLayout.pdf<\/a><\/li>\n<\/ul>\n<\/li>\n<li>Source Code\n<ul>\n<li><a href=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/GarageFirmware.zip\">GarageFirmware.zip<\/a>: Firmware for the Arduino Pro and the API for the Photon<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Bill of Materials<\/h2>\n<table>\n<tbody>\n<tr>\n<td style=\"background-color: #bdbdbd; text-align: center; vertical-align: top;\"><span style=\"color: #000000;\"><strong>Item<\/strong><\/span><\/td>\n<td style=\"background-color: #bdbdbd; text-align: center; vertical-align: top;\"><span style=\"color: #000000;\"><strong>Link<\/strong><\/span><\/td>\n<td style=\"background-color: #bdbdbd; text-align: center; vertical-align: top;\"><span style=\"color: #000000;\"><strong>Notes<\/strong><\/span><\/td>\n<td style=\"background-color: #bdbdbd; text-align: center; vertical-align: top;\"><span style=\"color: #000000;\"><strong>Cost (USD)<\/strong><\/span><\/td>\n<td style=\"background-color: #bdbdbd; text-align: center; vertical-align: top;\"><span style=\"color: #000000;\"><strong>Items per Purchase<\/strong><\/span><\/td>\n<td style=\"background-color: #bdbdbd; text-align: center; vertical-align: top;\"><span style=\"color: #000000;\"><strong>Items needed per Build<\/strong><\/span><\/td>\n<td style=\"background-color: #bdbdbd; text-align: center; vertical-align: top;\"><span style=\"color: #000000;\"><strong>Average cost per build<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td>MDF<\/td>\n<td><a href=\"http:\/\/www.homedepot.com\/p\/1-4-in-x-2-ft-x-2-ft-Medium-Density-Fiber-Board-1508102\/205881910\">Home Depot: 2&#8217;x2&#8242; MDF Sheets<\/a><\/td>\n<td><\/td>\n<td>3.72<\/td>\n<td>1<\/td>\n<td>1<\/td>\n<td>3.72<\/td>\n<\/tr>\n<tr>\n<td>Timing Belt Gear<\/td>\n<td><a href=\"https:\/\/www.amazon.com\/gp\/product\/B014KN70QE\">Amazon: BEMONOC 2GT Timing Pulley 20 Teeth 6mm Bore fit GT2 Belt Width 6mm<\/a><\/td>\n<td>Used for rotation sensor<\/td>\n<td>21.88<\/td>\n<td>5<\/td>\n<td>1<\/td>\n<td>4.376<\/td>\n<\/tr>\n<tr>\n<td>Timing Belt Kit<\/td>\n<td><a href=\"https:\/\/www.amazon.com\/gp\/product\/B01MY9UKSJ\">Amazon: Drillpro 8Pcs 5mm 20Teeth Timing Pulley Wheel+GT2 5 Meters<\/a><\/td>\n<td>Belt, pully (for motor)<\/td>\n<td>15.54<\/td>\n<td>8<\/td>\n<td>1<\/td>\n<td>1.9425<\/td>\n<\/tr>\n<tr>\n<td>Timing Belt Clamp<\/td>\n<td><a href=\"https:\/\/www.amazon.com\/gp\/product\/B01HGYI4ZK\">Amazon: Mercurry 5pcs 2GT Timing Belt Aluminum Gear Clamp Mount Block<\/a><\/td>\n<td><\/td>\n<td>9.99<\/td>\n<td>5<\/td>\n<td>1<\/td>\n<td>1.998<\/td>\n<\/tr>\n<tr>\n<td>Canvas Panel<\/td>\n<td><\/td>\n<td>Used as door hinge (glued with wood glue)<\/td>\n<td>~$7<\/td>\n<td>15<\/td>\n<td>1<\/td>\n<td>0.46<\/td>\n<\/tr>\n<tr>\n<td>Perf Board<\/td>\n<td><a href=\"https:\/\/www.amazon.com\/gp\/product\/B071R3BFNL\/\">Amazon: Gikfun Solder-able Breadboard Gold Plated Finish Proto Board<\/a><\/td>\n<td><\/td>\n<td>12.88<\/td>\n<td>5<\/td>\n<td>1<\/td>\n<td>2.576<\/td>\n<\/tr>\n<tr>\n<td>Rotary Encoder<\/td>\n<td><a href=\"https:\/\/www.amazon.com\/gp\/product\/B016Q9XSRU\">Amazon: Podoy 6Pcs Rotary Encoder Switch 6mm 18 Detent Points<\/a><\/td>\n<td>Used to detect door stalls \/ prevent crushing (easier than current detection w\/ stepper)<\/td>\n<td>8.39<\/td>\n<td>6<\/td>\n<td>1<\/td>\n<td>1.398333333<\/td>\n<\/tr>\n<tr>\n<td>Laser<\/td>\n<td><a href=\"https:\/\/www.amazon.com\/gp\/product\/B01ITK4PEO\">Amazon: GeeBat 10pcs Mini Laser Dot Diode Module<\/a><\/td>\n<td>Safety beam \/ sensor<\/td>\n<td>5.99<\/td>\n<td>10<\/td>\n<td>1<\/td>\n<td>0.599<\/td>\n<\/tr>\n<tr>\n<td>Laser Reciever<\/td>\n<td><a href=\"https:\/\/www.amazon.com\/gp\/product\/B01M8PFZRC\">Amazon: Icstation 5V Laser Recevier Sensor Module<\/a><\/td>\n<td>Safety beam detection<\/td>\n<td>12.99<\/td>\n<td>5<\/td>\n<td>1<\/td>\n<td>2.598<\/td>\n<\/tr>\n<tr>\n<td>Contact Switches<\/td>\n<td><a href=\"https:\/\/www.amazon.com\/gp\/product\/B015W8S8NA\">Amazon: Gikfun Micro Switch Long Hinge Lever<\/a><\/td>\n<td>Detect when door is at extremes of travel<\/td>\n<td>7.98<\/td>\n<td>20<\/td>\n<td>2<\/td>\n<td>0.798<\/td>\n<\/tr>\n<tr>\n<td>Stepper Motor<\/td>\n<td><a href=\"https:\/\/www.amazon.com\/gp\/product\/B01CP18J4A\">Amazon: Elegoo 5 sets 28BYJ-48 ULN2003 5V Stepper Motor + ULN2003 Driver Board<\/a><\/td>\n<td>Door opener<\/td>\n<td>13.99<\/td>\n<td>5<\/td>\n<td>1<\/td>\n<td>2.798<\/td>\n<\/tr>\n<tr>\n<td>ZIF Sockets<\/td>\n<td><a href=\"http:\/\/www.ebay.com\/itm\/US-Stock-2x-24-Pin-2-54mm-ZIF-ZIP-IC-Test-DIP-Board-Socket-Universal-3M-224-6182\/391746936208?ssPageName=STRK%3AMEBIDX%3AIT&amp;_trksid=p2057872.m2749.l2649\">ebay: US Stock 2x 24 Pin 2.54mm ZIF ZIP IC Test DIP Board Socket Universal 3M 224-6182<\/a><\/td>\n<td><\/td>\n<td>7.19<\/td>\n<td>2<\/td>\n<td>1<\/td>\n<td>3.595<\/td>\n<\/tr>\n<tr>\n<td>Arduino Pro Micro<\/td>\n<td><a href=\"https:\/\/www.amazon.com\/gp\/product\/B01HCXMBOU\">Amazon: KOOKYE 3PCS Pro Micro ATmega32U4 5V\/16MHz <\/a><\/td>\n<td><\/td>\n<td>19.99<\/td>\n<td>3<\/td>\n<td>1<\/td>\n<td>6.663333333<\/td>\n<\/tr>\n<tr>\n<td>26 Gauge wire<\/td>\n<td><a href=\"https:\/\/www.amazon.com\/gp\/product\/B01KQ2NURG\">Amazon: 26 AWG Flexible Silicone Wire Electric wire<\/a><\/td>\n<td>Narrower wire would be better. (28 maybe?)<\/td>\n<td>16.39<\/td>\n<td>5<\/td>\n<td>1<\/td>\n<td>3.278<\/td>\n<\/tr>\n<tr>\n<td>LED<\/td>\n<td><a href=\"https:\/\/www.amazon.com\/Transparent-Intensity-Lighting-Electronics-Components\/dp\/B01AUI4VQU\">Amazon: Chanzon 100 pcs 5mm White LED Diode Lights (Clear Round Transparent DC 3V 20mA)<\/a><\/td>\n<td>Not the exact parts I used.\u00a0 Overhead light.<\/td>\n<td>6.67<\/td>\n<td>100<\/td>\n<td>1<\/td>\n<td>0.0667<\/td>\n<\/tr>\n<tr>\n<td>M2 Screws (Door connector hinges)<\/td>\n<td><a href=\"https:\/\/www.amazon.com\/gp\/product\/B01DJVDQFC\">Amazon: M2x25mm Stainless Steel Phillips Flat Countersunk Head Screws 50pcs<\/a><\/td>\n<td>Connect door to door hinge; Door hinge to traveller<\/td>\n<td>4.99<\/td>\n<td>50<\/td>\n<td>2<\/td>\n<td>0.1996<\/td>\n<\/tr>\n<tr>\n<td>M2 Screws<\/td>\n<td><a href=\"https:\/\/www.amazon.com\/gp\/product\/B01LFJD9XE\">Amazon: 50 Pcs M2x14mm Stainless Steel Round Head Phillips Machine Screws<\/a><\/td>\n<td>Connect stop switches to guide<\/td>\n<td>6.8<\/td>\n<td>50<\/td>\n<td>4<\/td>\n<td>0.544<\/td>\n<\/tr>\n<tr>\n<td>12 pin Header socket<\/td>\n<td><a href=\"https:\/\/www.amazon.com\/gp\/product\/B00SUXTBW2\">Amazon: 0pcs 2.54mm Single Row Female Pitch Header Socket <\/a><\/td>\n<td>\u00a0PCB Sockets for Arduino<\/td>\n<td>1.74<\/td>\n<td>10<\/td>\n<td>2<\/td>\n<td>0.348<\/td>\n<\/tr>\n<tr>\n<td>M4 Screws \/ 16mm<\/td>\n<td><a href=\"https:\/\/www.amazon.com\/gp\/product\/B000NHYR0Y\">Amazon: Class 4.8 Steel Machine Screw, Zinc Plated Finish, Pan Head, Phillips Drive, Meets DIN 7985, 16mm Length, M4-0.7 Metric Coarse Threads <\/a><\/td>\n<td>2 for motor to mount<\/td>\n<td>7.37<\/td>\n<td>25<\/td>\n<td>2<\/td>\n<td>0.5896<\/td>\n<\/tr>\n<tr>\n<td>M4 Nuts<\/td>\n<td><a href=\"https:\/\/www.amazon.com\/gp\/product\/B018TG9YGM\">Amazon: 20pcs M4 Thread 304 Stainless Steel Hex Hexagonal Nuts <\/a><\/td>\n<td>2 for motor to mount<\/td>\n<td>6<\/td>\n<td>20<\/td>\n<td>2<\/td>\n<td>0.6<\/td>\n<\/tr>\n<tr>\n<td>M2 Nuts<\/td>\n<td><a href=\"https:\/\/www.amazon.com\/gp\/product\/B00BG8TFR4\">Amazon: 70 Pcs Silver Tone Metal M2 Hex Screw Nut<\/a><\/td>\n<td>6; 4 for switches, 3 for hinges<\/td>\n<td>6.24<\/td>\n<td>70<\/td>\n<td>6<\/td>\n<td>0.5348571429<\/td>\n<\/tr>\n<tr>\n<td>Ribbon Cable<\/td>\n<td><a href=\"https:\/\/www.amazon.com\/Breadboard-Jumper-Female-Ribbon-Cables\/dp\/B014SEBWE6\">Amazon: 30CM M\/F Breadboard Jumper Wires Kit,80 Pin Male to Female Ribbon Cables<\/a><\/td>\n<td>For motor board to Arduino; Bundle of 6 wires per board<\/td>\n<td>6.99<\/td>\n<td>6<\/td>\n<td>1<\/td>\n<td>1.165<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Average cost for a single garage: $40.83 (plus minor incidentals)<\/p>\n<h2>Misc. Construction Needs<\/h2>\n<ul>\n<li>Hot Glue: For mounting laser sensor, stepper driver board, and attaching wires<\/li>\n<li>Wood Glue: For gluing cotton fabric panel to door slats for hinge<\/li>\n<li>Super glue (gel, quick dry): For mounting laser and gluing stop switched once positioned<\/li>\n<li>Sandpaper: Misc finishing, especially door tracks<\/li>\n<li>Silicon Spray: Reducing friction on door tracks<\/li>\n<li>3D Filament: Traveller on rail<\/li>\n<li>Tooth picks: Misc. testing.\u00a0 These can be used for temporary pivots rather than screws.<\/li>\n<li>Solder: Soldering \ud83d\ude42<\/li>\n<\/ul>\n<h2>Software<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.autodesk.com\/products\/fusion-360\/overview\">Autodesk Fusion 360<\/a>:\u00a0 3D Model\u00a0 (Design check &amp; parts via Laser Cutter &amp; 3D Printing)<\/li>\n<li><a href=\"http:\/\/fritzing.org\/home\/\">Fritzing<\/a>: Schematic Capture \/ Layout<\/li>\n<li><a href=\"https:\/\/www.simplify3d.com\/\">Simplify3D<\/a>: 3D printing<\/li>\n<li><a href=\"https:\/\/www.coreldraw.com\/en\/\">CorelDraw<\/a>: To merge parts onto sheets for printing<\/li>\n<\/ul>\n<h2>Tools<\/h2>\n<ul>\n<li>Soldering Iron \/ Station<\/li>\n<li>3D Printer (Mine is an old, used XYZprinting <a href=\"https:\/\/www.xyzprinting.com\/en-US\/product\/da-vinci-1-0-aio\">da Vinci 1.0 AiO<\/a>)<\/li>\n<li><a href=\"https:\/\/www.ulsinc.com\/products\/platforms\/vls4-60\">ULS VLS 4.60<\/a> Laser Cutter (via the now defunct TechShop, Inc&#8230;.Hopefully soon to be replaced by <a href=\"http:\/\/thirddegreeglassfactory.com\/makerstudios\/\">Maker Studios<\/a>)<\/li>\n<li>Misc. standard tools (screwdrivers, sanders &amp; sanding blocks, etc.)<\/li>\n<\/ul>\n<h2>Acknowledgements<\/h2>\n<p>Special thanks to Carly Lowe, who was a Dream Consultant at Tech Shop when I made these. Around 5pm one day I mentioned to Carly that I wanted to create a little model garage. There was a prototype building with sliding door assembled and waiting when I came in at 9am the next morning.  She showed me the idea was feasible. Of course it took me about two months to recreate what she&#8217;d done as an evening project. (I wouldn&#8217;t have considered the windows\/door\/etching if I hadn&#8217;t seen Carly&#8217;s model. She also suggested the use of fabric for the door &#8220;hinge&#8221;)<\/p>\n<figure id=\"attachment_1434\" aria-describedby=\"caption-attachment-1434\" style=\"width: 474px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/CarlysGarage.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/CarlysGarage-1018x1024.jpg\" alt=\"\" width=\"474\" height=\"477\" class=\"size-large wp-image-1434\" srcset=\"https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/CarlysGarage-1018x1024.jpg 1018w, https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/CarlysGarage-150x150.jpg 150w, https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/CarlysGarage-298x300.jpg 298w, https:\/\/siever.info\/home\/wp-content\/uploads\/2018\/02\/CarlysGarage-768x773.jpg 768w\" sizes=\"(max-width: 474px) 100vw, 474px\" \/><\/a><figcaption id=\"caption-attachment-1434\" class=\"wp-caption-text\">Carly&#8217;s Garage<\/figcaption><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Mini-Garage: An IoT Example This project was created in an effort to create a real-world example project for my introductory IoT courses. Features The mini-garage provides nearly the same features as a real garage door opener: Motorized door mechanism Safety feedback Electric eye Physical interruption\/stall detection Physical button to toggle door state A light Most &hellip; <a href=\"https:\/\/siever.info\/home\/mini-garage-project\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Mini-Garage Project<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1393","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/siever.info\/home\/wp-json\/wp\/v2\/posts\/1393"}],"collection":[{"href":"https:\/\/siever.info\/home\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/siever.info\/home\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/siever.info\/home\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/siever.info\/home\/wp-json\/wp\/v2\/comments?post=1393"}],"version-history":[{"count":26,"href":"https:\/\/siever.info\/home\/wp-json\/wp\/v2\/posts\/1393\/revisions"}],"predecessor-version":[{"id":1446,"href":"https:\/\/siever.info\/home\/wp-json\/wp\/v2\/posts\/1393\/revisions\/1446"}],"wp:attachment":[{"href":"https:\/\/siever.info\/home\/wp-json\/wp\/v2\/media?parent=1393"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/siever.info\/home\/wp-json\/wp\/v2\/categories?post=1393"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/siever.info\/home\/wp-json\/wp\/v2\/tags?post=1393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}