Congratulations!

[Valid RSS] This is a valid RSS feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: https://andrewferguson.net/feed/

  1. <?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
  2. xmlns:content="http://purl.org/rss/1.0/modules/content/"
  3. xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  4. xmlns:dc="http://purl.org/dc/elements/1.1/"
  5. xmlns:atom="http://www.w3.org/2005/Atom"
  6. xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  7. xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  8. xmlns:georss="http://www.georss.org/georss"
  9. xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
  10. >
  11.  
  12. <channel>
  13. <title>Andrew Ferguson dot NET</title>
  14. <atom:link href="https://andrewferguson.net/feed/" rel="self" type="application/rss+xml" />
  15. <link>https://andrewferguson.net</link>
  16. <description>I am an enginerd: I excel at awkward.</description>
  17. <lastBuildDate>Tue, 27 Dec 2022 16:58:15 +0000</lastBuildDate>
  18. <language>en-US</language>
  19. <sy:updatePeriod>
  20. hourly </sy:updatePeriod>
  21. <sy:updateFrequency>
  22. 1 </sy:updateFrequency>
  23. <site xmlns="com-wordpress:feed-additions:1">1067985</site> <item>
  24. <title>Feit SHOP/4/HO/CCT/AG Teardown</title>
  25. <link>https://andrewferguson.net/2022/08/23/feit-shop-4-ho-cct-ag-teardown/</link>
  26. <dc:creator><![CDATA[Andrew]]></dc:creator>
  27. <pubDate>Tue, 23 Aug 2022 17:35:49 +0000</pubDate>
  28. <category><![CDATA[Teardown]]></category>
  29. <category><![CDATA[BK7231T]]></category>
  30. <category><![CDATA[constant voltage]]></category>
  31. <category><![CDATA[Feit]]></category>
  32. <category><![CDATA[home automation]]></category>
  33. <category><![CDATA[LED]]></category>
  34. <category><![CDATA[PWM]]></category>
  35. <category><![CDATA[teardown]]></category>
  36. <guid isPermaLink="false">https://andrewferguson.net/?p=15615</guid>
  37.  
  38. <description><![CDATA[The SHOP/4/HO/CCT/AG shop light is a 10,000 lumen light with tunable white light (3000K – 6500K) with a NEMA 5-15P connector that plugs into a standard 3-prong outlet. It can be found in the US on Amazon and in retailers such as Costco for about $60 (as of the time of publishing). It&#8217;s an interesting&#8230;&#160;<a href="https://andrewferguson.net/2022/08/23/feit-shop-4-ho-cct-ag-teardown/" class="" rel="bookmark">Read More &#187;<span class="screen-reader-text">Feit SHOP/4/HO/CCT/AG Teardown</span></a>]]></description>
  39. <content:encoded><![CDATA[
  40. <p>The SHOP/4/HO/CCT/AG shop light is a 10,000 lumen light with tunable white light (3000K – 6500K) with a NEMA 5-15P connector that plugs into a standard 3-prong outlet.</p>
  41.  
  42.  
  43.  
  44. <p>It can be found in the US on <a href="https://amzn.to/3JYXMwt">Amazon</a> and in retailers such as <a href="https://www.costco.com/feit-electric-wi-fi-4%e2%80%99-smart-led-high-output-10%2c000-lumen-shop-light.product.100777294.html">Costco</a> for about $60 (as of the time of publishing). It&#8217;s an interesting design (in my opinion) because it&#8217;s a smart light that supports on/off, dimming, and CCT color. But at the flip of a switch you can use it just like a standard, dumb LED light.</p>
  45.  
  46.  
  47.  
  48. <h2 class="wp-block-heading">Lights</h2>
  49.  
  50.  
  51.  
  52. <p>The light module contains 6 rows of LEDs (84 LEDs/row), each row alternating between cold and warm, for a total of 504 LEDs.</p>
  53.  
  54.  
  55.  
  56. <figure class="wp-block-image size-large"><a href="https://andrewferguson.net/wp-content/uploads/2022/08/IMG_4984.jpeg"><img fetchpriority="high" decoding="async" width="1024" height="768" data-attachment-id="15623" data-permalink="https://andrewferguson.net/2022/08/23/feit-shop-4-ho-cct-ag-teardown/img_4984/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/08/IMG_4984.jpeg" data-orig-size="1280,960" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;1.8&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;iPhone SE (2nd generation)&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1660752902&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;3.99&quot;,&quot;iso&quot;:&quot;50&quot;,&quot;shutter_speed&quot;:&quot;0.0083333333333333&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="IMG_4984" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/08/IMG_4984-300x225.jpeg" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/08/IMG_4984-1024x768.jpeg" src="https://andrewferguson.net/wp-content/uploads/2022/08/IMG_4984-1024x768.jpeg" alt="" class="wp-image-15623" srcset="https://andrewferguson.net/wp-content/uploads/2022/08/IMG_4984-1024x768.jpeg 1024w, https://andrewferguson.net/wp-content/uploads/2022/08/IMG_4984-300x225.jpeg 300w, https://andrewferguson.net/wp-content/uploads/2022/08/IMG_4984-768x576.jpeg 768w, https://andrewferguson.net/wp-content/uploads/2022/08/IMG_4984.jpeg 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
  57.  
  58.  
  59.  
  60. <h2 class="wp-block-heading">Major Integrated Circuits</h2>
  61.  
  62.  
  63.  
  64. <p>In addition to your usual collection of resistors, capacitors, and diodes, there&#8217;s three inductors which I couldn&#8217;t figure out P/N information for. I think there&#8217;s also a thermistor or fuse of some kind (magenta circled item on top side of of PCB). I&#8217;ve highlighted the major ICs below and provided some information based on what I could find:</p>
  65.  
  66.  
  67.  
  68. <figure data-carousel-extra='{"blog_id":1,"permalink":"https:\/\/andrewferguson.net\/2022\/08\/23\/feit-shop-4-ho-cct-ag-teardown\/"}'  class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
  69. <figure class="wp-block-image size-large"><img decoding="async" width="2560" height="1715" data-attachment-id="15645" data-permalink="https://andrewferguson.net/2022/08/23/feit-shop-4-ho-cct-ag-teardown/top-side-call-outs/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/08/Top-side-call-outs-scaled.jpg" data-orig-size="2560,1715" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="Top-side-call-outs" data-image-description="" data-image-caption="&lt;p&gt;Top side&lt;/p&gt;
  70. " data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/08/Top-side-call-outs-300x201.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/08/Top-side-call-outs-1024x686.jpg" data-id="15645" src="https://andrewferguson.net/wp-content/uploads/2022/08/Top-side-call-outs-scaled.jpg" alt="" class="wp-image-15645" srcset="https://andrewferguson.net/wp-content/uploads/2022/08/Top-side-call-outs-scaled.jpg 2560w, https://andrewferguson.net/wp-content/uploads/2022/08/Top-side-call-outs-300x201.jpg 300w, https://andrewferguson.net/wp-content/uploads/2022/08/Top-side-call-outs-1024x686.jpg 1024w, https://andrewferguson.net/wp-content/uploads/2022/08/Top-side-call-outs-768x515.jpg 768w, https://andrewferguson.net/wp-content/uploads/2022/08/Top-side-call-outs-1536x1029.jpg 1536w, https://andrewferguson.net/wp-content/uploads/2022/08/Top-side-call-outs-2048x1372.jpg 2048w, https://andrewferguson.net/wp-content/uploads/2022/08/Top-side-call-outs-1320x884.jpg 1320w" sizes="(max-width: 2560px) 100vw, 2560px" /><figcaption>Top side</figcaption></figure>
  71.  
  72.  
  73.  
  74. <figure class="wp-block-image"><img decoding="async" width="2560" height="1683" data-attachment-id="15621" data-permalink="https://andrewferguson.net/2022/08/23/feit-shop-4-ho-cct-ag-teardown/backside-call-outs-copy/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/08/Backside-call-outs-copy-scaled.jpg" data-orig-size="2560,1683" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="Backside-call-outs-copy" data-image-description="" data-image-caption="&lt;p&gt;Bottom side&lt;/p&gt;
  75. " data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/08/Backside-call-outs-copy-300x197.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/08/Backside-call-outs-copy-1024x673.jpg" data-id="15621" src="https://andrewferguson.net/wp-content/uploads/2022/08/Backside-call-outs-copy-scaled.jpg" alt="" class="wp-image-15621" srcset="https://andrewferguson.net/wp-content/uploads/2022/08/Backside-call-outs-copy-scaled.jpg 2560w, https://andrewferguson.net/wp-content/uploads/2022/08/Backside-call-outs-copy-300x197.jpg 300w, https://andrewferguson.net/wp-content/uploads/2022/08/Backside-call-outs-copy-1024x673.jpg 1024w, https://andrewferguson.net/wp-content/uploads/2022/08/Backside-call-outs-copy-768x505.jpg 768w, https://andrewferguson.net/wp-content/uploads/2022/08/Backside-call-outs-copy-1536x1010.jpg 1536w, https://andrewferguson.net/wp-content/uploads/2022/08/Backside-call-outs-copy-2048x1346.jpg 2048w, https://andrewferguson.net/wp-content/uploads/2022/08/Backside-call-outs-copy-1320x868.jpg 1320w" sizes="(max-width: 2560px) 100vw, 2560px" /><figcaption>Bottom side</figcaption></figure>
  76. </figure>
  77.  
  78.  
  79.  
  80. <h3 class="wp-block-heading">WB2L (BK7231T chip)</h3>
  81.  
  82.  
  83.  
  84. <p><meta http-equiv="content-type" content="text/html; charset=utf-8"><strong>Manufacturer</strong>: Tuya</p>
  85.  
  86.  
  87.  
  88. <p><strong>P/N:</strong> <a href="https://developer.tuya.com/en/docs/iot/wb2l-datasheet?id=K9duegc9bualu">WB2L</a> (BK7231T chip)</p>
  89.  
  90.  
  91.  
  92. <p><strong>Function: </strong>Low-power embedded Wi-Fi and Bluetooth LE module. The chip is on a daughter board which is solder to the main board perpendicularly through a thru hole. There&#8217;s a switch that overrides the WB2L (and removes power from it!) and sets the light to cool white (not cold) color.</p>
  93.  
  94.  
  95.  
  96. <figure class="wp-block-image size-full"><img decoding="async" width="752" height="480" data-attachment-id="15656" data-permalink="https://andrewferguson.net/2022/08/23/feit-shop-4-ho-cct-ag-teardown/7a1353295a9f4bf38c0d404209b403d5/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/08/7a1353295a9f4bf38c0d404209b403d5.png" data-orig-size="752,480" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="7a1353295a9f4bf38c0d404209b403d5" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/08/7a1353295a9f4bf38c0d404209b403d5-300x191.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/08/7a1353295a9f4bf38c0d404209b403d5.png" src="https://andrewferguson.net/wp-content/uploads/2022/08/7a1353295a9f4bf38c0d404209b403d5.png" alt="" class="wp-image-15656" srcset="https://andrewferguson.net/wp-content/uploads/2022/08/7a1353295a9f4bf38c0d404209b403d5.png 752w, https://andrewferguson.net/wp-content/uploads/2022/08/7a1353295a9f4bf38c0d404209b403d5-300x191.png 300w" sizes="(max-width: 752px) 100vw, 752px" /></figure>
  97.  
  98.  
  99.  
  100. <figure class="wp-block-table"><table><thead><tr><th>Pin No.</th><th>Symbol</th><th>I/O type</th><th>BK7231T Function</th><th>Use</th></tr></thead><tbody><tr><td>1</td><td>PWM2</td><td>I/O</td><td>Hardware PWM pin; P8/BT_ACTIVE/PWM2 (Pin24)</td><td>Dimmer</td></tr><tr><td>2</td><td>PWM1</td><td>I/O</td><td>Hardware PWM pin; P7/WIFI_ACTIVE/PWM1 (Pin23)</td><td>Color Temperature</td></tr><tr><td>3</td><td>PWM0</td><td>I/O</td><td>Hardware PWM pin; P6/CLK13M/PWM0 (Pin22)</td><td>No Connect</td></tr><tr><td>4</td><td>PWM5</td><td>I/O</td><td>Hardware PWM pin; P26/IRDA/PWM5 (Pin15)</td><td>Unknown</td></tr><tr><td>5</td><td>PWM4</td><td>I/O</td><td>Hardware PWM pin; P24/LPO_CLK/PWM4 (Pin16)</td><td>No Connect</td></tr><tr><td>6</td><td>GND</td><td>P</td><td>Ground pin</td><td>GND</td></tr><tr><td>7</td><td>3V3</td><td>P</td><td>Power supply pin (3.3 V)</td><td>3.3 V</td></tr></tbody></table></figure>
  101.  
  102.  
  103.  
  104. <p>For this light, here&#8217;s what my probing found:</p>
  105.  
  106.  
  107.  
  108. <ul><li>PWM1: 0% duty cycle is full Cold and 100% duty cycle is full Warm</li><li>PWM2: 0% duty cycle is off and 100% duty cycle is full brightness.</li><li>PWM5: Unknown if this is an input or an output. With the stock Feit firmware:<ul><li>Logic 0: when the light is on</li><li>Logic 1: when the light is off</li></ul></li></ul>
  109.  
  110.  
  111.  
  112. <h3 class="wp-block-heading">BP2525</h3>
  113.  
  114.  
  115.  
  116. <p><strong>Manufacturer:</strong> Bright Power Semiconductor</p>
  117.  
  118.  
  119.  
  120. <p><strong>P/N: </strong>BP2525</p>
  121.  
  122.  
  123.  
  124. <p><strong>Function: </strong>Non-isolated step-down type AC/DC Constant Voltage chip&#8230;power for the LEDs that is then current controlled by the BP2929 (for color temperature) and BP5012 (for dimming).</p>
  125.  
  126.  
  127.  
  128. <div class="wp-block-file"><a id="wp-block-file--media-624788ba-edd7-493b-92db-dae4a9f99351" href="https://andrewferguson.net/wp-content/uploads/2022/08/BP2525_EN.pdf">BP2525_EN</a><a href="https://andrewferguson.net/wp-content/uploads/2022/08/BP2525_EN.pdf" class="wp-block-file__button" download aria-describedby="wp-block-file--media-624788ba-edd7-493b-92db-dae4a9f99351">Datasheet</a></div>
  129.  
  130.  
  131.  
  132. <h3 class="wp-block-heading">BP5929</h3>
  133.  
  134.  
  135.  
  136. <p><strong>Manufacturer</strong>: Bright Power Semiconductor</p>
  137.  
  138.  
  139.  
  140. <p><strong>P/N: </strong>BP5929</p>
  141.  
  142.  
  143.  
  144. <p><strong>Function:</strong> Dual-channel PWM color matching chip<sup id="rf1-15615"><a href="https://andrewferguson.net/2022/08/23/feit-shop-4-ho-cct-ag-teardown/#fn1-15615" title="This is a Google Translation&#8230;so may not be exactly accurate" rel="footnote">1</a></sup></p>
  145.  
  146.  
  147.  
  148. <p>This is an interesting chip, and I&#8217;m not quite sure why they&#8217;re using it. Normally, the microcontroller would output two PWM signals: one for Cool White and one for Warm White, and they would each drive a MOSFET and then dimming is handled algorithmically by the microcontroller. This chips seems to offload that functionality (sort of; this chip doesn&#8217;t actually handle dimming itself, but rather in combination with a separate current control method &#8212; which I believe is the BP5012 in this design), but I&#8217;m not sure why&#8230;the microcontroller can do all of this easily. My one thought is that maybe this method reduces flicker because it&#8217;s relies of constant voltage instead of using PWM to vary the voltage.</p>
  149.  
  150.  
  151.  
  152. <figure class="wp-block-image size-full"><img decoding="async" width="679" height="556" data-attachment-id="15660" data-permalink="https://andrewferguson.net/2022/08/23/feit-shop-4-ho-cct-ag-teardown/image-24/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/08/image.png" data-orig-size="679,556" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/08/image-300x246.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/08/image.png" src="https://andrewferguson.net/wp-content/uploads/2022/08/image.png" alt="" class="wp-image-15660" srcset="https://andrewferguson.net/wp-content/uploads/2022/08/image.png 679w, https://andrewferguson.net/wp-content/uploads/2022/08/image-300x246.png 300w" sizes="(max-width: 679px) 100vw, 679px" /></figure>
  153.  
  154.  
  155.  
  156. <figure class="wp-block-table is-style-stripes"><table><thead><tr><th class="has-text-align-center" data-align="center">Pin Number</th><th class="has-text-align-center" data-align="center">Name</th><th>Description</th></tr></thead><tbody><tr><td class="has-text-align-center" data-align="center">1</td><td class="has-text-align-center" data-align="center">VH</td><td>High-voltage side power supply terminal</td></tr><tr><td class="has-text-align-center" data-align="center">2</td><td class="has-text-align-center" data-align="center">VS</td><td>High pressure side floating</td></tr><tr><td class="has-text-align-center" data-align="center">3</td><td class="has-text-align-center" data-align="center">OUT2</td><td>Output GATE signal 2</td></tr><tr><td class="has-text-align-center" data-align="center">4</td><td class="has-text-align-center" data-align="center">OUT1</td><td>Output GATE signal 1</td></tr><tr><td class="has-text-align-center" data-align="center">5</td><td class="has-text-align-center" data-align="center">NC</td><td>Not Connected</td></tr><tr><td class="has-text-align-center" data-align="center">6</td><td class="has-text-align-center" data-align="center">PWM</td><td>PWM Signal Input</td></tr><tr><td class="has-text-align-center" data-align="center">7</td><td class="has-text-align-center" data-align="center">VCC</td><td>Low voltage power supply</td></tr><tr><td class="has-text-align-center" data-align="center">8</td><td class="has-text-align-center" data-align="center">GND</td><td>Ground</td></tr></tbody></table><figcaption>Google translation of datasheet&#8230;so may not be exactly accurate</figcaption></figure>
  157.  
  158.  
  159.  
  160. <div class="wp-block-file"><a id="wp-block-file--media-438ee979-8259-4420-a454-61177222a058" href="https://andrewferguson.net/wp-content/uploads/2022/08/BP5929_ZH.pdf">BP5929_ZH</a><a href="https://andrewferguson.net/wp-content/uploads/2022/08/BP5929_ZH.pdf" class="wp-block-file__button" download aria-describedby="wp-block-file--media-438ee979-8259-4420-a454-61177222a058">Datasheet</a></div>
  161.  
  162.  
  163.  
  164. <h3 class="wp-block-heading">BP5012</h3>
  165.  
  166.  
  167.  
  168. <p><strong>Manufacturer</strong>: Bright Power Semiconductor</p>
  169.  
  170.  
  171.  
  172. <p><strong>P/N: </strong>BP5012 or BP501 (maybe)</p>
  173.  
  174.  
  175.  
  176. <p><strong>Function:</strong> PWM dimming interface converter (probably)</p>
  177.  
  178.  
  179.  
  180. <p>I couldn&#8217;t find a datasheet for BP5012 or BP501. There is a BP5011 though, which is a 2 channel PWM dimming controller. So I suspect it&#8217;s related to that.</p>
  181.  
  182.  
  183.  
  184. <div class="wp-block-file"><a id="wp-block-file--media-c749c024-ce8c-4089-a1fb-f07d7afe8ca7" href="https://andrewferguson.net/wp-content/uploads/2022/08/BP5011_ZH.pdf">BP5011_ZH</a><a href="https://andrewferguson.net/wp-content/uploads/2022/08/BP5011_ZH.pdf" class="wp-block-file__button" download aria-describedby="wp-block-file--media-c749c024-ce8c-4089-a1fb-f07d7afe8ca7">Datasheet</a></div>
  185.  
  186.  
  187.  
  188. <h3 class="wp-block-heading">JW1606</h3>
  189.  
  190.  
  191.  
  192. <p><strong>Manufacturer</strong>: Joulwatt</p>
  193.  
  194.  
  195.  
  196. <p><strong>P/N: </strong>JW1602</p>
  197.  
  198.  
  199.  
  200. <p><strong>Function:</strong> Non-isolated switching regulator with dimming</p>
  201.  
  202.  
  203.  
  204. <p>The package is marked JW1606, but JW1606 doesn&#8217;t exist. I&#8217;m assuming this is related to the JW1602, which I <em>was</em> able to find a datasheet for.</p>
  205.  
  206.  
  207.  
  208. <p>The JW1602 has dimming function, so I&#8217;m not sure why the duplicate functionality with the BP5012. The BP2525 is also a non-isolated switching regulator as well. So my theory is that there&#8217;s two completely separate control circuits on the PCB, one to provide variable control of color temperature and intensity when the microcontroller is active and another circuit that provides fixed color temperature (probably just 50/50) and a fixed dimming level (set by a voltage divider).</p>
  209.  
  210.  
  211.  
  212. <div class="wp-block-file"><a id="wp-block-file--media-66e810bb-6919-44e9-8135-6c0870801d15" href="https://andrewferguson.net/wp-content/uploads/2022/08/JW1602_EN.pdf">JW1602_EN</a><a href="https://andrewferguson.net/wp-content/uploads/2022/08/JW1602_EN.pdf" class="wp-block-file__button" download aria-describedby="wp-block-file--media-66e810bb-6919-44e9-8135-6c0870801d15">Datasheet</a></div>
  213.  
  214.  
  215.  
  216. <h3 class="wp-block-heading">GBU 4J</h3>
  217.  
  218.  
  219.  
  220. <p><strong>Manufacturer</strong>: onSemi</p>
  221.  
  222.  
  223.  
  224. <p><strong>P/N:</strong> GBU4J</p>
  225.  
  226.  
  227.  
  228. <p><strong>Function:</strong> Bridge Rectifier. Probably for input to both of the non-isolated switching regulators (BP2525 and JW1606).</p>
  229.  
  230.  
  231.  
  232. <div class="wp-block-file"><a id="wp-block-file--media-dda6cf67-4db3-4b94-865a-c81ad8ac8a59" href="https://andrewferguson.net/wp-content/uploads/2022/08/GBU4M-D.pdf">GBU4M-D</a><a href="https://andrewferguson.net/wp-content/uploads/2022/08/GBU4M-D.pdf" class="wp-block-file__button" download aria-describedby="wp-block-file--media-dda6cf67-4db3-4b94-865a-c81ad8ac8a59">Datasheet</a></div>
  233.  
  234.  
  235.  
  236. <h3 class="wp-block-heading">CRJF380N65G2</h3>
  237.  
  238.  
  239.  
  240. <p><strong>Manufacturer</strong>: CR Micro</p>
  241.  
  242.  
  243.  
  244. <p><strong>P/N:</strong> CRJF380N65G2</p>
  245.  
  246.  
  247.  
  248. <p><strong>Function:</strong> SJ-MOS N-MOSFET. I think this is used only when the unit is in &#8220;dumb&#8221; mode and provides the variable current control for all 504 LEDs.</p>
  249.  
  250.  
  251.  
  252. <div class="wp-block-file"><a id="wp-block-file--media-5c499a3a-c065-4af8-a610-95eaaa21574b" href="https://andrewferguson.net/wp-content/uploads/2022/08/CRJF380N65G2.pdf">CRJF380N65G2</a><a href="https://andrewferguson.net/wp-content/uploads/2022/08/CRJF380N65G2.pdf" class="wp-block-file__button" download aria-describedby="wp-block-file--media-5c499a3a-c065-4af8-a610-95eaaa21574b">Datasheet</a></div>
  253.  
  254.  
  255.  
  256. <h3 class="wp-block-heading">SVF4N65F</h3>
  257.  
  258.  
  259.  
  260. <p><meta http-equiv="content-type" content="text/html; charset=utf-8"><strong>Manufacturer</strong>: Silan Microelectronics</p>
  261.  
  262.  
  263.  
  264. <p><strong>P/N</strong>: SVF4N65F</p>
  265.  
  266.  
  267.  
  268. <p><strong>Function:</strong> N-CHANNEL MOSFET. There&#8217;s two of these that are directly connected to the LEDs themselves, one for each color temperature. These are probably driven by the BP5929 to control the current for each set of LEDs. </p>
  269.  
  270.  
  271.  
  272. <div class="wp-block-file"><a id="wp-block-file--media-1a1e8489-965c-442f-9178-99d41c0b2212" href="https://andrewferguson.net/wp-content/uploads/2022/08/SVF4N65FMMJD-Datasheet_3.7.pdf">SVF4N65FMMJD-Datasheet_3.7</a><a href="https://andrewferguson.net/wp-content/uploads/2022/08/SVF4N65FMMJD-Datasheet_3.7.pdf" class="wp-block-file__button" download aria-describedby="wp-block-file--media-1a1e8489-965c-442f-9178-99d41c0b2212">Datasheet</a></div>
  273.  
  274.  
  275.  
  276. <h3 class="wp-block-heading">7002</h3>
  277.  
  278.  
  279.  
  280. <p><strong>Manufacturer</strong>: CT Micro</p>
  281.  
  282.  
  283.  
  284. <p><strong>P/N</strong>: CT2N7002E-R3</p>
  285.  
  286.  
  287.  
  288. <p><strong>Function:</strong> N-Channel Enhancement MOSFET. I think this is somehow related to the mysterious function of PWM5.</p>
  289.  
  290.  
  291.  
  292. <div class="wp-block-file"><a id="wp-block-file--media-a8549c03-bbbb-4ad0-bb77-7db96289d5aa" href="https://andrewferguson.net/wp-content/uploads/2022/08/CT2N7002E-R3.pdf">CT2N7002E-R3</a><a href="https://andrewferguson.net/wp-content/uploads/2022/08/CT2N7002E-R3.pdf" class="wp-block-file__button" download aria-describedby="wp-block-file--media-a8549c03-bbbb-4ad0-bb77-7db96289d5aa">Datasheet</a></div>
  293.  
  294.  
  295.  
  296. <h3 class="wp-block-heading">Disassembly</h3>
  297.  
  298.  
  299.  
  300. <figure data-carousel-extra='{"blog_id":1,"permalink":"https:\/\/andrewferguson.net\/2022\/08\/23\/feit-shop-4-ho-cct-ag-teardown\/"}'  class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex">
  301. <figure class="wp-block-image size-large"><img decoding="async" width="1334" height="750" data-attachment-id="15647" data-permalink="https://andrewferguson.net/img_5059/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/08/img_5059.jpg" data-orig-size="1334,750" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="img_5059" data-image-description="" data-image-caption="&lt;p&gt;Remove screws and cable clamp&lt;/p&gt;
  302. " data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/08/img_5059-300x169.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/08/img_5059-1024x576.jpg" data-id="15647" src="https://andrewferguson.net/wp-content/uploads/2022/08/img_5059.jpg" alt="" class="wp-image-15647" srcset="https://andrewferguson.net/wp-content/uploads/2022/08/img_5059.jpg 1334w, https://andrewferguson.net/wp-content/uploads/2022/08/img_5059-300x169.jpg 300w, https://andrewferguson.net/wp-content/uploads/2022/08/img_5059-1024x576.jpg 1024w, https://andrewferguson.net/wp-content/uploads/2022/08/img_5059-768x432.jpg 768w, https://andrewferguson.net/wp-content/uploads/2022/08/img_5059-1320x742.jpg 1320w" sizes="(max-width: 1334px) 100vw, 1334px" /><figcaption>Remove screws and cable clamp</figcaption></figure>
  303.  
  304.  
  305.  
  306. <figure class="wp-block-image size-large"><img decoding="async" width="2560" height="1920" data-attachment-id="15650" data-permalink="https://andrewferguson.net/img_4953/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/08/img_4953-scaled.jpg" data-orig-size="2560,1920" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;1.8&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;iPhone SE (2nd generation)&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1660159003&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;3.99&quot;,&quot;iso&quot;:&quot;200&quot;,&quot;shutter_speed&quot;:&quot;0.016666666666667&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="img_4953" data-image-description="" data-image-caption="&lt;p&gt;Slide out PCB&lt;/p&gt;
  307. " data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/08/img_4953-300x225.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/08/img_4953-1024x768.jpg" data-id="15650" src="https://andrewferguson.net/wp-content/uploads/2022/08/img_4953-scaled.jpg" alt="" class="wp-image-15650" srcset="https://andrewferguson.net/wp-content/uploads/2022/08/img_4953-scaled.jpg 2560w, https://andrewferguson.net/wp-content/uploads/2022/08/img_4953-300x225.jpg 300w, https://andrewferguson.net/wp-content/uploads/2022/08/img_4953-1024x768.jpg 1024w, https://andrewferguson.net/wp-content/uploads/2022/08/img_4953-768x576.jpg 768w, https://andrewferguson.net/wp-content/uploads/2022/08/img_4953-1536x1152.jpg 1536w, https://andrewferguson.net/wp-content/uploads/2022/08/img_4953-2048x1536.jpg 2048w, https://andrewferguson.net/wp-content/uploads/2022/08/img_4953-1320x990.jpg 1320w" sizes="(max-width: 2560px) 100vw, 2560px" /><figcaption>Slide out PCB</figcaption></figure>
  308. </figure>
  309.  
  310.  
  311.  
  312. <p>BK7231T is pretty straight forward:</p>
  313.  
  314.  
  315.  
  316. <ol><li>Remove two screws from cord side (red circles)</li><li>Remove cord clamp (green circle)</li><li>Slide the the PCB out from its slot<br>Note: this might require scrapping some of the potting compound used to the secure the PCB into the slot. Pushing gently from the end using the switch usually pops it out</li></ol>
  317.  
  318.  
  319.  
  320. <h2 class="wp-block-heading">Flashing</h2>
  321.  
  322.  
  323.  
  324. <p>I flashed the unit with <a href="https://github.com/openshwprojects/OpenBK7231T_App">OpenBK7231T/OpenBeken</a>, which <a href="https://github.com/openshwprojects/OpenBK7231T_App/issues/155">now supports this light</a>. I followed the UART instructions, which requires using <a href="https://github.com/OpenBekenIOT/hid_download_py">https://github.com/OpenBekenIOT/hid_download_py</a>. </p>
  325.  
  326.  
  327.  
  328. <p>I used a <a href="https://amzn.to/3R96pXP">USB to Serial USB to TTL CH340G</a> to program the chip. Once the PCB is removed, make the following connections:</p>
  329.  
  330.  
  331.  
  332. <ul><li>Connect computer TX to U1_RXD (Top side: red arrow)</li><li>Connect computer RX to U1_TXD (Top side: green arrow)</li><li>Connect a wire to the RST (Top side: magenta arrow), when you&#8217;re ready to program you&#8217;ll briefly connecting this to ground to reset the chip.</li><li>Connect 3.3 volts to 3V3 (Bottom side: red arrow)</li><li>Connect ground to GND (Bottom side: black arrow)</li></ul>
  333.  
  334.  
  335.  
  336. <figure data-carousel-extra='{"blog_id":1,"permalink":"https:\/\/andrewferguson.net\/2022\/08\/23\/feit-shop-4-ho-cct-ag-teardown\/"}'  class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex">
  337. <figure class="wp-block-image size-large"><img decoding="async" width="780" height="611" data-attachment-id="15625" data-permalink="https://andrewferguson.net/2022/08/23/feit-shop-4-ho-cct-ag-teardown/programming-pins/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/08/programming-pins.jpg" data-orig-size="780,611" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;1.8&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;iPhone SE (2nd generation)&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1660212959&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;3.99&quot;,&quot;iso&quot;:&quot;20&quot;,&quot;shutter_speed&quot;:&quot;0.016666666666667&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="programming-pins" data-image-description="" data-image-caption="&lt;p&gt;Connect TX, RX, and Reset&lt;/p&gt;
  338. " data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/08/programming-pins-300x235.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/08/programming-pins.jpg" data-id="15625" src="https://andrewferguson.net/wp-content/uploads/2022/08/programming-pins.jpg" alt="" class="wp-image-15625" srcset="https://andrewferguson.net/wp-content/uploads/2022/08/programming-pins.jpg 780w, https://andrewferguson.net/wp-content/uploads/2022/08/programming-pins-300x235.jpg 300w, https://andrewferguson.net/wp-content/uploads/2022/08/programming-pins-768x602.jpg 768w" sizes="(max-width: 780px) 100vw, 780px" /><figcaption>Top Side: Connect TX, RX, and Reset</figcaption></figure>
  339.  
  340.  
  341.  
  342. <figure class="wp-block-image size-large"><img decoding="async" width="1334" height="749" data-attachment-id="15649" data-permalink="https://andrewferguson.net/img_5060/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/08/img_5060.jpg" data-orig-size="1334,749" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="img_5060" data-image-description="" data-image-caption="&lt;p&gt;Connect 3.3V and Ground&lt;/p&gt;
  343. " data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/08/img_5060-300x168.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/08/img_5060-1024x575.jpg" data-id="15649" src="https://andrewferguson.net/wp-content/uploads/2022/08/img_5060.jpg" alt="" class="wp-image-15649" srcset="https://andrewferguson.net/wp-content/uploads/2022/08/img_5060.jpg 1334w, https://andrewferguson.net/wp-content/uploads/2022/08/img_5060-300x168.jpg 300w, https://andrewferguson.net/wp-content/uploads/2022/08/img_5060-1024x575.jpg 1024w, https://andrewferguson.net/wp-content/uploads/2022/08/img_5060-768x431.jpg 768w, https://andrewferguson.net/wp-content/uploads/2022/08/img_5060-1320x741.jpg 1320w" sizes="(max-width: 1334px) 100vw, 1334px" /><figcaption>Bottom Side: Connect 3.3V and Ground</figcaption></figure>
  344. </figure>
  345.  
  346.  
  347.  
  348. <h2 class="wp-block-heading">Outstanding Questions</h2>
  349.  
  350.  
  351.  
  352. <ul><li>What does PWM5 do?</li><li>Does power get cut to WB2L when switch is activated?</li><li>What are the other chips?</li><li>What chip is used for LED control?</li></ul>
  353. <hr class="footnotes"><ol class="footnotes" style="list-style-type:decimal"><li id="fn1-15615"><p >This is a Google Translation&#8230;so may not be exactly accurate&nbsp;<a href="https://andrewferguson.net/2022/08/23/feit-shop-4-ho-cct-ag-teardown/#rf1-15615" class="backlink" title="Return to footnote 1.">&#8617;</a></p></li></ol>]]></content:encoded>
  354. <post-id xmlns="com-wordpress:feed-additions:1">15615</post-id> </item>
  355. <item>
  356. <title>Plex Proxmox VM with NVIDIA GPU passthrough</title>
  357. <link>https://andrewferguson.net/2022/06/18/plex-proxmox-vm-with-nvidia-gpu-passthrough/</link>
  358. <comments>https://andrewferguson.net/2022/06/18/plex-proxmox-vm-with-nvidia-gpu-passthrough/#comments</comments>
  359. <dc:creator><![CDATA[Andrew]]></dc:creator>
  360. <pubDate>Sun, 19 Jun 2022 03:03:47 +0000</pubDate>
  361. <category><![CDATA[Technology's Infestation of my Life]]></category>
  362. <category><![CDATA[debian]]></category>
  363. <category><![CDATA[gpu]]></category>
  364. <category><![CDATA[gpu passthrough]]></category>
  365. <category><![CDATA[nvidia]]></category>
  366. <category><![CDATA[plex]]></category>
  367. <category><![CDATA[proxmox]]></category>
  368. <category><![CDATA[VM]]></category>
  369. <guid isPermaLink="false">https://andrewferguson.net/?p=15492</guid>
  370.  
  371. <description><![CDATA[Editors note: Last updated 12/26/2022 I&#8217;ve seen various parts of this documented on the internet, but I don&#8217;t think I&#8217;ve seen all the steps written down in one place, so in the interest of sharing and not banging my head next time I need to re-create my Plex VM: here&#8217;s how I was able to&#8230;&#160;<a href="https://andrewferguson.net/2022/06/18/plex-proxmox-vm-with-nvidia-gpu-passthrough/" class="" rel="bookmark">Read More &#187;<span class="screen-reader-text">Plex Proxmox VM with NVIDIA GPU passthrough</span></a>]]></description>
  372. <content:encoded><![CDATA[
  373. <p><em>Editors note: Last updated 12/26/2022</em></p>
  374.  
  375.  
  376.  
  377. <p>I&#8217;ve seen various parts of this documented on the internet, but I don&#8217;t think I&#8217;ve seen <em>all</em> the steps written down in one place, so in the interest of sharing and not banging my head next time I need to re-create my Plex VM: here&#8217;s how I was able to get my NVIDIA Quadro K620 GPU to work with my Plex VM running in Proxmox.</p>
  378.  
  379.  
  380.  
  381. <p>Here&#8217;s my setup:</p>
  382.  
  383.  
  384.  
  385. <ul>
  386. <li>Proxmox (<em>7.2-4 No-Subscription Repository</em>) using the <em>Linux 5.15.35-2-pve</em> kernel</li>
  387.  
  388.  
  389.  
  390. <li>Plex VM on Debian 10 using the <em>Linux 4.19.0-20-amd64</em> kernel</li>
  391.  
  392.  
  393.  
  394. <li>NVIDIA Quadro K620 GPU. Note: I&#8217;m only using this in headless mode for Plex transcoding.</li>
  395. </ul>
  396.  
  397.  
  398.  
  399. <p>The first part of the steps are based on <a href="https://3os.org/infrastructure/proxmox/gpu-passthrough/pgu-passthrough-to-vm/#proxmox-configuration-for-gpu-passthrough">https://3os.org/infrastructure/proxmox/gpu-passthrough/pgu-passthrough-to-vm/#proxmox-configuration-for-gpu-passthrough</a>. However, installing the Debian driver didn&#8217;t work. Maybe because I&#8217;m using Debian 10 and perhaps the NVIDIA v470 driver has a bug? I think there are some repo differences between Ubuntu and Debian.</p>
  400.  
  401.  
  402.  
  403. <h2 class="wp-block-heading">Proxmox Configuration for GPU Passthrough</h2>
  404.  
  405.  
  406.  
  407. <h3 class="wp-block-heading">Find GPU Bus Address and Device ID</h3>
  408.  
  409.  
  410.  
  411. <p>Find the PCI address of the GPU Device:</p>
  412.  
  413.  
  414. <div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
  415. lspci -nnv | grep VGA
  416. </pre></div>
  417.  
  418.  
  419. <p>We get:</p>
  420.  
  421.  
  422.  
  423. <pre class="wp-block-code"><code><code>0b:00.0 VGA compatible controller &#91;0300]: Matrox Electronics Systems Ltd. G200eR2 &#91;102b:0534] (prog-if 00 &#91;VGA controller])
  424. <strong>42:00.0</strong> VGA compatible controller &#91;0300]: NVIDIA Corporation GM107GL &#91;Quadro K620] &#91;10de:13bb] (rev a2) (prog-if 00 &#91;VGA controller]</code></code></pre>
  425.  
  426.  
  427.  
  428. <p>What we are looking is the PCI address of the <meta http-equiv="content-type" content="text/html; charset=utf-8">NVIDIA GPU device. In this case it&#8217;s <code>42:00.0</code>.<br><code>42:00.0</code> is only a part of of a group of PCI devices on the GPU.<br>We can list all the devices in the group <code>42:00</code> by using the following command:</p>
  429.  
  430.  
  431. <div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
  432. lspci -s 42:00
  433. </pre></div>
  434.  
  435.  
  436. <p>The usual output will include VGA Device and Audio Device, which is what I have:</p>
  437.  
  438.  
  439.  
  440. <pre class="wp-block-preformatted"><code>42:00.0 VGA compatible controller: NVIDIA Corporation GM107GL [Quadro K620] (rev a2)
  441. 42:00.1 Audio device: NVIDIA Corporation GM107 High Definition Audio Controller [GeForce 940MX] (rev a1)</code>
  442. </pre>
  443.  
  444.  
  445.  
  446. <p>Now we need to get the device ID&#8217;s of those devices. We can do this by using the following command:</p>
  447.  
  448.  
  449. <div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
  450. lspci -s 42:00 -n
  451. </pre></div>
  452.  
  453.  
  454. <p>The output should look similar to this:</p>
  455.  
  456.  
  457.  
  458. <pre class="wp-block-code"><code>42:00.0 0300: 10de:13bb (rev a2)
  459. 42:00.1 0403: 10de:0fbc (rev a1)</code></pre>
  460.  
  461.  
  462.  
  463. <p>What we are looking are the pairs, we will use those id to split the PCI Group to separate devices: <code>10de:13bb,10de:0fbc</code></p>
  464.  
  465.  
  466.  
  467. <h3 class="wp-block-heading">Edit grub</h3>
  468.  
  469.  
  470.  
  471. <p>Edit the <em>grub</em> configuration file at <code>/etc/default/grub</code></p>
  472.  
  473.  
  474.  
  475. <p>Find the line that starts with <code>GRUB_CMDLINE_LINUX_DEFAULT</code> and updated it to look like this (Intel CPU example) &#8212; replace <code>vfio-pci.ids=</code> with the ids for the GPU you want to passthrough:</p>
  476.  
  477.  
  478.  
  479. <pre class="wp-block-code"><code>GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on pcie_acs_override=downstream,multifunction video=efifb:off video=vesa:off vfio-pci.ids=10de:13bb,10de:0fb vfio_iommu_type1.allow_unsafe_interrupts=1 kvm.ignore_msrs=1 modprobe.blacklist=radeon,nouveau,nvidia,nvidiafb,nvidia-gpu"</code></pre>
  480.  
  481.  
  482.  
  483. <p>Note: if you have an AMD CPU, then use <code>amd_iommu=on</code> instead of <code>intel_iommu=on</code>.</p>
  484.  
  485.  
  486.  
  487. <p>Save the config changed and then update GRUB.</p>
  488.  
  489.  
  490. <div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
  491. update-grub
  492. </pre></div>
  493.  
  494.  
  495. <h3 class="wp-block-heading">Update modules</h3>
  496.  
  497.  
  498.  
  499. <p>Next we need to add <em>vfio</em> modules to allow PCI passthrough. Edit the <code>/etc/modules</code> file and add the following line to the end of the file:</p>
  500.  
  501.  
  502.  
  503. <pre class="wp-block-code"><code># Modules required for PCI passthrough
  504. vfio
  505. vfio_iommu_type1
  506. vfio_pci
  507. vfio_virqfd</code></pre>
  508.  
  509.  
  510.  
  511. <p>Update configuration changes made in your /etc filesystem</p>
  512.  
  513.  
  514. <div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
  515. update-initramfs -u -k all
  516. </pre></div>
  517.  
  518.  
  519. <h3 class="wp-block-heading">Reboot and verify</h3>
  520.  
  521.  
  522.  
  523. <p><strong>Reboot Proxmox to apply the changes</strong></p>
  524.  
  525.  
  526.  
  527. <p>Verify that IOMMU is enabled</p>
  528.  
  529.  
  530. <div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
  531. dmesg | grep -e DMAR -e IOMMU
  532.  
  533. </pre></div>
  534.  
  535.  
  536. <p>There should be a line that looks like <code>DMAR: IOMMU enabled</code>. If there is no output, something is wrong.</p>
  537.  
  538.  
  539.  
  540. <p>Your Proxmox host should be ready to GPU passthrough!</p>
  541.  
  542.  
  543.  
  544. <h2 class="wp-block-heading">Debian 10 VM GPU Passthrough Configuration</h2>
  545.  
  546.  
  547.  
  548. <h3 class="wp-block-heading">VM Setup</h3>
  549.  
  550.  
  551.  
  552. <p>I&#8217;m using Debian 10 as my VM.</p>
  553.  
  554.  
  555.  
  556. <p>For best performance the VM should be configured the <em>Machine</em> type to <code>q35</code>. This will allow the VM to utilize PCI-Express passthrough.</p>
  557.  
  558.  
  559.  
  560. <figure class="wp-block-image size-large"><img decoding="async" width="1024" height="494" data-attachment-id="15509" data-permalink="https://andrewferguson.net/2022/06/18/plex-proxmox-vm-with-nvidia-gpu-passthrough/image-1-4/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/06/image-1.png" data-orig-size="1642,792" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-1" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/06/image-1-300x145.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/06/image-1-1024x494.png" src="https://andrewferguson.net/wp-content/uploads/2022/06/image-1-1024x494.png" alt="" class="wp-image-15509" srcset="https://andrewferguson.net/wp-content/uploads/2022/06/image-1-1024x494.png 1024w, https://andrewferguson.net/wp-content/uploads/2022/06/image-1-300x145.png 300w, https://andrewferguson.net/wp-content/uploads/2022/06/image-1-768x370.png 768w, https://andrewferguson.net/wp-content/uploads/2022/06/image-1-1536x741.png 1536w, https://andrewferguson.net/wp-content/uploads/2022/06/image-1-1320x637.png 1320w, https://andrewferguson.net/wp-content/uploads/2022/06/image-1.png 1642w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
  561.  
  562.  
  563.  
  564. <p>Add a PCI device to the VM (Add &gt; PCI Device). Select the GPU Device, which you can find using it’s PCI address from before (42:00, in this example). Note: This list uses a different format for the PCI addresses id, <code>42:00.0</code> is listed as <code>0000:42:00.0</code></p>
  565.  
  566.  
  567.  
  568. <p>Select:</p>
  569.  
  570.  
  571.  
  572. <ul>
  573. <li><em>All Functions</em></li>
  574.  
  575.  
  576.  
  577. <li><em>ROM-Bar</em></li>
  578.  
  579.  
  580.  
  581. <li>PCI-Epress</li>
  582. </ul>
  583.  
  584.  
  585.  
  586. <p>&#8230;and then select <em>Add</em>. Note: Do <em>not</em> select Primary GPU.</p>
  587.  
  588.  
  589.  
  590. <figure class="wp-block-image size-large"><img decoding="async" width="1024" height="447" data-attachment-id="15510" data-permalink="https://andrewferguson.net/2022/06/18/plex-proxmox-vm-with-nvidia-gpu-passthrough/image-2-3/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/06/image-2.png" data-orig-size="1236,540" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-2" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/06/image-2-300x131.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/06/image-2-1024x447.png" src="https://andrewferguson.net/wp-content/uploads/2022/06/image-2-1024x447.png" alt="" class="wp-image-15510" srcset="https://andrewferguson.net/wp-content/uploads/2022/06/image-2-1024x447.png 1024w, https://andrewferguson.net/wp-content/uploads/2022/06/image-2-300x131.png 300w, https://andrewferguson.net/wp-content/uploads/2022/06/image-2-768x336.png 768w, https://andrewferguson.net/wp-content/uploads/2022/06/image-2.png 1236w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
  591.  
  592.  
  593.  
  594. <p>Boot the VM. To test the GPU passthrough was successful, you can use the following command in the VM: </p>
  595.  
  596.  
  597. <div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
  598. sudo lspci -nnv | grep VGA
  599. </pre></div>
  600.  
  601.  
  602. <p>The output should include the GPU:</p>
  603.  
  604.  
  605.  
  606. <pre class="wp-block-code"><code>00:01.0 VGA compatible controller &#91;0300]: Device &#91;1234:1111] (rev 02) (prog-if 00 &#91;VGA controller])
  607. 01:00.0 VGA compatible controller &#91;0300]: NVIDIA Corporation GM107GL &#91;Quadro K620] &#91;10de:13bb] (rev a2) (prog-if 00 &#91;VGA controller])</code></pre>
  608.  
  609.  
  610.  
  611. <h3 class="wp-block-heading">Download <meta http-equiv="content-type" content="text/html; charset=utf-8">NVIDIA Driver</h3>
  612.  
  613.  
  614.  
  615. <p><ins datetime="2022-12-05T00:40:00+000">Before we install the NVIDIA driver, we need to install the linux header files</ins> <ins datetime="2022-12-27T03:21:00+000">and <a href="https://askubuntu.com/a/496146">dkms so when the linux kernel is updated the NVIDIA driver will automatically recompile</a></ins></p>
  616.  
  617.  
  618.  
  619. <pre id="xterm" class="wp-block-preformatted"><code>sudo apt-get install dkms linux-headers-$(uname -r)</code></pre>
  620.  
  621.  
  622.  
  623. <p>Now we need to install the GPU Driver, and this is where things diverge from the instructions on 3os.org.</p>
  624.  
  625.  
  626.  
  627. <p>Go to <a href="https://www.nvidia.com/Download/index.aspx?lang=en-us">https://www.nvidia.com/Download/index.aspx?lang=en-us</a> and search for the driver you need:</p>
  628.  
  629.  
  630.  
  631. <figure class="wp-block-image size-large"><img decoding="async" width="1024" height="560" data-attachment-id="15511" data-permalink="https://andrewferguson.net/2022/06/18/plex-proxmox-vm-with-nvidia-gpu-passthrough/image-3-3/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/06/image-3.png" data-orig-size="1162,636" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-3" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/06/image-3-300x164.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/06/image-3-1024x560.png" src="https://andrewferguson.net/wp-content/uploads/2022/06/image-3-1024x560.png" alt="" class="wp-image-15511" srcset="https://andrewferguson.net/wp-content/uploads/2022/06/image-3-1024x560.png 1024w, https://andrewferguson.net/wp-content/uploads/2022/06/image-3-300x164.png 300w, https://andrewferguson.net/wp-content/uploads/2022/06/image-3-768x420.png 768w, https://andrewferguson.net/wp-content/uploads/2022/06/image-3.png 1162w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
  632.  
  633.  
  634.  
  635. <p>Your search will come up with a file you can download to your Plex VM (right-click the download link to copy the download URL)</p>
  636.  
  637.  
  638.  
  639. <figure class="wp-block-image size-full"><img decoding="async" width="990" height="380" data-attachment-id="15512" data-permalink="https://andrewferguson.net/2022/06/18/plex-proxmox-vm-with-nvidia-gpu-passthrough/image-4-3/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/06/image-4.png" data-orig-size="990,380" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-4" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/06/image-4-300x115.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/06/image-4.png" src="https://andrewferguson.net/wp-content/uploads/2022/06/image-4.png" alt="" class="wp-image-15512" srcset="https://andrewferguson.net/wp-content/uploads/2022/06/image-4.png 990w, https://andrewferguson.net/wp-content/uploads/2022/06/image-4-300x115.png 300w, https://andrewferguson.net/wp-content/uploads/2022/06/image-4-768x295.png 768w" sizes="(max-width: 990px) 100vw, 990px" /></figure>
  640.  
  641.  
  642.  
  643. <p>I used the following file: <a href="https://www.nvidia.com/content/DriverDownload-March2009/confirmation.php?url=/XFree86/Linux-x86_64/515.48.07/NVIDIA-Linux-x86_64-515.48.07.run&amp;lang=us&amp;type=TITAN">https://www.nvidia.com/content/DriverDownload-March2009/confirmation.php?url=/XFree86/Linux-x86_64/515.48.07/NVIDIA-Linux-x86_64-515.48.07.run&amp;lang=us&amp;type=TITAN</a></p>
  644.  
  645.  
  646.  
  647. <p>It doesn&#8217;t matter where you save it, since you can delete it once you&#8217;re done installing the driver.</p>
  648.  
  649.  
  650.  
  651. <h3 class="wp-block-heading">Install <meta http-equiv="content-type" content="text/html; charset=utf-8">NVIDIA Driver</h3>
  652.  
  653.  
  654.  
  655. <p>You will need to <code>chmod +x</code> the file so you can execute it. Then execute the file <ins datetime="2022-12-27T03:21:00+000">with the DKMS flag (e.g. <code>sudo sh ./NVIDIA-Linux-x86_64-515.48.07.run --dkms</code>)</ins>.</p>
  656.  
  657.  
  658.  
  659. <figure class="wp-block-image size-large"><img decoding="async" width="1024" height="624" data-attachment-id="15513" data-permalink="https://andrewferguson.net/2022/06/18/plex-proxmox-vm-with-nvidia-gpu-passthrough/1_building_kernal_modules/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/06/1_building_kernal_modules.png" data-orig-size="1792,1092" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="1_building_kernal_modules" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/06/1_building_kernal_modules-300x183.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/06/1_building_kernal_modules-1024x624.png" src="https://andrewferguson.net/wp-content/uploads/2022/06/1_building_kernal_modules-1024x624.png" alt="" class="wp-image-15513" srcset="https://andrewferguson.net/wp-content/uploads/2022/06/1_building_kernal_modules-1024x624.png 1024w, https://andrewferguson.net/wp-content/uploads/2022/06/1_building_kernal_modules-300x183.png 300w, https://andrewferguson.net/wp-content/uploads/2022/06/1_building_kernal_modules-768x468.png 768w, https://andrewferguson.net/wp-content/uploads/2022/06/1_building_kernal_modules-1536x936.png 1536w, https://andrewferguson.net/wp-content/uploads/2022/06/1_building_kernal_modules-1320x804.png 1320w, https://andrewferguson.net/wp-content/uploads/2022/06/1_building_kernal_modules.png 1792w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Building the kernel modules</figcaption></figure>
  660.  
  661.  
  662.  
  663. <p>You might get a warning, which you can acknowledge. It didn&#8217;t seem to cause an issue for me.</p>
  664.  
  665.  
  666.  
  667. <figure class="wp-block-image size-large"><img decoding="async" width="1024" height="624" data-attachment-id="15514" data-permalink="https://andrewferguson.net/2022/06/18/plex-proxmox-vm-with-nvidia-gpu-passthrough/2_warning/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/06/2_warning.png" data-orig-size="1792,1092" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2_warning" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/06/2_warning-300x183.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/06/2_warning-1024x624.png" src="https://andrewferguson.net/wp-content/uploads/2022/06/2_warning-1024x624.png" alt="" class="wp-image-15514" srcset="https://andrewferguson.net/wp-content/uploads/2022/06/2_warning-1024x624.png 1024w, https://andrewferguson.net/wp-content/uploads/2022/06/2_warning-300x183.png 300w, https://andrewferguson.net/wp-content/uploads/2022/06/2_warning-768x468.png 768w, https://andrewferguson.net/wp-content/uploads/2022/06/2_warning-1536x936.png 1536w, https://andrewferguson.net/wp-content/uploads/2022/06/2_warning-1320x804.png 1320w, https://andrewferguson.net/wp-content/uploads/2022/06/2_warning.png 1792w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Warning about guessing X library path. Select <strong>OK</strong> to dismiss. We&#8217;re using this headless, so don&#8217;t care about x.org stuff.</figcaption></figure>
  668.  
  669.  
  670.  
  671. <p>I chose to install the 32-bit compatibility library. I&#8217;m not sure if it&#8217;s actually needed, but it didn&#8217;t seem to cause any problems.</p>
  672.  
  673.  
  674.  
  675. <figure class="wp-block-image size-large"><img decoding="async" width="1024" height="624" data-attachment-id="15515" data-permalink="https://andrewferguson.net/2022/06/18/plex-proxmox-vm-with-nvidia-gpu-passthrough/3_build_32/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/06/3_build_32.png" data-orig-size="1792,1092" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="3_build_32" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/06/3_build_32-300x183.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/06/3_build_32-1024x624.png" src="https://andrewferguson.net/wp-content/uploads/2022/06/3_build_32-1024x624.png" alt="" class="wp-image-15515" srcset="https://andrewferguson.net/wp-content/uploads/2022/06/3_build_32-1024x624.png 1024w, https://andrewferguson.net/wp-content/uploads/2022/06/3_build_32-300x183.png 300w, https://andrewferguson.net/wp-content/uploads/2022/06/3_build_32-768x468.png 768w, https://andrewferguson.net/wp-content/uploads/2022/06/3_build_32-1536x936.png 1536w, https://andrewferguson.net/wp-content/uploads/2022/06/3_build_32-1320x804.png 1320w, https://andrewferguson.net/wp-content/uploads/2022/06/3_build_32.png 1792w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption"><em>Install NVIDIA&#8217;s 32-bit compatibility libraries?</em> Select <strong>Yes</strong></figcaption></figure>
  676.  
  677.  
  678.  
  679. <figure class="wp-block-image size-large"><img decoding="async" width="1024" height="624" data-attachment-id="15516" data-permalink="https://andrewferguson.net/2022/06/18/plex-proxmox-vm-with-nvidia-gpu-passthrough/4_xconfig/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/06/4_xconfig.png" data-orig-size="1792,1092" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="4_xconfig" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/06/4_xconfig-300x183.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/06/4_xconfig-1024x624.png" src="https://andrewferguson.net/wp-content/uploads/2022/06/4_xconfig-1024x624.png" alt="" class="wp-image-15516" srcset="https://andrewferguson.net/wp-content/uploads/2022/06/4_xconfig-1024x624.png 1024w, https://andrewferguson.net/wp-content/uploads/2022/06/4_xconfig-300x183.png 300w, https://andrewferguson.net/wp-content/uploads/2022/06/4_xconfig-768x468.png 768w, https://andrewferguson.net/wp-content/uploads/2022/06/4_xconfig-1536x936.png 1536w, https://andrewferguson.net/wp-content/uploads/2022/06/4_xconfig-1320x804.png 1320w, https://andrewferguson.net/wp-content/uploads/2022/06/4_xconfig.png 1792w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Asking to run <em>nvidia-xconfig</em> utility. Select <strong>No</strong>. We&#8217;re using this headless, so don&#8217;t care about x.org stuff.</figcaption></figure>
  680.  
  681.  
  682.  
  683. <p>And we&#8217;re done!</p>
  684.  
  685.  
  686.  
  687. <figure class="wp-block-image size-large"><img decoding="async" width="1024" height="624" data-attachment-id="15517" data-permalink="https://andrewferguson.net/2022/06/18/plex-proxmox-vm-with-nvidia-gpu-passthrough/5_done/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/06/5_done.png" data-orig-size="1792,1092" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="5_done" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/06/5_done-300x183.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/06/5_done-1024x624.png" src="https://andrewferguson.net/wp-content/uploads/2022/06/5_done-1024x624.png" alt="" class="wp-image-15517" srcset="https://andrewferguson.net/wp-content/uploads/2022/06/5_done-1024x624.png 1024w, https://andrewferguson.net/wp-content/uploads/2022/06/5_done-300x183.png 300w, https://andrewferguson.net/wp-content/uploads/2022/06/5_done-768x468.png 768w, https://andrewferguson.net/wp-content/uploads/2022/06/5_done-1536x936.png 1536w, https://andrewferguson.net/wp-content/uploads/2022/06/5_done-1320x804.png 1320w, https://andrewferguson.net/wp-content/uploads/2022/06/5_done.png 1792w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption"><meta http-equiv="content-type" content="text/html; charset=utf-8">NVIDIA driver installation complete!</figcaption></figure>
  688.  
  689.  
  690.  
  691. <h3 class="wp-block-heading">Verify Driver Installation</h3>
  692.  
  693.  
  694.  
  695. <p>You should be able to verify that the system recognizes the GPU by running <code>nvidia-smi</code></p>
  696.  
  697.  
  698.  
  699. <figure class="wp-block-image size-large"><img decoding="async" width="1024" height="486" data-attachment-id="15518" data-permalink="https://andrewferguson.net/2022/06/18/plex-proxmox-vm-with-nvidia-gpu-passthrough/6_nvidia-smi/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/06/6_nvidia-smi.png" data-orig-size="1122,533" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="6_nvidia-smi" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/06/6_nvidia-smi-300x143.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/06/6_nvidia-smi-1024x486.png" src="https://andrewferguson.net/wp-content/uploads/2022/06/6_nvidia-smi-1024x486.png" alt="" class="wp-image-15518" srcset="https://andrewferguson.net/wp-content/uploads/2022/06/6_nvidia-smi-1024x486.png 1024w, https://andrewferguson.net/wp-content/uploads/2022/06/6_nvidia-smi-300x143.png 300w, https://andrewferguson.net/wp-content/uploads/2022/06/6_nvidia-smi-768x365.png 768w, https://andrewferguson.net/wp-content/uploads/2022/06/6_nvidia-smi.png 1122w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Output of <em>nvidia-smi</em> when no GPU processes are running</figcaption></figure>
  700.  
  701.  
  702.  
  703. <h3 class="wp-block-heading">Configure Plex</h3>
  704.  
  705.  
  706.  
  707. <p>If you&#8217;ve not done so already, you&#8217;ll want to enable hardware acceleration for Plex under Settings &gt; Transcoder:</p>
  708.  
  709.  
  710.  
  711. <figure class="wp-block-image size-large"><img decoding="async" width="1024" height="170" data-attachment-id="15519" data-permalink="https://andrewferguson.net/2022/06/18/plex-proxmox-vm-with-nvidia-gpu-passthrough/image-5-4/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/06/image-5.png" data-orig-size="2022,336" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-5" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/06/image-5-300x50.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/06/image-5-1024x170.png" src="https://andrewferguson.net/wp-content/uploads/2022/06/image-5-1024x170.png" alt="" class="wp-image-15519" srcset="https://andrewferguson.net/wp-content/uploads/2022/06/image-5-1024x170.png 1024w, https://andrewferguson.net/wp-content/uploads/2022/06/image-5-300x50.png 300w, https://andrewferguson.net/wp-content/uploads/2022/06/image-5-768x128.png 768w, https://andrewferguson.net/wp-content/uploads/2022/06/image-5-1536x255.png 1536w, https://andrewferguson.net/wp-content/uploads/2022/06/image-5-1320x219.png 1320w, https://andrewferguson.net/wp-content/uploads/2022/06/image-5.png 2022w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
  712.  
  713.  
  714.  
  715. <p>Select &#8220;Save Changes&#8221;.</p>
  716.  
  717.  
  718.  
  719. <p>To verify that Plex is actually offloading the transcoding, start playing a TV or movie from your Plex library (make sure that the Quality is any setting <em>except</em> Original). Then you can run <em>nvidia-smi</em> again and you&#8217;ll see that it lists <em>Plex Transcoder</em> under the process name (instead of &#8220;No running processes found&#8221;).</p>
  720.  
  721.  
  722.  
  723. <figure class="wp-block-image size-large"><img decoding="async" width="1024" height="480" data-attachment-id="15520" data-permalink="https://andrewferguson.net/2022/06/18/plex-proxmox-vm-with-nvidia-gpu-passthrough/7_transcoding/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/06/7_transcoding.png" data-orig-size="1107,519" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="7_transcoding" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/06/7_transcoding-300x141.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/06/7_transcoding-1024x480.png" src="https://andrewferguson.net/wp-content/uploads/2022/06/7_transcoding-1024x480.png" alt="" class="wp-image-15520" srcset="https://andrewferguson.net/wp-content/uploads/2022/06/7_transcoding-1024x480.png 1024w, https://andrewferguson.net/wp-content/uploads/2022/06/7_transcoding-300x141.png 300w, https://andrewferguson.net/wp-content/uploads/2022/06/7_transcoding-768x360.png 768w, https://andrewferguson.net/wp-content/uploads/2022/06/7_transcoding.png 1107w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Output of <em>nvidia-smi</em> when Plex is transcoding</figcaption></figure>
  724.  
  725.  
  726.  
  727. <p>You can also install <em>nvtop</em> (<code>apt-get install nvtop</code>) which is a nice way to view transcoding efforts over time:</p>
  728.  
  729.  
  730.  
  731. <figure class="wp-block-image size-large"><img decoding="async" width="1024" height="624" data-attachment-id="15521" data-permalink="https://andrewferguson.net/2022/06/18/plex-proxmox-vm-with-nvidia-gpu-passthrough/8_nvtop/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/06/8_nvtop.png" data-orig-size="1792,1092" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="8_nvtop" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/06/8_nvtop-300x183.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/06/8_nvtop-1024x624.png" src="https://andrewferguson.net/wp-content/uploads/2022/06/8_nvtop-1024x624.png" alt="" class="wp-image-15521" srcset="https://andrewferguson.net/wp-content/uploads/2022/06/8_nvtop-1024x624.png 1024w, https://andrewferguson.net/wp-content/uploads/2022/06/8_nvtop-300x183.png 300w, https://andrewferguson.net/wp-content/uploads/2022/06/8_nvtop-768x468.png 768w, https://andrewferguson.net/wp-content/uploads/2022/06/8_nvtop-1536x936.png 1536w, https://andrewferguson.net/wp-content/uploads/2022/06/8_nvtop-1320x804.png 1320w, https://andrewferguson.net/wp-content/uploads/2022/06/8_nvtop.png 1792w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Using <em>nvtop</em></figcaption></figure>
  732.  
  733.  
  734.  
  735. <h2 class="wp-block-heading">Other Notes</h2>
  736.  
  737.  
  738.  
  739. <h3 class="wp-block-heading">Debian vs Ubuntu</h3>
  740.  
  741.  
  742.  
  743. <p>There&#8217;s a lot of guides and questions where Ubuntu is the OS. I&#8217;m not sure why, but none of those work for Debian when it comes to <meta http-equiv="content-type" content="text/html; charset=utf-8">NVIDIA drivers. The NVIDIA Driver Installation Quickstart Guide (see below list of links) lists Ubuntu as supported, but not Debian. I&#8217;m not sure if that&#8217;s just because there&#8217;s no Debian package manager support, or if Debian is technically not supported by <meta http-equiv="content-type" content="text/html; charset=utf-8">NVIDIA at all.</p>
  744.  
  745.  
  746.  
  747. <h3 class="wp-block-heading">Removing the driver and upgrading</h3>
  748.  
  749.  
  750.  
  751. <p>You can upgrade another <em>.run</em> file on top of an existing <meta http-equiv="content-type" content="text/html; charset=utf-8">NVIDIA driver installation (as far as I can tell). You&#8217;ll need to run:</p>
  752.  
  753.  
  754. <div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
  755. /usr/bin/nvidia-uninstall
  756. </pre></div>
  757.  
  758.  
  759. <p>&#8230;to uninstall the existing driver. You&#8217;ll need to reboot the VM and then you can install the new driver.</p>
  760.  
  761.  
  762.  
  763. <h3 class="wp-block-heading">Somewhat related links</h3>
  764.  
  765.  
  766.  
  767. <p>Other links that probably aren&#8217;t useful, but which I have stumbled on as part of my research. Sometimes these are things that don&#8217;t work (or don&#8217;t work for what I was wanting to do). Regardless, they are worth mentioning: </p>
  768.  
  769.  
  770.  
  771. <ul>
  772. <li>NVIDIA Driver Installation Quickstart Guide: <a rel="noreferrer noopener" href="https://docs.nvidia.com/datacenter/tesla/tesla-installation-notes/index.html" target="_blank">https://docs.nvidia.com/datacenter/tesla/tesla-installation-notes/index.html</a></li>
  773.  
  774.  
  775.  
  776. <li>Using FFmpeg with NVIDIA GPU Hardware Acceleration: <a rel="noreferrer noopener" href="https://docs.nvidia.com/video-technologies/video-codec-sdk/ffmpeg-with-nvidia-gpu/" target="_blank">https://docs.nvidia.com/video-technologies/video-codec-sdk/ffmpeg-with-nvidia-gpu/</a></li>
  777.  
  778.  
  779.  
  780. <li>NVIDIA FFmpeg Transcoding Guide: <a rel="noreferrer noopener" href="https://developer.nvidia.com/blog/nvidia-ffmpeg-transcoding-guide/" target="_blank">https://developer.nvidia.com/blog/nvidia-ffmpeg-transcoding-guide/</a></li>
  781.  
  782.  
  783.  
  784. <li>Plex in LXC on Proxmox, with Nvidia GPU passthrough: <a rel="noreferrer noopener" href="https://blog.twan.ovh/homelab/plex-lxc-proxmox-gpu-passthrough/" target="_blank">https://blog.twan.ovh/homelab/plex-lxc-proxmox-gpu-passthrough/</a></li>
  785.  
  786.  
  787.  
  788. <li>Proxmox | GPU Passthrough to Ubuntu VM (Plex): <a rel="noreferrer noopener" href="https://lab.evishome.com/proxmox-gpu-passthrough-to-plex/" target="_blank">https://lab.evishome.com/proxmox-gpu-passthrough-to-plex/</a></li>
  789.  
  790.  
  791.  
  792. <li>How do I Set Up a NVIDIA Mobile GPU with Headless Debian 10?: <a rel="noreferrer noopener" href="https://www.reddit.com/r/debian/comments/jd2wvh/how_do_i_set_up_a_nvidia_mobile_gpu_with_headless/" target="_blank">https://www.reddit.com/r/debian/comments/jd2wvh/how_do_i_set_up_a_nvidia_mobile_gpu_with_headless/</a></li>
  793.  
  794.  
  795.  
  796. <li>How to Install Nvidia Drivers on Debian: <a rel="noreferrer noopener" href="https://phoenixnap.com/kb/nvidia-drivers-debian" target="_blank">https://phoenixnap.com/kb/nvidia-drivers-debian</a></li>
  797.  
  798.  
  799.  
  800. <li>How to install Nvidia drivers on Debian 11 (Bullseye) guide???: <a href="https://forums.debian.net/viewtopic.php?t=150825" target="_blank" rel="noreferrer noopener">https://forums.debian.net/viewtopic.php?t=150825</a></li>
  801. </ul>
  802.  
  803.  
  804.  
  805. <h3 class="wp-block-heading">How do you typeset <meta http-equiv="content-type" content="text/html; charset=utf-8">NVIDIA?</h3>
  806.  
  807.  
  808.  
  809. <p>I thought it was supposed to be nVidia, but wikipedia says Nvidia with a footnote saying it&#8217;s &#8220;Officially written as NVIDIA.&#8221; Or maybe it&#8217;s supposed to be nVIDIA?</p>
  810. ]]></content:encoded>
  811. <wfw:commentRss>https://andrewferguson.net/2022/06/18/plex-proxmox-vm-with-nvidia-gpu-passthrough/feed/</wfw:commentRss>
  812. <slash:comments>2</slash:comments>
  813. <post-id xmlns="com-wordpress:feed-additions:1">15492</post-id> </item>
  814. <item>
  815. <title>Show and Tell and Lessons Learned: Macro Keyboard</title>
  816. <link>https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/</link>
  817. <dc:creator><![CDATA[Andrew]]></dc:creator>
  818. <pubDate>Tue, 08 Feb 2022 23:25:50 +0000</pubDate>
  819. <category><![CDATA[Projects]]></category>
  820. <category><![CDATA[CircuitPython]]></category>
  821. <category><![CDATA[PCB]]></category>
  822. <category><![CDATA[TeachMePCB]]></category>
  823. <guid isPermaLink="false">https://andrewferguson.net/?p=15213</guid>
  824.  
  825. <description><![CDATA[KiCAD and CircuitPython files are at: https://github.com/fergbrain/MacroKeyboard I randomly stumbled1 onto a FREE (!) class teaching Intro to Printed Circuit Board (PCB) design. It may shock you to know that even as an Electrical Engineer I never learned how to make PCBs and it&#8217;s always been something I&#8217;ve wanted to do. Astute readers may remember&#8230;&#160;<a href="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/" class="" rel="bookmark">Read More &#187;<span class="screen-reader-text">Show and Tell and Lessons Learned: Macro Keyboard</span></a>]]></description>
  826. <content:encoded><![CDATA[
  827. <figure class="wp-block-image size-large"><img decoding="async" width="1024" height="678" data-attachment-id="15271" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/dsc_1119/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/DSC_1119.jpeg" data-orig-size="1280,848" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;4&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D7000&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1644095422&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;31&quot;,&quot;iso&quot;:&quot;800&quot;,&quot;shutter_speed&quot;:&quot;0.016666666666667&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="DSC_1119" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/DSC_1119-300x199.jpeg" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/DSC_1119-1024x678.jpeg" src="https://andrewferguson.net/wp-content/uploads/2022/02/DSC_1119-1024x678.jpeg" alt="" class="wp-image-15271" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/DSC_1119-1024x678.jpeg 1024w, https://andrewferguson.net/wp-content/uploads/2022/02/DSC_1119-300x199.jpeg 300w, https://andrewferguson.net/wp-content/uploads/2022/02/DSC_1119-768x509.jpeg 768w, https://andrewferguson.net/wp-content/uploads/2022/02/DSC_1119.jpeg 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
  828.  
  829.  
  830.  
  831.  
  832.  
  833.  
  834. <p><em>KiCAD and CircuitPython files are at: <a href="https://github.com/fergbrain/MacroKeyboard">https://github.com/fergbrain/MacroKeyboard</a></em></p>
  835.  
  836.  
  837.  
  838. <p>I randomly stumbled<sup id="rf1-15213"><a href="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/#fn1-15213" title="probably via &lt;a href=&quot;https://news.ycombinator.com/item?id=28742902&quot;&gt;https://news.ycombinator.com/item?id=28742902&lt;/a&gt;" rel="footnote">1</a></sup> onto a FREE (!) class teaching <a href="https://teachmepcb.com/enrol/index.php?id=5">Intro to Printed Circuit Board</a> (PCB) design. It may shock you to know that even as an Electrical Engineer I never learned how to make PCBs and it&#8217;s always been something I&#8217;ve wanted to do.</p>
  839.  
  840.  
  841.  
  842. <p>Astute readers may remember that I <em>tried</em> making a PCB several years ago, but it never worked<sup id="rf2-15213"><a href="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/#fn2-15213" title="see &lt;a href=&quot;https://andrewferguson.net/2013/09/23/to-the-printer/&quot;&gt;https://andrewferguson.net/2013/09/23/to-the-printer/&lt;/a&gt; and &lt;a href=&quot;https://andrewferguson.net/2014/03/31/progress-continues/&quot;&gt;https://andrewferguson.net/2014/03/31/progress-continues/&lt;/a&gt;" rel="footnote">2</a></sup> and I abandoned it.</p>
  843.  
  844.  
  845.  
  846. <p>I can&#8217;t rave enough about the class, it&#8217;s been a wonderful experience, I learned a lot, made some new friends, and I look forward to taking some other class offerings through <a href="https://teachmepcb.com/">TeachMePCB.com</a>!</p>
  847.  
  848.  
  849.  
  850. <p>The goal of the class was learn about PCB design (including designing footprints and symbols), design the PCB itself (including how to use hierarchical layouts), learn about design rule check (DRC) and design for manufacture (DFM), have the PCB fabricated, and then assemble the PCB.</p>
  851.  
  852.  
  853.  
  854. <figure class="wp-block-image size-full"><img decoding="async" width="800" height="388" data-attachment-id="15257" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-19/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-19.png" data-orig-size="800,388" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-19" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-19-300x146.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-19.png" src="https://andrewferguson.net/wp-content/uploads/2022/02/image-19.png" alt="" class="wp-image-15257" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/image-19.png 800w, https://andrewferguson.net/wp-content/uploads/2022/02/image-19-300x146.png 300w, https://andrewferguson.net/wp-content/uploads/2022/02/image-19-768x372.png 768w" sizes="(max-width: 800px) 100vw, 800px" /><figcaption>TeachMePCB Course Objective</figcaption></figure>
  855.  
  856.  
  857.  
  858. <p>Everyone in the course made a macro keyboard of some sort. The core &#8220;requirements&#8221; were:</p>
  859.  
  860.  
  861.  
  862. <ul><li>Raspberry Pi Pico microcontroller</li><li>10 MX-style key switches</li><li>2 Rotary Encoders with RGB LEDs</li><li>VEML7700 Ambient Light Sensor (I2C)</li><li>NLSF595 LED Driver (SPI)</li><li>10 NeoPixel lights (1-wire)</li><li>Don&#8217;t make a rectangular PCB</li></ul>
  863.  
  864.  
  865.  
  866. <p>I made a couple of changes:</p>
  867.  
  868.  
  869.  
  870. <ul><li>Swapped PCA9745B for NLSF595</li><li>Added ePaper display (because why not make my first project harder)</li></ul>
  871.  
  872.  
  873.  
  874. <p>I used <a href="https://www.kicad.org/">KiCAD</a>, a free and opensource <a href="https://en.wikipedia.org/wiki/Electronic_design_automation">electronic design automation</a> tool to design mine.</p>
  875.  
  876.  
  877.  
  878. <h2 class="wp-block-heading" id="schematic-layout">Schematic Layout</h2>
  879.  
  880.  
  881.  
  882. <p>I actually jumped the gun and started laying out my board in Week 3 because I thought this was the best way to figure out what items I needed for my Bill of Material (BOM). Creating the schematic this way was an — interesting — exercise, and it turned out I was over complicating what that weeks assignment was.</p>
  883.  
  884.  
  885.  
  886. <figure class="wp-block-image size-large"><img decoding="async" width="1024" height="709" data-attachment-id="15217" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-2-2/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-2.png" data-orig-size="1104,764" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-2" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-2-300x208.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-2-1024x709.png" src="https://andrewferguson.net/wp-content/uploads/2022/02/image-2-1024x709.png" alt="" class="wp-image-15217" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/image-2-1024x709.png 1024w, https://andrewferguson.net/wp-content/uploads/2022/02/image-2-300x208.png 300w, https://andrewferguson.net/wp-content/uploads/2022/02/image-2-768x531.png 768w, https://andrewferguson.net/wp-content/uploads/2022/02/image-2.png 1104w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>You could layout the board like this, but don&#8217;t.</figcaption></figure>
  887.  
  888.  
  889.  
  890. <p>Note for example how I&#8217;ve repeated the NeoPixel LEDs ten times (grid ref: A1 to A5), as well as the pushbutton switches ten times (located just below the LEDs). As I would later learn, there&#8217;s no need to do that; just make the switch (or NeoPixel) once and then duplicate it (pointing the copy the same schematic so updates propagate correctly). Et voilà!</p>
  891.  
  892.  
  893.  
  894. <figure data-carousel-extra='{"blog_id":1,"permalink":"https:\/\/andrewferguson.net\/2022\/02\/08\/show-and-tell-and-lessons-learned-macro-keyboard\/"}'  class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex">
  895. <figure class="wp-block-image size-full"><img decoding="async" width="756" height="547" data-attachment-id="15218" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-3-2/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-3.png" data-orig-size="756,547" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-3" data-image-description="" data-image-caption="&lt;p&gt;Exemplar circuit/sheet&lt;/p&gt;
  896. " data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-3-300x217.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-3.png" data-id="15218" src="https://andrewferguson.net/wp-content/uploads/2022/02/image-3.png" alt="" class="wp-image-15218" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/image-3.png 756w, https://andrewferguson.net/wp-content/uploads/2022/02/image-3-300x217.png 300w" sizes="(max-width: 756px) 100vw, 756px" /><figcaption>Exemplar circuit/sheet</figcaption></figure>
  897.  
  898.  
  899.  
  900. <figure class="wp-block-image size-full"><img decoding="async" width="292" height="219" data-attachment-id="15250" data-permalink="https://andrewferguson.net/image-5-3/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-5-edited.png" data-orig-size="292,219" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-5" data-image-description="" data-image-caption="&lt;p&gt;Duplicated!&lt;/p&gt;
  901. " data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-5-edited.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-5-edited.png" data-id="15250" src="https://andrewferguson.net/wp-content/uploads/2022/02/image-5-edited.png" alt="" class="wp-image-15250"/><figcaption>Duplicated!</figcaption></figure>
  902. </figure>
  903.  
  904.  
  905.  
  906. <p>Once I stopped over complicating it, schematic layout was relatively simple for this particular board.</p>
  907.  
  908.  
  909.  
  910. <figure class="wp-block-image size-large"><img decoding="async" width="1024" height="660" data-attachment-id="15215" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-9/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image.png" data-orig-size="1204,776" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-300x193.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-1024x660.png" src="https://andrewferguson.net/wp-content/uploads/2022/02/image-1024x660.png" alt="" class="wp-image-15215" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/image-1024x660.png 1024w, https://andrewferguson.net/wp-content/uploads/2022/02/image-300x193.png 300w, https://andrewferguson.net/wp-content/uploads/2022/02/image-768x495.png 768w, https://andrewferguson.net/wp-content/uploads/2022/02/image.png 1204w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Top level view of my schematic showing the various sub-sheets</figcaption></figure>
  911.  
  912.  
  913.  
  914. <p>I think the hardest part was making sure I got the eInk circuit right<sup id="rf3-15213"><a href="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/#fn3-15213" title="Narrator: &#8220;He didn&#8217;t&#8221;" rel="footnote">3</a></sup>. The design seems to be a prototypical DC-DC Boost Converter and was the same circuit design used by both the manufacturer (Pervasive Displays) as well as <a href="https://learn.adafruit.com/assets/57645">Adafruit&#8217;s eInk Breakout Friend</a>.</p>
  915.  
  916.  
  917.  
  918. <figure class="wp-block-image size-large"><img decoding="async" width="1024" height="692" data-attachment-id="15216" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-1-3/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-1.png" data-orig-size="1194,807" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-1" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-1-300x203.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-1-1024x692.png" src="https://andrewferguson.net/wp-content/uploads/2022/02/image-1-1024x692.png" alt="" class="wp-image-15216" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/image-1-1024x692.png 1024w, https://andrewferguson.net/wp-content/uploads/2022/02/image-1-300x203.png 300w, https://andrewferguson.net/wp-content/uploads/2022/02/image-1-768x519.png 768w, https://andrewferguson.net/wp-content/uploads/2022/02/image-1.png 1194w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>eInk Display schematic, one of many sheets I designed. This is the updated version once I fixed my issue with RESET line.</figcaption></figure>
  919.  
  920.  
  921.  
  922. <h2 class="wp-block-heading" id="schematic-errors">Schematic Errors</h2>
  923.  
  924.  
  925.  
  926. <p>After I put together my schematics, I would discover (and have corrected in the latest design files) several mistakes</p>
  927.  
  928.  
  929.  
  930. <p>I initially had my pins reversed (Pin 1 was Pin 24, Pin 2 was 23, etc), fortunately I caught that before I had sent my PCB off to be fabricated.</p>
  931.  
  932.  
  933.  
  934. <p>I was less fortunate with the following issues, which I didn&#8217;t catch until after the PCB had been fabricated and I started assembly:</p>
  935.  
  936.  
  937.  
  938. <figure data-carousel-extra='{"blog_id":1,"permalink":"https:\/\/andrewferguson.net\/2022\/02\/08\/show-and-tell-and-lessons-learned-macro-keyboard\/"}'  class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-5 is-layout-flex wp-block-gallery-is-layout-flex">
  939. <figure class="wp-block-image size-large"><img decoding="async" width="341" height="341" data-attachment-id="15227" data-permalink="https://andrewferguson.net/img_3894/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/IMG_3894.jpeg" data-orig-size="341,341" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;1.8&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;iPhone SE (2nd generation)&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1641407300&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;3.99&quot;,&quot;iso&quot;:&quot;100&quot;,&quot;shutter_speed&quot;:&quot;0.016666666666667&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="IMG_3894" data-image-description="" data-image-caption="&lt;p&gt;I wired the level-shifter (U401) incorrectly and had the ENABLE pin going to ground instead of +5V. The blue resistor is my patch.&lt;/p&gt;
  940. " data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/IMG_3894-300x300.jpeg" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/IMG_3894.jpeg" data-id="15227" src="https://andrewferguson.net/wp-content/uploads/2022/02/IMG_3894.jpeg" alt="" class="wp-image-15227" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/IMG_3894.jpeg 341w, https://andrewferguson.net/wp-content/uploads/2022/02/IMG_3894-300x300.jpeg 300w, https://andrewferguson.net/wp-content/uploads/2022/02/IMG_3894-150x150.jpeg 150w" sizes="(max-width: 341px) 100vw, 341px" /><figcaption>Level Shifter (U401) ENABLE pin needed to be Active High, not Active Low</figcaption></figure>
  941.  
  942.  
  943.  
  944. <figure class="wp-block-image size-large"><img decoding="async" width="721" height="721" data-attachment-id="15228" data-permalink="https://andrewferguson.net/img_3901/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/IMG_3901.jpeg" data-orig-size="721,721" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;1.8&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;iPhone SE (2nd generation)&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1641562613&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;3.99&quot;,&quot;iso&quot;:&quot;50&quot;,&quot;shutter_speed&quot;:&quot;0.016666666666667&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="IMG_3901" data-image-description="" data-image-caption="&lt;p&gt;R2706 and R2707 were both removed.&lt;/p&gt;
  945. " data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/IMG_3901-300x300.jpeg" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/IMG_3901.jpeg" data-id="15228" src="https://andrewferguson.net/wp-content/uploads/2022/02/IMG_3901.jpeg" alt="" class="wp-image-15228" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/IMG_3901.jpeg 721w, https://andrewferguson.net/wp-content/uploads/2022/02/IMG_3901-300x300.jpeg 300w, https://andrewferguson.net/wp-content/uploads/2022/02/IMG_3901-150x150.jpeg 150w" sizes="(max-width: 721px) 100vw, 721px" /><figcaption>SPI-related pins for PCA9745B LED Driver didn&#8217;t care for in-line 1K Ω resistors</figcaption></figure>
  946.  
  947.  
  948.  
  949. <figure class="wp-block-image size-large"><img decoding="async" width="768" height="1024" data-attachment-id="15230" data-permalink="https://andrewferguson.net/img_3944/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/IMG_3944.jpeg" data-orig-size="960,1280" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;1.8&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;iPhone SE (2nd generation)&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1642703644&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;3.99&quot;,&quot;iso&quot;:&quot;50&quot;,&quot;shutter_speed&quot;:&quot;0.0083333333333333&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="IMG_3944" data-image-description="" data-image-caption="&lt;p&gt;R2901 should have been 0.47 ohms.&lt;/p&gt;
  950. " data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/IMG_3944-225x300.jpeg" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/IMG_3944-768x1024.jpeg" data-id="15230" src="https://andrewferguson.net/wp-content/uploads/2022/02/IMG_3944-768x1024.jpeg" alt="" class="wp-image-15230" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/IMG_3944-768x1024.jpeg 768w, https://andrewferguson.net/wp-content/uploads/2022/02/IMG_3944-225x300.jpeg 225w, https://andrewferguson.net/wp-content/uploads/2022/02/IMG_3944.jpeg 960w" sizes="(max-width: 768px) 100vw, 768px" /><figcaption>R2901 should be 0.47 Ω, not 470 Ω</figcaption></figure>
  951.  
  952.  
  953.  
  954. <figure class="wp-block-image size-large"><img decoding="async" width="768" height="1024" data-attachment-id="15229" data-permalink="https://andrewferguson.net/img_4033/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/IMG_4033.jpeg" data-orig-size="960,1280" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;1.8&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;iPhone SE (2nd generation)&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1643840803&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;3.99&quot;,&quot;iso&quot;:&quot;640&quot;,&quot;shutter_speed&quot;:&quot;0.033333333333333&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="IMG_4033" data-image-description="" data-image-caption="&lt;p&gt;The RESET line for thee eInk display *is* important (orange wire is the fix).&lt;/p&gt;
  955. " data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/IMG_4033-225x300.jpeg" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/IMG_4033-768x1024.jpeg" data-id="15229" src="https://andrewferguson.net/wp-content/uploads/2022/02/IMG_4033-768x1024.jpeg" alt="" class="wp-image-15229" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/IMG_4033-768x1024.jpeg 768w, https://andrewferguson.net/wp-content/uploads/2022/02/IMG_4033-225x300.jpeg 225w, https://andrewferguson.net/wp-content/uploads/2022/02/IMG_4033.jpeg 960w" sizes="(max-width: 768px) 100vw, 768px" /><figcaption>The RESET line of the eInk display is required and can&#8217;t be just be held high (it&#8217;s Active Low). I co-opted the pin used for the Pico&#8217;s LED (aka GPIO25) and that seems to work!</figcaption></figure>
  956. </figure>
  957.  
  958.  
  959.  
  960. <p>Not shown (and fixed via software):</p>
  961.  
  962.  
  963.  
  964. <ul><li>S3001 (Bottom Rotary Encoder) Pin 01 (red LED) and Pin 04 (blue LED) are swapped, so they got mapped as BGR instead of RGB.</li><li>Flipped pin GPIO assignments on U2801:<ul><li>Pin 15 should be labeled as GPIO11 and connect to J2901 Pin 09 (BUSY signal for eInk)</li><li>Pin 16 should be labeled as GPIO12 and connect to J2901 Pin 11 (Command/Data signal for eInk)</li></ul></li></ul>
  965.  
  966.  
  967.  
  968. <p>I also ended up removing the rotary encoders I had got from SparkFun (P/N <a href="https://www.sparkfun.com/products/15141">COM-15141</a>) and replacing them with Bourne P/N PEL12T-4225S-S1024 (which I got from Mouser, since they had them in stock) because the red LEDs weren&#8217;t really working (they were really, really dim) and the rotary function was very finicky.</p>
  969.  
  970.  
  971.  
  972. <p>Not so much error, per se, but after I printed my paper doll (a scaled 1:1 print) I switched to a different Flat Flexible Cable (FFC) connector so I would have a little more space to hand solder.</p>
  973.  
  974.  
  975.  
  976. <h2 class="wp-block-heading" id="pcb-outline">PCB Outline</h2>
  977.  
  978.  
  979.  
  980. <p>Coming up with a design was challenging and I went through several design ideas:</p>
  981.  
  982.  
  983.  
  984. <div data-carousel-extra='{"blog_id":1,"permalink":"https:\/\/andrewferguson.net\/2022\/02\/08\/show-and-tell-and-lessons-learned-macro-keyboard\/"}'  class="wp-block-jetpack-tiled-gallery aligncenter is-style-rectangular"><div class="tiled-gallery__gallery"><div class="tiled-gallery__row"><div class="tiled-gallery__col" style="flex-basis:44.11933%"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="15253" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-15/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-15.png" data-orig-size="451,626" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-15" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-15-216x300.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-15.png" data-attachment-id="15253" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-15/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-15.png" data-orig-size="451,626" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-15" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-15-216x300.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-15.png" srcset="https://i1.wp.com/andrewferguson.net/wp-content/uploads/2022/02/image-15.png?strip=info&#038;w=451&#038;ssl=1 451w" alt="" data-height="626" data-id="15253" data-link="https://andrewferguson.net/?attachment_id=15253" data-url="https://andrewferguson.net/wp-content/uploads/2022/02/image-15.png" data-width="451" src="https://i1.wp.com/andrewferguson.net/wp-content/uploads/2022/02/image-15.png?ssl=1" data-amp-layout="responsive"/></figure></div><div class="tiled-gallery__col" style="flex-basis:55.88067%"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="15254" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-16/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-16.png" data-orig-size="592,334" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-16" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-16-300x169.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-16.png" data-attachment-id="15254" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-16/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-16.png" data-orig-size="592,334" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-16" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-16-300x169.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-16.png" srcset="https://i0.wp.com/andrewferguson.net/wp-content/uploads/2022/02/image-16.png?strip=info&#038;w=592&#038;ssl=1 592w" alt="" data-height="334" data-id="15254" data-link="https://andrewferguson.net/?attachment_id=15254" data-url="https://andrewferguson.net/wp-content/uploads/2022/02/image-16.png" data-width="592" src="https://i0.wp.com/andrewferguson.net/wp-content/uploads/2022/02/image-16.png?ssl=1" data-amp-layout="responsive"/></figure><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="15256" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-18/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-18.png" data-orig-size="386,201" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-18" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-18-300x156.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-18.png" data-attachment-id="15256" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-18/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-18.png" data-orig-size="386,201" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-18" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-18-300x156.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-18.png" srcset="https://i0.wp.com/andrewferguson.net/wp-content/uploads/2022/02/image-18.png?strip=info&#038;w=386&#038;ssl=1 386w" alt="" data-height="201" data-id="15256" data-link="https://andrewferguson.net/?attachment_id=15256" data-url="https://andrewferguson.net/wp-content/uploads/2022/02/image-18.png" data-width="386" src="https://i0.wp.com/andrewferguson.net/wp-content/uploads/2022/02/image-18.png?ssl=1" data-amp-layout="responsive"/></figure></div></div><div class="tiled-gallery__row"><div class="tiled-gallery__col" style="flex-basis:100.00000%"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="15255" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-17/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-17.png" data-orig-size="812,274" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-17" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-17-300x101.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-17.png" data-attachment-id="15255" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-17/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-17.png" data-orig-size="812,274" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-17" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-17-300x101.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-17.png" srcset="https://i2.wp.com/andrewferguson.net/wp-content/uploads/2022/02/image-17.png?strip=info&#038;w=600&#038;ssl=1 600w,https://i2.wp.com/andrewferguson.net/wp-content/uploads/2022/02/image-17.png?strip=info&#038;w=812&#038;ssl=1 812w" alt="" data-height="274" data-id="15255" data-link="https://andrewferguson.net/?attachment_id=15255" data-url="https://andrewferguson.net/wp-content/uploads/2022/02/image-17.png" data-width="812" src="https://i2.wp.com/andrewferguson.net/wp-content/uploads/2022/02/image-17.png?ssl=1" data-amp-layout="responsive"/></figure></div></div><div class="tiled-gallery__row"><div class="tiled-gallery__col" style="flex-basis:43.02832%"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="15258" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-20/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-20.png" data-orig-size="1064,1190" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-20" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-20-268x300.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-20-916x1024.png" data-attachment-id="15258" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-20/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-20.png" data-orig-size="1064,1190" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-20" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-20-268x300.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-20-916x1024.png" srcset="https://i1.wp.com/andrewferguson.net/wp-content/uploads/2022/02/image-20-916x1024.png?strip=info&#038;w=600&#038;ssl=1 600w,https://i1.wp.com/andrewferguson.net/wp-content/uploads/2022/02/image-20-916x1024.png?strip=info&#038;w=900&#038;ssl=1 900w,https://i1.wp.com/andrewferguson.net/wp-content/uploads/2022/02/image-20-916x1024.png?strip=info&#038;w=1064&#038;ssl=1 1064w" alt="" data-height="1190" data-id="15258" data-link="https://andrewferguson.net/?attachment_id=15258" data-url="https://andrewferguson.net/wp-content/uploads/2022/02/image-20-916x1024.png" data-width="1064" src="https://i1.wp.com/andrewferguson.net/wp-content/uploads/2022/02/image-20-916x1024.png?ssl=1" data-amp-layout="responsive"/></figure></div><div class="tiled-gallery__col" style="flex-basis:56.97168%"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="15259" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-21/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-21.png" data-orig-size="1629,1375" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-21" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-21-300x253.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-21-1024x864.png" data-attachment-id="15259" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-21/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-21.png" data-orig-size="1629,1375" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-21" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-21-300x253.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-21-1024x864.png" srcset="https://i1.wp.com/andrewferguson.net/wp-content/uploads/2022/02/image-21-1024x864.png?strip=info&#038;w=600&#038;ssl=1 600w,https://i1.wp.com/andrewferguson.net/wp-content/uploads/2022/02/image-21-1024x864.png?strip=info&#038;w=900&#038;ssl=1 900w,https://i1.wp.com/andrewferguson.net/wp-content/uploads/2022/02/image-21-1024x864.png?strip=info&#038;w=1200&#038;ssl=1 1200w,https://i1.wp.com/andrewferguson.net/wp-content/uploads/2022/02/image-21-1024x864.png?strip=info&#038;w=1500&#038;ssl=1 1500w,https://i1.wp.com/andrewferguson.net/wp-content/uploads/2022/02/image-21-1024x864.png?strip=info&#038;w=1629&#038;ssl=1 1629w" alt="" data-height="1375" data-id="15259" data-link="https://andrewferguson.net/?attachment_id=15259" data-url="https://andrewferguson.net/wp-content/uploads/2022/02/image-21-1024x864.png" data-width="1629" src="https://i1.wp.com/andrewferguson.net/wp-content/uploads/2022/02/image-21-1024x864.png?ssl=1" data-amp-layout="responsive"/></figure></div></div></div></div>
  985.  
  986.  
  987.  
  988. <p>Several of my earlier designs had fewer keys and rotary encoder since I wasn&#8217;t sure I really had a use for a 10-key and two rotary encoders. But I eventually got to a design I liked and then expanded to be a 10-key with two encoders.</p>
  989.  
  990.  
  991.  
  992. <p>I also went from a <a href="https://www.sparkfun.com/products/11310">guarded momentary switch</a> to more of an e-stop button with <a href="https://www.vanline.com.au/shop/Automotive-Switches/Industrial-Switches?product_id=982">deflector shroud</a>. Originally I was trying to source once, but then realized I could probably just as easily design one and have it 3D printed—so I did that.</p>
  993.  
  994.  
  995.  
  996. <figure data-carousel-extra='{"blog_id":1,"permalink":"https:\/\/andrewferguson.net\/2022\/02\/08\/show-and-tell-and-lessons-learned-macro-keyboard\/"}'  class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-6 is-layout-flex wp-block-gallery-is-layout-flex">
  997. <figure class="wp-block-image size-large"><img decoding="async" width="600" height="600" data-attachment-id="15262" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/11310-01b/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/11310-01b.jpg" data-orig-size="600,600" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="11310-01b" data-image-description="&lt;p&gt;https://www.sparkfun.com/products/11310&lt;/p&gt;
  998. " data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/11310-01b-300x300.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/11310-01b.jpg" data-id="15262" src="https://andrewferguson.net/wp-content/uploads/2022/02/11310-01b.jpg" alt="" class="wp-image-15262" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/11310-01b.jpg 600w, https://andrewferguson.net/wp-content/uploads/2022/02/11310-01b-300x300.jpg 300w, https://andrewferguson.net/wp-content/uploads/2022/02/11310-01b-150x150.jpg 150w" sizes="(max-width: 600px) 100vw, 600px" /><figcaption>Original Idea</figcaption></figure>
  999.  
  1000.  
  1001.  
  1002. <figure class="wp-block-image size-large"><img decoding="async" width="500" height="453" data-attachment-id="15261" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/24308c-500x500-1/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/24308c-500x500-1.jpg" data-orig-size="500,453" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="24308c-500&#215;500-1" data-image-description="&lt;p&gt;https://www.vanline.com.au/shop/Automotive-Switches/Industrial-Switches?product_id=982&lt;/p&gt;
  1003. " data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/24308c-500x500-1-300x272.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/24308c-500x500-1.jpg" data-id="15261" src="https://andrewferguson.net/wp-content/uploads/2022/02/24308c-500x500-1.jpg" alt="" class="wp-image-15261" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/24308c-500x500-1.jpg 500w, https://andrewferguson.net/wp-content/uploads/2022/02/24308c-500x500-1-300x272.jpg 300w" sizes="(max-width: 500px) 100vw, 500px" /><figcaption>Revised Idea</figcaption></figure>
  1004.  
  1005.  
  1006.  
  1007. <figure class="wp-block-image size-large"><img decoding="async" width="445" height="350" data-attachment-id="15274" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-22/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-22.png" data-orig-size="445,350" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-22" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-22-300x236.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-22.png" data-id="15274" src="https://andrewferguson.net/wp-content/uploads/2022/02/image-22.png" alt="" class="wp-image-15274" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/image-22.png 445w, https://andrewferguson.net/wp-content/uploads/2022/02/image-22-300x236.png 300w" sizes="(max-width: 445px) 100vw, 445px" /><figcaption>Cross section of guard and key cap with MX-style switch</figcaption></figure>
  1008.  
  1009.  
  1010.  
  1011. <figure class="wp-block-image size-large"><img decoding="async" width="654" height="645" data-attachment-id="15238" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-12/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-12.png" data-orig-size="654,645" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-12" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-12-300x296.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-12.png" data-id="15238" src="https://andrewferguson.net/wp-content/uploads/2022/02/image-12.png" alt="" class="wp-image-15238" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/image-12.png 654w, https://andrewferguson.net/wp-content/uploads/2022/02/image-12-300x296.png 300w" sizes="(max-width: 654px) 100vw, 654px" /><figcaption>Adapting Idea to use with an MX-style key switch</figcaption></figure>
  1012. </figure>
  1013.  
  1014.  
  1015.  
  1016. <p>I designed the button assembly in FreeCAD and had it printed in nylon by JLCPCB. The files are up on <a href="https://www.thingiverse.com/thing:5166225">Thingiverse so go grab it</a>! I originally was going to paint it, but then realized I could let the NeoPixel shine through the nylon—and I didn&#8217;t have the paint I needed.</p>
  1017.  
  1018.  
  1019.  
  1020. <p>Getting the PCB outline from my head and into KiCAD was rather difficult process, in my opinion. I thought about using Inkscape, but I&#8217;m not super familiar with it and so I went with FreeCAD and ended up spending almost an entire day on it. </p>
  1021.  
  1022.  
  1023.  
  1024. <figure class="wp-block-image size-full"><img decoding="async" width="706" height="622" data-attachment-id="15237" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-11/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-11.png" data-orig-size="706,622" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-11" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-11-300x264.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-11.png" src="https://andrewferguson.net/wp-content/uploads/2022/02/image-11.png" alt="" class="wp-image-15237" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/image-11.png 706w, https://andrewferguson.net/wp-content/uploads/2022/02/image-11-300x264.png 300w" sizes="(max-width: 706px) 100vw, 706px" /></figure>
  1025.  
  1026.  
  1027.  
  1028. <p>I was able to export my outline as a DXF and import it in to KiCAD and then lay everything out.</p>
  1029.  
  1030.  
  1031.  
  1032. <h2 class="wp-block-heading" id="pcb-layout">PCB Layout</h2>
  1033.  
  1034.  
  1035.  
  1036. <p>Layout was incredibly fun and it was hard to stop—there&#8217;s always something that can be tweaked. I did a two layer board. I probably spent way to much time adding fun little things. See if you can spot them all!</p>
  1037.  
  1038.  
  1039.  
  1040. <figure data-carousel-extra='{"blog_id":1,"permalink":"https:\/\/andrewferguson.net\/2022\/02\/08\/show-and-tell-and-lessons-learned-macro-keyboard\/"}'  class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-7 is-layout-flex wp-block-gallery-is-layout-flex">
  1041. <figure class="wp-block-image size-large"><img decoding="async" width="717" height="839" data-attachment-id="15242" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/reva-r8_front/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/RevA-R8_front.png" data-orig-size="717,839" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="RevA-R8_front" data-image-description="" data-image-caption="&lt;p&gt;Front&lt;/p&gt;
  1042. " data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/RevA-R8_front-256x300.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/RevA-R8_front.png" data-id="15242" src="https://andrewferguson.net/wp-content/uploads/2022/02/RevA-R8_front.png" alt="" class="wp-image-15242" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/RevA-R8_front.png 717w, https://andrewferguson.net/wp-content/uploads/2022/02/RevA-R8_front-256x300.png 256w" sizes="(max-width: 717px) 100vw, 717px" /><figcaption>Front</figcaption></figure>
  1043.  
  1044.  
  1045.  
  1046. <figure class="wp-block-image size-large"><img decoding="async" width="717" height="839" data-attachment-id="15243" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/reva-r8_back/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/RevA-R8_back.png" data-orig-size="717,839" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="RevA-R8_back" data-image-description="" data-image-caption="&lt;p&gt;Back&lt;/p&gt;
  1047. " data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/RevA-R8_back-256x300.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/RevA-R8_back.png" data-id="15243" src="https://andrewferguson.net/wp-content/uploads/2022/02/RevA-R8_back.png" alt="" class="wp-image-15243" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/RevA-R8_back.png 717w, https://andrewferguson.net/wp-content/uploads/2022/02/RevA-R8_back-256x300.png 256w" sizes="(max-width: 717px) 100vw, 717px" /><figcaption>Back</figcaption></figure>
  1048. </figure>
  1049.  
  1050.  
  1051.  
  1052. <p>Most of the parts I used had footprints (either provided by the class, from the vendor, or through <a href="https://www.ultralibrarian.com/">Ultralibrarian</a>). I did have to make a couple footprints, such as for the Amphenol connector:</p>
  1053.  
  1054.  
  1055.  
  1056. <figure class="wp-block-image size-full"><img decoding="async" width="689" height="372" data-attachment-id="15236" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-10/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-10.png" data-orig-size="689,372" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-10" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-10-300x162.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-10.png" src="https://andrewferguson.net/wp-content/uploads/2022/02/image-10.png" alt="" class="wp-image-15236" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/image-10.png 689w, https://andrewferguson.net/wp-content/uploads/2022/02/image-10-300x162.png 300w" sizes="(max-width: 689px) 100vw, 689px" /><figcaption>F31L-1A7H1-11024 footprint I had to design</figcaption></figure>
  1057.  
  1058.  
  1059.  
  1060. <p>Going from the schematic to the layout might be a confusing, so I put together this graphic showing how the NeoPixel schematic and the switch schematic end up as looking on the laid-out PCB:</p>
  1061.  
  1062.  
  1063.  
  1064. <figure class="wp-block-image size-full"><img decoding="async" width="821" height="730" data-attachment-id="15240" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/image-14/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-14.png" data-orig-size="821,730" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-14" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-14-300x267.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/image-14.png" src="https://andrewferguson.net/wp-content/uploads/2022/02/image-14.png" alt="" class="wp-image-15240" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/image-14.png 821w, https://andrewferguson.net/wp-content/uploads/2022/02/image-14-300x267.png 300w, https://andrewferguson.net/wp-content/uploads/2022/02/image-14-768x683.png 768w" sizes="(max-width: 821px) 100vw, 821px" /></figure>
  1065.  
  1066.  
  1067.  
  1068. <p>Also potentially confusing is that most of the time I&#8217;m working without the filled-in areas shown. In reality though, all the empty space is actually filled in as part of the ground plane.</p>
  1069.  
  1070.  
  1071.  
  1072. <figure class="wp-block-image size-full"><img decoding="async" width="600" height="392" data-attachment-id="15241" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/filled_not_filled/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/filled_not_filled.gif" data-orig-size="600,392" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="filled_not_filled" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/filled_not_filled-300x196.gif" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/filled_not_filled.gif" src="https://andrewferguson.net/wp-content/uploads/2022/02/filled_not_filled.gif" alt="" class="wp-image-15241"/></figure>
  1073.  
  1074.  
  1075.  
  1076. <p>The final design looks something like this:</p>
  1077.  
  1078.  
  1079.  
  1080. <figure data-carousel-extra='{"blog_id":1,"permalink":"https:\/\/andrewferguson.net\/2022\/02\/08\/show-and-tell-and-lessons-learned-macro-keyboard\/"}'  class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-8 is-layout-flex wp-block-gallery-is-layout-flex">
  1081. <figure class="wp-block-image size-full"><img decoding="async" width="1004" height="846" data-attachment-id="15246" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/render_front/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/render_front.jpg" data-orig-size="1004,846" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="render_front" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/render_front-300x253.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/render_front.jpg" data-id="15246" src="https://andrewferguson.net/wp-content/uploads/2022/02/render_front.jpg" alt="" class="wp-image-15246" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/render_front.jpg 1004w, https://andrewferguson.net/wp-content/uploads/2022/02/render_front-300x253.jpg 300w, https://andrewferguson.net/wp-content/uploads/2022/02/render_front-768x647.jpg 768w" sizes="(max-width: 1004px) 100vw, 1004px" /><figcaption>Front</figcaption></figure>
  1082.  
  1083.  
  1084.  
  1085. <figure class="wp-block-image size-full"><img decoding="async" width="1004" height="846" data-attachment-id="15245" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/render_back/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/render_back.jpg" data-orig-size="1004,846" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="render_back" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/render_back-300x253.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/render_back.jpg" data-id="15245" src="https://andrewferguson.net/wp-content/uploads/2022/02/render_back.jpg" alt="" class="wp-image-15245" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/render_back.jpg 1004w, https://andrewferguson.net/wp-content/uploads/2022/02/render_back-300x253.jpg 300w, https://andrewferguson.net/wp-content/uploads/2022/02/render_back-768x647.jpg 768w" sizes="(max-width: 1004px) 100vw, 1004px" /><figcaption>Back</figcaption></figure>
  1086. </figure>
  1087.  
  1088.  
  1089.  
  1090. <p>One of the nice things about KiCAD is that is does a pretty decent render which I think is helpful for doing spacing checks on components</p>
  1091.  
  1092.  
  1093.  
  1094. <h2 class="wp-block-heading" id="parts-ordering">Parts Ordering</h2>
  1095.  
  1096.  
  1097.  
  1098. <p>I order most of my component parts through DigiKey, but some from Mouser and SparkFun as well. All total, it was about $51.87+tax (in reality the total is a bit more because I bought some extras of certain components). I also had to make several orders because of course I forgot things.</p>
  1099.  
  1100.  
  1101.  
  1102. <p>The PCB was ordered from JLCPCB<sup id="rf4-15213"><a href="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/#fn4-15213" title="contrary to what my wife thought, I was not using my 3D printer to make the PCB" rel="footnote">4</a></sup>. It&#8217;s amazing how inexpensive PCBs can be! I opted for Electroless nickel immersion gold (ENIG) plating because of aesthetics, so my board was $27.90 + S&amp;H — and that includes 5 copies of the PCB (their minimum order). However, if I did the basic PCB manufacturing it would have been about $9.20 + S&amp;H!</p>
  1103.  
  1104.  
  1105.  
  1106. <p>Strange Parts has a <a href="https://www.youtube.com/watch?v=ljOoGyCso8s">great tour of the JLCPCB factory that&#8217;s worth watching</a>!</p>
  1107.  
  1108.  
  1109.  
  1110. <p>I also had JLCPCB print the e-stop button and deflector should since they could do it in nylon and it only cost $1/each + S&amp;H.</p>
  1111.  
  1112.  
  1113.  
  1114. <h2 class="wp-block-heading" id="assembly">Assembly</h2>
  1115.  
  1116.  
  1117.  
  1118. <p>Assembly was pretty straight forward, I printed out my BOM and started soldering. My approach was to solder in stages, doing the most difficult soldering first, and then do it by sub-system (starting with the NeoPixels) so I could do integration testing as I progressed.</p>
  1119.  
  1120.  
  1121.  
  1122. <p>While this was my first PCB design, this was not my first PCB assembly and I feel pretty comfortable with the soldering iron. The passive components are Surface Mount Device (SMD) size 2012 (0805 imperial), which means they 2.0 mm (not cm) long and 1.2mm wide. That is very tiny. Ideally I would use solder paste and a reflow oven, but I don&#8217;t have one&#8230;yet.</p>
  1123.  
  1124.  
  1125.  
  1126. <p>I had a flux pen, but I found getting some liquid flux was extremely helpful — especially with the PCA9745B IC and FPC connector, which have a lot of fine pitch legs. I spent a lot of time trying to get the FPC connector soldered without the liquid flux and it was a nightmare.</p>
  1127.  
  1128.  
  1129.  
  1130. <p>I also ended up getting a stereo inspection microscope (which has been on my wishlist for ages) and that was helpful in inspecting some of my solder joints for any bridging. Having a good and bright light source is key though.</p>
  1131.  
  1132.  
  1133.  
  1134. <h2 class="wp-block-heading" id="board-bring-up">Board Bring Up</h2>
  1135.  
  1136.  
  1137.  
  1138. <p>Bringing up the board was pretty easy for the most part.</p>
  1139.  
  1140.  
  1141.  
  1142. <p>This was my first foray into CircuitPython and had I <a href="https://learn.adafruit.com/welcome-to-circuitpython/installing-circuitpython">RTFM</a>, I would have known that while &#8220;some of the CircuitPython compatible boards come with CircuitPython installed. Others [such as the Pico] are <em>CircuitPython-ready</em>, but need to have it installed.&#8221;</p>
  1143.  
  1144.  
  1145.  
  1146. <p>The two most challenging things were the eInk display and the PCA9745B LED driver (which I used for the RGB LEDs on the rotary encoders). The biggest issue: there was no CircuitPython module for either of those.</p>
  1147.  
  1148.  
  1149.  
  1150. <p>I ended up writing a module for both, which you can find on GitHub for now and hopefully PiPy in the future:</p>
  1151.  
  1152.  
  1153.  
  1154. <ul><li><a href="https://github.com/fergbrain/Fergcorp_CircuitPython_PCA9745B">Fergcorp_CircuitPython_PCA9745B</a></li><li><a href="https://github.com/fergbrain/Fergcorp_CircuitPython_PDISpectra">Fergcorp_CircuitPython_PDISpectra</a></li></ul>
  1155.  
  1156.  
  1157.  
  1158. <p>The PCA9745B was probably the easiest and least complex. I was also able to find a <a href="https://github.com/sensorberg/PCA9745B">micropython library for the PCA9745B</a> written by Mirko Vogt at Sensorberg GmbH that was helpful to validate some of my assumptions with.</p>
  1159.  
  1160.  
  1161.  
  1162. <p>The Pervasive Display eInk display was more challenging and involved a fair amount of integration hell. Between flip-flopped Busy and Command/Data lines, not having a RESET line (which I&#8217;m still not convinced I need), and using the wrong resistor on the current sense line for the DC-DC booster, I was never really sure if my problems were software or hardware or both.</p>
  1163.  
  1164.  
  1165.  
  1166. <p>The eInk display was a reach goal and I had to step away from it many times because of the often head-banging frustration.</p>
  1167.  
  1168.  
  1169.  
  1170. <p>I was eventually able to find an Arduino library from Pervasive Display, and so I was able to use that to verify if my hardware was correct — it wasn&#8217;t.</p>
  1171.  
  1172.  
  1173.  
  1174. <p>I actually ended up ordering their development breakout kit (which has all the hardware needed to run the board, including—crucially—the DC-DC booster, and another Pico so I do development with known-good hardware (best $20 spent).</p>
  1175.  
  1176.  
  1177.  
  1178. <div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
  1179. <p>Adafruit/CircuitPython (by way of micropython) has a <code>displayio.EPaperDisplay</code> class that I was able to extend, so I didn&#8217;t have to write much of the code from scratch.</p>
  1180. </div></div>
  1181.  
  1182.  
  1183.  
  1184. <p>One of the interesting things about the Pervasive Display eInk display I was using is that it&#8217;s part of their Spectra line which has a chip on glass (CoG) and internal timing circuitry instead of a separate controller (such as the IL0373 or SSD1608). In theory it&#8217;s easier to drive since you don&#8217;t have to deal with complicated look up tables (LUT), you just send it the bitmap data you want and it handles the rest.</p>
  1185.  
  1186.  
  1187.  
  1188. <p>I have an MSO-19, which is a USB oscilloscope and logic analyzer and that was incredibly helpful as well.</p>
  1189.  
  1190.  
  1191.  
  1192. <h2 class="wp-block-heading" id="coding">Coding</h2>
  1193.  
  1194.  
  1195.  
  1196. <p>The code running on the keypad is <a href="http://docs.circuitpython.org/en/latest/README.html">CircuitPython</a>, an open source version of Python for tiny, inexpensive computers called microcontrollers.</p>
  1197.  
  1198.  
  1199.  
  1200. <p>I may be new to CircuitPython, but not Python. So it&#8217;s a pretty natural fit for my programming.</p>
  1201.  
  1202.  
  1203.  
  1204. <p>I basically wrote my program as a state machine. It really wasn&#8217;t the point of the course, and there&#8217;s nothing terribly novel or exciting about it (outside of the two modules I wrote:<a href="https://github.com/fergbrain/Fergcorp_CircuitPython_PDISpectra"> </a><a href="https://github.com/fergbrain/Fergcorp_CircuitPython_PCA9745B">Fergcorp_CircuitPython_PCA9745B</a> and <a href="https://github.com/fergbrain/Fergcorp_CircuitPython_PDISpectra">Fergcorp_CircuitPython_PDISpectra</a>). The code is on GitHub (<a href="https://github.com/fergbrain/MacroKeyboard">https://github.com/fergbrain/MacroKeyboard</a>) and I&#8217;m still tinkering with it as of this writing.</p>
  1205.  
  1206.  
  1207.  
  1208. <p>I leverage Adafruit&#8217;s vast library of CircuitPython modules to handle almost everything, including all the heaving lifting for:</p>
  1209.  
  1210.  
  1211.  
  1212. <ul><li>USB HID (the part which makes the Pico act like a keyboard) via <code>adafruit_hid</code></li><li>Button debouncing via <code>adafruit_debouncer</code></li><li>Interfacing with the VEML7700 via <code>adafruit_veml7700</code></li></ul>
  1213.  
  1214.  
  1215.  
  1216. <p>The primary function is, of course, as a Macro Keyboard: keys that I can program to do things on the computer. I&#8217;ve also added some other stuff to show off off the board and have some fun:</p>
  1217.  
  1218.  
  1219.  
  1220. <ul><li>Show the TeachMePCB logo, which also shows off the NeoPixel animation and ambient light sensor</li><li>Generate and show a QR code (that of course points to the Rick Roll video)</li><li>Play Tic-Tac-Toe against the computer (implementing the <a href="https://en.wikipedia.org/wiki/Minimax">minimax algorithm</a>)</li></ul>
  1221.  
  1222.  
  1223.  
  1224. <figure class="wp-block-video"><video controls src="https://andrewferguson.net/wp-content/uploads/2022/02/light_sensor.mp4"></video><figcaption>Demonstration of the ambient light sensor dimming all the LEDs.</figcaption></figure>
  1225.  
  1226.  
  1227.  
  1228. <p>The screen is crisp and has great resolution (152&#215;152), but it takes 25 seconds to refresh:</p>
  1229.  
  1230.  
  1231.  
  1232. <figure class="wp-block-video"><video controls src="https://andrewferguson.net/wp-content/uploads/2022/02/refresh.mp4"></video><figcaption>Display refresh time is agonizingly slow</figcaption></figure>
  1233.  
  1234.  
  1235.  
  1236. <p>In theory I should be able to shave 10 seconds off the refresh rate since the datasheet says it should typically take 14.5 seconds. Unfortunately, since the CoG of this particular display generates the actual waveforms I can&#8217;t <a href="https://www.youtube.com/watch?v=MsbiO8EAsGw">hack a faster refresh the way Ben did in his video on Applied Science</a>.</p>
  1237.  
  1238.  
  1239.  
  1240. <p>As a learning exercise in making my own PCB this has been a resounding success for me and I can&#8217;t thank the TeachMePCB facilitators (Mark and Jesse) enough! I managed to get everything working (despite my several snafus) and I&#8217;m pretty pleased with it.</p>
  1241.  
  1242.  
  1243.  
  1244. <p>Adding the eInk was a good challenge and I&#8217;m glad I got it working.</p>
  1245.  
  1246.  
  1247.  
  1248. <p>I have lots of ideas for other things I&#8217;d like to make, so who knows what will show up next in a Show and Tell.</p>
  1249.  
  1250.  
  1251.  
  1252. <h2 class="wp-block-heading" id="bonus">Bonus</h2>
  1253.  
  1254.  
  1255.  
  1256. <p>As a bonus, I also got to show off an almost completed version a couple weeks ago (26 January 2022) at Adafruit&#8217;s Show and Tell (I&#8217;m at the very end, start at 22m24s):</p>
  1257.  
  1258.  
  1259.  
  1260. <figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
  1261. <div class="nv-iframe-embed"><iframe title="SHOW and TELL 1/26/2022" width="1200" height="675" src="https://www.youtube.com/embed/oWC4pC-3Bz0?start=1344&#038;feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></div>
  1262. </div></figure>
  1263.  
  1264.  
  1265.  
  1266. <figure data-carousel-extra='{"blog_id":1,"permalink":"https:\/\/andrewferguson.net\/2022\/02\/08\/show-and-tell-and-lessons-learned-macro-keyboard\/"}'  class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-9 is-layout-flex wp-block-gallery-is-layout-flex">
  1267. <figure class="wp-block-image size-large"><img decoding="async" width="1024" height="681" data-attachment-id="15281" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/42626890_cfe72fc1f0_o/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/42626890_cfe72fc1f0_o-scaled.jpg" data-orig-size="2560,1702" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;4.5&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D70&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1118862790&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;70&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0.016666666666667&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="42626890_cfe72fc1f0_o" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/42626890_cfe72fc1f0_o-300x199.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/42626890_cfe72fc1f0_o-1024x681.jpg" data-id="15281" src="https://andrewferguson.net/wp-content/uploads/2022/02/42626890_cfe72fc1f0_o-1024x681.jpg" alt="" class="wp-image-15281" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/42626890_cfe72fc1f0_o-1024x681.jpg 1024w, https://andrewferguson.net/wp-content/uploads/2022/02/42626890_cfe72fc1f0_o-300x199.jpg 300w, https://andrewferguson.net/wp-content/uploads/2022/02/42626890_cfe72fc1f0_o-768x511.jpg 768w, https://andrewferguson.net/wp-content/uploads/2022/02/42626890_cfe72fc1f0_o-1536x1021.jpg 1536w, https://andrewferguson.net/wp-content/uploads/2022/02/42626890_cfe72fc1f0_o-2048x1362.jpg 2048w, https://andrewferguson.net/wp-content/uploads/2022/02/42626890_cfe72fc1f0_o-1320x878.jpg 1320w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
  1268.  
  1269.  
  1270.  
  1271. <figure class="wp-block-image size-large"><img decoding="async" width="1024" height="681" data-attachment-id="15280" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/42626775_097004622f_o/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/42626775_097004622f_o-scaled.jpg" data-orig-size="2560,1702" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;4.5&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D70&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1118862782&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;70&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0.016666666666667&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="42626775_097004622f_o" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/42626775_097004622f_o-300x199.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/42626775_097004622f_o-1024x681.jpg" data-id="15280" src="https://andrewferguson.net/wp-content/uploads/2022/02/42626775_097004622f_o-1024x681.jpg" alt="" class="wp-image-15280" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/42626775_097004622f_o-1024x681.jpg 1024w, https://andrewferguson.net/wp-content/uploads/2022/02/42626775_097004622f_o-300x199.jpg 300w, https://andrewferguson.net/wp-content/uploads/2022/02/42626775_097004622f_o-768x511.jpg 768w, https://andrewferguson.net/wp-content/uploads/2022/02/42626775_097004622f_o-1536x1021.jpg 1536w, https://andrewferguson.net/wp-content/uploads/2022/02/42626775_097004622f_o-2048x1362.jpg 2048w, https://andrewferguson.net/wp-content/uploads/2022/02/42626775_097004622f_o-1320x878.jpg 1320w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
  1272.  
  1273.  
  1274.  
  1275. <figure class="wp-block-image size-large"><img decoding="async" width="1024" height="681" data-attachment-id="15282" data-permalink="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/42626721_a61270475e_o/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2022/02/42626721_a61270475e_o-scaled.jpg" data-orig-size="2560,1702" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;4.5&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D70&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1118862776&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;48&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0.016666666666667&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="42626721_a61270475e_o" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2022/02/42626721_a61270475e_o-300x199.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2022/02/42626721_a61270475e_o-1024x681.jpg" data-id="15282" src="https://andrewferguson.net/wp-content/uploads/2022/02/42626721_a61270475e_o-1024x681.jpg" alt="" class="wp-image-15282" srcset="https://andrewferguson.net/wp-content/uploads/2022/02/42626721_a61270475e_o-1024x681.jpg 1024w, https://andrewferguson.net/wp-content/uploads/2022/02/42626721_a61270475e_o-300x199.jpg 300w, https://andrewferguson.net/wp-content/uploads/2022/02/42626721_a61270475e_o-768x511.jpg 768w, https://andrewferguson.net/wp-content/uploads/2022/02/42626721_a61270475e_o-1536x1021.jpg 1536w, https://andrewferguson.net/wp-content/uploads/2022/02/42626721_a61270475e_o-2048x1362.jpg 2048w, https://andrewferguson.net/wp-content/uploads/2022/02/42626721_a61270475e_o-1320x878.jpg 1320w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
  1276. <figcaption class="blocks-gallery-caption">Here&#8217;s the rotary cellphone I mentioned. Phillip Torrone brought it to the <a href="https://andrewferguson.net/2005/06/16/blog-meetup/">June 15, 2005 Seattle Blogger Meetup</a>.</figcaption></figure>
  1277. <hr class="footnotes"><ol class="footnotes" style="list-style-type:decimal"><li id="fn1-15213"><p >probably via <a href="https://news.ycombinator.com/item?id=28742902">https://news.ycombinator.com/item?id=28742902</a>&nbsp;<a href="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/#rf1-15213" class="backlink" title="Return to footnote 1.">&#8617;</a></p></li><li id="fn2-15213"><p >see <a href="https://andrewferguson.net/2013/09/23/to-the-printer/">https://andrewferguson.net/2013/09/23/to-the-printer/</a> and <a href="https://andrewferguson.net/2014/03/31/progress-continues/">https://andrewferguson.net/2014/03/31/progress-continues/</a>&nbsp;<a href="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/#rf2-15213" class="backlink" title="Return to footnote 2.">&#8617;</a></p></li><li id="fn3-15213"><p >Narrator: &#8220;He didn&#8217;t&#8221;&nbsp;<a href="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/#rf3-15213" class="backlink" title="Return to footnote 3.">&#8617;</a></p></li><li id="fn4-15213"><p >contrary to what my wife thought, I was not using my 3D printer to make the PCB&nbsp;<a href="https://andrewferguson.net/2022/02/08/show-and-tell-and-lessons-learned-macro-keyboard/#rf4-15213" class="backlink" title="Return to footnote 4.">&#8617;</a></p></li></ol>]]></content:encoded>
  1278. <enclosure url="https://andrewferguson.net/wp-content/uploads/2022/02/light_sensor.mp4" length="2434252" type="video/mp4" />
  1279. <enclosure url="https://andrewferguson.net/wp-content/uploads/2022/02/refresh.mp4" length="3314656" type="video/mp4" />
  1280.  
  1281. <post-id xmlns="com-wordpress:feed-additions:1">15213</post-id> </item>
  1282. <item>
  1283. <title>2010 Prius Microphone</title>
  1284. <link>https://andrewferguson.net/2020/12/19/2010-prius-microphone/</link>
  1285. <dc:creator><![CDATA[Andrew]]></dc:creator>
  1286. <pubDate>Sat, 19 Dec 2020 20:12:14 +0000</pubDate>
  1287. <category><![CDATA[Technology's Infestation of my Life]]></category>
  1288. <category><![CDATA[microphone]]></category>
  1289. <category><![CDATA[opamp]]></category>
  1290. <category><![CDATA[oscilloscope]]></category>
  1291. <category><![CDATA[Prius]]></category>
  1292. <category><![CDATA[Toyota]]></category>
  1293. <guid isPermaLink="false">https://andrewferguson.net/?p=13750</guid>
  1294.  
  1295. <description><![CDATA[This is an update to Notes on Installing Sony XAV-AX100 in a 2010 Prius, specifically trying to integrate the factory microphone. Unfortunately, the microphone is pre-amplified with what I believe to be a New Japan Radio Co. 2140 Op-Amp (the black IC in the middle on front side, pin 1 is upper left corner). When&#8230;&#160;<a href="https://andrewferguson.net/2020/12/19/2010-prius-microphone/" class="" rel="bookmark">Read More &#187;<span class="screen-reader-text">2010 Prius Microphone</span></a>]]></description>
  1296. <content:encoded><![CDATA[
  1297. <p><em>This is an update to <a href="https://andrewferguson.net/2020/08/08/notes-on-installing-sony-xav-ax100-in-a-2010-prius/">Notes on Installing Sony XAV-AX100 in a 2010 Prius</a>, specifically trying to integrate the factory microphone.</em></p>
  1298.  
  1299.  
  1300.  
  1301. <p>Unfortunately, the microphone is pre-amplified with what I believe to be a <a href="https://www.njr.com/electronic_device/PDF/NJM2140_E.pdf">New Japan Radio Co. 2140 Op-Amp</a> (the black IC in the middle on front side, pin 1 is upper left corner). </p>
  1302.  
  1303.  
  1304.  
  1305. <figure data-carousel-extra='{"blog_id":1,"permalink":"https:\/\/andrewferguson.net\/2020\/12\/19\/2010-prius-microphone\/"}'  class="wp-block-gallery columns-2 is-cropped wp-block-gallery-10 is-layout-flex wp-block-gallery-is-layout-flex"><ul class="blocks-gallery-grid"><li class="blocks-gallery-item"><figure><img decoding="async" width="892" height="1024" data-attachment-id="13752" data-permalink="https://andrewferguson.net/2020/12/19/2010-prius-microphone/img_1309/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/12/IMG_1309.jpeg" data-orig-size="1708,1961" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;1.8&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;iPhone SE (2nd generation)&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1599077124&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;3.99&quot;,&quot;iso&quot;:&quot;250&quot;,&quot;shutter_speed&quot;:&quot;0.025&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="IMG_1309" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/12/IMG_1309-261x300.jpeg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/12/IMG_1309-892x1024.jpeg" src="https://andrewferguson.net/wp-content/uploads/2020/12/IMG_1309-892x1024.jpeg" alt="" data-id="13752" class="wp-image-13752" srcset="https://andrewferguson.net/wp-content/uploads/2020/12/IMG_1309-892x1024.jpeg 892w, https://andrewferguson.net/wp-content/uploads/2020/12/IMG_1309-261x300.jpeg 261w, https://andrewferguson.net/wp-content/uploads/2020/12/IMG_1309-768x882.jpeg 768w, https://andrewferguson.net/wp-content/uploads/2020/12/IMG_1309-1338x1536.jpeg 1338w, https://andrewferguson.net/wp-content/uploads/2020/12/IMG_1309-1320x1516.jpeg 1320w, https://andrewferguson.net/wp-content/uploads/2020/12/IMG_1309.jpeg 1708w" sizes="(max-width: 892px) 100vw, 892px" /><figcaption class="blocks-gallery-item__caption">Front side</figcaption></figure></li><li class="blocks-gallery-item"><figure><img decoding="async" width="767" height="1024" data-attachment-id="13751" data-permalink="https://andrewferguson.net/2020/12/19/2010-prius-microphone/img_1308/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/12/IMG_1308.jpeg" data-orig-size="1283,1713" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;1.8&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;iPhone SE (2nd generation)&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1599077107&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;3.99&quot;,&quot;iso&quot;:&quot;250&quot;,&quot;shutter_speed&quot;:&quot;0.016666666666667&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="IMG_1308" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/12/IMG_1308-225x300.jpeg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/12/IMG_1308-767x1024.jpeg" src="https://andrewferguson.net/wp-content/uploads/2020/12/IMG_1308-767x1024.jpeg" alt="" data-id="13751" class="wp-image-13751" srcset="https://andrewferguson.net/wp-content/uploads/2020/12/IMG_1308-767x1024.jpeg 767w, https://andrewferguson.net/wp-content/uploads/2020/12/IMG_1308-225x300.jpeg 225w, https://andrewferguson.net/wp-content/uploads/2020/12/IMG_1308-768x1025.jpeg 768w, https://andrewferguson.net/wp-content/uploads/2020/12/IMG_1308-1150x1536.jpeg 1150w, https://andrewferguson.net/wp-content/uploads/2020/12/IMG_1308.jpeg 1283w" sizes="(max-width: 767px) 100vw, 767px" /><figcaption class="blocks-gallery-item__caption">Back side</figcaption></figure></li></ul></figure>
  1306.  
  1307.  
  1308.  
  1309. <p>When connected to the factory head unit, the output signal of the factory microphone module was about 500mv peak-to-peak and centered on 0.0v. </p>
  1310.  
  1311.  
  1312.  
  1313. <div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="569" height="413" data-attachment-id="13754" data-permalink="https://andrewferguson.net/2020/12/19/2010-prius-microphone/factory_head_unit_oscope/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/12/factory_head_unit_oscope.jpg" data-orig-size="569,413" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="factory_head_unit_oscope" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/12/factory_head_unit_oscope-300x218.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/12/factory_head_unit_oscope.jpg" src="https://andrewferguson.net/wp-content/uploads/2020/12/factory_head_unit_oscope.jpg" alt="" class="wp-image-13754" srcset="https://andrewferguson.net/wp-content/uploads/2020/12/factory_head_unit_oscope.jpg 569w, https://andrewferguson.net/wp-content/uploads/2020/12/factory_head_unit_oscope-300x218.jpg 300w" sizes="(max-width: 569px) 100vw, 569px" /><figcaption>Factory microphone output signal when connected to factory head unit</figcaption></figure></div>
  1314.  
  1315.  
  1316.  
  1317. <p>I wasn&#8217;t able to get a great oscilloscope capture of the factory microphone output when connected to the Sony head unit, but it ended up being biased by about 3.3v and about 400mv peak-to-peak.</p>
  1318.  
  1319.  
  1320.  
  1321. <p>I could have re-wired the factory microphone circuit to remove the amplification, or even made a new circuit to de-amplify it and put that inline. But I decided that was too much work and just installed an external 3.5mm microphone instead:</p>
  1322.  
  1323.  
  1324.  
  1325. <ul><li><a href="https://amzn.to/2LTtMYX">3.5mm Microphone External Mic Assembly for Car Vehicle Head Unit</a> &#8211; $7</li></ul>
  1326.  
  1327.  
  1328.  
  1329. <p></p>
  1330. ]]></content:encoded>
  1331. <post-id xmlns="com-wordpress:feed-additions:1">13750</post-id> </item>
  1332. <item>
  1333. <title>Notes on Installing Sony XAV-AX100 in a 2010 Prius</title>
  1334. <link>https://andrewferguson.net/2020/08/08/notes-on-installing-sony-xav-ax100-in-a-2010-prius/</link>
  1335. <dc:creator><![CDATA[Andrew]]></dc:creator>
  1336. <pubDate>Sat, 08 Aug 2020 22:07:35 +0000</pubDate>
  1337. <category><![CDATA[Technology's Infestation of my Life]]></category>
  1338. <category><![CDATA[CANBUS]]></category>
  1339. <category><![CDATA[DIY]]></category>
  1340. <category><![CDATA[microphone]]></category>
  1341. <category><![CDATA[Prius]]></category>
  1342. <category><![CDATA[radio]]></category>
  1343. <category><![CDATA[Sony]]></category>
  1344. <category><![CDATA[Toyota]]></category>
  1345. <category><![CDATA[XAV-AX100]]></category>
  1346. <guid isPermaLink="false">https://andrewferguson.net/?p=13451</guid>
  1347.  
  1348. <description><![CDATA[Parts Sony XAV-AX100 &#8212; $240 Metra 95-8226B Dash Kit for Toyota Prius 2010 Double DIN (Black)&#8212; $15 Metra TYTO-01 JBL Amplifier Interface Harness &#8212; $40 Axxess AX-TOYCAM2-6V Toyota Back-Up Camera Retain/Add-On with 6 Volt Turn on &#8212; $11 Metra 70-8114 Steering Wheel Control Wire Harness with RCA for 2003-Up Select Toyota/Scion/Lexus Vehicles &#8212; $7 Note:&#8230;&#160;<a href="https://andrewferguson.net/2020/08/08/notes-on-installing-sony-xav-ax100-in-a-2010-prius/" class="" rel="bookmark">Read More &#187;<span class="screen-reader-text">Notes on Installing Sony XAV-AX100 in a 2010 Prius</span></a>]]></description>
  1349. <content:encoded><![CDATA[
  1350. <h2 class="wp-block-heading">Parts</h2>
  1351.  
  1352.  
  1353.  
  1354. <p><a href="https://amzn.to/3imuEA7">Sony XAV-AX100</a> &#8212; $240</p>
  1355.  
  1356.  
  1357.  
  1358. <p><a href="https://amzn.to/3fqxFxA">Metra 95-8226B Dash Kit for Toyota Prius 2010 Double DIN (Black)</a>&#8212; $15</p>
  1359.  
  1360.  
  1361.  
  1362. <p><a href="https://amzn.to/39ZegCL">Metra TYTO-01 JBL Amplifier Interface Harness</a> &#8212; $40</p>
  1363.  
  1364.  
  1365.  
  1366. <p><a href="https://amzn.to/2DfKfmh">Axxess AX-TOYCAM2-6V Toyota Back-Up Camera Retain/Add-On with 6 Volt Turn on</a> &#8212; $11</p>
  1367.  
  1368.  
  1369.  
  1370. <p><a href="https://amzn.to/3frET4v">Metra 70-8114 Steering Wheel Control Wire Harness with RCA for 2003-Up Select Toyota/Scion/Lexus Vehicles</a> &#8212; $7</p>
  1371.  
  1372.  
  1373.  
  1374. <p><em>Note: You do <strong>not</strong> need the ASWC-1 module, we&#8217;re just going to cannibalize this harness for it&#8217;s connectors</em></p>
  1375.  
  1376.  
  1377.  
  1378. <p><a href="https://amzn.to/3fseVxH">DC/DC Converter 12 to 5V</a> &#8212; $7</p>
  1379.  
  1380.  
  1381.  
  1382. <p><a href="https://amzn.to/3kypH9B">3.5mm Tip/Sleve (Mono) adapter/pigtail</a> &#8212; $8</p>
  1383.  
  1384.  
  1385.  
  1386. <p><a href="https://amzn.to/3fwJHFS">Cllena High Speed Dual Port USB Car Charger with Audio Socket for Toyota Series</a> &#8212; $15</p>
  1387.  
  1388.  
  1389.  
  1390. <p><em>Note: The 2010 Prius did not include a USB adapter/plug &#8212; even for the Trim V and/or Nav package</em></p>
  1391.  
  1392.  
  1393.  
  1394. <p><em>Note: For the 2010 Prius you&#8217;ll need the one that is 22mm x 33mm (0.87in x 1.3in). This is also the same size as the 2015 RAV4</em>.</p>
  1395.  
  1396.  
  1397.  
  1398. <div data-carousel-extra='{"blog_id":1,"permalink":"https:\/\/andrewferguson.net\/2020\/08\/08\/notes-on-installing-sony-xav-ax100-in-a-2010-prius\/"}'  class="wp-block-jetpack-tiled-gallery aligncenter is-style-rectangular"><div class="tiled-gallery__gallery"><div class="tiled-gallery__row"><div class="tiled-gallery__col" style="flex-basis:50%"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="13468" data-permalink="https://andrewferguson.net/2020/08/08/notes-on-installing-sony-xav-ax100-in-a-2010-prius/mveplcz0qbmtdeuufyldig_thumb_243a/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/08/MVePLCZ0QBmTdEuuFyldig_thumb_243a.jpg" data-orig-size="768,1024" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="MVePLCZ0QBmTdEuuFyldig_thumb_243a" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/08/MVePLCZ0QBmTdEuuFyldig_thumb_243a-225x300.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/08/MVePLCZ0QBmTdEuuFyldig_thumb_243a.jpg" data-attachment-id="13468" data-permalink="https://andrewferguson.net/2020/08/08/notes-on-installing-sony-xav-ax100-in-a-2010-prius/mveplcz0qbmtdeuufyldig_thumb_243a/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/08/MVePLCZ0QBmTdEuuFyldig_thumb_243a.jpg" data-orig-size="768,1024" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="MVePLCZ0QBmTdEuuFyldig_thumb_243a" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/08/MVePLCZ0QBmTdEuuFyldig_thumb_243a-225x300.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/08/MVePLCZ0QBmTdEuuFyldig_thumb_243a.jpg" srcset="https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/08/MVePLCZ0QBmTdEuuFyldig_thumb_243a.jpg?strip=info&#038;w=600&#038;ssl=1 600w,https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/08/MVePLCZ0QBmTdEuuFyldig_thumb_243a.jpg?strip=info&#038;w=768&#038;ssl=1 768w" alt="" data-height="1024" data-id="13468" data-link="https://andrewferguson.net/?attachment_id=13468" data-url="https://andrewferguson.net/wp-content/uploads/2020/08/MVePLCZ0QBmTdEuuFyldig_thumb_243a.jpg" data-width="768" src="https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/08/MVePLCZ0QBmTdEuuFyldig_thumb_243a.jpg?ssl=1" layout="responsive"/></figure></div><div class="tiled-gallery__col" style="flex-basis:50%"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="13467" data-permalink="https://andrewferguson.net/2020/08/08/notes-on-installing-sony-xav-ax100-in-a-2010-prius/nedphauvrrsvygopalrcdg_thumb_244d/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/08/nEDPhAuvRrSVYgoPalRcdg_thumb_244d.jpg" data-orig-size="768,1024" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="nEDPhAuvRrSVYgoPalRcdg_thumb_244d" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/08/nEDPhAuvRrSVYgoPalRcdg_thumb_244d-225x300.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/08/nEDPhAuvRrSVYgoPalRcdg_thumb_244d.jpg" data-attachment-id="13467" data-permalink="https://andrewferguson.net/2020/08/08/notes-on-installing-sony-xav-ax100-in-a-2010-prius/nedphauvrrsvygopalrcdg_thumb_244d/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/08/nEDPhAuvRrSVYgoPalRcdg_thumb_244d.jpg" data-orig-size="768,1024" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="nEDPhAuvRrSVYgoPalRcdg_thumb_244d" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/08/nEDPhAuvRrSVYgoPalRcdg_thumb_244d-225x300.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/08/nEDPhAuvRrSVYgoPalRcdg_thumb_244d.jpg" srcset="https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/08/nEDPhAuvRrSVYgoPalRcdg_thumb_244d.jpg?strip=info&#038;w=600&#038;ssl=1 600w,https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/08/nEDPhAuvRrSVYgoPalRcdg_thumb_244d.jpg?strip=info&#038;w=768&#038;ssl=1 768w" alt="" data-height="1024" data-id="13467" data-link="https://andrewferguson.net/?attachment_id=13467" data-url="https://andrewferguson.net/wp-content/uploads/2020/08/nEDPhAuvRrSVYgoPalRcdg_thumb_244d.jpg" data-width="768" src="https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/08/nEDPhAuvRrSVYgoPalRcdg_thumb_244d.jpg?ssl=1" layout="responsive"/></figure></div></div></div></div>
  1399.  
  1400.  
  1401.  
  1402. <h2 class="wp-block-heading">Steering Wheel Control</h2>
  1403.  
  1404.  
  1405.  
  1406. <p>I originally thought I needed the ASWC-1, but as it turns out there&#8217;s <em>two</em> ways Steering Wheel Control (SWC) signals could be sent: either as voltage-based<sup id="rf1-13451"><a href="https://andrewferguson.net/2020/08/08/notes-on-installing-sony-xav-ax100-in-a-2010-prius/#fn1-13451" title="I think there also may be a resistive-based analog format as well&#8230;so three ways" rel="footnote">1</a></sup> analog or as digital signals over the CANBUS.</p>
  1407.  
  1408.  
  1409.  
  1410. <p>Fortunately for me, both my Prius and the Sony XAV-AX100 use the voltage-based analog SWC signaling. I lopped off the <em>black</em> connector of the Metra 70-8114 (which normally would plug into the ASWC-1) and soldered to the red/white wires of the 3.5mm connector: </p>
  1411.  
  1412.  
  1413.  
  1414. <ul><li>Green/Orange to thin White (SW1)</li><li>Green/Black to thin Red (SW2)</li></ul>
  1415.  
  1416.  
  1417.  
  1418. <figure class="wp-block-table"><table><tbody><tr><td><strong>Terminal</strong></td><td><strong>Condition</strong></td><td><strong>Specification*</strong></td></tr><tr><td>L41-7 (SW1)</td><td>Seek+ switch pushed</td><td>&lt; 0.8 V</td></tr><tr><td>L41-7 (SW1)</td><td>Seek- switch pushed</td><td>0.9 to 1.3 V</td></tr><tr><td>L41-7 (SW1)</td><td>Volume+ switch pushed</td><td>1.65 to 1.9 V</td></tr><tr><td>L41-7 (SW1)</td><td>Volume- switch pushed</td><td>2.45 to 2.6 V</td></tr><tr><td>L41-7 (SW1)</td><td>Steering pad switch not operated</td><td>3.28 to 3.5 V</td></tr><tr><td>L41-8 (SW2)</td><td>MODE switch pushed</td><td>&lt; 0.8 V</td></tr><tr><td>L41-8 (SW2)</td><td>On hook switch pushed</td><td>0.9 to 1.3 V</td></tr><tr><td>L41-8 (SW2)</td><td>Off hook switch pushed</td><td>1.65 to 1.9 V</td></tr><tr><td>L41-8 (SW2)</td><td>Voice switch pushed</td><td>2.45 to 2.6 V</td></tr><tr><td>L41-8 (SW2)</td><td>Steering pad switch not operated</td><td>3.28 to 3.5 V</td></tr></tbody></table></figure>
  1419.  
  1420.  
  1421.  
  1422. <p>* With respect to L40-20 (GND)</p>
  1423.  
  1424.  
  1425.  
  1426. <p>On the XAV-AX100, there&#8217;s an option to program the SWC buttons, so I did that and everything works as expected.</p>
  1427.  
  1428.  
  1429.  
  1430. <figure class="wp-block-image size-large"><img decoding="async" width="1024" height="768" data-attachment-id="13474" data-permalink="https://andrewferguson.net/2020/08/08/notes-on-installing-sony-xav-ax100-in-a-2010-prius/cjuciajtqtecgpk814sjq_thumb_2453/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/08/cJucIAjTQteCGPk814sJQ_thumb_2453.jpg" data-orig-size="1024,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="cJucIAjTQteCGPk814sJQ_thumb_2453" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/08/cJucIAjTQteCGPk814sJQ_thumb_2453-300x225.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/08/cJucIAjTQteCGPk814sJQ_thumb_2453.jpg" src="https://andrewferguson.net/wp-content/uploads/2020/08/cJucIAjTQteCGPk814sJQ_thumb_2453.jpg" alt="" class="wp-image-13474" srcset="https://andrewferguson.net/wp-content/uploads/2020/08/cJucIAjTQteCGPk814sJQ_thumb_2453.jpg 1024w, https://andrewferguson.net/wp-content/uploads/2020/08/cJucIAjTQteCGPk814sJQ_thumb_2453-300x225.jpg 300w, https://andrewferguson.net/wp-content/uploads/2020/08/cJucIAjTQteCGPk814sJQ_thumb_2453-768x576.jpg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
  1431.  
  1432.  
  1433.  
  1434. <h2 class="wp-block-heading">Microphone</h2>
  1435.  
  1436.  
  1437.  
  1438. <p>The Prius has a microphone (at least mine does) and I wanted to keep that microphone instead of adding a new one.</p>
  1439.  
  1440.  
  1441.  
  1442. <p>The microphone in the Prius requires 5V for it&#8217;s built in amp, which looks like is always powered when the car is on.</p>
  1443.  
  1444.  
  1445.  
  1446. <ul><li><del cite="https://andrewferguson.net/2020/12/19/2010-prius-microphone/" datetime="2020-12-Thh:mm:ssTZD"><strong>DC/DC Converter 5V</strong> to<strong> Prius L37-17 </strong>(MACC, Telephone microphone assembly power supply, 5V)</del></li><li><s><strong>Sony XAV-AX100 Black</strong> to <strong>Prius L37-18</strong> <em>(SGND, Shield ground)</em></s></li><li><s><strong>Sony XAV-AX100 Mic Tip</strong> to <strong>Prius L37-19</strong> <em>(MIN+, Microphone voice signal)</em></s></li><li><s><strong>Sony XAV-AX100 Mic Sleeve</strong> to <strong>Prius L37-20</strong> <em>(MIN-, Microphone voice signal)</em></s></li></ul>
  1447.  
  1448.  
  1449.  
  1450. <p><del cite="https://andrewferguson.net/2020/12/19/2010-prius-microphone/" datetime="2020-12-T20:16:0Z">Note: I think this works&#8230;though I&#8217;m having some call quality issues. Not sure if it&#8217;s related to this, CarPlay, or something else.</del></p>
  1451.  
  1452.  
  1453.  
  1454. <p><ins cite="https://andrewferguson.net/2020/12/19/2010-prius-microphone/" datetime="2020-12-T20:16:0Z">I added an external microphone: <a href="https://andrewferguson.net/2020/12/19/2010-prius-microphone/" data-type="post" data-id="13750">2010 Prius Microphone</a></ins></p>
  1455.  
  1456.  
  1457.  
  1458. <h2 class="wp-block-heading">Rear Camera Hookup Options</h2>
  1459.  
  1460.  
  1461.  
  1462. <p>Assumes factory backup camera, remember to plug the Yellow RCA cable into the Radio as well.</p>
  1463.  
  1464.  
  1465.  
  1466. <p>You can buy the L42 connector with a pigtail from https://autoharnesshouse.com/49914.html, or just do what I did and stick a wire in the female connector and tape it .</p>
  1467.  
  1468.  
  1469.  
  1470. <h3 class="wp-block-heading">Normal (only on when in reverse)</h3>
  1471.  
  1472.  
  1473.  
  1474. <ul><li><strong>AX-CAM6 Blue/White</strong><em>(Reverse trigger)</em> to <strong>Sony XAV-AX100 Purple/white</strong> (Reverse In) and to <strong>Prius L42-5 </strong><em>(Reverse Signal)</em></li><li><strong>AX-CAM6 Black</strong><em>(Ground)</em> to <strong>Sony XAV-AX100 Black</strong> (Ground)</li><li><strong>AX-CAM6 Blue/Red </strong><em>(Camera power, 6V)</em> to <strong>Prius L37-24</strong><em>(CA+, Television camera power supply, 5.5 to 7V)</em> </li></ul>
  1475.  
  1476.  
  1477.  
  1478. <h3 class="wp-block-heading">Always available </h3>
  1479.  
  1480.  
  1481.  
  1482. <ul><li><strong>AX-CAM6 Blue/White</strong> <em>(Reverse trigger)</em> to <strong>Sony XAV-AX100 Red </strong><em>(Accessory Power, 12V)</em></li><li><strong>AX-CAM6 Black</strong> <em>(Ground)</em> to <strong><strong>Sony XAV-AX100</strong> Black</strong> (Ground)</li><li><strong>AX-CAM6 Blue/Red </strong><em>(Camera power, 6V)</em> to <strong>Prius L37-24</strong> <em>(CA+, Television camera power supply, 5.5 to 7V)</em></li><li><strong>Prius L42-5 </strong><em>(Reverse Signal)</em> to <strong>Sony XAV-AX100 Purple/white</strong> (Reverse In)</li></ul>
  1483.  
  1484.  
  1485.  
  1486. <h2 class="wp-block-heading">Other Notes:</h2>
  1487.  
  1488.  
  1489.  
  1490. <ul><li>The color and texture of the dash kit definitely does not match, but I&#8217;m not sure there is one that does.</li><li>It&#8217;s been a while since I&#8217;ve replaced a factory radio, and this one took me some time to figure out the SWC, microphone, and backup camera. I was used to the Old Days<img src="https://s.w.org/images/core/emoji/15.0.3/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> where the radio comes with a pigtail connector, you buy a pigtail connector for your vehicle, solder the two together and that&#8217;s it.</li><li>I installed the Dual port USB adapter, but only the USB connector for the audio is currently hooked up. I still need to hook up the second USB for charging. My current plan is to run the wire to the 12V cigarette adapter in the center console.</li><li>There&#8217;s an adjustment for the volume on the Metra TYTO-01, I think I set mine too low because A) I have the radio cranked up pretty high when driving (the Prius is notorious for road noise), and B) when I&#8217;m playing Spotify through CarPlay it sounds like the audio is clipping. So I&#8217;ll need to take the dash apart again and adjust that.</li><li>While I did remember to remove all the music CD&#8217;s from the factory radio before I uninstalled it, I forgot to clear the Oil Maintenance reminder message (which is set and controlled through the factory radio)&#8230;so I&#8217;ll probably need to hook it back up to clear it *facepalm*</li></ul>
  1491.  
  1492.  
  1493.  
  1494. <h2 class="wp-block-heading">Resources</h2>
  1495.  
  1496.  
  1497.  
  1498. <ul><li><a href="https://www.youtube.com/watch?v=pEERmGfjN_M">2010 &#8211; 2015 Prius Aftermarket Stereo Install Guide (Metra Axxes TYTO-01 ASWC-1JBL Steering Controls)</a> by <a href="https://www.youtube.com/channel/UCsEyYsgmt3KSPw8OmUEhvAQ">Colin Leung</a></li><li><a href="https://priuschat.com/threads/what-are-all-the-rear-inputs-in-my-2010-prius-e7022-head-unit.176841/">What are all the rear inputs in my 2010 Prius e7022 head unit?</a> post on PriusChat.com, especially the <a href="https://priuschat.com/threads/what-are-all-the-rear-inputs-in-my-2010-prius-e7022-head-unit.176841/#post-2502979">post by ChapmanF showing the back of the existing headunit and describing what features are part of what connectors</a></li><li><a href="https://www.scribd.com/document/321863236/2010-Toyota-Prius-Electrical-Wiring-Diagrams-pdf">2010 Toyota Prius Electrical Wiring Diagram</a><ul><li>Helpful to know what wires connect to where</li></ul></li><li>2010 Toyota Prius Repair Manual<ul><li>Helpful to know the technical specifications of signals</li></ul></li></ul>
  1499.  
  1500.  
  1501.  
  1502. <p></p>
  1503. <hr class="footnotes"><ol class="footnotes" style="list-style-type:decimal"><li id="fn1-13451"><p >I think there also may be a resistive-based analog format as well&#8230;so three ways&nbsp;<a href="https://andrewferguson.net/2020/08/08/notes-on-installing-sony-xav-ax100-in-a-2010-prius/#rf1-13451" class="backlink" title="Return to footnote 1.">&#8617;</a></p></li></ol>]]></content:encoded>
  1504. <post-id xmlns="com-wordpress:feed-additions:1">13451</post-id> </item>
  1505. <item>
  1506. <title>Jamulus and Temporally Hyper-Near Servers</title>
  1507. <link>https://andrewferguson.net/2020/07/08/jamulus-and-temporally-hyper-near-servers/</link>
  1508. <comments>https://andrewferguson.net/2020/07/08/jamulus-and-temporally-hyper-near-servers/#comments</comments>
  1509. <dc:creator><![CDATA[Andrew]]></dc:creator>
  1510. <pubDate>Wed, 08 Jul 2020 19:12:54 +0000</pubDate>
  1511. <category><![CDATA[Technology's Infestation of my Life]]></category>
  1512. <category><![CDATA[Amazon]]></category>
  1513. <category><![CDATA[audio]]></category>
  1514. <category><![CDATA[datacenter]]></category>
  1515. <category><![CDATA[debian]]></category>
  1516. <category><![CDATA[digitalocean]]></category>
  1517. <category><![CDATA[jamulus]]></category>
  1518. <category><![CDATA[jitsi]]></category>
  1519. <category><![CDATA[Linode]]></category>
  1520. <category><![CDATA[low latency]]></category>
  1521. <category><![CDATA[ping]]></category>
  1522. <category><![CDATA[vultr]]></category>
  1523. <guid isPermaLink="false">https://andrewferguson.net/?p=12968</guid>
  1524.  
  1525. <description><![CDATA[Temporally Hyper-Near Servers As we&#8217;ve been doing more video and audio conferencing lately, I&#8217;ve been experimenting with temporally hyper-near servers to see if it results in a better experience. TL;DR…not really for most purposes. Temporally hyper-near servers differ from geographically near servers in that it doesn&#8217;t matter how close the server is physically in miles,&#8230;&#160;<a href="https://andrewferguson.net/2020/07/08/jamulus-and-temporally-hyper-near-servers/" class="" rel="bookmark">Read More &#187;<span class="screen-reader-text">Jamulus and Temporally Hyper-Near Servers</span></a>]]></description>
  1526. <content:encoded><![CDATA[
  1527. <h2 class="wp-block-heading">Temporally Hyper-Near Servers</h2>
  1528.  
  1529.  
  1530.  
  1531. <p>As we&#8217;ve been doing more video and audio conferencing lately, I&#8217;ve been experimenting with <strong>temporally hyper-near servers</strong> to see if it results in a better experience. TL;DR…not really for most purposes.</p>
  1532.  
  1533.  
  1534.  
  1535. <p>Temporally hyper-near servers differ from <strong>geographically near servers</strong> in that it doesn&#8217;t matter how close the server is physically in miles, just packet transit transfer time in milliseconds&#8230;basically low-latency.</p>
  1536.  
  1537.  
  1538.  
  1539. <p>AWS calls these <a href="https://aws.amazon.com/about-aws/global-infrastructure/localzones/">Local Zones</a> and they&#8217;re designed so that &#8220;you can easily run latency-sensitive portions of applications local to end-users and resources in a specific geography, delivering single-digit millisecond latency for use cases such as media &amp; entertainment content creation, real-time gaming&#8230;&#8221;, but they only have them in the Los Angeles region for now.</p>
  1540.  
  1541.  
  1542.  
  1543. <p>Azure calls them <a href="https://azure.microsoft.com/en-us/solutions/low-latency-edge-computing/#edge-zones">Edge Zones</a>, but they aren&#8217;t available yet.</p>
  1544.  
  1545.  
  1546.  
  1547. <p>Google doesn&#8217;t have a specific offering, but instead provides <a href="https://cloud.google.com/network-connectivity/docs/interconnect/concepts/choosing-colocation-facilities-low-latency#locations-table">a list of facilities</a> within each region you can choose from, though none of them are near Seattle.</p>
  1548.  
  1549.  
  1550.  
  1551. <p>I went back my notes when I was looking at deploying some servers that I knew would generally only be accessed from the Seattle area and I found that <strong>Vultr</strong> could be a good solution<sup id="rf1-12968"><a href="https://andrewferguson.net/2020/07/08/jamulus-and-temporally-hyper-near-servers/#fn1-12968" title="Neither &lt;a href=&quot;https://www.digitalocean.com/docs/platform/availability-matrix/&quot;&gt;DigitalOcean&lt;/a&gt; nor &lt;a href=&quot;https://www.linode.com/global-infrastructure/&quot;&gt;Linode&lt;/a&gt; have data centers in Seattle" rel="footnote">1</a></sup>.</p>
  1552.  
  1553.  
  1554.  
  1555. <p>With Vultr (in Seattle), I&#8217;m getting an average round-trip time (RTT) of 3.221ms (stddev 0.244 ms)<sup id="rf2-12968"><a href="https://andrewferguson.net/2020/07/08/jamulus-and-temporally-hyper-near-servers/#fn2-12968" title="&lt;em&gt;ping -c10 -W50 108.61.194.105&lt;/em&gt;" rel="footnote">2</a></sup></p>
  1556.  
  1557.  
  1558.  
  1559. <p>Compare to AWS (US West 2), which was an average RTT of 10.820 ms (stddev 0.815ms)<sup id="rf3-12968"><a href="https://andrewferguson.net/2020/07/08/jamulus-and-temporally-hyper-near-servers/#fn3-12968" title="&lt;em&gt;ping -c10 -W50 ec2.us-west-2.amazonaws.com&lt;/em&gt;" rel="footnote">3</a></sup></p>
  1560.  
  1561.  
  1562.  
  1563. <p>After doing some traceroutes and poking around various peering databases , I <em>think</em> that Vultr is based at the <a href="https://www.cyxtera.com/seattle-data-centers/sea2-campus">Cyxtera SEA2 datacenter</a> in Seattle and shares interconnections with CenturyLink, Comcast, and AT&amp;T (among others).</p>
  1564.  
  1565.  
  1566.  
  1567. <p>I setup a Jitsi server, but didn&#8217;t notice anything perceptibly different between using my server and a standard Jitsi public server (the nearest of which is on an AWS US West 2 instance).</p>
  1568.  
  1569.  
  1570.  
  1571. <p>However, for Jamulus (which is software that enables musicians to perform real-time jam sessions over the internet) there does appear to be huge difference and I&#8217;ve received several emails about the setup I have, so here goes:</p>
  1572.  
  1573.  
  1574.  
  1575. <h2 class="wp-block-heading">Jamulus on Vultr</h2>
  1576.  
  1577.  
  1578.  
  1579. <p>Deploy a new server on <a href="https://www.vultr.com/?ref=8567487-6G">Vultr</a><sup id="rf4-12968"><a href="https://andrewferguson.net/2020/07/08/jamulus-and-temporally-hyper-near-servers/#fn4-12968" title="Get $100 free credit with that affiliate link; note: you must use credit within 30 days" rel="footnote">4</a></sup>, here&#8217;s the the configuration I used:</p>
  1580.  
  1581.  
  1582.  
  1583. <ul><li><strong>Choose Server: </strong>Cloud Compute (<a href="#update20200709">see update at the end for High Frequency Compute</a>)</li><li><strong>Server Location: </strong>Seattle</li><li><strong>Server Type:</strong> Debian 10 x64</li><li><strong>Server Size</strong>: $5/mo<ul><li>25 GB SSD</li><li>1 CPU</li><li>1024 MB Memory</li><li>1000GB Bandwidth</li></ul></li><li><strong>SSH Keys:</strong> as desired (and beyond the scope of this)</li><li><strong>Firewall Group: </strong>No Firewall <em>(we&#8217;ll use UFW on the host for this)</em></li><li><strong>Server Hostname &amp; Label</strong>: as desired&#8230;we&#8217;ll call it <em>myserver</em> for the sake of this post</li></ul>
  1584.  
  1585.  
  1586.  
  1587. <p>One you deploy the server, it will take a few minutes for it to be ready. Once it is, SSH to it:</p>
  1588.  
  1589.  
  1590.  
  1591. <pre class="wp-block-code"><code>ssh root@myserver
  1592. </code></pre>
  1593.  
  1594.  
  1595.  
  1596. <p>Update the linux distribution:</p>
  1597.  
  1598.  
  1599.  
  1600. <pre class="wp-block-code"><code>apt-get update
  1601. apt-get -y dist-upgrade</code></pre>
  1602.  
  1603.  
  1604.  
  1605. <p>Install and configure the UFW firewall:</p>
  1606.  
  1607.  
  1608.  
  1609. <pre class="wp-block-code"><code>apt-get install ufw
  1610. ufw default deny incoming
  1611. ufw default allow outgoing
  1612. ufw allow ssh
  1613. ufw allow 22124/udp
  1614. ufw enable</code></pre>
  1615.  
  1616.  
  1617.  
  1618. <p><a href="https://www.digitalocean.com/community/tutorials/how-to-setup-a-firewall-with-ufw-on-an-ubuntu-and-debian-cloud-server">DigitalOcean has a good tutorial on how to setup UFW</a> as well.</p>
  1619.  
  1620.  
  1621.  
  1622. <p>You&#8217;re now ready to install Jamulus!</p>
  1623.  
  1624.  
  1625.  
  1626. <p>The Jamulus wiki has a pretty decent set of instructions (which have only gotten better in the last few months) on how to download, compile, and run a headless Jamulus instance: <a href="https://github.com/corrados/jamulus/wiki/Server---Linux">https://github.com/corrados/jamulus/wiki/Server&#8212;Linux</a></p>
  1627.  
  1628.  
  1629.  
  1630. <p>Here&#8217;s the TL;DR (which assumes you are working as <em>root</em>):</p>
  1631.  
  1632.  
  1633.  
  1634. <p>Install dependencies:</p>
  1635.  
  1636.  
  1637.  
  1638. <pre class="wp-block-code"><code>apt-get -y install git build-essential qtdeclarative5-dev qt5-default qttools5-dev-tools libjack-jackd2-dev</code></pre>
  1639.  
  1640.  
  1641.  
  1642. <p>Download source code:</p>
  1643.  
  1644.  
  1645.  
  1646. <pre class="wp-block-code"><code>cd /tmp/
  1647. git clone https://github.com/corrados/jamulus.git</code></pre>
  1648.  
  1649.  
  1650.  
  1651. <p>Compile:</p>
  1652.  
  1653.  
  1654.  
  1655. <pre class="wp-block-code"><code>cd jamulus
  1656. qmake "CONFIG+=nosound headless" Jamulus.pro
  1657. make clean
  1658. make
  1659. make install
  1660. mv Jamulus /usr/local/bin/</code></pre>
  1661.  
  1662.  
  1663.  
  1664. <p>Create a user to run <em>Jamulus</em>:</p>
  1665.  
  1666.  
  1667.  
  1668. <pre class="wp-block-code"><code>adduser --system --no-create-home jamulus</code></pre>
  1669.  
  1670.  
  1671.  
  1672. <p>Create a directory to record files to:</p>
  1673.  
  1674.  
  1675.  
  1676. <pre class="wp-block-code"><code>mkdir -p /var/jamulus/recording
  1677. chown jamulus /var/jamulus/recording</code></pre>
  1678.  
  1679.  
  1680.  
  1681. <p>Create <em>systemd</em> unit file:</p>
  1682.  
  1683.  
  1684.  
  1685. <pre class="wp-block-code"><code>nano /etc/systemd/system/jamulus.service</code></pre>
  1686.  
  1687.  
  1688.  
  1689. <p>Paste the following into the file above, making the needed changes to the <a href="https://github.com/corrados/jamulus/wiki/Command-Line-Options">Jamulus command line options</a> as-needed for (<a href="#update20200709">see update at the end for using <code>--fastupdate</code></a>):</p>
  1690.  
  1691.  
  1692.  
  1693. <ul><li><em>&#8211;centralserver</em>: pick the correct server from <a href="https://github.com/corrados/jamulus/wiki/Central-Servers">https://github.com/corrados/jamulus/wiki/Central-Servers</a></li><li>&#8211;serverinfo: update with your location as <code>[name];[city];[[country as <a href="https://doc.qt.io/qt-5/qlocale.html#Country-enum">QLocale ID</a>]];</code><sup id="rf5-12968"><a href="https://andrewferguson.net/2020/07/08/jamulus-and-temporally-hyper-near-servers/#fn5-12968" title="USA is 225" rel="footnote">5</a></sup></li><li><em>&#8211;welcomemessage</em>: if you want one</li></ul>
  1694.  
  1695.  
  1696. <div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; quick-code: false; notranslate">
  1697. &#x5B;Unit]
  1698. Description=Jamulus-Server
  1699. After=network.target
  1700.  
  1701. &#x5B;Service]
  1702. Type=simple
  1703. User=jamulus
  1704. Group=nogroup
  1705. NoNewPrivileges=true
  1706. ProtectSystem=true
  1707. ProtectHome=true
  1708. Nice=-20
  1709. IOSchedulingClass=realtime
  1710. IOSchedulingPriority=0
  1711.  
  1712. #### Change this to set genre, location and other parameters.
  1713. #### See https://github.com/corrados/jamulus/wiki/Command-Line-Options ####
  1714. ExecStart=/usr/local/bin/Jamulus --server --nogui --recording /var/jamulus/recording/ --servername $(uname -n) --centralserver jamulusallgenres.fischvolk.de:22224 --serverinfo &quot;NW WA;Seattle, WA;225&quot; -g --welcomemessage &quot;This is an experimental service and support is not guaranteed. Please contact andrew@fergcorp.com with questions&quot; --licence
  1715.    
  1716. Restart=on-failure
  1717. RestartSec=30
  1718. StandardOutput=journal
  1719. StandardError=inherit
  1720. SyslogIdentifier=jamulus
  1721.  
  1722. &#x5B;Install]
  1723. WantedBy=multi-user.target
  1724. </pre></div>
  1725.  
  1726.  
  1727. <p>Give the unit file the correct permissions:</p>
  1728.  
  1729.  
  1730.  
  1731. <pre class="wp-block-code"><code>chmod 644 /etc/systemd/system/jamulus.service</code></pre>
  1732.  
  1733.  
  1734.  
  1735. <p>Start and verify Jamulus:</p>
  1736.  
  1737.  
  1738.  
  1739. <pre class="wp-block-code"><code>systemctl start jamulus
  1740. systemctl status jamulus</code></pre>
  1741.  
  1742.  
  1743.  
  1744. <p>You should get something like:</p>
  1745.  
  1746.  
  1747.  
  1748. <pre class="wp-block-preformatted"><span style="color:#5cff5c" class="has-inline-color">●</span> jamulus.service - Jamulus-Server
  1749.   Loaded: loaded (/etc/systemd/system/jamulus.service; disabled; vendor preset: enabled)
  1750.   Active: <span style="color:#5cff5c" class="has-inline-color">active (running)</span> since Wed 2020-07-08 10:57:09 PDT; 4s ago
  1751. Main PID: 14220 (Jamulus)
  1752.    Tasks: 3 (limit: 1149)
  1753.   Memory: 13.5M
  1754.   CGroup: /system.slice/jamulus.service
  1755.           └─14220 /usr/local/bin/Jamulus --server --nogui --recording /var/jamulus/recording/ --servername -n) --centralserver jamulusallgenres.fischvolk.de:22224 --serverinfo N
  1756.  
  1757. Jul 08 10:57:09 myserver.example.com jamulus[14220]: - central server: jamulusallgenres.fischvolk.de:22224
  1758. Jul 08 10:57:09 myserver.example.com jamulus[14220]: - server info: NW WA;Seattle, WA;225
  1759. Jul 08 10:57:09 myserver.example.com jamulus[14220]: - ping servers in slave server list
  1760. Jul 08 10:57:09 myserver.example.com jamulus[14220]: - welcome message: This is an experimental service and support is not guaranteed. Please contact andrew@fergcorp.com with questions
  1761. Jul 08 10:57:09 myserver.example.com jamulus[14220]: - licence required
  1762. Jul 08 10:57:09 myserver.example.com jamulus[14220]:  *** Jamulus, Version 3.5.8git
  1763. Jul 08 10:57:09 myserver.example.com jamulus[14220]:  *** Internet Jam Session Software
  1764. Jul 08 10:57:09 myserver.example.com jamulus[14220]:  *** Released under the GNU General Public License (GPL)
  1765. Jul 08 10:57:09 myserver.example.com jamulus[14220]: Server Registration Status update: Registration requested
  1766. Jul 08 10:57:09 myserver.example.com jamulus[14220]: Server Registration Status update: Registered</pre>
  1767.  
  1768.  
  1769.  
  1770. <p>And that&#8217;s it! Enjoy the server and let me know how it goes!</p>
  1771.  
  1772.  
  1773.  
  1774. <h2 class="wp-block-heading" id="update20200709">9 July 2020 Update:</h2>
  1775.  
  1776.  
  1777.  
  1778. <p>If you update <em>jamulus.service</em> unit file then run this:</p>
  1779.  
  1780.  
  1781.  
  1782. <pre class="wp-block-code"><code>systemctl daemon-reload
  1783. service jamulus restart</code></pre>
  1784.  
  1785.  
  1786.  
  1787. <p>Also, thanks to Brian Pratt testing, feedback, catching a couple typos, and suggesting using the <code>--fastupdate</code> command line option paired with Vultr&#8217;s <a href="https://www.vultr.com/products/high-frequency-compute/">High Frequency Compute</a> (instead of regular Compute) even better performance.</p>
  1788. <hr class="footnotes"><ol class="footnotes" style="list-style-type:decimal"><li id="fn1-12968"><p >Neither <a href="https://www.digitalocean.com/docs/platform/availability-matrix/">DigitalOcean</a> nor <a href="https://www.linode.com/global-infrastructure/">Linode</a> have data centers in Seattle&nbsp;<a href="https://andrewferguson.net/2020/07/08/jamulus-and-temporally-hyper-near-servers/#rf1-12968" class="backlink" title="Return to footnote 1.">&#8617;</a></p></li><li id="fn2-12968"><p ><em>ping -c10 -W50 108.61.194.105</em>&nbsp;<a href="https://andrewferguson.net/2020/07/08/jamulus-and-temporally-hyper-near-servers/#rf2-12968" class="backlink" title="Return to footnote 2.">&#8617;</a></p></li><li id="fn3-12968"><p ><em>ping -c10 -W50 ec2.us-west-2.amazonaws.com</em>&nbsp;<a href="https://andrewferguson.net/2020/07/08/jamulus-and-temporally-hyper-near-servers/#rf3-12968" class="backlink" title="Return to footnote 3.">&#8617;</a></p></li><li id="fn4-12968"><p >Get $100 free credit with that affiliate link; note: you must use credit within 30 days&nbsp;<a href="https://andrewferguson.net/2020/07/08/jamulus-and-temporally-hyper-near-servers/#rf4-12968" class="backlink" title="Return to footnote 4.">&#8617;</a></p></li><li id="fn5-12968"><p >USA is 225&nbsp;<a href="https://andrewferguson.net/2020/07/08/jamulus-and-temporally-hyper-near-servers/#rf5-12968" class="backlink" title="Return to footnote 5.">&#8617;</a></p></li></ol>]]></content:encoded>
  1789. <wfw:commentRss>https://andrewferguson.net/2020/07/08/jamulus-and-temporally-hyper-near-servers/feed/</wfw:commentRss>
  1790. <slash:comments>7</slash:comments>
  1791. <post-id xmlns="com-wordpress:feed-additions:1">12968</post-id> </item>
  1792. <item>
  1793. <title>Pikler Ladder</title>
  1794. <link>https://andrewferguson.net/2020/06/14/pikler-ladder/</link>
  1795. <dc:creator><![CDATA[Andrew]]></dc:creator>
  1796. <pubDate>Sun, 14 Jun 2020 08:10:20 +0000</pubDate>
  1797. <category><![CDATA[Projects]]></category>
  1798. <category><![CDATA[Charlie Wyman]]></category>
  1799. <category><![CDATA[DIY]]></category>
  1800. <category><![CDATA[drawings]]></category>
  1801. <category><![CDATA[Ferguson Design Bureau]]></category>
  1802. <category><![CDATA[free]]></category>
  1803. <category><![CDATA[PDF]]></category>
  1804. <category><![CDATA[Pikler ladder]]></category>
  1805. <guid isPermaLink="false">https://andrewferguson.net/?p=13194</guid>
  1806.  
  1807. <description><![CDATA[View model on Fusion360 Preamble Pikler Ladders are expensive. Building one seemed like a good idea. There&#8217;s many different designs out there, but none that I was terribly thrilled with. So I designed my own. Then I roped my friend Charlie into helping me build one (spoiler alert: other friends wanted one too&#8230;so we made&#8230;&#160;<a href="https://andrewferguson.net/2020/06/14/pikler-ladder/" class="" rel="bookmark">Read More &#187;<span class="screen-reader-text">Pikler Ladder</span></a>]]></description>
  1808. <content:encoded><![CDATA[
  1809. <div class="wp-block-image"><figure class="alignright size-medium"><img decoding="async" width="300" height="225" data-attachment-id="13223" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/pikler_ladder_assy_v3_2020-jun-14_07-43-02am-000_customizedview16766946633/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/Pikler_Ladder_Assy_v3_2020-Jun-14_07-43-02AM-000_CustomizedView16766946633.jpg" data-orig-size="1600,1200" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Pikler_Ladder_Assy_v3_2020-Jun-14_07-43-02AM-000_CustomizedView16766946633" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/Pikler_Ladder_Assy_v3_2020-Jun-14_07-43-02AM-000_CustomizedView16766946633-300x225.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/Pikler_Ladder_Assy_v3_2020-Jun-14_07-43-02AM-000_CustomizedView16766946633-1024x768.jpg" src="https://andrewferguson.net/wp-content/uploads/2020/06/Pikler_Ladder_Assy_v3_2020-Jun-14_07-43-02AM-000_CustomizedView16766946633-300x225.jpg" alt="" class="wp-image-13223" srcset="https://andrewferguson.net/wp-content/uploads/2020/06/Pikler_Ladder_Assy_v3_2020-Jun-14_07-43-02AM-000_CustomizedView16766946633-300x225.jpg 300w, https://andrewferguson.net/wp-content/uploads/2020/06/Pikler_Ladder_Assy_v3_2020-Jun-14_07-43-02AM-000_CustomizedView16766946633-1024x768.jpg 1024w, https://andrewferguson.net/wp-content/uploads/2020/06/Pikler_Ladder_Assy_v3_2020-Jun-14_07-43-02AM-000_CustomizedView16766946633-768x576.jpg 768w, https://andrewferguson.net/wp-content/uploads/2020/06/Pikler_Ladder_Assy_v3_2020-Jun-14_07-43-02AM-000_CustomizedView16766946633-1536x1152.jpg 1536w, https://andrewferguson.net/wp-content/uploads/2020/06/Pikler_Ladder_Assy_v3_2020-Jun-14_07-43-02AM-000_CustomizedView16766946633-1320x990.jpg 1320w, https://andrewferguson.net/wp-content/uploads/2020/06/Pikler_Ladder_Assy_v3_2020-Jun-14_07-43-02AM-000_CustomizedView16766946633.jpg 1600w" sizes="(max-width: 300px) 100vw, 300px" /></figure></div>
  1810.  
  1811.  
  1812.  
  1813. <div class="wp-block-file"><a href="https://andrewferguson.net/wp-content/uploads/2020/06/Pikler-Ladder-Assy-v3-Drawing-v21.pdf">Pikler Ladder Assy v3 Drawings (FREE!)</a><a href="https://andrewferguson.net/wp-content/uploads/2020/06/Pikler-Ladder-Assy-v3-Drawing-v21.pdf" class="wp-block-file__button" download>Download</a></div>
  1814.  
  1815.  
  1816.  
  1817. <p><a href="https://a360.co/3gbXyTo">View model</a> on Fusion360</p>
  1818.  
  1819.  
  1820.  
  1821. <h2 class="wp-block-heading">Preamble</h2>
  1822.  
  1823.  
  1824.  
  1825. <p>Pikler Ladders are expensive. Building one seemed like a good idea. There&#8217;s many different designs out there, but none that I was terribly thrilled with. So I designed my own. Then I roped my friend Charlie into helping me build one (spoiler alert: other friends wanted one too&#8230;so we made four).</p>
  1826.  
  1827.  
  1828.  
  1829. <p>Design requirements:</p>
  1830.  
  1831.  
  1832.  
  1833. <ol><li>Safe to use</li><li>As low-cost as practical</li><li>Easy to store when not in use</li><li>Varied angles of use</li><li>Easy to make</li></ol>
  1834.  
  1835.  
  1836.  
  1837. <h3 class="wp-block-heading">Version 1</h3>
  1838.  
  1839.  
  1840.  
  1841. <p>The original concept was this folding design that had two climbing positions, but could also be folded up. I originally was going to use ¾&#8221; diameter dowels, but wood is a rather vexing material in terms of strength &#8212; it&#8217;s what called an anisotropic material which means that it has different material properties in different directions. This is in addition to the varied strength tree-to-tree. I wasn&#8217;t confident that ¾&#8221; diameter dowels would be sufficient (&#8220;safe to use&#8221; requirement) and so I upped it to 1&#8243; during Version 3 of the design. However, this designed was ultimately scrapped because the board along the bottom side was unnecessarily, a bit unwieldy, and wouldn&#8217;t fulfill the &#8220;as low-cost as practical&#8221; requirement.</p>
  1842.  
  1843.  
  1844.  
  1845. <div data-carousel-extra='{"blog_id":1,"permalink":"https:\/\/andrewferguson.net\/2020\/06\/14\/pikler-ladder\/"}'  class="wp-block-jetpack-tiled-gallery aligncenter is-style-rectangular"><div class="tiled-gallery__gallery"><div class="tiled-gallery__row"><div class="tiled-gallery__col"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="13201" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/image/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/image.png" data-orig-size="1078,653" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-300x182.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-1024x620.png" data-attachment-id="13201" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/image/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/image.png" data-orig-size="1078,653" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-300x182.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-1024x620.png" srcset="https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image.png?strip=info&#038;w=600&#038;ssl=1 600w,https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image.png?strip=info&#038;w=900&#038;ssl=1 900w,https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image.png?strip=info&#038;w=1078&#038;ssl=1 1078w" alt="" data-height="653" data-id="13201" data-link="https://andrewferguson.net/?attachment_id=13201" data-url="https://andrewferguson.net/wp-content/uploads/2020/06/image.png" data-width="1078" src="https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image.png?ssl=1"/></figure><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="13202" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/image-1-2/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-1.png" data-orig-size="1078,653" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-1" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-1-300x182.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-1-1024x620.png" data-attachment-id="13202" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/image-1-2/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-1.png" data-orig-size="1078,653" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-1" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-1-300x182.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-1-1024x620.png" srcset="https://i1.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-1.png?strip=info&#038;w=600&#038;ssl=1 600w,https://i1.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-1.png?strip=info&#038;w=900&#038;ssl=1 900w,https://i1.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-1.png?strip=info&#038;w=1078&#038;ssl=1 1078w" alt="" data-height="653" data-id="13202" data-link="https://andrewferguson.net/?attachment_id=13202" data-url="https://andrewferguson.net/wp-content/uploads/2020/06/image-1.png" data-width="1078" src="https://i1.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-1.png?ssl=1"/></figure></div><div class="tiled-gallery__col"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="13203" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/image-2/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-2.png" data-orig-size="228,701" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-2" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-2-98x300.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-2.png" data-attachment-id="13203" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/image-2/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-2.png" data-orig-size="228,701" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-2" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-2-98x300.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-2.png" srcset="https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-2.png?strip=info&#038;w=228&#038;ssl=1 228w" alt="" data-height="701" data-id="13203" data-link="https://andrewferguson.net/?attachment_id=13203" data-url="https://andrewferguson.net/wp-content/uploads/2020/06/image-2.png" data-width="228" src="https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-2.png?ssl=1"/></figure></div></div></div></div>
  1846.  
  1847.  
  1848.  
  1849. <h3 class="wp-block-heading">Version 2</h3>
  1850.  
  1851.  
  1852.  
  1853. <p>This used a removable bar that could be moved up or down a rung to vary the angle. I think this is actually version 2.5, which introduced the &#8220;scalloped&#8221; edges on the one side to allow the ladder to fold together all the way.  </p>
  1854.  
  1855.  
  1856.  
  1857. <p>This design was ultimately scrapped because using 1&#8243; diameter dowels didn&#8217;t leave sufficient edge margin (&#8220;safe to use&#8221; requirement) without going to a 1&#8243;x6&#8243; board (which would have increased the cost &#8212; &#8220;as low-cost as practical&#8221; requirement). I experimented with offsetting the rungs, but decided that would make it harder to manufacture (&#8220;easy to make&#8221; requirement). Also cutting all the &#8220;scallops&#8221; would have been time consuming (also &#8220;easy to make&#8221; requirement).</p>
  1858.  
  1859.  
  1860.  
  1861. <div data-carousel-extra='{"blog_id":1,"permalink":"https:\/\/andrewferguson.net\/2020\/06\/14\/pikler-ladder\/"}'  class="wp-block-jetpack-tiled-gallery aligncenter is-style-rectangular"><div class="tiled-gallery__gallery"><div class="tiled-gallery__row"><div class="tiled-gallery__col"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="13208" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/image-7/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-7.png" data-orig-size="760,732" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-7" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-7-300x289.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-7.png" data-attachment-id="13208" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/image-7/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-7.png" data-orig-size="760,732" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-7" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-7-300x289.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-7.png" srcset="https://i1.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-7.png?strip=info&#038;w=600&#038;ssl=1 600w,https://i1.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-7.png?strip=info&#038;w=760&#038;ssl=1 760w" alt="" data-height="732" data-id="13208" data-link="https://andrewferguson.net/?attachment_id=13208" data-url="https://andrewferguson.net/wp-content/uploads/2020/06/image-7.png" data-width="760" src="https://i1.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-7.png?ssl=1"/></figure></div><div class="tiled-gallery__col"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="13209" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/image-8/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-8.png" data-orig-size="963,484" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-8" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-8-300x151.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-8.png" data-attachment-id="13209" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/image-8/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-8.png" data-orig-size="963,484" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-8" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-8-300x151.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-8.png" srcset="https://i1.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-8.png?strip=info&#038;w=600&#038;ssl=1 600w,https://i1.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-8.png?strip=info&#038;w=900&#038;ssl=1 900w,https://i1.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-8.png?strip=info&#038;w=963&#038;ssl=1 963w" alt="" data-height="484" data-id="13209" data-link="https://andrewferguson.net/?attachment_id=13209" data-url="https://andrewferguson.net/wp-content/uploads/2020/06/image-8.png" data-width="963" src="https://i1.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-8.png?ssl=1"/></figure></div></div></div></div>
  1862.  
  1863.  
  1864.  
  1865. <h3 class="wp-block-heading">Version 3</h3>
  1866.  
  1867.  
  1868.  
  1869. <p>This is the design we ended up making (see the build notes for deviations and such) and the one <a href="https://andrewferguson.net/wp-content/uploads/2020/06/Pikler-Ladder-Assy-v3-Drawing-v21.pdf">I made the drawings for that you can download</a>. I originally discounted this option because there&#8217;s no good way to get a 10&#8243;x20&#8243;x¾&#8221; piece of wood without buying an unnecessarily large sheet (&#8220;as low-cost as practical&#8221; requirement), but by building several ladders at once it helped make this more cost effective. This design also uses 1&#8243; dowels</p>
  1870.  
  1871.  
  1872.  
  1873. <div data-carousel-extra='{"blog_id":1,"permalink":"https:\/\/andrewferguson.net\/2020\/06\/14\/pikler-ladder\/"}'  class="wp-block-jetpack-tiled-gallery aligncenter is-style-rectangular"><div class="tiled-gallery__gallery"><div class="tiled-gallery__row"><div class="tiled-gallery__col"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="13204" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/image-3/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-3.png" data-orig-size="830,775" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-3" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-3-300x280.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-3.png" data-attachment-id="13204" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/image-3/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-3.png" data-orig-size="830,775" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-3" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-3-300x280.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-3.png" srcset="https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-3.png?strip=info&#038;w=600&#038;ssl=1 600w,https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-3.png?strip=info&#038;w=830&#038;ssl=1 830w" alt="" data-height="775" data-id="13204" data-link="https://andrewferguson.net/?attachment_id=13204" data-url="https://andrewferguson.net/wp-content/uploads/2020/06/image-3.png" data-width="830" src="https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-3.png?ssl=1"/></figure><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="13205" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/image-4/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-4.png" data-orig-size="795,743" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-4" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-4-300x280.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-4.png" data-attachment-id="13205" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/image-4/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-4.png" data-orig-size="795,743" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-4" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-4-300x280.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-4.png" srcset="https://i1.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-4.png?strip=info&#038;w=600&#038;ssl=1 600w,https://i1.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-4.png?strip=info&#038;w=795&#038;ssl=1 795w" alt="" data-height="743" data-id="13205" data-link="https://andrewferguson.net/?attachment_id=13205" data-url="https://andrewferguson.net/wp-content/uploads/2020/06/image-4.png" data-width="795" src="https://i1.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-4.png?ssl=1"/></figure><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="13206" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/image-5/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-5.png" data-orig-size="987,677" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-5" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-5-300x206.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-5.png" data-attachment-id="13206" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/image-5/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-5.png" data-orig-size="987,677" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-5" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-5-300x206.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-5.png" srcset="https://i1.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-5.png?strip=info&#038;w=600&#038;ssl=1 600w,https://i1.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-5.png?strip=info&#038;w=900&#038;ssl=1 900w,https://i1.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-5.png?strip=info&#038;w=987&#038;ssl=1 987w" alt="" data-height="677" data-id="13206" data-link="https://andrewferguson.net/?attachment_id=13206" data-url="https://andrewferguson.net/wp-content/uploads/2020/06/image-5.png" data-width="987" src="https://i1.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-5.png?ssl=1"/></figure></div><div class="tiled-gallery__col"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="13210" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/messages-image379658570/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/Messages-Image379658570.jpeg" data-orig-size="409,811" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Messages-Image379658570" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/Messages-Image379658570-151x300.jpeg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/Messages-Image379658570.jpeg" data-attachment-id="13210" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/messages-image379658570/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/Messages-Image379658570.jpeg" data-orig-size="409,811" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Messages-Image379658570" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/Messages-Image379658570-151x300.jpeg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/Messages-Image379658570.jpeg" srcset="https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/06/Messages-Image379658570.jpeg?strip=info&#038;w=409&#038;ssl=1 409w" alt="" data-height="811" data-id="13210" data-link="https://andrewferguson.net/?attachment_id=13210" data-url="https://andrewferguson.net/wp-content/uploads/2020/06/Messages-Image379658570.jpeg" data-width="409" src="https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/06/Messages-Image379658570.jpeg?ssl=1"/></figure></div></div><div class="tiled-gallery__row"><div class="tiled-gallery__col"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="13207" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/image-6/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-6.png" data-orig-size="1128,556" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-6" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-6-300x148.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-6-1024x505.png" data-attachment-id="13207" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/image-6/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-6.png" data-orig-size="1128,556" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-6" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-6-300x148.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/image-6-1024x505.png" srcset="https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-6.png?strip=info&#038;w=600&#038;ssl=1 600w,https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-6.png?strip=info&#038;w=900&#038;ssl=1 900w,https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-6.png?strip=info&#038;w=1128&#038;ssl=1 1128w" alt="" data-height="556" data-id="13207" data-link="https://andrewferguson.net/?attachment_id=13207" data-url="https://andrewferguson.net/wp-content/uploads/2020/06/image-6.png" data-width="1128" src="https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/image-6.png?ssl=1"/></figure></div></div></div></div>
  1874.  
  1875.  
  1876.  
  1877. <h2 class="wp-block-heading">Material List</h2>
  1878.  
  1879.  
  1880.  
  1881. <p>This was designed such that you should be able to buy everything at your local major hardware store (and probably most local stores as well). Poplar is recommended as a good compromise of quality, strength, and cost.</p>
  1882.  
  1883.  
  1884.  
  1885. <p>This was not sponsored by Lowe&#8217;s, but I did end up buying everything from there because they had Poplar dowels and Home Depot did not.</p>
  1886.  
  1887.  
  1888.  
  1889. <ul><li>QTY 7 &#8212; 1&#8243; x 48&#8243; Dowel, Poplar ~$30</li><li>QTY 2 &#8212; 1&#8243; x 4&#8243; x 6&#8242; Poplar ~$25</li><li>QTY 1 &#8212; Plywood, 2&#8217;x4&#8217;x1&#8243; ~$10</li><li>QTY 2 &#8212; ¼&#8221; Wood Insert Lock Nut, Brass (As-built: <a href="https://www.lowes.com/pd/Hillman-2-Count-1-4-in-Brass-Standard-SAE-Wood-Insert-Lock-Nuts/3012573">Hillman 2-Count 1/4-in Brass Standard (SAE) Wood Insert Lock Nuts</a> from Lowe&#8217;s) ~$2</li><li>QTY 2 &#8212; ¼&#8221;-20 x 1½&#8221; Machine Screw, Pan Head (As-built: <a href="https://www.lowes.com/pd/Hillman-1-4-in-20-x-1-1-2-in-Slotted-Drive-Machine-Screws-2-Count/3013055">Hillman 1/4-in-20 x 1-1/2-in Slotted-Drive Machine Screws (2-Count)</a> from Lowe&#8217;s) ~$1</li><li>QTY 26 &#8212; #8 x 2½&#8221; Cabinet Screws (As-built: <a href="https://www.lowes.com/pd/Power-Pro-8-x-2-1-2-in-Yellow-Zinc-Round-Interior-Wood-Screws-50-Count/999995874">Power Pro #8 x 2-1/2-in Yellow Zinc Round Interior Wood Screws (50-Count)</a> from Lowe&#8217;s) $~6</li></ul>
  1890.  
  1891.  
  1892.  
  1893. <p><strong>Total Cost: ~$74</strong> (+tax)</p>
  1894.  
  1895.  
  1896.  
  1897. <div class="wp-block-image"><figure class="aligncenter is-resized"><img decoding="async" data-attachment-id="13195" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/hillman_1-4_brass_insert/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/hillman_1-4_brass_insert.jpg" data-orig-size="632,503" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="hillman_1-4_brass_insert" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/hillman_1-4_brass_insert-300x239.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/hillman_1-4_brass_insert.jpg" src="https://andrewferguson.net/wp-content/uploads/2020/06/hillman_1-4_brass_insert.jpg" alt="" class="wp-image-13195" width="158" height="126" srcset="https://andrewferguson.net/wp-content/uploads/2020/06/hillman_1-4_brass_insert.jpg 632w, https://andrewferguson.net/wp-content/uploads/2020/06/hillman_1-4_brass_insert-300x239.jpg 300w" sizes="(max-width: 158px) 100vw, 158px" /><figcaption>Hillman ¼&#8221; Wood Insert Lock Nut, Brass</figcaption></figure></div>
  1898.  
  1899.  
  1900.  
  1901. <div class="wp-block-image"><figure class="aligncenter is-resized"><img decoding="async" data-attachment-id="13197" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/hillman_1-4-20_screw/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/hillman_1-4-20_screw.jpg" data-orig-size="494,215" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="hillman_1-4-20_screw" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/hillman_1-4-20_screw-300x131.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/hillman_1-4-20_screw.jpg" src="https://andrewferguson.net/wp-content/uploads/2020/06/hillman_1-4-20_screw.jpg" alt="" class="wp-image-13197" width="247" height="108" srcset="https://andrewferguson.net/wp-content/uploads/2020/06/hillman_1-4-20_screw.jpg 494w, https://andrewferguson.net/wp-content/uploads/2020/06/hillman_1-4-20_screw-300x131.jpg 300w" sizes="(max-width: 247px) 100vw, 247px" /><figcaption>Hillman ¼&#8221;-20 x 1½&#8221; Machine Screw</figcaption></figure></div>
  1902.  
  1903.  
  1904.  
  1905. <div class="wp-block-image"><figure class="aligncenter is-resized"><img decoding="async" data-attachment-id="13196" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/power_pro_num8x2-12-in_screw/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/power_pro_num8x2-12-in_screw.jpg" data-orig-size="665,315" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="power_pro_num8x2-12-in_screw" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/power_pro_num8x2-12-in_screw-300x142.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/power_pro_num8x2-12-in_screw.jpg" src="https://andrewferguson.net/wp-content/uploads/2020/06/power_pro_num8x2-12-in_screw.jpg" alt="" class="wp-image-13196" width="333" height="158" srcset="https://andrewferguson.net/wp-content/uploads/2020/06/power_pro_num8x2-12-in_screw.jpg 665w, https://andrewferguson.net/wp-content/uploads/2020/06/power_pro_num8x2-12-in_screw-300x142.jpg 300w" sizes="(max-width: 333px) 100vw, 333px" /><figcaption>Power Pro #8 x 2½&#8221; Wood Screw</figcaption></figure></div>
  1906.  
  1907.  
  1908.  
  1909. <h2 class="wp-block-heading">Build Notes</h2>
  1910.  
  1911.  
  1912.  
  1913. <ul><li>Charlie and I built a total of four of these at first go and it took roughly 15 hours over five (I think) build sessions. So factor in setup and tear-down time as well.</li><li>You probably don&#8217;t <em>need</em> to secure the rungs with screws (though you will still need them to secure the Plate to the the Long and Short Leg Assemblies). We ended up only using screws for the first of the four we built (the rest just used wood glue). If you decide to use screws, it might be a good idea to use a shorter length for those that don&#8217;t go through the Plates &#8212; it&#8217;s a bit harrowing making sure the screws are sufficiently aligned so they don&#8217;t split out the dowels.</li><li>With the cabinet screws we used you don&#8217;t have to drill a pilot-hold for the dowels.</li><li>We broke the sharp edges on the boards using 120 grit sandpaper.</li><li>We sanded the dowels with 220 grit sandpaper to help give a good finish for little hands.</li><li>We put a small chamfer on the dowels to help them seat properly during assembly.</li><li>We used an edge-glued spruce board for the Plate, in retrospect we should have used a plywood with a veneer.</li><li>The Plate Assembly is a somewhat complex design to manually make. Because I needed to make eight of them I did some math and made a jig of sorts. However I also designed a paper template<sup id="rf1-13194"><a href="https://andrewferguson.net/2020/06/14/pikler-ladder/#fn1-13194" title="a trick I learned from &lt;a href=&quot;https://www.youtube.com/user/Matthiaswandel&quot;&gt;https://www.youtube.com/user/Matthiaswandel&lt;/a&gt; " rel="footnote">1</a></sup>that you can just adhere to your plywood.</li><li>The Storage Position hole is <em>waaaay</em> to close to the edge and <em>will</em> blow out. I&#8217;ve left it in the design because I like the idea of being able to keep the bolt with the ladder when it&#8217;s folded. If you want to include it then do what I did premptively blow out the hole and sand it so it looks nice-ish &#8212; otherwise don&#8217;t drill it.</li><li>If you&#8217;re building lots of these, maybe call ahead to make sure they have enough dowels. I ended buying every single 1&#8243;x48&#8243; dowel that Lowe&#8217;s had on the shelf.</li></ul>
  1914.  
  1915.  
  1916.  
  1917. <div data-carousel-extra='{"blog_id":1,"permalink":"https:\/\/andrewferguson.net\/2020\/06\/14\/pikler-ladder\/"}'  class="wp-block-jetpack-tiled-gallery aligncenter is-style-rectangular"><div class="tiled-gallery__gallery"><div class="tiled-gallery__row"><div class="tiled-gallery__col"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="13212" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/b5eizabstbsqsqzggryf1g_thumb_1f66/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/b5eIZAbsTBSQsQzggryf1g_thumb_1f66.jpg" data-orig-size="1024,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="b5eIZAbsTBSQsQzggryf1g_thumb_1f66" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/b5eIZAbsTBSQsQzggryf1g_thumb_1f66-300x225.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/b5eIZAbsTBSQsQzggryf1g_thumb_1f66.jpg" data-attachment-id="13212" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/b5eizabstbsqsqzggryf1g_thumb_1f66/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/b5eIZAbsTBSQsQzggryf1g_thumb_1f66.jpg" data-orig-size="1024,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="b5eIZAbsTBSQsQzggryf1g_thumb_1f66" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/b5eIZAbsTBSQsQzggryf1g_thumb_1f66-300x225.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/b5eIZAbsTBSQsQzggryf1g_thumb_1f66.jpg" srcset="https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/b5eIZAbsTBSQsQzggryf1g_thumb_1f66.jpg?strip=info&#038;w=600&#038;ssl=1 600w,https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/b5eIZAbsTBSQsQzggryf1g_thumb_1f66.jpg?strip=info&#038;w=900&#038;ssl=1 900w,https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/b5eIZAbsTBSQsQzggryf1g_thumb_1f66.jpg?strip=info&#038;w=1024&#038;ssl=1 1024w" alt="" data-height="768" data-id="13212" data-link="https://andrewferguson.net/?attachment_id=13212" data-url="https://andrewferguson.net/wp-content/uploads/2020/06/b5eIZAbsTBSQsQzggryf1g_thumb_1f66.jpg" data-width="1024" src="https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/b5eIZAbsTBSQsQzggryf1g_thumb_1f66.jpg?ssl=1"/></figure></div><div class="tiled-gallery__col"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="13213" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/t7humglyqniplppdikguw_thumb_1f69/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/t7humglYQniPlPpDiKguw_thumb_1f69.jpg" data-orig-size="768,1024" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="t7humglYQniPlPpDiKguw_thumb_1f69" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/t7humglYQniPlPpDiKguw_thumb_1f69-225x300.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/t7humglYQniPlPpDiKguw_thumb_1f69.jpg" data-attachment-id="13213" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/t7humglyqniplppdikguw_thumb_1f69/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/t7humglYQniPlPpDiKguw_thumb_1f69.jpg" data-orig-size="768,1024" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="t7humglYQniPlPpDiKguw_thumb_1f69" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/t7humglYQniPlPpDiKguw_thumb_1f69-225x300.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/t7humglYQniPlPpDiKguw_thumb_1f69.jpg" srcset="https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/06/t7humglYQniPlPpDiKguw_thumb_1f69.jpg?strip=info&#038;w=600&#038;ssl=1 600w,https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/06/t7humglYQniPlPpDiKguw_thumb_1f69.jpg?strip=info&#038;w=768&#038;ssl=1 768w" alt="" data-height="1024" data-id="13213" data-link="https://andrewferguson.net/?attachment_id=13213" data-url="https://andrewferguson.net/wp-content/uploads/2020/06/t7humglYQniPlPpDiKguw_thumb_1f69.jpg" data-width="768" src="https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/06/t7humglYQniPlPpDiKguw_thumb_1f69.jpg?ssl=1"/></figure></div></div><div class="tiled-gallery__row"><div class="tiled-gallery__col"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="13214" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/jbsfptk2qhwdkuclryrmga_thumb_1f6f/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/JBsFPTK2QHWdkucLrYRMgA_thumb_1f6f.jpg" data-orig-size="769,1024" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="JBsFPTK2QHWdkucLrYRMgA_thumb_1f6f" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/JBsFPTK2QHWdkucLrYRMgA_thumb_1f6f-225x300.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/JBsFPTK2QHWdkucLrYRMgA_thumb_1f6f.jpg" data-attachment-id="13214" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/jbsfptk2qhwdkuclryrmga_thumb_1f6f/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/JBsFPTK2QHWdkucLrYRMgA_thumb_1f6f.jpg" data-orig-size="769,1024" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="JBsFPTK2QHWdkucLrYRMgA_thumb_1f6f" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/JBsFPTK2QHWdkucLrYRMgA_thumb_1f6f-225x300.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/JBsFPTK2QHWdkucLrYRMgA_thumb_1f6f.jpg" srcset="https://i1.wp.com/andrewferguson.net/wp-content/uploads/2020/06/JBsFPTK2QHWdkucLrYRMgA_thumb_1f6f.jpg?strip=info&#038;w=600&#038;ssl=1 600w,https://i1.wp.com/andrewferguson.net/wp-content/uploads/2020/06/JBsFPTK2QHWdkucLrYRMgA_thumb_1f6f.jpg?strip=info&#038;w=769&#038;ssl=1 769w" alt="" data-height="1024" data-id="13214" data-link="https://andrewferguson.net/?attachment_id=13214" data-url="https://andrewferguson.net/wp-content/uploads/2020/06/JBsFPTK2QHWdkucLrYRMgA_thumb_1f6f.jpg" data-width="769" src="https://i1.wp.com/andrewferguson.net/wp-content/uploads/2020/06/JBsFPTK2QHWdkucLrYRMgA_thumb_1f6f.jpg?ssl=1"/></figure></div><div class="tiled-gallery__col"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="13215" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/u7fdoeizrdeztbj55okona_thumb_1f79/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/U7FdoEIZRDezTBj55okOnA_thumb_1f79.jpg" data-orig-size="1024,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="U7FdoEIZRDezTBj55okOnA_thumb_1f79" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/U7FdoEIZRDezTBj55okOnA_thumb_1f79-300x225.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/U7FdoEIZRDezTBj55okOnA_thumb_1f79.jpg" data-attachment-id="13215" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/u7fdoeizrdeztbj55okona_thumb_1f79/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/U7FdoEIZRDezTBj55okOnA_thumb_1f79.jpg" data-orig-size="1024,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="U7FdoEIZRDezTBj55okOnA_thumb_1f79" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/U7FdoEIZRDezTBj55okOnA_thumb_1f79-300x225.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/U7FdoEIZRDezTBj55okOnA_thumb_1f79.jpg" srcset="https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/U7FdoEIZRDezTBj55okOnA_thumb_1f79.jpg?strip=info&#038;w=600&#038;ssl=1 600w,https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/U7FdoEIZRDezTBj55okOnA_thumb_1f79.jpg?strip=info&#038;w=900&#038;ssl=1 900w,https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/U7FdoEIZRDezTBj55okOnA_thumb_1f79.jpg?strip=info&#038;w=1024&#038;ssl=1 1024w" alt="" data-height="768" data-id="13215" data-link="https://andrewferguson.net/?attachment_id=13215" data-url="https://andrewferguson.net/wp-content/uploads/2020/06/U7FdoEIZRDezTBj55okOnA_thumb_1f79.jpg" data-width="1024" src="https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/U7FdoEIZRDezTBj55okOnA_thumb_1f79.jpg?ssl=1"/></figure></div></div><div class="tiled-gallery__row"><div class="tiled-gallery__col"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="13218" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/img_0292/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/IMG_0292-scaled.jpeg" data-orig-size="1920,2560" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;1.8&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;iPhone SE&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1591823217&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;3.99&quot;,&quot;iso&quot;:&quot;80&quot;,&quot;shutter_speed&quot;:&quot;0.013513513513514&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="IMG_0292" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/IMG_0292-225x300.jpeg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/IMG_0292-768x1024.jpeg" data-attachment-id="13218" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/img_0292/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/IMG_0292-scaled.jpeg" data-orig-size="1920,2560" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;1.8&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;iPhone SE&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1591823217&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;3.99&quot;,&quot;iso&quot;:&quot;80&quot;,&quot;shutter_speed&quot;:&quot;0.013513513513514&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="IMG_0292" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/IMG_0292-225x300.jpeg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/IMG_0292-768x1024.jpeg" srcset="https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/06/IMG_0292-scaled.jpeg?strip=info&#038;w=600&#038;ssl=1 600w,https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/06/IMG_0292-scaled.jpeg?strip=info&#038;w=900&#038;ssl=1 900w,https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/06/IMG_0292-scaled.jpeg?strip=info&#038;w=1200&#038;ssl=1 1200w,https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/06/IMG_0292-scaled.jpeg?strip=info&#038;w=1500&#038;ssl=1 1500w,https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/06/IMG_0292-scaled.jpeg?strip=info&#038;w=1800&#038;ssl=1 1800w,https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/06/IMG_0292-scaled.jpeg?strip=info&#038;w=1920&#038;ssl=1 1920w" alt="" data-height="2560" data-id="13218" data-link="https://andrewferguson.net/?attachment_id=13218" data-url="https://andrewferguson.net/wp-content/uploads/2020/06/IMG_0292-scaled.jpeg" data-width="1920" src="https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/06/IMG_0292-scaled.jpeg?ssl=1"/></figure></div><div class="tiled-gallery__col"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="13219" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/pde6zmuzr3srcziqtrtjxw_thumb_1fe9/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/pDE6ZmUzR3SrCZIqTRTjxw_thumb_1fe9.jpg" data-orig-size="768,1024" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="pDE6ZmUzR3SrCZIqTRTjxw_thumb_1fe9" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/pDE6ZmUzR3SrCZIqTRTjxw_thumb_1fe9-225x300.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/pDE6ZmUzR3SrCZIqTRTjxw_thumb_1fe9.jpg" data-attachment-id="13219" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/pde6zmuzr3srcziqtrtjxw_thumb_1fe9/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/pDE6ZmUzR3SrCZIqTRTjxw_thumb_1fe9.jpg" data-orig-size="768,1024" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="pDE6ZmUzR3SrCZIqTRTjxw_thumb_1fe9" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/pDE6ZmUzR3SrCZIqTRTjxw_thumb_1fe9-225x300.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/pDE6ZmUzR3SrCZIqTRTjxw_thumb_1fe9.jpg" srcset="https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/pDE6ZmUzR3SrCZIqTRTjxw_thumb_1fe9.jpg?strip=info&#038;w=600&#038;ssl=1 600w,https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/pDE6ZmUzR3SrCZIqTRTjxw_thumb_1fe9.jpg?strip=info&#038;w=768&#038;ssl=1 768w" alt="" data-height="1024" data-id="13219" data-link="https://andrewferguson.net/?attachment_id=13219" data-url="https://andrewferguson.net/wp-content/uploads/2020/06/pDE6ZmUzR3SrCZIqTRTjxw_thumb_1fe9.jpg" data-width="768" src="https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/pDE6ZmUzR3SrCZIqTRTjxw_thumb_1fe9.jpg?ssl=1"/></figure></div><div class="tiled-gallery__col"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="13221" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/l1kxmcnatu6gecdwdfsw_thumb_2001/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/l1KXMCNATU6gecDwDfSw_thumb_2001.jpg" data-orig-size="1024,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="l1KXMCNATU6gecDwDfSw_thumb_2001" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/l1KXMCNATU6gecDwDfSw_thumb_2001-300x225.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/l1KXMCNATU6gecDwDfSw_thumb_2001.jpg" data-attachment-id="13221" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/l1kxmcnatu6gecdwdfsw_thumb_2001/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/l1KXMCNATU6gecDwDfSw_thumb_2001.jpg" data-orig-size="1024,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="l1KXMCNATU6gecDwDfSw_thumb_2001" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/l1KXMCNATU6gecDwDfSw_thumb_2001-300x225.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/l1KXMCNATU6gecDwDfSw_thumb_2001.jpg" srcset="https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/06/l1KXMCNATU6gecDwDfSw_thumb_2001.jpg?strip=info&#038;w=600&#038;ssl=1 600w,https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/06/l1KXMCNATU6gecDwDfSw_thumb_2001.jpg?strip=info&#038;w=900&#038;ssl=1 900w,https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/06/l1KXMCNATU6gecDwDfSw_thumb_2001.jpg?strip=info&#038;w=1024&#038;ssl=1 1024w" alt="" data-height="768" data-id="13221" data-link="https://andrewferguson.net/?attachment_id=13221" data-url="https://andrewferguson.net/wp-content/uploads/2020/06/l1KXMCNATU6gecDwDfSw_thumb_2001.jpg" data-width="1024" src="https://i0.wp.com/andrewferguson.net/wp-content/uploads/2020/06/l1KXMCNATU6gecDwDfSw_thumb_2001.jpg?ssl=1"/></figure></div><div class="tiled-gallery__col"><figure class="tiled-gallery__item"><img decoding="async" data-attachment-id="13222" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/lrjulfowrmwkws0jzqw_thumb_2003/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/LRjULfOwRmWKWs0jzqw_thumb_2003.jpg" data-orig-size="768,1024" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="LRjULfOwRmWKWs0jzqw_thumb_2003" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/LRjULfOwRmWKWs0jzqw_thumb_2003-225x300.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/LRjULfOwRmWKWs0jzqw_thumb_2003.jpg" data-attachment-id="13222" data-permalink="https://andrewferguson.net/2020/06/14/pikler-ladder/lrjulfowrmwkws0jzqw_thumb_2003/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/06/LRjULfOwRmWKWs0jzqw_thumb_2003.jpg" data-orig-size="768,1024" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="LRjULfOwRmWKWs0jzqw_thumb_2003" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/06/LRjULfOwRmWKWs0jzqw_thumb_2003-225x300.jpg" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/06/LRjULfOwRmWKWs0jzqw_thumb_2003.jpg" srcset="https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/LRjULfOwRmWKWs0jzqw_thumb_2003.jpg?strip=info&#038;w=600&#038;ssl=1 600w,https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/LRjULfOwRmWKWs0jzqw_thumb_2003.jpg?strip=info&#038;w=768&#038;ssl=1 768w" alt="" data-height="1024" data-id="13222" data-link="https://andrewferguson.net/?attachment_id=13222" data-url="https://andrewferguson.net/wp-content/uploads/2020/06/LRjULfOwRmWKWs0jzqw_thumb_2003.jpg" data-width="768" src="https://i2.wp.com/andrewferguson.net/wp-content/uploads/2020/06/LRjULfOwRmWKWs0jzqw_thumb_2003.jpg?ssl=1"/></figure></div></div></div></div>
  1918. <hr class="footnotes"><ol class="footnotes" style="list-style-type:decimal"><li id="fn1-13194"><p >a trick I learned from <a href="https://www.youtube.com/user/Matthiaswandel">https://www.youtube.com/user/Matthiaswandel</a> &nbsp;<a href="https://andrewferguson.net/2020/06/14/pikler-ladder/#rf1-13194" class="backlink" title="Return to footnote 1.">&#8617;</a></p></li></ol>]]></content:encoded>
  1919. <post-id xmlns="com-wordpress:feed-additions:1">13194</post-id> </item>
  1920. <item>
  1921. <title>Deleted Facebook</title>
  1922. <link>https://andrewferguson.net/2020/02/01/deleted-facebook/</link>
  1923. <dc:creator><![CDATA[Andrew]]></dc:creator>
  1924. <pubDate>Sat, 01 Feb 2020 20:03:53 +0000</pubDate>
  1925. <category><![CDATA[Technology's Infestation of my Life]]></category>
  1926. <category><![CDATA[Android]]></category>
  1927. <category><![CDATA[Apple]]></category>
  1928. <category><![CDATA[DuckDuckGo]]></category>
  1929. <category><![CDATA[Facebook]]></category>
  1930. <category><![CDATA[FastMail]]></category>
  1931. <category><![CDATA[Google]]></category>
  1932. <category><![CDATA[iPhone]]></category>
  1933. <category><![CDATA[privacy]]></category>
  1934. <guid isPermaLink="false">https://andrewferguson.net/?p=12535</guid>
  1935.  
  1936. <description><![CDATA[Yesterday was my last day on Facebook. Today I deleted my account. I may write more later, but fundamentally I don&#8217;t trust Facebook with my data or their motives. I have similar concerns with Google as well and I don&#8217;t use GMail (I use FastMail), I don&#8217;t use Google Search (I use DuckDuckGo), and I&#8230;&#160;<a href="https://andrewferguson.net/2020/02/01/deleted-facebook/" class="" rel="bookmark">Read More &#187;<span class="screen-reader-text">Deleted Facebook</span></a>]]></description>
  1937. <content:encoded><![CDATA[<p>Yesterday was my last day on Facebook. Today I deleted my account.</p>
  1938. <p><img decoding="async" data-attachment-id="12539" data-permalink="https://andrewferguson.net/2020/02/01/deleted-facebook/fb_delete/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2020/02/fb_delete.gif" data-orig-size="640,508" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="fb_delete" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2020/02/fb_delete-300x238.gif" data-large-file="https://andrewferguson.net/wp-content/uploads/2020/02/fb_delete.gif" class="aligncenter size-full wp-image-12539" src="https://andrewferguson.net/wp-content/uploads/2020/02/fb_delete.gif" alt="" width="640" height="508"></p>
  1939. <p>I may write more later, but fundamentally I don&#8217;t trust Facebook with my data or their motives.</p>
  1940. <p>I have similar concerns with Google as well and I don&#8217;t use GMail (I use <a href="https://www.fastmail.com/">FastMail</a>), I don&#8217;t use Google Search (I use <a href="https://duckduckgo.com/">DuckDuckGo</a>), and I don&#8217;t use an Android device (I use an <a href="https://bgr.com/2019/03/14/apple-privacy-ad-iphone-marketing/">iPhone</a>).</p>
  1941. <p>Facebook (similar to Google) has repeatedly demonstrated they want to ingest all possible information they can about me, my family, my friends, my coworkers, and my acquaintances&#8230;damn the consequences.</p>
  1942. <p>They do this in overt and obvious ways, such as on the Facebook site itself when I provide them information, as well as offsite via the use of embedded &#8220;Like&#8221; buttons across the web. I used <a href="https://addons.mozilla.org/en-US/firefox/addon/facebook-container/">Firefox&#8217;s &#8216;Facebook Container&#8217;</a> and <a href="https://addons.mozilla.org/en-US/firefox/addon/privacy-badger17/">EFF&#8217;s &#8216;Privacy Badger&#8217;</a> plugins in an attempt to segregate Facebook from the rest of my online digital presence.</p>
  1943. <p>Facebook also does this in more covert ways, such as creating social graphs to see how people are related and interact with each other, scanning photos to identify people (even people who aren&#8217;t users of Facebook)[1], and even creating &#8216;shadow profiles&#8217; for people who don&#8217;t have accounts [2].</p>
  1944. <p>Facebook desires to be at the intersection of every kind of interaction they can be &#8212; social groups, personal communication, advertisement, sales, currency, etc &#8212; and to profit off it&#8230;to profit off of me.</p>
  1945. <p>This is a dangerous desire, in my opinion, and one I do not want to be involved in or exploited to achieve.</p>
  1946. <p>I also don&#8217;t like what Facebook does to my brain in terms of the intermittent reinforcement (similar to what happens at casinos) with new posts and updates from friends as well as the comparing (and glamorizing) of idealized existences.</p>
  1947. <p>I also hate the polarization that occurs with Facebook, and is in part <em>driven</em> by Facebook. Through their algorithms, Facebook encourages echo chambers and the spread of (dis)information thereof.</p>
  1948. <p>This is incredibly scary in our current socialgeopolitical climate&#8230;we seem to have lost the ability to have rational debate&#8230;something that is very urgently needed.</p>
  1949. <p>But know that I’d still love to keep in touch, so please call, text, email, or visit the blogs: <a href="https://andrewferguson.net">andrewferguson.net</a> (more tech and politics) and <a href="http://andrewandrachel.com">andrewandrachel.com</a> (more life events and pictures&#8230;you’ll need to create a login because it’s private, you can also get email updates if you want too!)</p>
  1950. <p>[1] <a href="https://chicago.suntimes.com/metro-state/2020/1/29/21114569/facebook-could-pay-550-million-to-illinois-users-in-privacy-settlement">https://chicago.suntimes.com/metro-state/2020/1/29/21114569/facebook-could-pay-550-million-to-illinois-users-in-privacy-settlement</a></p>
  1951. <p>[2] <a href="https://www.theverge.com/2018/4/11/17225482/facebook-shadow-profiles-zuckerberg-congress-data-privacy">https://www.theverge.com/2018/4/11/17225482/facebook-shadow-profiles-zuckerberg-congress-data-privacy</a></p>
  1952. ]]></content:encoded>
  1953. <post-id xmlns="com-wordpress:feed-additions:1">12535</post-id> </item>
  1954. <item>
  1955. <title>Why you rarely get internet as fast as your speedtest</title>
  1956. <link>https://andrewferguson.net/2019/10/18/why-you-rarely-get-internet-as-fast-as-your-speedtest/</link>
  1957. <dc:creator><![CDATA[Andrew]]></dc:creator>
  1958. <pubDate>Fri, 18 Oct 2019 21:35:29 +0000</pubDate>
  1959. <category><![CDATA[Answers]]></category>
  1960. <guid isPermaLink="false">https://andrewferguson.net/?p=12232</guid>
  1961.  
  1962. <description><![CDATA[Can anyone explain why, when my internet download speed is testing around 20mbps, if I go to download a file, the actual speed result is more like 1-2mbps? There&#8217;s a couple things going on, but first a primer on the internet: For our purposes, think of the internet as several independent networks that are joined&#8230;&#160;<a href="https://andrewferguson.net/2019/10/18/why-you-rarely-get-internet-as-fast-as-your-speedtest/" class="" rel="bookmark">Read More &#187;<span class="screen-reader-text">Why you rarely get internet as fast as your speedtest</span></a>]]></description>
  1963. <content:encoded><![CDATA[<blockquote><p>Can anyone explain why, when my internet download speed is testing around 20mbps, if I go to download a file, the actual speed result is more like 1-2mbps?</p></blockquote>
  1964. <p>There&#8217;s a couple things going on, but first a primer on the internet:</p>
  1965. <p>For our purposes, think of the internet as several independent networks that are joined together through interconnection points. for our sake, let&#8217;s assume that each independent network is a physically restricted to a city; so there&#8217;s a Seattle Network and a Denver Network and a Minneapolis Network, etc.</p>
  1966. <p>Also, each network is only connected to its closest *major* city. So, Seattle and Denver don&#8217;t actually connect to each other but instead both connect to the Salt Lake City Network&#8230;this called a hop and it takes two hops to get from the core of the Seattle Network to the core of the Denver Network (Hop 1: Core Seattle -&gt; Core SLC; Hop 2: Core SLC -&gt; Core Denver).</p>
  1967. <p>There are also other ways the Seattle Network could connect to the Denver Network&#8230;it could go down the west coast and then back up, but that would take more hops (through Portland, San Fran, LA, etc). Each hop takes time so there&#8217;s benefit to keeping the number of hops as low as possible. Also, the connections between any two cities are not infinitely big, but some are bigger than others.</p>
  1968. <p>Web servers are located throughout the world, but generally congregate near large cities since they offer the best chance of serving the most people with the fewest hops. If a web site has customers in many different cities they will probably have web servers in each of those cities to try to reduce the number of hops each visitor has to make to get to their server.</p>
  1969. <p>As a general internet user you and I are on the outer fringes of one of these networks. If I want to connect to a server in a different city, I first must get to the core of my network before I can transit across other city Networks to get to my destination. This could take several hops just within my city to get to the core of Seattle and then several more hops to get to a different city if it&#8217;s not physically located nearby and potentially even more hops if the server I want isn&#8217;t near a large city.</p>
  1970. <p>Okay that&#8217;s the primary and hopefully that makes sense. To answer your specific question:</p>
  1971. <p>When you do a speed test, you are generally checking it against a that&#8217;s run by your own ISP. If you look at Speedtest, you have an option to pick a server and you can see that there are servers run by Frontier, AT&amp;T, CenturyLink, Comcast, Sprint, and whole bunch of other internet service providers. What you are testing is the connection between you and *near* the core of your city network. It probably takes about 6-10 hops. This is also the part of the network that is generally underutilized the most (which is also why ISPs also oversubscribe and you get the dreaded 7pm slowdown when everyone is binging Netflix). This is rarely representative of real-world situations.</p>
  1972. <p>When you go to download your file, it&#8217;s probably hosted across the country and has to make 20+ hops. Any one of those hops may be subject to limits for all sorts of reasons that ultimately result in a slower download speed.</p>
  1973. <p>If you want a true test of your download speeds, you need to check it using a site that better represents a real-world situation. I&#8217;d suggest trying http://speedtest.fremont.linode.com/ and see how that compares.</p>
  1974. <p>If you&#8217;re interested I can go waaaay more in depth too and we can even look at exactly what routes your data is taking (it&#8217;s actually really fascinating) and maybe even figure out where the bottle neck is happening (though it will be tough, but not impossible, to do anything about it).</p>
  1975. ]]></content:encoded>
  1976. <post-id xmlns="com-wordpress:feed-additions:1">12232</post-id> </item>
  1977. <item>
  1978. <title>Username Requirements</title>
  1979. <link>https://andrewferguson.net/2019/06/20/username-requirements/</link>
  1980. <dc:creator><![CDATA[Andrew]]></dc:creator>
  1981. <pubDate>Thu, 20 Jun 2019 15:35:06 +0000</pubDate>
  1982. <category><![CDATA[Seen, Heard, Said]]></category>
  1983. <category><![CDATA[password]]></category>
  1984. <category><![CDATA[requirements]]></category>
  1985. <category><![CDATA[username]]></category>
  1986. <guid isPermaLink="false">https://andrewferguson.net/?p=12161</guid>
  1987.  
  1988. <description><![CDATA[Some things make sense: don&#8217;t use your SSN as your username. But I don&#8217;t think I&#8217;ve ever seen a user name require both a letter and a number in it.]]></description>
  1989. <content:encoded><![CDATA[<p>Some things make sense: don&#8217;t use your SSN as your username. But I don&#8217;t think I&#8217;ve ever seen a user name <em>require</em> both a letter and a number in it.</p>
  1990. <p><img decoding="async" data-attachment-id="12162" data-permalink="https://andrewferguson.net/2019/06/20/username-requirements/username/" data-orig-file="https://andrewferguson.net/wp-content/uploads/2019/06/username.png" data-orig-size="496,247" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="username" data-image-description="" data-image-caption="" data-medium-file="https://andrewferguson.net/wp-content/uploads/2019/06/username-300x149.png" data-large-file="https://andrewferguson.net/wp-content/uploads/2019/06/username.png" class="alignleft wp-image-12162 size-full" src="https://andrewferguson.net/wp-content/uploads/2019/06/username.png" alt="" width="496" height="247" srcset="https://andrewferguson.net/wp-content/uploads/2019/06/username.png 496w, https://andrewferguson.net/wp-content/uploads/2019/06/username-300x149.png 300w" sizes="(max-width: 496px) 100vw, 496px" /></p>
  1991. ]]></content:encoded>
  1992. <post-id xmlns="com-wordpress:feed-additions:1">12161</post-id> </item>
  1993. </channel>
  1994. </rss>
  1995.  

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid RSS" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=https%3A//andrewferguson.net/feed/

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda