<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Hobby on William Floyd (high-quality images)</title>
    <link>https://w-floyd.com/tags/hobby/</link>
    <description>Recent content in Hobby on William Floyd</description>
    <generator>Hugo</generator><language>en</language><managingEditor>William Floyd</managingEditor><webMaster>William Floyd</webMaster><lastBuildDate>Sun, 05 Jul 2020 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://w-floyd.com/tags/hobby/index.hi.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>DIY &#39;Smart&#39; Coffee Maker</title>
      <link>https://w-floyd.com/2020/07/coffee/</link>
      <pubDate>Sun, 05 Jul 2020 00:00:00 +0000</pubDate><author>William Floyd</author>
      <guid>https://w-floyd.com/2020/07/coffee/</guid><description>&lt;p&gt;I have recently (last couple months) been getting into home automation, specifically using Home Assistant.&#xA;I also wanted to get a coffee maker that used K-Cups.&#xA;Thus the goal was born - to get a coffee maker working with Home Assistant, such that I could automate it to fit my morning routine.&lt;/p&gt;&#xA;&lt;p&gt;I first searched for new coffee makers, looking to see what the easiest ones would be to hack into and automate.&#xA;I got so far as adding a sleek new brand name model to my Amazon cart, but thankfully reason and frugality prevailed!&#xA;Instead, I opted to swing by the local Goodwill the next day, to see what secondhand options might be available.&#xA;As luck would have it, I found a no-frills, single button coffee maker for the princely sum of $4, and I was on my merry way.&lt;/p&gt;&#xA;&lt;a href=&#34;https://w-floyd.com/2020/07/coffee/media/20200610_204856-hq-3024.avif&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34; class=&#34;image-full&#34;&gt;&lt;img data-rimg src=&#34;https://w-floyd.com/2020/07/coffee/media/20200610_204856-hq-1920.avif&#34; srcset=&#34;https://w-floyd.com/2020/07/coffee/media/20200610_204856-hq-1280.avif 1280w, https://w-floyd.com/2020/07/coffee/media/20200610_204856-hq-1296.avif 1296w, https://w-floyd.com/2020/07/coffee/media/20200610_204856-hq-1728.avif 1728w, https://w-floyd.com/2020/07/coffee/media/20200610_204856-hq-1920.avif 1920w, https://w-floyd.com/2020/07/coffee/media/20200610_204856-hq-2160.avif 2160w, https://w-floyd.com/2020/07/coffee/media/20200610_204856-hq-2560.avif 2560w, https://w-floyd.com/2020/07/coffee/media/20200610_204856-hq-2592.avif 2592w, https://w-floyd.com/2020/07/coffee/media/20200610_204856-hq-3024.avif 3024w, https://w-floyd.com/2020/07/coffee/media/20200610_204856-hq-400.avif 400w, https://w-floyd.com/2020/07/coffee/media/20200610_204856-hq-432.avif 432w, https://w-floyd.com/2020/07/coffee/media/20200610_204856-hq-640.avif 640w, https://w-floyd.com/2020/07/coffee/media/20200610_204856-hq-864.avif 864w, https://w-floyd.com/2020/07/coffee/media/20200610_204856-hq-960.avif 960w&#34; sizes=&#34;(max-width: 768px) 100vw, min(100vw - 40px, 860px)&#34; alt=&#34;The Spoils of Goodwill&#34; title=&#34;The Spoils of Goodwill&#34; width=&#34;3024&#34; height=&#34;4032&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; /&gt;&lt;/a&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Later that evening, opening the black box up (thankfully I had the correct triangular screwdriver head), I found very easily hackable innards.&lt;/p&gt;&#xA;&lt;a href=&#34;https://w-floyd.com/2020/07/coffee/media/20200610_205351-hq-4032.avif&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34; class=&#34;image-full&#34;&gt;&lt;img data-rimg src=&#34;https://w-floyd.com/2020/07/coffee/media/20200610_205351-hq-1920.avif&#34; srcset=&#34;https://w-floyd.com/2020/07/coffee/media/20200610_205351-hq-1280.avif 1280w, https://w-floyd.com/2020/07/coffee/media/20200610_205351-hq-1296.avif 1296w, https://w-floyd.com/2020/07/coffee/media/20200610_205351-hq-1728.avif 1728w, https://w-floyd.com/2020/07/coffee/media/20200610_205351-hq-1920.avif 1920w, https://w-floyd.com/2020/07/coffee/media/20200610_205351-hq-2160.avif 2160w, https://w-floyd.com/2020/07/coffee/media/20200610_205351-hq-2560.avif 2560w, https://w-floyd.com/2020/07/coffee/media/20200610_205351-hq-2592.avif 2592w, https://w-floyd.com/2020/07/coffee/media/20200610_205351-hq-3840.avif 3840w, https://w-floyd.com/2020/07/coffee/media/20200610_205351-hq-400.avif 400w, https://w-floyd.com/2020/07/coffee/media/20200610_205351-hq-4032.avif 4032w, https://w-floyd.com/2020/07/coffee/media/20200610_205351-hq-432.avif 432w, https://w-floyd.com/2020/07/coffee/media/20200610_205351-hq-640.avif 640w, https://w-floyd.com/2020/07/coffee/media/20200610_205351-hq-864.avif 864w, https://w-floyd.com/2020/07/coffee/media/20200610_205351-hq-960.avif 960w&#34; sizes=&#34;(max-width: 768px) 100vw, min(100vw - 40px, 860px)&#34; alt=&#34;Poor lighting is the worst...&#34; title=&#34;Poor lighting is the worst...&#34; width=&#34;4032&#34; height=&#34;3024&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; /&gt;&lt;/a&gt;&#xA;&lt;p&gt;The control board (&lt;a href=&#34;media/20200610_205847-3024.avif&#34; &gt;front&lt;/a&gt;, &lt;a href=&#34;media/20200610_205841-3024.avif&#34; &gt;back&lt;/a&gt;) is very simple - two buttons in parallel, an LED, and a couple resistors.&#xA;I&amp;rsquo;m not quite sure what the logic is upstream (it un/latches on each press), but the buttons short to ground, and this is something I can work with.&#xA;The control board has wires for ground, signal, and 5V, in that order.&lt;/p&gt;&#xA;&lt;p&gt;The ordeal of hacking into the thing, and my missteps trying to do so, is rather boring really, but it produced this:&lt;/p&gt;&#xA;&lt;a href=&#34;https://w-floyd.com/2020/07/coffee/media/20200702_120309-hq-3024.avif&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34; class=&#34;image-full&#34;&gt;&lt;img data-rimg src=&#34;https://w-floyd.com/2020/07/coffee/media/20200702_120309-hq-1920.avif&#34; srcset=&#34;https://w-floyd.com/2020/07/coffee/media/20200702_120309-hq-1280.avif 1280w, https://w-floyd.com/2020/07/coffee/media/20200702_120309-hq-1296.avif 1296w, https://w-floyd.com/2020/07/coffee/media/20200702_120309-hq-1728.avif 1728w, https://w-floyd.com/2020/07/coffee/media/20200702_120309-hq-1920.avif 1920w, https://w-floyd.com/2020/07/coffee/media/20200702_120309-hq-2160.avif 2160w, https://w-floyd.com/2020/07/coffee/media/20200702_120309-hq-2560.avif 2560w, https://w-floyd.com/2020/07/coffee/media/20200702_120309-hq-2592.avif 2592w, https://w-floyd.com/2020/07/coffee/media/20200702_120309-hq-3024.avif 3024w, https://w-floyd.com/2020/07/coffee/media/20200702_120309-hq-400.avif 400w, https://w-floyd.com/2020/07/coffee/media/20200702_120309-hq-432.avif 432w, https://w-floyd.com/2020/07/coffee/media/20200702_120309-hq-640.avif 640w, https://w-floyd.com/2020/07/coffee/media/20200702_120309-hq-864.avif 864w, https://w-floyd.com/2020/07/coffee/media/20200702_120309-hq-960.avif 960w&#34; sizes=&#34;(max-width: 768px) 100vw, min(100vw - 40px, 860px)&#34; alt=&#34;Interception!&#34; title=&#34;Interception!&#34; width=&#34;3024&#34; height=&#34;4032&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; /&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://w-floyd.com/2020/07/coffee/media/20200702_120302-hq-3024.avif&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34; class=&#34;image-full&#34;&gt;&lt;img data-rimg src=&#34;https://w-floyd.com/2020/07/coffee/media/20200702_120302-hq-1920.avif&#34; srcset=&#34;https://w-floyd.com/2020/07/coffee/media/20200702_120302-hq-1280.avif 1280w, https://w-floyd.com/2020/07/coffee/media/20200702_120302-hq-1296.avif 1296w, https://w-floyd.com/2020/07/coffee/media/20200702_120302-hq-1728.avif 1728w, https://w-floyd.com/2020/07/coffee/media/20200702_120302-hq-1920.avif 1920w, https://w-floyd.com/2020/07/coffee/media/20200702_120302-hq-2160.avif 2160w, https://w-floyd.com/2020/07/coffee/media/20200702_120302-hq-2560.avif 2560w, https://w-floyd.com/2020/07/coffee/media/20200702_120302-hq-2592.avif 2592w, https://w-floyd.com/2020/07/coffee/media/20200702_120302-hq-3024.avif 3024w, https://w-floyd.com/2020/07/coffee/media/20200702_120302-hq-400.avif 400w, https://w-floyd.com/2020/07/coffee/media/20200702_120302-hq-432.avif 432w, https://w-floyd.com/2020/07/coffee/media/20200702_120302-hq-640.avif 640w, https://w-floyd.com/2020/07/coffee/media/20200702_120302-hq-864.avif 864w, https://w-floyd.com/2020/07/coffee/media/20200702_120302-hq-960.avif 960w&#34; sizes=&#34;(max-width: 768px) 100vw, min(100vw - 40px, 860px)&#34; alt=&#34;Perfboard&#34; title=&#34;Perfboard&#34; width=&#34;3024&#34; height=&#34;4032&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; /&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://w-floyd.com/2020/07/coffee/media/20200702_120328-hq-3024.avif&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34; class=&#34;image-full&#34;&gt;&lt;img data-rimg src=&#34;https://w-floyd.com/2020/07/coffee/media/20200702_120328-hq-1920.avif&#34; srcset=&#34;https://w-floyd.com/2020/07/coffee/media/20200702_120328-hq-1280.avif 1280w, https://w-floyd.com/2020/07/coffee/media/20200702_120328-hq-1296.avif 1296w, https://w-floyd.com/2020/07/coffee/media/20200702_120328-hq-1728.avif 1728w, https://w-floyd.com/2020/07/coffee/media/20200702_120328-hq-1920.avif 1920w, https://w-floyd.com/2020/07/coffee/media/20200702_120328-hq-2160.avif 2160w, https://w-floyd.com/2020/07/coffee/media/20200702_120328-hq-2560.avif 2560w, https://w-floyd.com/2020/07/coffee/media/20200702_120328-hq-2592.avif 2592w, https://w-floyd.com/2020/07/coffee/media/20200702_120328-hq-3024.avif 3024w, https://w-floyd.com/2020/07/coffee/media/20200702_120328-hq-400.avif 400w, https://w-floyd.com/2020/07/coffee/media/20200702_120328-hq-432.avif 432w, https://w-floyd.com/2020/07/coffee/media/20200702_120328-hq-640.avif 640w, https://w-floyd.com/2020/07/coffee/media/20200702_120328-hq-864.avif 864w, https://w-floyd.com/2020/07/coffee/media/20200702_120328-hq-960.avif 960w&#34; sizes=&#34;(max-width: 768px) 100vw, min(100vw - 40px, 860px)&#34; alt=&#34;D1 Mini&#34; title=&#34;D1 Mini&#34; width=&#34;3024&#34; height=&#34;4032&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; /&gt;&lt;/a&gt;&#xA;&lt;p&gt;The brains I added was a Wemos D1 Mini (thanks, Aliexpress!), with a 3.3V&amp;lt;-&amp;gt;5V converter between to sense when the coffee maker is on, and also turn on a mosfet to short the button to ground.&#xA;I initially had issues with the coffee maker turning on whenever I plugged the D1 Mini in, but a pulldown resistor solved this.&lt;/p&gt;&#xA;&lt;a href=&#34;https://w-floyd.com/2020/07/coffee/media/20200702_120334-hq-3024.avif&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34; class=&#34;image-full&#34;&gt;&lt;img data-rimg src=&#34;https://w-floyd.com/2020/07/coffee/media/20200702_120334-hq-1920.avif&#34; srcset=&#34;https://w-floyd.com/2020/07/coffee/media/20200702_120334-hq-1280.avif 1280w, https://w-floyd.com/2020/07/coffee/media/20200702_120334-hq-1296.avif 1296w, https://w-floyd.com/2020/07/coffee/media/20200702_120334-hq-1728.avif 1728w, https://w-floyd.com/2020/07/coffee/media/20200702_120334-hq-1920.avif 1920w, https://w-floyd.com/2020/07/coffee/media/20200702_120334-hq-2160.avif 2160w, https://w-floyd.com/2020/07/coffee/media/20200702_120334-hq-2560.avif 2560w, https://w-floyd.com/2020/07/coffee/media/20200702_120334-hq-2592.avif 2592w, https://w-floyd.com/2020/07/coffee/media/20200702_120334-hq-3024.avif 3024w, https://w-floyd.com/2020/07/coffee/media/20200702_120334-hq-400.avif 400w, https://w-floyd.com/2020/07/coffee/media/20200702_120334-hq-432.avif 432w, https://w-floyd.com/2020/07/coffee/media/20200702_120334-hq-640.avif 640w, https://w-floyd.com/2020/07/coffee/media/20200702_120334-hq-864.avif 864w, https://w-floyd.com/2020/07/coffee/media/20200702_120334-hq-960.avif 960w&#34; sizes=&#34;(max-width: 768px) 100vw, min(100vw - 40px, 860px)&#34; alt=&#34;External USB Plug&#34; title=&#34;External USB Plug&#34; width=&#34;3024&#34; height=&#34;4032&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; /&gt;&lt;/a&gt;&#xA;&lt;p&gt;I also opted for an external USB plug - this allows me to possibly reflash this without opening the enclosure, and also meant I did not need to splice into the mains line inside, which I was reluctant to do.&lt;/p&gt;&#xA;&lt;p&gt;I initially flashed and programmed the coffee maker with Tasmota, but almost immediately opted to use ESPHome instead.&#xA;I like Tasmota and ESPHome, I was just able to get more fine control of the setup using ESPHome in this instance, especially concerning the button logic.&lt;/p&gt;&#xA;&lt;p&gt;The (important) code is as follows:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;binary_sensor&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#f92672&#34;&gt;platform&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;gpio&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;device_class&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;power&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;internal&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;id&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;power_on&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;pin&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;D2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;switch&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#f92672&#34;&gt;platform&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;gpio&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;pin&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;D1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;id&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;relay&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;restore_mode&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;ALWAYS_OFF&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#f92672&#34;&gt;platform&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;template&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Coffee Maker&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;icon&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mdi:coffee-maker&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;lambda&lt;/span&gt;: |-&lt;span style=&#34;color:#e6db74&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      if (id(power_on).state) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        return true;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      } else {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        return false;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      }&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;turn_on_action&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;switch.turn_on&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;relay&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;50ms&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;switch.turn_off&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;relay&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;turn_off_action&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;switch.turn_on&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;relay&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;50ms&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;switch.turn_off&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;relay&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The beauty of the way in which I can detect signals and simulate a button press is that ESPHome senses when I use the physical button, and updates accordingly.&#xA;I can use the coffee maker absolutely as normal, the &amp;lsquo;Smart&amp;rsquo; part of it is optional.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;The rest of my setup using this coffee maker is somewhat outside the scope of this post, but it includes using Tasker on my phone to run a &amp;lsquo;Wakeup&amp;rsquo; automation on Home Assistant, which will - along with turning on my bed-head lamp, and switching my monitor on before putting it to sleep - check if I turned on a &amp;lsquo;Morning Coffee&amp;rsquo; user input.&#xA;If I remembered to prep my coffee the night before, and turned on the switch, I will wake up to a hot cup of coffee (or, the sound of a coffee-in-progress).&#xA;I can also command Alexa and Google Assistant to do my bidding and make me a coffee.&#xA;At least someone does what I want&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Truly, we are living in the future.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>midiMixer - A simple Arduino powered MIDI potentiometer bank</title>
      <link>https://w-floyd.com/2020/05/midimixerv1/</link>
      <pubDate>Wed, 06 May 2020 00:00:00 +0000</pubDate><author>William Floyd</author>
      <guid>https://w-floyd.com/2020/05/midimixerv1/</guid><description>&lt;p&gt;This is nothing too special really - I wanted to try my hand at designing a custom PCB and assembling a device from scratch.&#xA;&lt;a href=&#34;https://github.com/W-Floyd/midiMixer&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GitHub for this project.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;This story actually starts a while ago (perhaps 2015), when I got the desire to build a DJ control panel (with no knowledge of how to get into it).&#xA;This never really happened, but it did lead me to get to know some DAW software, and experiment with it off and on.&#xA;But in the back of my head I still wanted to build some hardware to help with this.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://w-floyd.com/2020/05/midimixerv1/media/handwired/20190811_004928-hq-3024.avif&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34; class=&#34;image-full&#34;&gt;&lt;img data-rimg src=&#34;https://w-floyd.com/2020/05/midimixerv1/media/handwired/20190811_004928-hq-1920.avif&#34; srcset=&#34;https://w-floyd.com/2020/05/midimixerv1/media/handwired/20190811_004928-hq-1280.avif 1280w, https://w-floyd.com/2020/05/midimixerv1/media/handwired/20190811_004928-hq-1296.avif 1296w, https://w-floyd.com/2020/05/midimixerv1/media/handwired/20190811_004928-hq-1728.avif 1728w, https://w-floyd.com/2020/05/midimixerv1/media/handwired/20190811_004928-hq-1920.avif 1920w, https://w-floyd.com/2020/05/midimixerv1/media/handwired/20190811_004928-hq-2160.avif 2160w, https://w-floyd.com/2020/05/midimixerv1/media/handwired/20190811_004928-hq-2560.avif 2560w, https://w-floyd.com/2020/05/midimixerv1/media/handwired/20190811_004928-hq-2592.avif 2592w, https://w-floyd.com/2020/05/midimixerv1/media/handwired/20190811_004928-hq-3024.avif 3024w, https://w-floyd.com/2020/05/midimixerv1/media/handwired/20190811_004928-hq-400.avif 400w, https://w-floyd.com/2020/05/midimixerv1/media/handwired/20190811_004928-hq-432.avif 432w, https://w-floyd.com/2020/05/midimixerv1/media/handwired/20190811_004928-hq-640.avif 640w, https://w-floyd.com/2020/05/midimixerv1/media/handwired/20190811_004928-hq-864.avif 864w, https://w-floyd.com/2020/05/midimixerv1/media/handwired/20190811_004928-hq-960.avif 960w&#34; sizes=&#34;(max-width: 768px) 100vw, min(100vw - 40px, 860px)&#34; alt=&#34;Orange Sherbet Dreams&#34; title=&#34;Orange Sherbet Dreams&#34; width=&#34;3024&#34; height=&#34;4032&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; /&gt;&lt;/a&gt;&#xA;This eventually came about in the summer of 2019, when I finally hand-wired a simple 8 knob control surface.&#xA;Truth be told, I actually built two.&#xA;The &lt;a href=&#34;media/handwired/20190811_005806-4032.avif&#34; &gt;first one&lt;/a&gt; had some issues (I wonder why&amp;hellip;?), and would sporadically jitter values.&#xA;The &lt;a href=&#34;media/handwired/20190812_181606-3024.avif&#34; &gt;second one&lt;/a&gt; worked correctly, having been &lt;a href=&#34;media/handwired/20190811_195900-3024.avif&#34; &gt;wired&lt;/a&gt; much more &lt;a href=&#34;media/handwired/20190811_200447-3024.avif&#34; &gt;carefully&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Still, it was lacking professionalism, polish, and most importantly, robustness.&#xA;The sandwich of 22AWG wire, cardstock and PCB was less than sturdy, so I promptly packed it away and never used it.&#xA;Around this time also, I tried very briefly to learn how to use KiCAD, but didn&amp;rsquo;t get far at all.&#xA;This would come to change, however, in April of 2020.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152328-hq-4032.avif&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34; class=&#34;image-full&#34;&gt;&lt;img data-rimg src=&#34;https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152328-hq-1920.avif&#34; srcset=&#34;https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152328-hq-1280.avif 1280w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152328-hq-1296.avif 1296w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152328-hq-1728.avif 1728w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152328-hq-1920.avif 1920w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152328-hq-2160.avif 2160w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152328-hq-2560.avif 2560w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152328-hq-2592.avif 2592w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152328-hq-3840.avif 3840w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152328-hq-400.avif 400w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152328-hq-4032.avif 4032w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152328-hq-432.avif 432w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152328-hq-640.avif 640w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152328-hq-864.avif 864w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152328-hq-960.avif 960w&#34; sizes=&#34;(max-width: 768px) 100vw, min(100vw - 40px, 860px)&#34; alt=&#34;It&#39;s Not Easy, Being Green&#34; title=&#34;It&#39;s Not Easy, Being Green&#34; width=&#34;4032&#34; height=&#34;3024&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; /&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152317-hq-4032.avif&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34; class=&#34;image-full&#34;&gt;&lt;img data-rimg src=&#34;https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152317-hq-1920.avif&#34; srcset=&#34;https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152317-hq-1280.avif 1280w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152317-hq-1296.avif 1296w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152317-hq-1728.avif 1728w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152317-hq-1920.avif 1920w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152317-hq-2160.avif 2160w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152317-hq-2560.avif 2560w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152317-hq-2592.avif 2592w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152317-hq-3840.avif 3840w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152317-hq-400.avif 400w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152317-hq-4032.avif 4032w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152317-hq-432.avif 432w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152317-hq-640.avif 640w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152317-hq-864.avif 864w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152317-hq-960.avif 960w&#34; sizes=&#34;(max-width: 768px) 100vw, min(100vw - 40px, 860px)&#34; alt=&#34;Look Mum, Open Hardware!&#34; title=&#34;Look Mum, Open Hardware!&#34; width=&#34;4032&#34; height=&#34;3024&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; /&gt;&lt;/a&gt;&#xA;Fast forward close to a year, and here we are - toilet paper is the currency of the quickly collapsing Covid19 crazed world, and I&amp;rsquo;m back with my grandparents for the remainder of my semester (which, as of writing, is all but concluded).&#xA;Finding my lack of a social life leaving me with a little bit more free time, and being home yielding a &lt;em&gt;lot&lt;/em&gt; more distractions, I learned the basics of KiCAD from YouTube, and set out to design a simple PCB.&#xA;My old MIDI controller project came to mind, so I set myself to it, and within a few days had my first Gerber files sent off to JLCPCB.&#xA;In reality, I should have waited a bit and done a couple more design iterations before committing, but I guess $7 is the price of impatience.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151852-hq-4032.avif&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34; class=&#34;image-full&#34;&gt;&lt;img data-rimg src=&#34;https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151852-hq-1920.avif&#34; srcset=&#34;https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151852-hq-1280.avif 1280w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151852-hq-1296.avif 1296w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151852-hq-1728.avif 1728w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151852-hq-1920.avif 1920w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151852-hq-2160.avif 2160w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151852-hq-2560.avif 2560w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151852-hq-2592.avif 2592w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151852-hq-3840.avif 3840w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151852-hq-400.avif 400w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151852-hq-4032.avif 4032w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151852-hq-432.avif 432w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151852-hq-640.avif 640w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151852-hq-864.avif 864w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151852-hq-960.avif 960w&#34; sizes=&#34;(max-width: 768px) 100vw, min(100vw - 40px, 860px)&#34; alt=&#34;One In Hand&#34; title=&#34;One In Hand&#34; width=&#34;4032&#34; height=&#34;3024&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; /&gt;&lt;/a&gt;&#xA;So it was that my crisp PCBs showed up 3 weeks later - I had one assembled within the hour, and my old code dusted off and flashed within two hours.&#xA;It&amp;rsquo;s really as simple as it gets - a &lt;a href=&#34;media/v1/20200506_152023-3024.avif&#34; &gt;Pro Micro&lt;/a&gt; hooked up to a &lt;a href=&#34;media/v1/20200506_152016-4032.avif&#34; &gt;4051 analogue multiplexer&lt;/a&gt;, in turn hooked up to 8 potentiometers.&lt;/p&gt;&#xA;&lt;p&gt;The potentiometers I had on hand ended up being a bit different than the footprints I had used, so I ended up having to clip the mounting tabs off of them.&#xA;This, as one might imagine, made them extraordinarily flimsy, so I designed and printed a couple clamps to &lt;a href=&#34;media/v1/20200506_151947-4032.avif&#34; &gt;align&lt;/a&gt; and &lt;a href=&#34;media/v1/20200506_152003-4032.avif&#34; &gt;hold solid&lt;/a&gt; the potentiometers.&#xA;These also have the added benefit of keeping the soldered pins off of whatever surface the mixer is on.&#xA;Should the correct potentiometers be used, these would not be needed, though some feet or a case for the PCB would still be best.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152248-hq-4032.avif&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34; class=&#34;image-full&#34;&gt;&lt;img data-rimg src=&#34;https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152248-hq-1920.avif&#34; srcset=&#34;https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152248-hq-1280.avif 1280w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152248-hq-1296.avif 1296w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152248-hq-1728.avif 1728w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152248-hq-1920.avif 1920w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152248-hq-2160.avif 2160w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152248-hq-2560.avif 2560w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152248-hq-2592.avif 2592w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152248-hq-3840.avif 3840w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152248-hq-400.avif 400w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152248-hq-4032.avif 4032w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152248-hq-432.avif 432w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152248-hq-640.avif 640w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152248-hq-864.avif 864w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_152248-hq-960.avif 960w&#34; sizes=&#34;(max-width: 768px) 100vw, min(100vw - 40px, 860px)&#34; alt=&#34;It Ain&#39;t Much, But I&#39;m Proud&#34; title=&#34;It Ain&#39;t Much, But I&#39;m Proud&#34; width=&#34;4032&#34; height=&#34;3024&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; /&gt;&lt;/a&gt;&#xA;This being my first PCB design, I am quite happy it worked out so well - I am studying for Mechanical Engineering, not Electrical&amp;hellip;&#xA;However, I see room for improvement.&#xA;The potentiometers are too close together, and the rows are too far apart.&#xA;The knobs barely clear the Arduino, and the Arduino is mounted far higher off the PCB than I would like.&#xA;I see myself making a v2 in due course - perhaps next time I will try JLCPCB&amp;rsquo;s SMT assembly?&#xA;I imagine adding indicator LEDs, improving the layout, and adding a button to switch between banks would make this much more useful.&lt;/p&gt;&#xA;&lt;a href=&#34;https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151947-hq-4032.avif&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34; class=&#34;image-full&#34;&gt;&lt;img data-rimg src=&#34;https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151947-hq-1920.avif&#34; srcset=&#34;https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151947-hq-1280.avif 1280w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151947-hq-1296.avif 1296w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151947-hq-1728.avif 1728w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151947-hq-1920.avif 1920w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151947-hq-2160.avif 2160w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151947-hq-2560.avif 2560w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151947-hq-2592.avif 2592w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151947-hq-3840.avif 3840w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151947-hq-400.avif 400w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151947-hq-4032.avif 4032w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151947-hq-432.avif 432w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151947-hq-640.avif 640w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151947-hq-864.avif 864w, https://w-floyd.com/2020/05/midimixerv1/media/v1/20200506_151947-hq-960.avif 960w&#34; sizes=&#34;(max-width: 768px) 100vw, min(100vw - 40px, 860px)&#34; alt=&#34;That Hair Is Bothering Me&#34; title=&#34;That Hair Is Bothering Me&#34; width=&#34;4032&#34; height=&#34;3024&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; /&gt;&lt;/a&gt;&#xA;</description>
    </item>
  </channel>
</rss>
