<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[PROTO BLOG]]></title><description><![CDATA[blog stuff here.]]></description><link>https://proto.lv/blog/</link><image><url>https://proto.lv/blog/favicon.png</url><title>PROTO BLOG</title><link>https://proto.lv/blog/</link></image><generator>Ghost 5.79</generator><lastBuildDate>Sat, 25 Apr 2026 10:02:14 GMT</lastBuildDate><atom:link href="https://proto.lv/blog/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Anthbot Genie WiFi Range Modification (Practical Guide)]]></title><description><![CDATA[<p></p><p>After strong interest in the Facebook group, here is a clear breakdown of how to improve WiFi range on the Anthbot Genie mower.</p><p>This is a real hardware modification based on teardown and antenna replacement.</p><hr><h2 id="the-issue">The issue</h2><p>The mower worked well overall, but connectivity was the weak point.</p><ul><li>App connection</li></ul>]]></description><link>https://proto.lv/blog/anthbot-genie-wifi-mod/</link><guid isPermaLink="false">69ec60f1377e080001fe222b</guid><dc:creator><![CDATA[M.G.]]></dc:creator><pubDate>Sat, 25 Apr 2026 07:38:31 GMT</pubDate><media:content url="https://proto.lv/blog/content/images/2026/04/brains-3.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://proto.lv/blog/content/images/2026/04/brains-3.jpg" alt="Anthbot Genie WiFi Range Modification (Practical Guide)"><p></p><p>After strong interest in the Facebook group, here is a clear breakdown of how to improve WiFi range on the Anthbot Genie mower.</p><p>This is a real hardware modification based on teardown and antenna replacement.</p><hr><h2 id="the-issue">The issue</h2><p>The mower worked well overall, but connectivity was the weak point.</p><ul><li>App connection relies mainly on Bluetooth and short-range WiFi</li><li>Stable control only within ~7 meters from the house doors</li><li>Even with a UniFi setup (4 APs), coverage was not sufficient</li><li>Relocating access points did not significantly improve stability</li></ul><p>The key problem was not the network, but the mower&#x2019;s internal antenna design.</p><h2 id="the-solution">The Solution </h2><p><strong>ChatGPT : Radiation efficiency &amp; gain</strong></p><p><strong>Patch (PCB/internal) antenna</strong><br>Typical gain: <strong>~1&#x2013;3 dBi</strong><br>Efficiency drops if near battery, ground planes, or plastic housing</p><p><strong>External antenna (dipole/whip)</strong><br>Typical gain: <strong>~2&#x2013;5 dBi</strong> (consumer), higher with directional<br>Better impedance matching &#x2192; more consistent performance</p><p>&#x1F449; External antenna often gives <strong>+2&#x2013;4 dB link budget</strong> &#x2192; noticeable range increase</p><p><strong>Expectations</strong>:<br>- PCB patch inside enclosure	baseline<br>- External dipole (2&#x2013;3 dBi)	~1.5&#x2013;2&#xD7; range</p><p></p><hr><h2 id="step-1-opening-the-housing">Step 1: Opening the housing</h2><p>Luckily there is a video of housing removal - thanks to No Waffling for the videoTop housing removal is straightforward, and this video helps:</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/XJYB_fZKX4U?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="How to Take Off Cover Lid - ANTHBOT Genie 600 Robot Lawn Mower - Beginners guide"></iframe></figure><p>*Assembly tip:</p><ul><li>Reinstall upside down for easier alignment</li><li>Press wheel assembly into housing carefully ( instead of putting pressure on wheels ) </li><li>A small amount of soapy water on rubber bushings helps reduce friction and risk of damage</li></ul><hr><h2 id="step-2-locating-the-wifi-module">Step 2: Locating the WiFi module</h2><p>Initial disassembly shows:</p><ul><li>There are no  WiFi components in the wheel assembly section </li><li>Main electronics are located in the upper camera module (grey housing)</li></ul><p>This is effectively the main control unit.</p><figure class="kg-card kg-image-card"><img src="https://proto.lv/blog/content/images/2026/04/brains-1.jpg" class="kg-image" alt="Anthbot Genie WiFi Range Modification (Practical Guide)" loading="lazy" width="1920" height="1440" srcset="https://proto.lv/blog/content/images/size/w600/2026/04/brains-1.jpg 600w, https://proto.lv/blog/content/images/size/w1000/2026/04/brains-1.jpg 1000w, https://proto.lv/blog/content/images/size/w1600/2026/04/brains-1.jpg 1600w, https://proto.lv/blog/content/images/2026/04/brains-1.jpg 1920w" sizes="(min-width: 720px) 720px"></figure><hr><h2 id="step-3%E2%80%935-full-access">Step 3&#x2013;5: Full access</h2><ul><li>Remove charging plate by unscrewing these two screws </li></ul><figure class="kg-card kg-image-card"><img src="https://proto.lv/blog/content/images/2026/04/charging-plate.png" class="kg-image" alt="Anthbot Genie WiFi Range Modification (Practical Guide)" loading="lazy" width="930" height="734" srcset="https://proto.lv/blog/content/images/size/w600/2026/04/charging-plate.png 600w, https://proto.lv/blog/content/images/2026/04/charging-plate.png 930w" sizes="(min-width: 720px) 720px"></figure><ul><li>Remove protective front guard </li></ul><figure class="kg-card kg-image-card"><img src="https://proto.lv/blog/content/images/2026/04/guard.png" class="kg-image" alt="Anthbot Genie WiFi Range Modification (Practical Guide)" loading="lazy" width="930" height="734" srcset="https://proto.lv/blog/content/images/size/w600/2026/04/guard.png 600w, https://proto.lv/blog/content/images/2026/04/guard.png 930w" sizes="(min-width: 720px) 720px"></figure><ul><li>Remove camera module. </li></ul><figure class="kg-card kg-image-card"><img src="https://proto.lv/blog/content/images/2026/04/camera-module.png" class="kg-image" alt="Anthbot Genie WiFi Range Modification (Practical Guide)" loading="lazy" width="930" height="734" srcset="https://proto.lv/blog/content/images/size/w600/2026/04/camera-module.png 600w, https://proto.lv/blog/content/images/2026/04/camera-module.png 930w" sizes="(min-width: 720px) 720px"></figure><p>At this stage, the magnesium camera module should be free from top housing and can be removed as a single assembly.</p><hr><h2 id="step-6-antenna-access">Step 6: Antenna access</h2><p>Inside the camera module:</p><ul><li>Next open camera module itself</li></ul><figure class="kg-card kg-image-card"><img src="https://proto.lv/blog/content/images/2026/04/module-open-1.png" class="kg-image" alt="Anthbot Genie WiFi Range Modification (Practical Guide)" loading="lazy" width="930" height="734" srcset="https://proto.lv/blog/content/images/size/w600/2026/04/module-open-1.png 600w, https://proto.lv/blog/content/images/2026/04/module-open-1.png 930w" sizes="(min-width: 720px) 720px"></figure><p></p><ul><li>The original antenna is a small patch type - glued directly to the plastic housing. Partially open module, find the patch antenna and carefully peel it off to expose. This is how patch antenna is looking.</li></ul><figure class="kg-card kg-image-card"><img src="https://proto.lv/blog/content/images/2026/04/two-antennas-1.jpg" class="kg-image" alt="Anthbot Genie WiFi Range Modification (Practical Guide)" loading="lazy" width="1920" height="1440" srcset="https://proto.lv/blog/content/images/size/w600/2026/04/two-antennas-1.jpg 600w, https://proto.lv/blog/content/images/size/w1000/2026/04/two-antennas-1.jpg 1000w, https://proto.lv/blog/content/images/size/w1600/2026/04/two-antennas-1.jpg 1600w, https://proto.lv/blog/content/images/2026/04/two-antennas-1.jpg 1920w" sizes="(min-width: 720px) 720px"></figure><hr><h2 id="step-7-identifying-the-wifi-chip">Step 7: Identifying the WiFi chip</h2><p>The module used is - Fi-Link 6223A-SRD</p><figure class="kg-card kg-image-card"><img src="https://proto.lv/blog/content/images/2026/04/opened-module.jpg" class="kg-image" alt="Anthbot Genie WiFi Range Modification (Practical Guide)" loading="lazy" width="1440" height="1920" srcset="https://proto.lv/blog/content/images/size/w600/2026/04/opened-module.jpg 600w, https://proto.lv/blog/content/images/size/w1000/2026/04/opened-module.jpg 1000w, https://proto.lv/blog/content/images/2026/04/opened-module.jpg 1440w" sizes="(min-width: 720px) 720px"></figure><ol><li>Antenna cable is secured by black tape</li><li>U.FL connector  </li></ol><p>Stock antenna is a low-profile internal patch design - the key limitation point.</p><hr><h2 id="step-8-external-antenna-modification">Step 8: External antenna modification</h2><p>Upgrade approach:</p><ul><li>Use an SMA to U.FL extension cable. <ul><li>For example this :(<a href="https://cpc.farnell.com/siretta/asmg015x113s17/150mm-1-13-cable-ipex-to-sma-f/dp/RF00763?ref=proto.lv">https://cpc.farnell.com/siretta/asmg015x113s17/150mm-1-13-cable-ipex-to-sma-f/dp/RF00763</a>)</li></ul></li><li>Drill a 6 mm hole in the housing (placement depends on your routing; I used a position near the WiFi module)</li></ul><figure class="kg-card kg-image-card"><img src="https://proto.lv/blog/content/images/2026/04/hole-place.jpg" class="kg-image" alt="Anthbot Genie WiFi Range Modification (Practical Guide)" loading="lazy" width="1920" height="1440" srcset="https://proto.lv/blog/content/images/size/w600/2026/04/hole-place.jpg 600w, https://proto.lv/blog/content/images/size/w1000/2026/04/hole-place.jpg 1000w, https://proto.lv/blog/content/images/size/w1600/2026/04/hole-place.jpg 1600w, https://proto.lv/blog/content/images/2026/04/hole-place.jpg 1920w" sizes="(min-width: 720px) 720px"></figure><ul><li>Route the cable externally or to a better RF position inside the housing</li></ul><figure class="kg-card kg-image-card"><img src="https://proto.lv/blog/content/images/2026/04/location.jpg" class="kg-image" alt="Anthbot Genie WiFi Range Modification (Practical Guide)" loading="lazy" width="1920" height="1440" srcset="https://proto.lv/blog/content/images/size/w600/2026/04/location.jpg 600w, https://proto.lv/blog/content/images/size/w1000/2026/04/location.jpg 1000w, https://proto.lv/blog/content/images/size/w1600/2026/04/location.jpg 1600w, https://proto.lv/blog/content/images/2026/04/location.jpg 1920w" sizes="(min-width: 720px) 720px"></figure><hr><h2 id="step-9-reassembly">Step 9: Reassembly</h2><ul><li>Install SMA connector and secure with nut</li></ul><figure class="kg-card kg-image-card"><img src="https://proto.lv/blog/content/images/2026/04/assebley.jpg" class="kg-image" alt="Anthbot Genie WiFi Range Modification (Practical Guide)" loading="lazy" width="1920" height="1440" srcset="https://proto.lv/blog/content/images/size/w600/2026/04/assebley.jpg 600w, https://proto.lv/blog/content/images/size/w1000/2026/04/assebley.jpg 1000w, https://proto.lv/blog/content/images/size/w1600/2026/04/assebley.jpg 1600w, https://proto.lv/blog/content/images/2026/04/assebley.jpg 1920w" sizes="(min-width: 720px) 720px"></figure><ul><li><strong>Seal the entry point thoroughly with silicone to prevent moisture ingress</strong></li><li>Reconnect U.FL connector</li></ul><figure class="kg-card kg-image-card"><img src="https://proto.lv/blog/content/images/2026/04/sealant.jpg" class="kg-image" alt="Anthbot Genie WiFi Range Modification (Practical Guide)" loading="lazy" width="1920" height="1440" srcset="https://proto.lv/blog/content/images/size/w600/2026/04/sealant.jpg 600w, https://proto.lv/blog/content/images/size/w1000/2026/04/sealant.jpg 1000w, https://proto.lv/blog/content/images/size/w1600/2026/04/sealant.jpg 1600w, https://proto.lv/blog/content/images/2026/04/sealant.jpg 1920w" sizes="(min-width: 720px) 720px"></figure><ul><li>Reassemble all parts in reverse order</li></ul><hr><h2 id="result">Result</h2><p>Before modification:</p><ul><li>Unstable connection beyond ~7 meters from doors</li></ul><p>After modification:</p><ul><li>Stable connection up to ~40 meters from doors in open yard conditions</li></ul><p>The improvement is significant and immediately noticeable in real use.</p><hr><h2 id="additional-observations">Additional observations</h2><ul><li>Battery expansion: there is physical space, but no supporting power management circuitry, so parallel battery modification would require additional BMS integration</li><li>4G upgrade: not possible on Genie 600, as the module is not present</li><li>Overall hardware design: surprisingly solid and serviceable once opened</li></ul><hr><h2 id="summary">Summary</h2><p>The limitation was not the WiFi infrastructure, but the internal antenna design of the mower. Replacing the internal patch antenna with an external SMA antenna dramatically improves range and stability.</p><p>Additional teardown photos follow.</p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://proto.lv/blog/content/images/2026/04/20260417_193924.jpg" width="1920" height="1440" loading="lazy" alt="Anthbot Genie WiFi Range Modification (Practical Guide)" srcset="https://proto.lv/blog/content/images/size/w600/2026/04/20260417_193924.jpg 600w, https://proto.lv/blog/content/images/size/w1000/2026/04/20260417_193924.jpg 1000w, https://proto.lv/blog/content/images/size/w1600/2026/04/20260417_193924.jpg 1600w, https://proto.lv/blog/content/images/2026/04/20260417_193924.jpg 1920w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://proto.lv/blog/content/images/2026/04/20260417_194200.jpg" width="1920" height="1440" loading="lazy" alt="Anthbot Genie WiFi Range Modification (Practical Guide)" srcset="https://proto.lv/blog/content/images/size/w600/2026/04/20260417_194200.jpg 600w, https://proto.lv/blog/content/images/size/w1000/2026/04/20260417_194200.jpg 1000w, https://proto.lv/blog/content/images/size/w1600/2026/04/20260417_194200.jpg 1600w, https://proto.lv/blog/content/images/2026/04/20260417_194200.jpg 1920w" sizes="(min-width: 720px) 720px"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://proto.lv/blog/content/images/2026/04/20260417_194530.jpg" width="1920" height="1440" loading="lazy" alt="Anthbot Genie WiFi Range Modification (Practical Guide)" srcset="https://proto.lv/blog/content/images/size/w600/2026/04/20260417_194530.jpg 600w, https://proto.lv/blog/content/images/size/w1000/2026/04/20260417_194530.jpg 1000w, https://proto.lv/blog/content/images/size/w1600/2026/04/20260417_194530.jpg 1600w, https://proto.lv/blog/content/images/2026/04/20260417_194530.jpg 1920w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://proto.lv/blog/content/images/2026/04/20260417_192602.jpg" width="1920" height="1440" loading="lazy" alt="Anthbot Genie WiFi Range Modification (Practical Guide)" srcset="https://proto.lv/blog/content/images/size/w600/2026/04/20260417_192602.jpg 600w, https://proto.lv/blog/content/images/size/w1000/2026/04/20260417_192602.jpg 1000w, https://proto.lv/blog/content/images/size/w1600/2026/04/20260417_192602.jpg 1600w, https://proto.lv/blog/content/images/2026/04/20260417_192602.jpg 1920w" sizes="(min-width: 720px) 720px"></div></div></div></figure>]]></content:encoded></item><item><title><![CDATA[No audiobook? Build the tool]]></title><description><![CDATA[The problem - some books are not available in audiobook formats. 
Three prompts later ...]]></description><link>https://proto.lv/blog/build-the-tool/</link><guid isPermaLink="false">69b1eae6ca4ed90001b6206b</guid><dc:creator><![CDATA[M.G.]]></dc:creator><pubDate>Wed, 11 Mar 2026 22:56:25 GMT</pubDate><media:content url="https://proto.lv/blog/content/images/2026/03/ChatGPT-Image-Mar-12--2026--12_59_55-AM.png" medium="image"/><content:encoded><![CDATA[<img src="https://proto.lv/blog/content/images/2026/03/ChatGPT-Image-Mar-12--2026--12_59_55-AM.png" alt="No audiobook? Build the tool"><p>The problem - some books are not available in audiobook formats.&#xA0;</p><p>The solution - I asked an AI agent to help create a small pipeline</p><ul><li>PDF &#x2192; extract text</li><li>Clean page numbers and captions</li><li>Send clean text to a text-to-speech model</li><li>Export audio</li></ul><p><em>Three prompts later </em> - I had working code.</p><p>First run on my laptop: <strong>14 hour ETA</strong>. Overnight run.</p><p><em>Morning check: </em><strong>8 hours left</strong>.</p><p><em>Evening check: </em><strong>Out-of-memory crash</strong>.</p><p>Classic.</p><p>Back to the agent.</p><p>It suggested running the job on GPU:</p><ul><li>SageMaker </li><li>Kaggle</li></ul><p>SageMaker refused to cooperate that day, so I switched to Kaggle.</p><p><em>Update. Upload. Run.</em></p><figure class="kg-card kg-image-card"><img src="https://proto.lv/blog/content/images/2026/03/image.png" class="kg-image" alt="No audiobook? Build the tool" loading="lazy" width="1447" height="956" srcset="https://proto.lv/blog/content/images/size/w600/2026/03/image.png 600w, https://proto.lv/blog/content/images/size/w1000/2026/03/image.png 1000w, https://proto.lv/blog/content/images/2026/03/image.png 1447w" sizes="(min-width: 720px) 720px"></figure><p><strong>Three minutes later I had an audiobook.  </strong></p><p><em>Small difference, huh? 14h to get OOM crash vs 3 minute GPU jobby</em></p><p>Earlier that day the audiobook didn&#x2019;t exist anywhere.</p><p><strong>Now it did </strong>&#x2014; because a small tool assembled it.</p><p>Preview: (quality is really pristine) </p><div class="kg-card kg-audio-card"><img src alt="No audiobook? Build the tool" class="kg-audio-thumbnail kg-audio-hide"><div class="kg-audio-thumbnail placeholder"><svg width="24" height="24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M7.5 15.33a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm-2.25.75a2.25 2.25 0 1 1 4.5 0 2.25 2.25 0 0 1-4.5 0ZM15 13.83a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm-2.25.75a2.25 2.25 0 1 1 4.5 0 2.25 2.25 0 0 1-4.5 0Z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M14.486 6.81A2.25 2.25 0 0 1 17.25 9v5.579a.75.75 0 0 1-1.5 0v-5.58a.75.75 0 0 0-.932-.727.755.755 0 0 1-.059.013l-4.465.744a.75.75 0 0 0-.544.72v6.33a.75.75 0 0 1-1.5 0v-6.33a2.25 2.25 0 0 1 1.763-2.194l4.473-.746Z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M3 1.5a.75.75 0 0 0-.75.75v19.5a.75.75 0 0 0 .75.75h18a.75.75 0 0 0 .75-.75V5.133a.75.75 0 0 0-.225-.535l-.002-.002-3-2.883A.75.75 0 0 0 18 1.5H3ZM1.409.659A2.25 2.25 0 0 1 3 0h15a2.25 2.25 0 0 1 1.568.637l.003.002 3 2.883a2.25 2.25 0 0 1 .679 1.61V21.75A2.25 2.25 0 0 1 21 24H3a2.25 2.25 0 0 1-2.25-2.25V2.25c0-.597.237-1.169.659-1.591Z"/></svg></div><div class="kg-audio-player-container"><audio src="https://proto.lv/blog/content/media/2026/03/hw_hacker.mp3" preload="metadata"></audio><div class="kg-audio-title">Hw hacker</div><div class="kg-audio-player"><button class="kg-audio-play-icon" aria-label="Play audio"><svg viewbox="0 0 24 24"><path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/></svg></button><button class="kg-audio-pause-icon kg-audio-hide" aria-label="Pause audio"><svg viewbox="0 0 24 24"><rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/><rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/></svg></button><span class="kg-audio-current-time">0:00</span><div class="kg-audio-time">/<span class="kg-audio-duration">34.092979</span></div><input type="range" class="kg-audio-seek-slider" max="100" value="0"><button class="kg-audio-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button><button class="kg-audio-unmute-icon" aria-label="Unmute"><svg viewbox="0 0 24 24"><path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/></svg></button><button class="kg-audio-mute-icon kg-audio-hide" aria-label="Mute"><svg viewbox="0 0 24 24"><path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/></svg></button><input type="range" class="kg-audio-volume-slider" max="100" value="100"></div></div></div><p>Success!</p><hr><p>That&#x2019;s the part of AI that excites me most. Not content generation.<strong> Tool generation.</strong></p><p>Computer science has always been about building tools that reduce friction in everyday tasks. AI lowers the barrier dramatically.</p><p>You describe the tool.</p><p>The AI assembles it.</p><p>And problems that once required weeks of work  - can become an evening experiment.</p><p>That&#x2019;s the snowball.</p><p>One tool enables the next.</p>]]></content:encoded></item><item><title><![CDATA[Bird-feeder]]></title><description><![CDATA[<p>Here&#x2019;s my latest 3D printing project: a smart bird feeder with a solar panel, Wi-Fi camera, and motion detection.</p><p>Designed from scratch, 3D modeled, printed, and assembled over a few evenings.</p><p>Build highlights:</p><ul><li>Cost: ~60 EUR (including filament, solar panel, and off-the-shelf camera)</li><li>Power: ~3 hours of sunlight</li></ul>]]></description><link>https://proto.lv/blog/bird-feeder-3d/</link><guid isPermaLink="false">684b16f8aea35d0001ca3e21</guid><dc:creator><![CDATA[M.G.]]></dc:creator><pubDate>Thu, 12 Jun 2025 18:10:24 GMT</pubDate><media:content url="https://proto.lv/blog/content/images/2025/06/Screenshot-from-2025-06-18-19-00-53.png" medium="image"/><content:encoded><![CDATA[<img src="https://proto.lv/blog/content/images/2025/06/Screenshot-from-2025-06-18-19-00-53.png" alt="Bird-feeder"><p>Here&#x2019;s my latest 3D printing project: a smart bird feeder with a solar panel, Wi-Fi camera, and motion detection.</p><p>Designed from scratch, 3D modeled, printed, and assembled over a few evenings.</p><p>Build highlights:</p><ul><li>Cost: ~60 EUR (including filament, solar panel, and off-the-shelf camera)</li><li>Power: ~3 hours of sunlight fully charges it; battery hasn&#x2019;t dropped below 88% so farCamera: </li><li>Built-in app supports motion notifications, event playback, and low-latency live view &#x2014; all working smoothly out of the box</li></ul><p>It&#x2019;s a small but satisfying project &#x2014; the kind that reminds me why I like making things that work.</p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://proto.lv/blog/content/images/2025/06/20250604_111531-1.jpg" width="2000" height="1500" loading="lazy" alt="Bird-feeder" srcset="https://proto.lv/blog/content/images/size/w600/2025/06/20250604_111531-1.jpg 600w, https://proto.lv/blog/content/images/size/w1000/2025/06/20250604_111531-1.jpg 1000w, https://proto.lv/blog/content/images/size/w1600/2025/06/20250604_111531-1.jpg 1600w, https://proto.lv/blog/content/images/size/w2400/2025/06/20250604_111531-1.jpg 2400w" sizes="(min-width: 1200px) 1200px"></div></div></div></figure><figure class="kg-card kg-video-card kg-width-regular" data-kg-thumbnail="https://proto.lv/blog/content/media/2025/06/bf-timelapse_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://proto.lv/blog/content/media/2025/06/bf-timelapse.mp4" poster="https://img.spacergif.org/v1/1918x998/0a/spacer.png" width="1918" height="998" playsinline preload="metadata" style="background: transparent url(&apos;https://proto.lv/blog/content/media/2025/06/bf-timelapse_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:32</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            
        </figure>]]></content:encoded></item><item><title><![CDATA[From "V1" to "V3"+...]]></title><description><![CDATA[<p>Hey! Recently I started to document my journey of building an automatic pet feeder &#x2014; a free-time project inspired by a practical problem(will be shared in the next article) and my curiosity to learn about computer vision.</p><p>This &quot;series&quot; will showcase the evolution of the project, covering</p>]]></description><link>https://proto.lv/blog/v1/</link><guid isPermaLink="false">679fccc532513700017d1f9a</guid><dc:creator><![CDATA[M.G.]]></dc:creator><pubDate>Sun, 02 Feb 2025 20:20:37 GMT</pubDate><media:content url="https://proto.lv/blog/content/images/2025/02/Screenshot-from-2025-02-02-22-24-16-3.png" medium="image"/><content:encoded><![CDATA[<img src="https://proto.lv/blog/content/images/2025/02/Screenshot-from-2025-02-02-22-24-16-3.png" alt="From &quot;V1&quot; to &quot;V3&quot;+..."><p>Hey! Recently I started to document my journey of building an automatic pet feeder &#x2014; a free-time project inspired by a practical problem(will be shared in the next article) and my curiosity to learn about computer vision.</p><p>This &quot;series&quot; will showcase the evolution of the project, covering mechanical design,3D printing and &quot;AI&quot; computer vision, web app development, and more.</p><p>Of course this will revolutionize the industry - VCs $ are welcome!   </p><h3 id="sneak-peek-v3">Sneak Peek: V3</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://proto.lv/blog/content/images/2025/02/Screenshot-from-2025-01-02-20-46-28.png" class="kg-image" alt="From &quot;V1&quot; to &quot;V3&quot;+..." loading="lazy" width="917" height="677" srcset="https://proto.lv/blog/content/images/size/w600/2025/02/Screenshot-from-2025-01-02-20-46-28.png 600w, https://proto.lv/blog/content/images/2025/02/Screenshot-from-2025-01-02-20-46-28.png 917w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">V3 </span></figcaption></figure><p></p><h3 id="sneak-peek-webapp">Sneak Peek: Webapp</h3><figure class="kg-card kg-video-card kg-width-regular" data-kg-thumbnail="https://proto.lv/blog/content/media/2025/02/catvision-app_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://proto.lv/blog/content/media/2025/02/catvision-app.mp4" poster="https://img.spacergif.org/v1/1344x1034/0a/spacer.png" width="1344" height="1034" loop autoplay muted playsinline preload="metadata" style="background: transparent url(&apos;https://proto.lv/blog/content/media/2025/02/catvision-app_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container kg-video-hide">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:09</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            
        </figure><p></p><h3 id="sneak-peek-object-tracking">Sneak Peek: Object tracking</h3><figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="https://proto.lv/blog/content/media/2025/02/cropper-catvision_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://proto.lv/blog/content/media/2025/02/cropper-catvision.mp4" poster="https://img.spacergif.org/v1/1344x1034/0a/spacer.png" width="1344" height="1034" loop autoplay muted playsinline preload="metadata" style="background: transparent url(&apos;https://proto.lv/blog/content/media/2025/02/cropper-catvision_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container kg-video-hide">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:06</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p><span style="white-space: pre-wrap;">Moving object tracking </span></p></figcaption>
        </figure>]]></content:encoded></item><item><title><![CDATA[IOT hub [part 1 of 3]]]></title><description><![CDATA[<h3 id="the-startup-chronicles-energy-monitoring-tight-budgets-and-even-tighter-deadlines"><strong>The Startup Chronicles: Energy Monitoring, Tight Budgets, and Even Tighter Deadlines.</strong></h3><p>Once upon a time, I joined a startup. Our mission? To conquer the world&#x2014;well, at least the world of <em>Building Energy Monitoring</em>. You know, because saving on energy bills is the new world domination. Despite our small</p>]]></description><link>https://proto.lv/blog/iot-hub-part-1-of-3/</link><guid isPermaLink="false">6712a4471ae9d60001004920</guid><dc:creator><![CDATA[M.G.]]></dc:creator><pubDate>Fri, 18 Oct 2024 18:25:57 GMT</pubDate><media:content url="https://proto.lv/blog/content/images/2024/10/Selection_007.png" medium="image"/><content:encoded><![CDATA[<h3 id="the-startup-chronicles-energy-monitoring-tight-budgets-and-even-tighter-deadlines"><strong>The Startup Chronicles: Energy Monitoring, Tight Budgets, and Even Tighter Deadlines.</strong></h3><img src="https://proto.lv/blog/content/images/2024/10/Selection_007.png" alt="IOT hub [part 1 of 3]"><p>Once upon a time, I joined a startup. Our mission? To conquer the world&#x2014;well, at least the world of <em>Building Energy Monitoring</em>. You know, because saving on energy bills is the new world domination. Despite our small team, we somehow managed to snag a few big clients. Things were looking up!</p><p>At the same time, I was knee-deep in electrical engineering studies, because clearly, sleep was optional. We had some early wins with software, but we needed to take the next step: hardware. Why? Because gathering data from buildings was key, and paying for existing solutions wasn&#x2019;t going to happen on our &quot;budget.&quot; So, we decided to roll up our sleeves and build it ourselves. Obviously.</p><h3 id="the-dream-device-because-what%E2%80%99s-one-more-prototype"><strong>The Dream Device: Because What&#x2019;s One More Prototype?</strong></h3><p>Our target audience? Large public buildings with those fancy Building Management Systems (BMS)&#x2014;places spending a small fortune just to keep everything at a &quot;comfortable&quot; 22&#xB0;C. From our previous work, we knew it was possible to cut their energy expenses by 15% with very little effort (and no one loves &quot;very little effort&quot; more than a big company). We also knew the key protocols and interfaces to tap into these systems.</p><p>So, here&#x2019;s what our miracle device needed to do:</p><ul><li><strong>12-24V power support</strong> &#x2013; The standard in automation. We&#x2019;re not here to reinvent the wheel.</li><li><strong>M-Bus interface</strong> &#x2013; The universal language of metering devices. Like English, but with less grammar.</li><li><strong>Modbus/RS485 interface</strong> &#x2013; The go-to for automation systems. If you don&#x2019;t speak this, you&#x2019;re out of the conversation.</li><li><strong>GSM connectivity</strong> &#x2013; Because dealing with corporate IT departments is like asking a sloth to run a marathon.</li><li><strong>Ethernet connector</strong> &#x2013; For the rare moments when internet access isn&#x2019;t a bureaucratic nightmare.</li><li><strong>Cheap</strong> &#x2013; These devices were meant to charm potential clients, so we needed them to be so affordable, you&#x2019;d think they were party favors.</li><li><strong>Linux support</strong> &#x2013; Our small team needed to move fast. Linux gave us access to libraries, tools, and, well, sanity.</li><li><strong>Overcurrent protection</strong> &#x2013; Because nothing says &#x201C;we tried&#x201D; like an overheated circuit.</li></ul><h3 id="the-ingenious-plan-modular-magic"><strong>The Ingenious Plan: Modular Magic</strong></h3><p>The solution was simple&#x2014;modular design. Two parts:</p><ol><li><strong>The Brain</strong> &#x2013; An Orange Pi Zero, because Raspberry Pi is too mainstream. This little computer, costing about &#x20AC;30, ran Armbian OS with solid updates. Six years later, it&#x2019;s still around, which is more than can be said for some tech startups.<a href="https://www.aliexpress.com/item/1005003627813813.html?ref=proto.lv"> <u>Check it out here</u></a>.</li></ol><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://proto.lv/blog/content/images/2024/10/opi.png" class="kg-image" alt="IOT hub [part 1 of 3]" loading="lazy" width="512" height="512"><figcaption><span style="white-space: pre-wrap;">OPI Zero Linux SBC computer</span></figcaption></figure><ol start="2"><li><strong>The Interface Board</strong> &#x2013; A custom PCB that connected the brain to everything else: RS485, M-Bus, SIM module, voltage converters, LED indicators, and so on. Essentially, everything to make it look complicated enough to impress someone in a boardroom.</li></ol><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://proto.lv/blog/content/images/2024/10/Selection_006.png" class="kg-image" alt="IOT hub [part 1 of 3]" loading="lazy" width="1103" height="694" srcset="https://proto.lv/blog/content/images/size/w600/2024/10/Selection_006.png 600w, https://proto.lv/blog/content/images/size/w1000/2024/10/Selection_006.png 1000w, https://proto.lv/blog/content/images/2024/10/Selection_006.png 1103w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">First PCB prototype 3D model</span></figcaption></figure><h3 id="success-well-sort-of%E2%80%A6"><strong>Success! Well, Sort Of&#x2026;</strong></h3><p>I designed a few boards, ordered them from JLCPCB, and assembled them. Surprisingly, they worked (mostly). But as any good startup story goes, our budget was tighter than a jar lid your grandmother sealed. So, we didn&#x2019;t make it past the prototype stage.</p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://proto.lv/blog/content/images/2024/10/Selection_004-1.png" width="888" height="692" loading="lazy" alt="IOT hub [part 1 of 3]" srcset="https://proto.lv/blog/content/images/size/w600/2024/10/Selection_004-1.png 600w, https://proto.lv/blog/content/images/2024/10/Selection_004-1.png 888w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://proto.lv/blog/content/images/2024/10/pic2.jpg" width="1000" height="1778" loading="lazy" alt="IOT hub [part 1 of 3]" srcset="https://proto.lv/blog/content/images/size/w600/2024/10/pic2.jpg 600w, https://proto.lv/blog/content/images/2024/10/pic2.jpg 1000w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://proto.lv/blog/content/images/2024/10/pic3.jpg" width="1000" height="1778" loading="lazy" alt="IOT hub [part 1 of 3]" srcset="https://proto.lv/blog/content/images/size/w600/2024/10/pic3.jpg 600w, https://proto.lv/blog/content/images/2024/10/pic3.jpg 1000w" sizes="(min-width: 720px) 720px"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://proto.lv/blog/content/images/2024/10/pic4.jpg" width="1000" height="563" loading="lazy" alt="IOT hub [part 1 of 3]" srcset="https://proto.lv/blog/content/images/size/w600/2024/10/pic4.jpg 600w, https://proto.lv/blog/content/images/2024/10/pic4.jpg 1000w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://proto.lv/blog/content/images/2024/10/pic5.jpg" width="1000" height="1778" loading="lazy" alt="IOT hub [part 1 of 3]" srcset="https://proto.lv/blog/content/images/size/w600/2024/10/pic5.jpg 600w, https://proto.lv/blog/content/images/2024/10/pic5.jpg 1000w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://proto.lv/blog/content/images/2024/10/pic6.jpg" width="1000" height="563" loading="lazy" alt="IOT hub [part 1 of 3]" srcset="https://proto.lv/blog/content/images/size/w600/2024/10/pic6.jpg 600w, https://proto.lv/blog/content/images/2024/10/pic6.jpg 1000w" sizes="(min-width: 720px) 720px"></div></div></div></figure><p>For fun, I installed one of the prototypes in my parents&#x2019; house as a Zigbee hub, for monitoring temperature. That was four years ago. I recently found it, still running. It felt a bit like finding an old pet rock&#x2014;nobody needed it anymore, but there it was, quietly doing its job.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://proto.lv/blog/content/images/2024/10/20210914_113834.jpg" class="kg-image" alt="IOT hub [part 1 of 3]" loading="lazy" width="2000" height="2089" srcset="https://proto.lv/blog/content/images/size/w600/2024/10/20210914_113834.jpg 600w, https://proto.lv/blog/content/images/size/w1000/2024/10/20210914_113834.jpg 1000w, https://proto.lv/blog/content/images/size/w1600/2024/10/20210914_113834.jpg 1600w, https://proto.lv/blog/content/images/2024/10/20210914_113834.jpg 2000w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Prototype chilling in the house, sniffing Zigbee </span></figcaption></figure><h3 id="the-here-and-now-same-spirit-new-problem"><strong>The Here and Now: Same Spirit, New Problem</strong></h3><p>Fast forward to today. My latest problem? I can&#x2019;t control my pellet boiler remotely. Naturally, instead of buying something off the shelf, I&#x2019;ve decided to hack a solution together. Because if I can build an energy monitoring device on a shoestring budget, surely fixing this boiler will be a piece of cake.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://proto.lv/blog/content/images/2024/10/SBN30A.jpg" class="kg-image" alt="IOT hub [part 1 of 3]" loading="lazy" width="1200" height="1200" srcset="https://proto.lv/blog/content/images/size/w600/2024/10/SBN30A.jpg 600w, https://proto.lv/blog/content/images/size/w1000/2024/10/SBN30A.jpg 1000w, https://proto.lv/blog/content/images/2024/10/SBN30A.jpg 1200w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">The Boiler</span></figcaption></figure><p>Stay tuned. </p>]]></content:encoded></item><item><title><![CDATA[First steps into AI]]></title><description><![CDATA[<p>Hey there! &#x1F44B; Check this out!</p><figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="https://proto.lv/blog/content/media/2024/02/akments_tilts_yolo_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://proto.lv/blog/content/media/2024/02/akments_tilts_yolo.mp4" poster="https://img.spacergif.org/v1/1920x1080/0a/spacer.png" width="1920" height="1080" loop autoplay muted playsinline preload="metadata" style="background: transparent url(&apos;https://proto.lv/blog/content/media/2024/02/akments_tilts_yolo_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container kg-video-hide">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:21</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p dir="ltr"><span style="white-space: pre-wrap;">Akmens tilts</span></p></figcaption>
        </figure><p>Pretty cool, right? And guess what? This wasn&apos;t created by some data scientist in a Google data center. I made this, and I don&apos;t even have a background in computer vision. Not</p>]]></description><link>https://proto.lv/blog/first-steps-into-ai/</link><guid isPermaLink="false">65dcf18887f9ff000114626b</guid><category><![CDATA[TECH]]></category><dc:creator><![CDATA[M.G.]]></dc:creator><pubDate>Mon, 26 Feb 2024 20:29:41 GMT</pubDate><media:content url="https://proto.lv/blog/content/images/2024/02/Selection_740.png" medium="image"/><content:encoded><![CDATA[<img src="https://proto.lv/blog/content/images/2024/02/Selection_740.png" alt="First steps into AI"><p>Hey there! &#x1F44B; Check this out!</p><figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="https://proto.lv/blog/content/media/2024/02/akments_tilts_yolo_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://proto.lv/blog/content/media/2024/02/akments_tilts_yolo.mp4" poster="https://img.spacergif.org/v1/1920x1080/0a/spacer.png" width="1920" height="1080" loop autoplay muted playsinline preload="metadata" style="background: transparent url(&apos;https://proto.lv/blog/content/media/2024/02/akments_tilts_yolo_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container kg-video-hide">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:21</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p dir="ltr"><span style="white-space: pre-wrap;">Akmens tilts</span></p></figcaption>
        </figure><p>Pretty cool, right? And guess what? This wasn&apos;t created by some data scientist in a Google data center. I made this, and I don&apos;t even have a background in computer vision. Not even writing code professionally, but hey, I made it happen.</p><p>So, chances are, you can too!</p><p>I&apos;m planning to dive deeper into this tech in the coming weeks. Let&apos;s see what else we can build &#x1F609;&#x1F4BB;</p>]]></content:encoded></item><item><title><![CDATA[Book notes:"The Mom Test"]]></title><description><![CDATA[<hr><p>Just a few things I wanted to note to myself about the book The Mom Test. by Rob Fitzpatrick. </p><p>As a technical guy deeply entrenched in the world of product development, <strong>&quot;The Mom Test&quot;</strong> by<strong> Rob Fitzpatrick</strong> provided invaluable insights into the art of customer validation. One of</p>]]></description><link>https://proto.lv/blog/t/</link><guid isPermaLink="false">65d3b7f83c3ed700014a8637</guid><category><![CDATA[BOOKS]]></category><dc:creator><![CDATA[M.G.]]></dc:creator><pubDate>Mon, 19 Feb 2024 20:21:28 GMT</pubDate><media:content url="https://proto.lv/blog/content/images/2024/02/the-mom-test-1.jpg" medium="image"/><content:encoded><![CDATA[<hr><img src="https://proto.lv/blog/content/images/2024/02/the-mom-test-1.jpg" alt="Book notes:&quot;The Mom Test&quot;"><p>Just a few things I wanted to note to myself about the book The Mom Test. by Rob Fitzpatrick. </p><p>As a technical guy deeply entrenched in the world of product development, <strong>&quot;The Mom Test&quot;</strong> by<strong> Rob Fitzpatrick</strong> provided invaluable insights into the art of customer validation. One of the most impactful lessons from the book is the importance of avoiding questions that inadvertently validate our assumptions about features. Instead, Fitzpatrick emphasizes the need to focus on understanding customer problems rather than jumping to solutions or features. This resonated deeply with me, as it highlighted the danger of biasing our conversations with customers and missing out on genuine insights.</p><p>Moreover, &quot;The Mom Test&quot; stresses the importance of keeping conversations casual and avoiding framed questions that lead customers to provide answers we want to hear. This approach encourages authentic dialogue and prevents us from falling into the trap of confirmation bias. I found this particularly useful in my own interactions with customers, as it allowed for more open and honest communication.</p><p>One of the key strategies outlined in the book is the concept of asking questions about how customers currently solve their problems. By delving into their existing processes and workflows, we not only gain deeper insights into their pain points but also evaluate the potential value of our solution. This approach allows us to quickly validate whether there is a viable business opportunity around this problem or if it&apos;s merely an annoyance that customers are unwilling to pay to solve.</p><p>&quot;The Mom Test&quot; also provides practical advice on how to politely navigate conversations and escape from compliments that don&apos;t provide meaningful insights. Instead of getting caught up in praise, Fitzpatrick encourages us to steer the conversation towards exploring pain points and uncovering valuable insights. </p><p>Lastly, the book introduces the concept of the &quot;advance&quot; &#x2013; a small commitment or action that indicates genuine interest from the customer. Types of advances can include signing up for a beta trial, providing contact information for follow-up, or even making a small purchase. By asking for advances, we can gauge customer interest and commitment, helping us identify potential early adopters and refine our go-to-market strategy.</p><p>Overall, &quot;The Mom Test&quot; offers practical guidance and actionable strategies for technical professionals looking to validate their product ideas effectively. By avoiding biased questions, focusing on customer problems, keeping conversations casual, navigating compliments gracefully, and leveraging advances, we can gain deeper insights into customer needs and build products that truly resonate with our target audience.</p>]]></content:encoded></item><item><title><![CDATA[The Great chip shortage]]></title><description><![CDATA[<p><br>Remember the great MCU chip shortage of 2020?<br>Those were the days when even getting your hands on a small batch of microcontrollers felt like winning the lottery.<br><br>Flashback to that time: armed with my freshly minted engineering degree, in my free time I set out to conquer the world</p>]]></description><link>https://proto.lv/blog/begining/</link><guid isPermaLink="false">65d3b3dc3c3ed700014a861b</guid><category><![CDATA[TECH]]></category><dc:creator><![CDATA[M.G.]]></dc:creator><pubDate>Mon, 19 Feb 2024 20:12:23 GMT</pubDate><media:content url="https://proto.lv/blog/content/images/2024/02/Selection_736-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://proto.lv/blog/content/images/2024/02/Selection_736-1.png" alt="The Great chip shortage"><p><br>Remember the great MCU chip shortage of 2020?<br>Those were the days when even getting your hands on a small batch of microcontrollers felt like winning the lottery.<br><br>Flashback to that time: armed with my freshly minted engineering degree, in my free time I set out to conquer the world with my grand vision of creating the most mind-blowing long-range temperature sensor system. But fate had other plans. The chip shortage hit, leaving me with only 3D designs and some rough PCB designs. Temperature sensor chips were as elusive as a unicorn in those dark days.</p><figure class="kg-card kg-video-card kg-width-regular" data-kg-thumbnail="https://proto.lv/blog/content/media/2024/02/proto-sensor-clear_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://proto.lv/blog/content/media/2024/02/proto-sensor-clear.mp4" poster="https://img.spacergif.org/v1/926x716/0a/spacer.png" width="926" height="716" loop autoplay muted playsinline preload="metadata" style="background: transparent url(&apos;https://proto.lv/blog/content/media/2024/02/proto-sensor-clear_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container kg-video-hide">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:12</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            
        </figure><p><br>Fast forward a few years, turns out, that shortage was a good thing after all. It forced me to pivot, adapt, and ultimately land a gig where I&apos;m leading a team of eight professionals, tackling exciting products with real-world impact. From developing cutting-edge video telematics solutions to spearheading integrations that streamline operations, every day brings new challenges and opportunities to make a difference.<br><br>Inspired by <a href="https://www.linkedin.com/in/ACoAAAAACNAB12loS-bMutspSC96BqtxgEscdi4?ref=proto.lv">Tony Fadell</a>&apos;s <a href="https://www.linkedin.com/feed/hashtag/?keywords=build&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7164554656012984320&amp;ref=proto.lv">#BUILD</a>, I&apos;m now contemplating starting some cool side projects during my free time. After all, who knows where the next great idea might come from?<br>Let&apos;s embrace the lessons learned from scarcity and turn them into opportunities for growth and innovation!</p>]]></content:encoded></item><item><title><![CDATA[Coming soon]]></title><description><![CDATA[<p>This is PROTO BLOG, a brand new site by M.G. that&apos;s just getting started. Things will be up and running here shortly.</p>]]></description><link>https://proto.lv/blog/coming-soon/</link><guid isPermaLink="false">65d2554c081e1d0001fec2cf</guid><category><![CDATA[TECH]]></category><dc:creator><![CDATA[M.G.]]></dc:creator><pubDate>Sun, 18 Feb 2024 19:06:52 GMT</pubDate><media:content url="https://static.ghost.org/v4.0.0/images/feature-image.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://static.ghost.org/v4.0.0/images/feature-image.jpg" alt="Coming soon"><p>This is PROTO BLOG, a brand new site by M.G. that&apos;s just getting started. Things will be up and running here shortly.</p>]]></content:encoded></item></channel></rss>