<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Energy on Making Clean Tech</title><link>https://nunrg.eu/tags/energy/</link><description>Recent content in Energy on Making Clean Tech</description><generator>Hugo -- 0.136.5</generator><language>en-us</language><copyright>2024 Franci Kopač</copyright><lastBuildDate>Thu, 31 Oct 2024 18:00:02 +0100</lastBuildDate><atom:link href="https://nunrg.eu/tags/energy/index.xml" rel="self" type="application/rss+xml"/><item><title>EV Charging With Rooftop Solar and Storage</title><link>https://nunrg.eu/posts/ev_charging_solar/</link><pubDate>Thu, 31 Oct 2024 18:00:02 +0100</pubDate><guid>https://nunrg.eu/posts/ev_charging_solar/</guid><description>How to charge an EV with rooftop solar and battery storage, using Home Assistant to maximise self-consumption and cut charging costs.</description><content:encoded><![CDATA[<p>You can support me by <a href="https://medium.com/@francikopa/ev-charging-with-rooftop-solar-and-storage-a0e1e91a7d62">reading this article on Medium</a></p>
<p>In the <a href="https://nunrg.eu/posts/ev_charging_strategies/">previous article</a> we looked at how to rationally charge EVs if you have the option to install your home own charger (<a href="https://en.wikipedia.org/wiki/Charging_station">EVSE</a>). But if you can install your home charger, chances are you can install a rooftop solar system too. And once you have that, a home storage battery is the logical next step.</p>
<p>These two investments finally let you take matters into your own hands and, combined with a heat-pump, effectively decarbonize the majority of your energy use. You will still be dependent on the grid, but instead of being dependent all the time, your dependence shrinks to 3-4 months a year, depending on the sizing and where you live. 🥳</p>
<p>But let&rsquo;s stick to EV charging for now:</p>
<h2 id="the-basic-concept">The Basic Concept</h2>
<p>The best way to explain this is to pretend you are a farmer 😃 Your rooftop solar is a bit like a farm in that it&rsquo;s dependent on the weather. When the sun is shining, your solar plant is producing kilowatts of power. When it&rsquo;s heavily overcast, rainy, or at night, you get next to no production. So when you see the sun shining brightly, charge your car!</p>
<p>This brings all kinds of advantages:</p>
<ul>
<li>The solar energy is effectively free, except for installation costs. You should recover the installation costs in <a href="https://energyefficiency.ie/blog/solar-panels-as-a-financial-investment/">6-7 years</a>.</li>
<li>Any energy you charge from your solar system is carbon neutral, expect for the carbon debt of the installation (I don&rsquo;t like greenwashing, but this happens only once as well and with rational use, it is <a href="https://hcb-solar.com.au/understanding-the-carbon-footprint-of-solar-panels/">negligible in comparison to the avoided emissions</a>).</li>
<li>You are actively contributing to your grid stability. Not only will you be a smaller burden on your grid in general, but with some automation, you can actively act as a good citizen and act to reduce grid load in peak times. Why push power into the grid if you can charge your car instead? Why charge your car with grid power at night if you could have taken advantage of the sun during the day?</li>
</ul>
<figure>
    <img src="/images/EV_charging/solarEVcharger.jpg" alt="Solar EV charging station with storage">
    <figcaption>A simple picture of the concept, credit: Electrek</figcaption>
  </figure>
  
<h2 id="the-setup">The Setup</h2>
<p>The base for this article are a solar system with storage and a controllable car charger (EVSE), connected to a Home Assistant system. I&rsquo;m going to describe a solution with a hybrid inverter, but solutions with a separate power-wall will be similar, depending on the way your power-wall is controlled.</p>
<p>The charging logic will implemented using a Python script in AppDaemon, the rest are normal integrations, automations and entities in Home Assistant.</p>
<h2 id="the-charging-strategy">The Charging Strategy</h2>
<p>There are several things to take care of here:</p>
<ul>
<li>
<p>We need to supervise the total current of the installation to prevent overloads. If you have a 3x 20A home installation, you need to take care not to exceed 20A on any of the phases at any time, regardless of the resulting grid current including solar.</p>
</li>
<li>
<p>We need to prepare separate options at least for green charging and low-cost charging.</p>
<ul>
<li>Green charging will only turn on when you have an excess of energy available and only charge the excess energy without taking any from the grid.</li>
<li>Low-cost charging will charge the car when the energy prices are low using all the available power.</li>
<li>You could also add an &ldquo;express&rdquo; mode which will give you all available power at any time while still ensuring you don&rsquo;t blow any fuses.</li>
</ul>
</li>
<li>
<p>We want to monitor the following at all times:</p>
<ul>
<li>The phase currents. If any one of them is above the installation limit, we need to reduce charging current of the EVSE.</li>
<li>The storage battery charge level. Our strategy will depend on it.</li>
<li>The power coming from/going into the storage battery. This will help us set the EVSE charging power in the green mode.</li>
<li>The power coming from/going into the grid. This will help us avoid the grid utilization penalties.</li>
<li>Status of car connection to the EVSE. This is one of the inputs when deciding whether to turn on charging.</li>
<li>The grid utilization time-slots and limits. This is again helping us to avoid the grid utilization penalties.</li>
<li>Information about consumed energy at the EVSE. This is just to know how much charge was delivered to the car.</li>
</ul>
</li>
</ul>
<h3 id="limiting-currents">Limiting Currents</h3>
<p>This is the simplest part of it all.</p>
<ol>
<li>
<p>We set a current limit, 15A in my case due to limits of the inverter. I could actually go up to 20A, but there are other things to think about outside this scope&hellip;</p>
</li>
<li>
<p>We check the phase currents of the installation every minute.</p>
<p>The interval is important: Too fast and the EVSE does not have the time to respond to current changes. Too slow and we run the risk of blowing a fuse. Fuses work relatively slowly, so you should have about 10 minutes before anything bad happens. But it&rsquo;s better to do it as fast as your car can follow. You see, when the car charger sets the current, it basically tells your car what the maximum current it can take from the EVSE. The on-board charger of the car (OBC) will then honor this limit with a certain delay depending on the manufacturer. But one minute should be ok for most cars.</p>
</li>
<li>
<p>If any of the phase currents is above the limit, we:</p>
<ol>
<li>Calculate the excess current. E.g. if we set the limit to 15A and the biggest phase current is 18A, the excess is 3A.</li>
<li>Then we check the EVSE set curent (e.g. 10A) and subtract the excess (3A) to get the needed current setting (7A).</li>
<li>Most cars can only charge with a minimum of 6A. So if the new current setting is lower than that, we need to turn off the EVSE for a while (e.g. 5 minutes). This will give the fuses some time to cool down.</li>
<li>If limit is over minimum, we set the new current limit (7A) on the EVSE.</li>
</ol>
</li>
<li>
<p>Conversely, if all the phase currents are well below the limit (more than a tolerance we set, normally just the setting resolution, i.e. 1A), we do the above steps in the other direction, increasing the EVSE current limit as needed or turning it on if we had to turn it off previously.</p>
</li>
<li>
<p>Rinse and repeat forever.</p>
</li>
</ol>
<p>This process needs to have an absolute top priority, because it is the only part that can cause problems with our installation. Any strategy we implement will be using it.</p>
<h4 id="example-code">Example Code</h4>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">currentControl</span>(self, limit):    
</span></span><span style="display:flex;"><span>    headroom <span style="color:#f92672">=</span> limit <span style="color:#f92672">+</span> CURRENT_TOLERANCE <span style="color:#f92672">-</span> INSTALLATION_MAXIMUM
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> headroom <span style="color:#f92672">&lt;</span> <span style="color:#ae81ff">0</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#75715e">#Current too high, calculate wanted charging current to compensate</span>
</span></span><span style="display:flex;"><span>      wanted_current <span style="color:#f92672">=</span> int(self<span style="color:#f92672">.</span>set_current <span style="color:#f92672">+</span> int(headroom))
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">if</span> wanted_current <span style="color:#f92672">&gt;=</span> MIN_CHARGE_CURRENT:
</span></span><span style="display:flex;"><span>        self<span style="color:#f92672">.</span>setEVSE(wanted_current)
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">elif</span> <span style="color:#f92672">not</span> self<span style="color:#f92672">.</span>powerOff:
</span></span><span style="display:flex;"><span>        <span style="color:#75715e"># Turn off to cool off if no headroom</span>
</span></span><span style="display:flex;"><span>        self<span style="color:#f92672">.</span>powerOff <span style="color:#f92672">=</span> <span style="color:#66d9ef">True</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">elif</span> headroom <span style="color:#f92672">&gt;</span> CURRENT_TOLERANCE:
</span></span><span style="display:flex;"><span>      <span style="color:#75715e">#Current too low, calculate wanted charging current to compensate</span>
</span></span><span style="display:flex;"><span>      wanted_current <span style="color:#f92672">=</span> int(self<span style="color:#f92672">.</span>set_current <span style="color:#f92672">+</span> headroom)
</span></span><span style="display:flex;"><span>      self<span style="color:#f92672">.</span>setEVSE(wanted_current)
</span></span></code></pre></div><p><em>This function will be called every minute, regardless of the chosen charging mode, as long as charging is active.</em></p>
<h3 id="green-charging">Green Charging</h3>
<p>Now that the current limiting is out of the way, we can start thinking about green charging.</p>
<p>The first thing to consider is whether the storage battery is at least partially charged. It will act as our buffer when setting the charging power, taking or receiving any power we will not be able to fully compensate by setting the charger current. The storage battery voltage is not an exact measurement of charge level, but close enough. So I simply decided on the lower storage battery voltage limit to enable green charging, corresponding to about 20% of it&rsquo;s capacity. I also set a hysteresis so the charging does not turn on/off repeatedly when we are near the limit. And the charging power near the limit is minimal to avoid spikes.</p>
<p>Next we must take care of proper turning on and off of the car charger. We do this by looking at the car connection status of the charger (in my case 1 means nothing is connected, 2 means connected but not charging, 3 means connected and charging). If the car is connected, but not charging, we should turn on the charger. If the car is not corrected, we should turn it off.</p>
<p>Most importantly, we need to look at the power being charged to the storage battery. This is effectively the excess solar power available and we should charge the car with it. The approach I took is simple, but works well: If the excess power exceeds a certain value (1A of charging current, i.e. 690W + losses), increase the charging current by 1A. If the excess power drops below zero (i.e. we are draining the storage battery), decrease the charging current by 1A. This approach is really simple, but it also helps to smooth out spikes that happen in the solar system due to e.g. clouds shifting quickly.</p>
<p>If you were careful, you might wonder how this works together with the current limiting. For simplicity I decided to adapt the current limiting function to take two values, the current control maximum and the charging logic maximum resulting from excess power.</p>
<p>Finally, I think it&rsquo;s useful to try to speed up the charging when the sun is plentiful. So if the storage battery is more than half-full, I simply charge with full power until it gets down to half-full. This makes the charging faster.</p>
<h4 id="example-code-1">Example Code</h4>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">doGreenCharge</span>(self):
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Set current to minimum at start of charge, only start if voltage high</span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># enough, only start if enough headroom</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> self<span style="color:#f92672">.</span>battery_voltage <span style="color:#f92672">&gt;</span> (LOW_BATTERY_LIMIT <span style="color:#f92672">+</span> VOLTAGE_HYSTERESIS):
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">if</span> (self<span style="color:#f92672">.</span>vehicle_state <span style="color:#f92672">==</span> <span style="color:#ae81ff">2</span>) <span style="color:#f92672">and</span> ((MAX_INVERTER_CURRENT <span style="color:#f92672">-</span> self<span style="color:#f92672">.</span>highest_inverter_current) <span style="color:#f92672">&gt;=</span> MIN_CHARGE_CURRENT):
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> (self<span style="color:#f92672">.</span>set_current <span style="color:#f92672">==</span> <span style="color:#ae81ff">0</span>) <span style="color:#f92672">or</span> (self<span style="color:#f92672">.</span>set_current <span style="color:#f92672">&gt;</span> MIN_CHARGE_CURRENT):
</span></span><span style="display:flex;"><span>          self<span style="color:#f92672">.</span>setEVSE(MIN_CHARGE_CURRENT)
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># If the battery if full enough, charge</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> (self<span style="color:#f92672">.</span>battery_voltage <span style="color:#f92672">&gt;</span> LOW_BATTERY_LIMIT) <span style="color:#f92672">and</span> (self<span style="color:#f92672">.</span>vehicle_state <span style="color:#f92672">==</span> <span style="color:#ae81ff">3</span>):
</span></span><span style="display:flex;"><span>      <span style="color:#75715e"># Do the excess power control</span>
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">if</span> (self<span style="color:#f92672">.</span>battery_power<span style="color:#f92672">&lt;-</span><span style="color:#ae81ff">800</span>) <span style="color:#f92672">and</span> (self<span style="color:#f92672">.</span>greenCurrent<span style="color:#f92672">&gt;</span>MIN_CHARGE_CURRENT):
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> (self<span style="color:#f92672">.</span>battery_voltage <span style="color:#f92672">&lt;</span> (LOW_BATTERY_LIMIT <span style="color:#f92672">+</span> VOLTAGE_HYSTERESIS)):
</span></span><span style="display:flex;"><span>          self<span style="color:#f92672">.</span>greenCurrent<span style="color:#f92672">=</span>MIN_CHARGE_CURRENT
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">else</span>:
</span></span><span style="display:flex;"><span>          self<span style="color:#f92672">.</span>greenCurrent<span style="color:#f92672">=</span>self<span style="color:#f92672">.</span>greenCurrent<span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">elif</span> (self<span style="color:#f92672">.</span>battery_power<span style="color:#f92672">&gt;</span><span style="color:#ae81ff">800</span>) <span style="color:#f92672">and</span> (self<span style="color:#f92672">.</span>greenCurrent<span style="color:#f92672">&lt;</span>MAX_INVERTER_CURRENT):
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> (self<span style="color:#f92672">.</span>battery_voltage <span style="color:#f92672">&lt;</span> (LOW_BATTERY_LIMIT <span style="color:#f92672">+</span> VOLTAGE_HYSTERESIS)):
</span></span><span style="display:flex;"><span>          self<span style="color:#f92672">.</span>greenCurrent<span style="color:#f92672">=</span>MIN_CHARGE_CURRENT
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">else</span>:
</span></span><span style="display:flex;"><span>          self<span style="color:#f92672">.</span>greenCurrent<span style="color:#f92672">=</span>self<span style="color:#f92672">.</span>greenCurrent<span style="color:#f92672">+</span><span style="color:#ae81ff">1</span>
</span></span><span style="display:flex;"><span>      <span style="color:#75715e"># Do full power with full storage battery</span>
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">elif</span> (self<span style="color:#f92672">.</span>battery_voltage <span style="color:#f92672">&gt;</span> HIGH_BATTERY_LIMIT):
</span></span><span style="display:flex;"><span>        self<span style="color:#f92672">.</span>greenCurrent<span style="color:#f92672">=</span>MAX_CHARGE_CURRENT
</span></span><span style="display:flex;"><span>      self<span style="color:#f92672">.</span>currentControl(MAX_INVERTER_CURRENT, self<span style="color:#f92672">.</span>greenCurrent)
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">currentControl</span>(self, limit, preference):    
</span></span><span style="display:flex;"><span>    headroom <span style="color:#f92672">=</span> limit <span style="color:#f92672">+</span> CURRENT_TOLERANCE <span style="color:#f92672">-</span> MAX_INVERTER_CURRENT
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> headroom <span style="color:#f92672">&lt;</span> <span style="color:#ae81ff">0</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#75715e">#Current too high, calculate wanted charging current to compensate</span>
</span></span><span style="display:flex;"><span>      wanted_current <span style="color:#f92672">=</span> int(self<span style="color:#f92672">.</span>set_current <span style="color:#f92672">+</span> int(headroom))
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">if</span> wanted_current <span style="color:#f92672">&gt;=</span> MIN_CHARGE_CURRENT:
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> wanted_current <span style="color:#f92672">&gt;</span> preference:
</span></span><span style="display:flex;"><span>          self<span style="color:#f92672">.</span>setEVSE(preference)
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">else</span>:
</span></span><span style="display:flex;"><span>          self<span style="color:#f92672">.</span>setEVSE(wanted_current)
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">elif</span> <span style="color:#f92672">not</span> self<span style="color:#f92672">.</span>powerOff:
</span></span><span style="display:flex;"><span>        <span style="color:#75715e"># Turn off to cool off if no headroom</span>
</span></span><span style="display:flex;"><span>        self<span style="color:#f92672">.</span>powerOff <span style="color:#f92672">=</span> <span style="color:#66d9ef">True</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">elif</span> headroom <span style="color:#f92672">&gt;</span> CURRENT_TOLERANCE:
</span></span><span style="display:flex;"><span>      <span style="color:#75715e">#Current too low, calculate wanted charging current to compensate</span>
</span></span><span style="display:flex;"><span>      wanted_current <span style="color:#f92672">=</span> int(self<span style="color:#f92672">.</span>set_current <span style="color:#f92672">+</span> headroom)
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">if</span> wanted_current <span style="color:#f92672">&gt;</span> preference:
</span></span><span style="display:flex;"><span>        self<span style="color:#f92672">.</span>setEVSE(preference)
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">else</span>:
</span></span><span style="display:flex;"><span>        self<span style="color:#f92672">.</span>setEVSE(wanted_current)
</span></span></code></pre></div><p><em>Called every minute, calls adapted currentControl function to control the charge current</em></p>
<h2 id="results">Results</h2>
<p>Let&rsquo;s look at a typical mostly sunny day using green charging:</p>
<figure>
    <img src="/images/EV_charging/curves.png" alt="The curves when the system is working">
    <figcaption>The EVSE Charging Power, the Maximum Phase Current and the Storage Battery Level When Charging on a Sunny Day</figcaption>
  </figure>
  
<p>It was a sunny day and I decided to charge up the car in green mode at around 12:20:</p>
<ul>
<li>You can see how the charging power ramps up quickly due to there being so much solar power available at around 12:30, around 8kW.</li>
<li>The power stays almost constant until around 13:20, when another large load (the oven) turns on. This in turn causes the charging power to drop to about 3.5kW due to current limiting until the oven is done. During this time, the system is unable to take all available power (the oven only works on one phase), so the storage battery gets charged up a bit.</li>
<li>At around 13:40 the oven thermostat turns off and the charging power ramps up again. There is another cycle of the oven thermostat with power reducing again due to current control. The oven is finally turned off at about 13:50.</li>
<li>After 14:00 the solar power begins to slowly drop as the afternoon begins. It is clear to see how the system reduces charging power accordingly until about 16:00. There are some short current spikes, but current control takes quick care of them.</li>
<li>At 16:30 the solar power finally drops to a value below minimal charging power and we can finally see a clear trend in the storage battery voltage. The minimal charging power is maintained until the shutoff limit is reached at about 18:15 when the charging shuts off for the day.</li>
</ul>
<p>This was in late October, so I was able to charge only 11.6kWh that day (my personal best was 39,6kWh, almost 2/3 of my Kona), but this is still enough charge to do two errands. It was free in all important aspects—I didn&rsquo;t have to pay anything, it caused no carbon emissions and the power control prevented unnecessary cycling of the storage battery. It is a win-win-win 😀
If I needed more charge that day, I could still simply turn on the cheap charging option and charge to full at night. But it turns out that with my driving, the green option is all I need from about March to about October.</p>
<h2 id="what-if-you-dont-have-storage">What If You Don&rsquo;t Have Storage?</h2>
<p>This same approach would still work if you didn&rsquo;t have a storage battery in your solar system. Instead of looking at the storage battery charging power you would have to look at grid power, but all the rest would be the same.</p>
<p>The only difference is that you would be using the grid as your battery. This means you are not worried about wear on the battery, but you can still be a good citizen and reduce your usage during the maximum grid load times. Sadly, the old-style net-metering with constant energy price does not give you any financial incentive to do that, but I&rsquo;m assuming this will change soon.</p>
<h2 id="conclusion">Conclusion</h2>
<p>This was a short description of the principles of EV charging control in a smart home installation with solar, storage battery, and a car charger. As you can see, home automation is an interesting way to reduce your carbon footprint, save energy (costs), and reduce grid load.</p>
<p>To keep thing simple, I did not discuss the grid utilization limit handling here. If there is interest, I&rsquo;ll write a separate article about that.</p>
<p>The code examples are only snippets and intended as an illustration of principle. If you are interested in details, add a comment below and let&rsquo;s discuss!</p>
<p>If you found this article useful, you can buy me a beer <a href="https://paypal.me/FranciKopac?country.x=SI&amp;locale.x=en_US">here</a>.</p>
]]></content:encoded></item><item><title>EV Charging Constraints and Strategies</title><link>https://nunrg.eu/posts/ev_charging_strategies/</link><pubDate>Sun, 27 Oct 2024 08:53:00 +0100</pubDate><guid>https://nunrg.eu/posts/ev_charging_strategies/</guid><description>The technical and economic constraints of EV charging, and practical strategies to charge cheaper, smarter and more sustainably.</description><content:encoded><![CDATA[<p>You can support me by <a href="https://medium.com/@francikopa/ev-charging-constraints-and-strategies-bf8a11e4f7d7">reading this article on Medium</a></p>
<p>Charging an EV can be really straightforward—have a charger (EVSE) installed, plug the car in and wait until the battery is full. But there is a lot more to it than that—the technical constraints, the varying costs, the desire for sustainability all play a role.</p>
<figure>
    <img src="/images/EV_charging/evplugged.jpg" alt="An EV Plugged Into a Home Charger">
    <figcaption>Looks simple, doesn&#39;t it? (Picture credit: CarPro)</figcaption>
  </figure>
  
<h2 id="technical-constraints">Technical Constraints</h2>
<h3 id="grid-connection-capacity">Grid Connection Capacity</h3>
<p>Many European single-family houses will have a hard limit on on grid connection capacity. For my own home this amounts to 230V, 3-phase, 20A per phase, i.e. 13.8kVA. Plug in any more than that and the distribution fuse blows, leaving you in the dark with an expensive addition to your next electrical bill.</p>
<p>The usual car chargers (EVSE) for family homes in Europe will have a 3x 16A (11kW) charging capacity. This is enough to charge a car at home, but it&rsquo;s not much more than the grid connection capacity of my house. So if the charger is dumb and I try to charge my car while baking some cookies, the combined current on one phase will shoot to 16A (charger) + 8A (oven) = 24 A and I&rsquo;m going to end up in the dark, with an empty battery and no cookies 🫠</p>
<h4 id="solutions">Solutions</h4>
<h5 id="buy-more-capacity">Buy More Capacity</h5>
<p>The old way of solving this would be to install bigger distribution fuses, but this is not an optimal solution and it will be expensive:</p>
<ul>
<li>Your monthly capacity cost will be bigger.</li>
<li>You might have to rewire a part of your house wiring for bigger current.</li>
<li>Depending on the utilization of the transformer in your neighborhood, you might not get the extra capacity even if you are willing to pay for it.</li>
<li>You will be paying for mostly unused capacity.</li>
</ul>
<h5 id="use-a-smart-charger">Use a Smart Charger</h5>
<p>A much better solution is to simply look at the current you are taking from the grid and take action when it exceeds the limit.</p>
<p>You can do this manually to some extent, you just need to be the nagging presence that scolds anyone who even thinks about turning on any big load while you charge your car. This should also immensely improve your relationships! 🤪</p>
<p>A much better solution is to automate this. It&rsquo;s called &ldquo;dynamic charging&rdquo; and most modern home charging stations are able to do it at least to some extent. It works like this: You have a current meter installed on the main electrical connection to your home and a mechanism of some sort regularly checks the load. If the load exceeds your limit, this mechanism (a smart home automation or a function of the charger itself) commands to charger to temporarily reduce the charging current until everything is back to normal. Your car will charge a bit slower sometimes, but you get to eat your cookies, stay warm and keep the lights on. 😃</p>
<p>These days, you can buy an off the shelf home car charger with dynamic charging support and <a href="https://www.carplug.eu/wallbox">there are a lot of models available</a>. But if you are interested in DIY solutions, I wrote an article <a href="https://nunrg.eu/posts/example_diy_charging_point/">about building one yourself</a>.</p>
<h2 id="varying-costs">Varying Costs</h2>
<h3 id="time-based-energy-costs">Time-Based Energy Costs</h3>
<p>Depending on where you live, the cost of electric energy will vary through the day. Where I live, daytime electrical energy is about 50% more expensive, so charging your car will be much cheaper at night and on weekends here.</p>
<h3 id="grid-utilization-costs">Grid Utilization Costs</h3>
<p>Depending on where you live, you might have time-slot based grid utilization costs charged extra. We just got these added to our system and they can make a major difference, a couple hundred Euro or more per year.</p>
<p>It works like this: you choose a connection capacity for each time slot and pay an upfront fixed cost for that. The busy time-slots (during office hours and daytime in winter) are really expensive per kilowatt, so it makes sense to book just enough capacity during the expensive time-slots and all the available capacity during the cheap ones. But there is a catch: if you don&rsquo;t book enough capacity, you will pay a couple of Euros for each 15 minutes you have exceeded it. It will add up quickly!</p>
<p>At first glance, this boils down to the same thing as varying energy costs—charging from grid on off-peak times is cheaper. But this cost basically forces you to really think about your energy use. If you book low capacity during expensive time-slots, you can save hundreds of Euro per year, but if you then blow through those limits, you will pay much more in penalties.</p>
<h3 id="solution">Solution</h3>
<p>Both of these issues can be taken care of manually by being careful about when you decide to charge your car. Of course, having a bit of automation can help a lot, especially with the grid utilization costs and the varying capacities in individual time slots.</p>
<p>A good automated solution will automatically limit the charging power to the capacity limits of the individual time-slots and give you an option to allow or disallow daytime charging. Most cars also have built-in charge schedulers that can help you charge them when the energy is cheaper.</p>
<h2 id="sustainability">Sustainability</h2>
<p>If you care about the climate emergency, you care about carbon intensity of the electric energy you use. In an ideal world, this would have been taken care of by the utilities for you, but we are still a long way from that.</p>
<p>Of course, many utilities are happy to sell you an &ldquo;All Renewables&rdquo; package for your electricity bill, where you pay a little extra so the energy is bought from renewable sources. I support this wholeheartedly, because it gives the energy producers the right incentives to build more renewables. On the other hand, we have to be realistic and acknowledge that you are always consuming electric energy with the average carbon intensity your grid is producing at any given time. There is no way to select for less-carbon intensive electrons, unfortunately 😞</p>
<p>This means you must think about the energy mix in your area and this is something your utility is compelled by law to report transparently. You should get a diagram showing the percentages of energy that come from coal, natural gas, nuclear, solar, hydro, wind etc with all your electricity bills.</p>
<figure>
    <img src="/images/EV_charging/energy_mix.png" alt="Energy Mix in Slovenia in 2023">
    <figcaption>The Energy Mix in Slovenia in 2023, credit SURS</figcaption>
  </figure>
  
<p>But keep in mind, this mix is an average and the actual values vary:</p>
<ul>
<li><strong>Depending on time of day:</strong> If you have a big nuclear backbone, like my country does, you will be consuming mostly nuclear at night, which is low carbon. If you don&rsquo;t, the cheaper night-time energy will probably have a much bigger carbon footprint, coming from coal and natural gas. But some countries have a lot of hydro&hellip;</li>
<li><strong>Depending on the weather:</strong> If your country has a lot of solar, daytime electricity will be almost carbon free unless the weather is bad. A rainy day can cut solar production by 80% or more.</li>
<li><strong>Then there are the seasons:</strong> Hydroelectric plants produce much more energy when the water is plentiful, e.g. in spring and fall. Solar is less plentiful in winter and the opposite holds for wind power.</li>
</ul>
<p>The good thing is, you don&rsquo;t really have to work all of this out yourself. There are services that will give you a good estimate of current carbon intensity in your area, like <a href="https://www.electricitymaps.com/">Electricity Maps</a>, which also has an API and there is even a Home Assistant integration for it.</p>
<figure>
    <img src="/images/EV_charging/carbon_intensity.png" alt="My Electricity Maps Readout">
    <figcaption>My Electricity Maps Readout</figcaption>
  </figure>
  
<h3 id="solution-1">Solution</h3>
<p>You can do a lot here if you just behave rationally. Find the data and act accordingly. But there is also the potential to automate things using the publicly available services like Electricity Maps mentioned above.</p>
<h2 id="conclusion">Conclusion</h2>
<p>EVs have the potential to strongly reduce your carbon footprint and cost per kilometer driven, if you use them rationally. But this is not trivial and there are many factors to consider.</p>
<p>If you want to do EV-charging right, you need to think at least about:</p>
<ul>
<li>Dynamic charging</li>
<li>Time-based energy costs</li>
<li>Grid utilization costs</li>
<li>The energy mix in your area</li>
<li>The variations of the energy mix because of time of day, weather and seasons</li>
</ul>
<p>Keep in mind that you can still think about your energy mix even if you are not able to charge at home. You will, of course, make sure to keep yourself mobile first, but once you take care of that, you can start thinking about other things like carbon intensity.</p>
<p>To keep this article somewhat manageable, I did not discuss other very important factors, like your driving habits, choosing an efficient car and, most importantly, alternative mobility solutions. But let&rsquo;s face it, these are way more important than any charging strategy and the one thing you should think about at the very beginning. Our dependence on cars is toxic to us and the planet, so the best car is still the one that never got built.</p>
<h2 id="the-second-conclusion">The Second Conclusion</h2>
<p>You may have noticed  I did not mention rooftop solar or home energy storage. This is intentional, for two reasons: Most people do not have rooftop solar systems. And of those that do, only few have storage. I wanted to focus on a regular home owner buying their first EV, trying to help them understand the potential and behave rationally, both in terms of costs and environmental concerns.</p>
<p>But rooftop solar, especially combined with storage, opens a whole new dimension of options. I explored these in the next article, <a href="https://nunrg.eu/posts/ev_charging_solar/">EV Charging With Rooftop Solar and Storage</a>.</p>
<p>If you found this article useful, you can buy me a beer <a href="https://paypal.me/FranciKopac?country.x=SI&amp;locale.x=en_US">here</a>.</p>
]]></content:encoded></item><item><title>How To Use Minimal Power To Control an E-paper Display With an ESP32</title><link>https://nunrg.eu/posts/lowpowerepaper/</link><pubDate>Sat, 14 Sep 2024 00:00:00 +0000</pubDate><guid>https://nunrg.eu/posts/lowpowerepaper/</guid><description>How to drive an e-paper display on minimal power with an ESP32 — deep sleep, an energy harvester and a supercapacitor instead of a battery.</description><content:encoded><![CDATA[<p>You can support me by <a href="https://medium.com/p/0f0f993d9ee0">reading this article on Medium</a></p>
<h2 id="what-do-i-mean-by-low-power">What Do I Mean by Low Power?</h2>
<p>I was involved in an art project where we wanted to use a smallish (10 x 15cm) solar panel to power an e-paper display inside a gallery, controlled by an ESP32 micro controller.</p>
<p>This would be a pretty trivial job outdoors: the panel has 5W peak power and I could just put a small DC-DC converter on it to get stable 3.3V power from it during normal daylight.</p>
<p>Indoors, the game changes completely, due to two main issues: low illuminance and low solar panel efficiency at low illuminance.</p>
<p>Outdoors, the illuminance will be anywhere from 1000 to 100000lux during the day. On the other hand, normal indoor lighting would normally range from 100 to 500lux. This alone reduces the available power from the solar cell by a factor of 200 or more. 5W turns into 25mW.</p>
<p>But there is another problem: The solar panel efficiency drops at low light. At full illuminance, the total power conversion efficiency of a modern solar panel can exceed 20%, but the same panel will have a much lower efficiency at low light due to interior current leakage. The expected 25mW turns into 5 or 10mW at most with normal indoor lighting.</p>
<p>To put this in perspective: ESP32 will consume somewhere around 900 mW transferring data via WiFi and some 20 to 70 mW with radio off. See <a href="https://lastminuteengineers.com/esp32-sleep-modes-power-consumption/">this helpful article</a>.</p>
<p>So is there no way to power the ESP32 using our solar panel?</p>
<h2 id="the-solution">The Solution</h2>
<p>Our project involves refreshing an e-paper display at certain intervals and e-paper consumes power only during the refresh (drawing). So the solution is to somehow store the miniscule amount of available energy until there is enough to draw the next picture, turn everything on, draw the picture, save the data for the next one, and power off.</p>
<h3 id="the-hardware">The Hardware</h3>
<p>On the hardware side, I achieved this using a solar harvester chip <a href="https://e-peas.com/product/aem10941/">AEM10941</a> evaluation board that very efficiently charges a single super-capacitor. This super-capacitor in turn powers a <a href="https://www.pololu.com/product/2561">low-power, low-voltage boost converter</a> and this powers the ESP32.</p>
<figure>
    <img src="/images/epaper/powerpath.png" alt="The Power Harvesting System">
    <figcaption>The Power Harvesting System</figcaption>
  </figure>
  
<h3 id="the-software">The Software</h3>
<p>But the hardware alone is not the solution yet: I needed a way to turn off everything so the harvester has the chance to charge the capacitor up, do the drawing only when the capacitor is full and then turn off everything again until there is enough power available.</p>
<h4 id="esp32-deep-sleep">ESP32 Deep Sleep</h4>
<p>The solution is to implement the deep sleep on the ESP32. While in deep sleep, the ESP32 chip only consumes 10μA, but it powers off almost everything, leaving only a small portion of slow RTC RAM and a counter that periodically wakes it up.</p>
<p>So how does it all work?</p>
<ol>
<li>
<p>The system spends most of the time in deep sleep, where the combined power usage of the power harvesting system, converter and ESP32 never exceeds about 150μW.</p>
</li>
<li>
<p>Every 5 or 10 seconds it wakes up for a fraction of a second to measure the capacitor voltage:</p>
<p>2a. If the voltage is not high enough, it goes to deep sleep again.</p>
<p>2b. If the voltage is high enough, it draws the picture, stores the sequence number into the RTC RAM and goes to deep sleep again.</p>
</li>
<li>
<p>Rinse and repeat.</p>
</li>
</ol>
<h4 id="pick-the-right-esp32-board">Pick the Right ESP32 Board!</h4>
<p>There is a possible pitfall here: Some ESP32 development boards, like the basic ESP32 Dev Module, power additional circuitry (level converters, USB-to-RS232 chips etc.) from the 3.3V rail. This means they will always use at least 10mW of power, regardless of the deep-sleep mode, which is useless for our use case. I had really good experience with the <a href="https://www.olimex.com/Products/IoT/ESP32/ESP32-DevKit-LiPo/open-source-hardware">Olimex ESP32-DevKit-LiPo</a> boards in this respect, but there are other well built development boards out there.</p>
<h4 id="there-are-always-unintended-consequences">There Are Always Unintended Consequences</h4>
<p>Remember how the chip powers off almost everything when in deep sleep? All the regular RAM contents are lost too, only the sequence number in RTC RAM remains.
So when I try to draw the next picture, the system doesn&rsquo;t know a picture was already drawn previously and simply draws over it. The results are really ugly:</p>
<p><img loading="lazy" src="/images/epaper/ugly.gif" alt="Video of the flawed drawing"  />
</p>
<p>I spent way too much time thinking how to fix this&hellip;</p>
<p>One option would be to use a full refresh, but that would entail the annoying blinking of the whole display. Then I thought about adapting the library and storing some of it&rsquo;s variables in the RTC RAM. This seemed like a sure way to lose all my remaining hair, though.</p>
<p>After a lot of thinking, I finally thought of a nice hack. The system doesn&rsquo;t know what was displayed previously? I should draw the exact same picture as the last time to &ldquo;refresh it&rsquo;s memory&rdquo; and right afterwards draw the new one.</p>
<p>This worked beautifully:</p>
<p><img loading="lazy" src="/images/epaper/nice.gif" alt="Video of the corrected drawing"  />
</p>
<h2 id="conclusion">Conclusion</h2>
<p>Super-capacitors are a wonderful way to power small devices that work at intervals when there is not much power available. They are preferable to batteries due to their much better cycling ability. I like things that you can put on a wall and expect them to work for years and years instead of becoming electronic waste soon.</p>
<p>And if you use deep sleep with ESP32, always keep in mind the lost RAM contents when the chip wakes up again.</p>
<h2 id="the-code">The Code</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-c" data-lang="c"><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;GxEPD2_BW.h&gt;</span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&#34;GxEPD2_display_selection_new_style.h&#34;</span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&#34;bitmaps/images.h&#34;</span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;pgmspace.h&gt;</span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;driver/adc.h&gt;</span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;esp_sleep.h&gt;</span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>RTC_DATA_ATTR <span style="color:#66d9ef">int</span> pic_index <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#66d9ef">int</span> adcPin <span style="color:#f92672">=</span> <span style="color:#ae81ff">34</span>; <span style="color:#75715e">// GPIO34 (ADC1_CH6)
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">const</span> <span style="color:#66d9ef">int</span> sleepTimeSeconds <span style="color:#f92672">=</span> <span style="color:#ae81ff">3</span>; <span style="color:#75715e">// Sleep time in seconds
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">const</span> <span style="color:#66d9ef">int</span> array_size <span style="color:#f92672">=</span> <span style="color:#66d9ef">sizeof</span>(images)<span style="color:#f92672">/</span><span style="color:#66d9ef">sizeof</span>(images[<span style="color:#ae81ff">0</span>]);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#66d9ef">int</span> refresh_size <span style="color:#f92672">=</span> <span style="color:#ae81ff">30</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">void</span> <span style="color:#a6e22e">setup</span>()
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">// Configure ADC
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>  <span style="color:#a6e22e">adc1_config_width</span>(ADC_WIDTH_BIT_12);
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">adc1_config_channel_atten</span>(ADC1_CHANNEL_6, ADC_ATTEN_DB_11);
</span></span><span style="display:flex;"><span>  
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">// Read the voltage on pin 34
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>  <span style="color:#66d9ef">int</span> adcValue <span style="color:#f92672">=</span> <span style="color:#a6e22e">adc1_get_raw</span>(ADC1_CHANNEL_6);
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">float</span> voltage <span style="color:#f92672">=</span> adcValue <span style="color:#f92672">*</span> (<span style="color:#ae81ff">3.3</span> <span style="color:#f92672">/</span> <span style="color:#ae81ff">4095.0</span>); <span style="color:#75715e">// Convert ADC reading to voltage
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">if</span> (voltage<span style="color:#f92672">&gt;</span><span style="color:#ae81ff">2.45</span>) { <span style="color:#75715e">// Only if voltage is high enough
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#66d9ef">if</span> (pic_index<span style="color:#f92672">%</span>refresh_size <span style="color:#f92672">==</span> <span style="color:#ae81ff">0</span> <span style="color:#f92672">||</span> pic_index<span style="color:#f92672">%</span>array_size <span style="color:#f92672">==</span> <span style="color:#ae81ff">0</span>) {
</span></span><span style="display:flex;"><span>      display.<span style="color:#a6e22e">init</span>(<span style="color:#ae81ff">0</span>, true, <span style="color:#ae81ff">2</span>, true); <span style="color:#75715e">// first update should be full refresh
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    } <span style="color:#66d9ef">else</span> {
</span></span><span style="display:flex;"><span>      display.<span style="color:#a6e22e">init</span>(<span style="color:#ae81ff">0</span>, false, <span style="color:#ae81ff">2</span>, true); <span style="color:#75715e">// following updates should be normal refresh + draw previous picture to avoid artifacts
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>      display.<span style="color:#a6e22e">drawImage</span>(images[(pic_index<span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>)<span style="color:#f92672">%</span>array_size], <span style="color:#ae81ff">0</span>, <span style="color:#ae81ff">0</span>, <span style="color:#ae81ff">400</span>, <span style="color:#ae81ff">300</span>, false, false, true);
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    display.<span style="color:#a6e22e">drawImage</span>(images[pic_index<span style="color:#f92672">%</span>array_size], <span style="color:#ae81ff">0</span>, <span style="color:#ae81ff">0</span>, <span style="color:#ae81ff">400</span>, <span style="color:#ae81ff">300</span>, false, false, true);
</span></span><span style="display:flex;"><span>  
</span></span><span style="display:flex;"><span>    display.<span style="color:#a6e22e">hibernate</span>(); <span style="color:#75715e">//Turn off voltage converters inside the display to save power
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>    pic_index<span style="color:#f92672">++</span>;
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">// Configure the ESP32 to wake up after a fixed delay
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>  <span style="color:#a6e22e">esp_sleep_enable_timer_wakeup</span>(sleepTimeSeconds <span style="color:#f92672">*</span> <span style="color:#ae81ff">1000000</span>);
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">esp_deep_sleep_start</span>();
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">void</span> <span style="color:#a6e22e">loop</span>()
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>If you found this article useful, you can buy me a beer <a href="https://paypal.me/FranciKopac?country.x=SI&amp;locale.x=en_US">here</a>.</p>
]]></content:encoded></item><item><title>One Picture To Explain Why Hydrogen Cars Are a Pipe Dream</title><link>https://nunrg.eu/posts/hydrogen_cars/</link><pubDate>Tue, 02 Nov 2021 00:00:00 +0000</pubDate><guid>https://nunrg.eu/posts/hydrogen_cars/</guid><description>One chart explains why hydrogen cars are a pipe dream: the energy losses of the hydrogen path make battery EVs far more efficient.</description><content:encoded><![CDATA[<h2 id="hydrogen-cars-are-a-pipe-dream">Hydrogen Cars Are a Pipe Dream</h2>
<p>Specifically – it’s a dream of people who have the most pipes built: the oil and natural gas industry. They want to keep using these pipes, climate crisis or not, so they are trying their best to confuse us, using tactics perfected by the tobacco industry.</p>
<p>If you are not an expert, it is hard to understand these complex issues, but there are some shortcuts, like this one simple illustration:</p>
<figure>
    <img src="/images/240248459_10225660890164983_71627496691070094_n-1.jpg" alt="Hydrogen car to BEV efficiency comparison">
    <figcaption>Bossel, Ulf. “Does a Hydrogen Economy Make Sense?” Proceedings of the IEEE. Vol. 94, No. 10, October 2006.</figcaption>
  </figure>
  
<p>What does it all mean? If you want to drive about 7km with your car, you need about 1kWh of energy brought to your wheels. For a battery-powered EV, this means a power plant somewhere must produce about 1.5kWh of energy. On the other hand, if you have a typical hydrogen-powered car, it must produce about 4.3kWh (almost three times as much) of energy to produce, pump, deliver and convert the hydrogen needed to travel the same distance.</p>
<p>An EV wastes less than a third of energy while a hydrogen car wastes more than three quarters. Unfortunately, it is impossible to improve this in any significant way because of the underlying rules of physics. And keep in mind that this is just the main issue with hydrogen (there is a myriad of others; for starters, you will never ever be able to fill your car with hydrogen at home, period).</p>
<p>To be fair, hydrogen does have it’s uses, but these are all extremely capital-intensive and not something you can do at home. <a href="https://cleantechnica.com/2021/09/01/cleantech-talk-chemical-engineer-paul-martin-reflects-on-liebreichs-hydrogen-ladder-hopium-part-1/">This article</a> is a good starting point, if you want to learn more.</p>
<h2 id="but-what-about-synthetic-fuels">But What About Synthetic Fuels?</h2>
<p>Synthetic fuels are an extension of the hydrogen pipe dream.</p>
<p>Remember how inefficient hydrogen is? All synthetic fuels proposed so far (e-fuels, ammonia, etc.) use hydrogen as feedstock. This means you lose half the energy before you even start making the fuel itself from hydrogen, lose even more to the chemical conversion, and then you burn it in an internal combustion engine that wastes two thirds of the little energy you have left. Compared to that, even hydrogen is a less worse solution.</p>
<p>There are some use cases where it’s hard to use any other energy sources than hydrocarbons (long-haul aviation and shipping), but these would be better served by using bio-fuels, once we stop wasting them on fuel cars and trucks.</p>
<p>A good source of nuanced info about viable green energy sources is <a href="https://medium.com/@thefutureiselectric">Michael Barnard on Medium</a>.</p>
]]></content:encoded></item></channel></rss>