<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.element14.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Documents</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>Project Video Release Archive</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/3748/project-video-release-archive</link><pubDate>Thu, 11 Jun 2026 14:04:19 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:59ab0abe-b32d-47f9-b00c-4b73b01f3bd8</guid><dc:creator>e14sbhargav</dc:creator><description>Current Revision posted to Documents by e14sbhargav on 6/11/2026 2:04:19 PM&lt;br /&gt;
&lt;div style="background:#ffffff;border-bottom:1px solid #dadada;margin:0;padding:14px 16px 16px 18px;vertical-align:top;"&gt;
&lt;div style="display:inline-block;float:left;padding:0px 25px 8px 0px;"&gt;&lt;a href="/challengesprojects/element14-presents/" data-icid="e14" data-e14adj="t"&gt;&lt;img alt="image"  src="/e14/assets/legacy/2018/e14PresentsJune818.png" width="180px" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="display:inline-block;vertical-align:top;width:70%;"&gt;&lt;span style="font-size:18px;font-weight:bold;"&gt;Project Video Releases&lt;/span&gt;
&lt;p style="margin:0;"&gt;&lt;span&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" style="color:#f17c0e;" href="/challengesprojects/element14-presents/" data-icid="e14" data-e14adj="t"&gt;element14 presents&lt;/a&gt;&lt;/span&gt;&amp;nbsp; &lt;strong&gt;|&lt;/strong&gt;&amp;nbsp; &lt;span style="padding-right:5px;"&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" style="color:#f17c0e;" href="/challengesprojects/element14-presents/vcp-program/" data-icid="e14" data-e14adj="t"&gt;Meet the Hosts&lt;/a&gt;&lt;/span&gt;&lt;span style="padding-right:5px;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72069/creating-a-multi-function-esp32-desk-pet-with-custom-pcb-and-audio-processing" data-e14adj="t"&gt;Episode 718: Creating a Multi-Function ESP32 Desk Pet with Custom PCB and Audio Processing&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72068/simulating-prey-vision-with-raspberry-pi-5-a-dual-camera-perception-experiment" data-e14adj="t"&gt;Episode 717: Simulating Prey Vision with Raspberry Pi 5: A Dual Camera Perception Experiment&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72067/designing-a-mobile-robot-platform-with-inverse-kinematics-and-wireless-control" data-e14adj="t"&gt;Episode 716: Designing a Mobile Robot Platform with Inverse Kinematics and Wireless Control&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72063/how-to-build-a-reaction-based-catch-game-using-arduino-and-relays" data-e14adj="t"&gt;Episode 715: How to Build a Reaction-Based Catch Game Using Arduino and Relays&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72062/find-emi-fast-with-a-low-cost-automated-way-to-see-where-your-pcb-radiates" data-e14adj="t"&gt;Episode 714: Find EMI Fast with a Low‑Cost, Automated Way to See Where Your PCB Radiates&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 713:" href="/challenges-projects/element14-presents/project-videos/w/documents/72061/how-to-make-an-led-sculpture-react-to-sound-with-micro-bit" data-e14adj="t"&gt;Episode 713:&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72061/how-to-make-an-led-sculpture-react-to-sound-with-micro-bit"&gt;How to Make an LED Sculpture React to Sound with micro:bit&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 712: Designing a More Capable Dual Motor Driver Beyond the L298N (What worked and what didn't)" href="/challenges-projects/element14-presents/project-videos/w/documents/72060/designing-a-more-capable-dual-motor-driver-beyond-the-l298n-what-worked-and-what-didn-t" data-e14adj="t"&gt;Episode 712: Designing a More Capable Dual Motor Driver Beyond the L298N (What worked and what didn&amp;#39;t)&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 711: Modern Edge AI on Raspberry Pi 5 for an Animatronic Tracker: Vision Acceleration with AI Hat+ and AI Camera" href="/challenges-projects/element14-presents/project-videos/w/documents/72059/modern-edge-ai-on-raspberry-pi-5-for-an-animatronic-tracker-vision-acceleration-with-ai-hat-and-ai-camera" data-e14adj="t"&gt;Episode 711: Modern Edge AI on Raspberry Pi 5 for an Animatronic Tracker: Vision Acceleration with AI Hat+ and AI Camera&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 710: Your First Real PCB in KiCad : An Arduino Compatible Board Designed from Scratch" href="/challenges-projects/element14-presents/project-videos/w/documents/72057/your-first-real-pcb-in-kicad-an-arduino-compatible-board-designed-from-scratch" data-e14adj="t"&gt;Episode 710: Your First Real PCB in KiCad : An Arduino Compatible Board Designed from Scratch&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 709: Was that my Number!? Fixing Caf&amp;eacute; Order Chaos with a Raspberry Pi Announcer" href="/challenges-projects/element14-presents/project-videos/w/documents/72055/was-that-my-number-fixing-cafe-order-chaos-with-a-raspberry-pi-announcer" data-e14adj="t"&gt;Episode 709: Was that my Number!? Fixing Caf&amp;eacute; Order Chaos with a Raspberry Pi Announcer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 708: Reviving a Vintage LED Sign with Arduino and PS/2 Control" href="/challenges-projects/element14-presents/project-videos/w/documents/72042/reviving-a-vintage-led-sign-with-arduino-and-ps-2-control----episode-708" data-e14adj="t"&gt;Episode 708: Reviving a Vintage LED Sign with Arduino and PS/2 Control&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 707: Building a Circuit Sculpture with LED Filament" href="/challenges-projects/element14-presents/project-videos/w/documents/72038/building-a-circuit-sculpture-with-led-filament----episode-707" data-e14adj="t"&gt;Episode 707: Building a Circuit Sculpture with LED Filament&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72037/esp32-rfid-smart-access-control-in-a-simple-diy-build----episode-706"&gt;Episode 706: ESP32 + RFID = Smart Access Control in a Simple DIY Build&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 705: Building a Super Smooth Z-Scale Train Controller with Arduino" href="/challenges-projects/element14-presents/project-videos/w/documents/72036/building-a-super-smooth-z-scale-train-controller-with-arduino----episode-705" data-e14adj="t"&gt;Episode 705: Building a Super Smooth Z-Scale Train Controller with Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 704: Hacking an IKEA Desk into a Programmable Electric Workstation" href="/challenges-projects/element14-presents/project-videos/w/documents/72035/hacking-an-ikea-desk-into-a-programmable-electric-workstation----episode-704" data-e14adj="t"&gt;Episode 704: Hacking an IKEA Desk into a Programmable Electric Workstation&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 703: How to Set Up the Raspberry Pi 5: Complete Beginner Step-by-Step Guide" href="/challenges-projects/element14-presents/project-videos/w/documents/72034/how-to-set-up-the-raspberry-pi-5-complete-beginner-step-by-step-guide----episode-703" data-e14adj="t"&gt;Episode 703: How to Set Up the Raspberry Pi 5: Complete Beginner Step-by-Step Guide&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 702: Build Your Own USB Looper for Serial Debugging and File Transfer" href="/challenges-projects/element14-presents/project-videos/w/documents/72033/build-your-own-usb-looper-for-serial-debugging-and-file-transfer----episode-702" data-e14adj="t"&gt;Episode 702: Build Your Own USB Looper for Serial Debugging and File Transfer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 700: How Voice Recognition Works on Raspberry Pi (and Why It&amp;rsquo;s Easy to Break)" href="/challenges-projects/element14-presents/project-videos/w/documents/72031/from-snooze-to-launch-the-arduino-powered-lego-alarm-clock-inspired-by-artemis-2----episode-701" data-e14adj="t"&gt;Episode 701: From Snooze to Launch: The Arduino-Powered LEGO Alarm Clock Inspired by Artemis 2&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 700: How Voice Recognition Works on Raspberry Pi (and Why It&amp;rsquo;s Easy to Break)" href="/challenges-projects/element14-presents/project-videos/w/documents/72030/how-voice-recognition-works-on-raspberry-pi-and-why-it-s-easy-to-break----episode-700" data-e14adj="t"&gt;Episode 700: How Voice Recognition Works on Raspberry Pi (and Why It&amp;rsquo;s Easy to Break)&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 697:&amp;nbsp;A Smart, Safe 3D Printer Cabinet Using Raspberry Pi and Node-RED" href="/challenges-projects/element14-presents/project-videos/w/documents/72021/gimmegpio-a-simple-way-to-get-gpio-on-laptops-and-desktops----episode-699" data-e14adj="t"&gt;Episode 699:&amp;nbsp;GimmeGPIO: A Simple Way to Get GPIO on Laptops and Desktops&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 697:&amp;nbsp;A Smart, Safe 3D Printer Cabinet Using Raspberry Pi and Node-RED" href="/challenges-projects/element14-presents/project-videos/w/documents/72020/building-a-practical-electronics-workbench-for-makers-and-engineers----episode-698" data-e14adj="t"&gt;Episode 698:&amp;nbsp;Building a Practical Electronics Workbench for Makers and Engineers&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 697:&amp;nbsp;A Smart, Safe 3D Printer Cabinet Using Raspberry Pi and Node-RED" href="/challenges-projects/element14-presents/project-videos/w/documents/72009/a-smart-safe-3d-printer-cabinet-using-raspberry-pi-and-node-red----episode-697" data-e14adj="t"&gt;Episode 697:&amp;nbsp;A Smart, Safe 3D Printer Cabinet Using Raspberry Pi and Node-RED&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/72008/how-a-pulse-metal-detector-works-and-how-to-build-one" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 696: How a Pulse Metal Detector Works, and How to Build One&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/72007/a-diy-test-and-programming-rig-built-for-small-batch-electronics-production----episode-695" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 695: A DIY Test and Programming Rig Built for Small-Batch Electronics Production&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/secret-element14-presents/w/documents/72001/earn-your-fitness-reward-with-a-smart-cookie-jar-using-strava-and-esp32----episode-694" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 694: Earn Your Fitness Reward with a Smart Cookie Jar Using Strava and ESP32&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71999/open-source-multicolour-3d-printing-upgrade-clem-s-3d-chameleon-remix----episode-693" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 693: Open-Source Multicolour 3D Printing Upgrade: Clem&amp;rsquo;s 3D Chameleon Remix&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71995/build-your-own-esp32-fitness-heart-rate-monitor-tracker----episode-692" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 692: Build Your own ESP32 Fitness Heart Rate Monitor / Tracker&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71994/how-accurate-is-bluetooth-channel-sounding-a-deep-dive-with-the-nrf54l15" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 691: How Accurate Is Bluetooth Channel Sounding? A Deep Dive with the nRF54L15&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71993/meet-the-platypusbot-now-powered-by-raspberry-pi-ros----episode-690" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 690: Meet the PlatypusBot: Now Powered by Raspberry Pi &amp;amp; ROS&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71992/how-clem-built-a-handheld-sci-fi-communicator-that-really-works----episode-689" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 689: How Clem Built a Handheld Sci-Fi Communicator That Really Works&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71990/building-the-cylon-pumpkin-combining-a-larson-scanner-and-vocoder-for-halloween----episode-688" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 688: Building the Cylon Pumpkin: Combining a Larson Scanner and Vocoder for Halloween&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71989/turning-a-10-air-fryer-into-an-arduino-powered-filament-dryer----episode-687" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 687: Turning a $10 Air Fryer into an Arduino powered Filament Dryer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71988/creepy-motion-activated-painting-you-can-build-yourself----episode-686" data-icid="e14" data-e14adj="t"&gt;Episode 686: Creepy Motion-Activated Painting You Can Build Yourself&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71987/when-your-body-becomes-the-instrument-clem-builds-the-drone-synth----episode-685" data-icid="e14" data-e14adj="t"&gt;Episode 685: When Your Body Becomes the Instrument: Clem Builds the &amp;ldquo;Dr&amp;ouml;ne&amp;rdquo; Synth&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71985/building-an-audio-reactive-led-matrix-with-a-micro-bit-and-neopixels----episode-684" data-icid="e14" data-e14adj="t"&gt;Episode 684: Building an Audio Reactive LED Matrix with a micro:bit and NeoPixels&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71984/how-to-make-a-portable-emergency-radio-with-an-arduino-nano-in-a-mint-tin----episode-683" data-icid="e14" data-e14adj="t"&gt;Episode 683: How to Make a Portable Emergency Radio with an Arduino Nano in a Mint TinT&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71974/diy-rf-modulator-raspberry-pi-pico-gaming-on-a-sony-watchman-fd-10a-crt----episode-682" data-icid="e14" data-e14adj="t"&gt;Episode 682: DIY RF Modulator + Raspberry Pi Pico = Gaming on a Sony Watchman FD-10A CRT&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71963/turn-anything-into-an-arduino-module-reusing-everyday-electronics----episode-681" data-icid="e14" data-e14adj="t"&gt;Episode 681: Turn anything into an Arduino Module: Reusing Everyday Electronics&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71961/from-kit-to-custom-design-building-a-tube-based-fm-radio----episode-680" data-icid="e14" data-e14adj="t"&gt;Episode 680: From Kit to Custom Design: Building a Tube-Based FM Radio&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71960/esp32-duolingo-owl-project-never-miss-a-lesson-again----episode-679" data-icid="e14" data-e14adj="t"&gt;Episode 679: ESP32 Duolingo Owl Project: Never Miss a Lesson Again&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71959/open-source-attiny3226-arduino-calculator-hardware-case-code-build----episode-678" data-icid="e14" data-e14adj="t"&gt;Episode 678: Open Source ATtiny3226 Arduino Calculator &amp;ndash; Hardware, Case &amp;amp; Code Build&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71955/make-your-own-vocoder-with-teensy-4-0---voice-of-a-cylon----episode-677" data-icid="e14" data-e14adj="t"&gt;Episode 677: Make Your Own Vocoder with Teensy 4.0 - Voice of a Cylon?!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71954/i-tried-building-16-attiny-robots-with-vibration-motors-it-was-a-disaster----episode-676" data-icid="e14" data-e14adj="t"&gt;Episode 676: I Tried Building 16 ATtiny Robots with Vibration Motors &amp;ndash; It Was a Disaster&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71953/avoid-conflict-with-this-esp32-defcon-task-tracker----episode-675" data-icid="e14" data-e14adj="t"&gt;Episode 675:Avoid Conflict with this ESP32 Defcon Task Tracker&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71947/building-an-open-source-blood-pressure-heart-signal-monitor----episode-674" data-icid="e14" data-e14adj="t"&gt;Episode 674: Building an Open Source Blood Pressure &amp;amp; Heart Signal Monitor&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71942/building-an-esp32-powered-warhammer-40k-rhino-with-dynamic-led-effects----episode-673" data-icid="e14" data-e14adj="t"&gt;Episode 673: Building an ESP32 Powered Warhammer 40k Rhino with Dynamic LED Effects!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71936/building-an-autonomous-lego-train-with-circuitpython-and-lidar----episode-672" data-icid="e14" data-e14adj="t"&gt;Episode 672: Building an Autonomous LEGO Train with CircuitPython and LIDAR&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71934/platypusbot---scavenging-for-robotics-parts----episode-671" data-icid="e14" data-e14adj="t"&gt;Episode 671: PlatypusBot - Scavenging for Robotics Parts&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71927/build-a-larson-scanner-with-sound-using-an-esp32----episode-670" data-icid="e14" data-e14adj="t"&gt;Episode 670: Build your own Larson Scanner&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71926/creating-an-esd-or-lightning-detector----episode-669" data-icid="e14" data-e14adj="t"&gt;Episode 669: Creating an ESD (Or Lightning!) Detector!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71925/designing-an-arduino-pid-controlled-micro-drone----episode-668" data-icid="e14" data-e14adj="t"&gt;Episode 668: Designing an Arduino PID Controlled Micro Drone&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71921/emulating-a-speech-synthesis-chip-with-an-esp32----episode-667" data-icid="e14" data-e14adj="t"&gt;Episode 667: Emulating a Speech Synthesis Chip with an ESP32&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71920/how-far-can-i2c-go----episode-666" data-icid="e14" data-e14adj="t"&gt;Episode 666: How Far Can I2C Go?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71919/raspberry-pi-ai-tracking-eye-of-sauron---ai-al-barad-dur---episode-665" data-icid="e14" data-e14adj="t"&gt;Episode 665: Raspberry Pi AI Tracking Eye of Sauron - AI AL Barad Dur&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71915/learn-how-to-make-a-photo-booth-with-the-esp32-and-telegram-automation----episode-664" data-icid="e14" data-e14adj="t"&gt;Episode 664: Learn how to Make a Photo Booth with the ESP32 and Telegram Automation!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71911/upcycling-a-vintage-microphone-into-an-emergency-radio-system----episode-663" data-icid="e14" data-e14adj="t"&gt;Episode 663: Upcycling a Vintage Microphone into an Emergency Radio System&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71909/making-a-stronger-affordable-diy-robot-arm-with-3d-printing-with-raspberry-pi-pico----episode-662" data-icid="e14" data-e14adj="t"&gt;Episode 662: Making a Stronger Affordable DIY Robot Arm with 3D Printing with Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71904/make-your-own-led-wrist-watch----episode-661" data-icid="e14" data-e14adj="t"&gt;Episode 661: Clem makes his own LED Wristwatch&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71846/lofi-beats-to-solder-to----episode-660" data-icid="e14" data-e14adj="t"&gt;Episode 660: LoFi Beats to Solder To&lt;/a&gt;&lt;/p&gt;
&lt;p style="clear:both;margin:0;padding:0px;padding-top:12px;"&gt;&lt;a title="Episode 659:&amp;nbsp;DIY Single Board Computer with ESP32 and Raspberry Pi Pico" href="/challenges-projects/element14-presents/project-videos/w/documents/71844/diy-single-board-computer-with-esp32-and-raspberry-pi-pico----episode-659" data-e14adj="t"&gt;Episode 659:&amp;nbsp;DIY Single Board Computer with ESP32 and Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71841/a-smart-youtube-counter-with-an-audio-analyzer---episode---658" data-icid="e14" data-e14adj="t"&gt;Episode 658: A Smart Youtube Counter With An Audio Analyzer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71833/how-to-control-a-lego-mindstorms-kit-with-ai-and-raspberry-pi-5----episode-657" data-icid="e14" data-e14adj="t"&gt;Episode 657: How to Control a LEGO Mindstorms kit with AI and Raspberry Pi 5&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71831/diy-jig-for-your-laser-cutter-with-custom-arduino-automation----episode-656" data-icid="e14" data-e14adj="t"&gt;Episode 656: DIY Jig for your Laser Cutter with Custom Arduino Automation&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71810/diy-hot-plate-for-smd-soldering-using-raspberry-pi-pico----episode-655" data-icid="e14" data-e14adj="t"&gt;Episode 655: DIY Hot Plate for SMD Soldering Using Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71801/how-do-battlebots-work-in-the-pit-with-hypershock----episode-654" data-icid="e14" data-e14adj="t"&gt;Episode 654: How Do BattleBots Work? In the Pit with HyperShock&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71797/edge-lit-7-segment-display-clock-using-raspberry-pi-pico----episode-653" data-icid="e14" data-e14adj="t"&gt;Episode 653: Edge-lit 7-Segment Display Clock Using Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71793/smart-windows-and-blinds-with-arduino-and-raspberry-pi-pico----episode-652" data-icid="e14" data-e14adj="t"&gt;Episode 652: Smart Windows and Blinds with Arduino and Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71784/design-for-manufacturing---project-to-product-by-modifying-off-the-shelf-cases----episode-651" data-icid="e14" data-e14adj="t"&gt;Episode 651: Design for Manufacturing - Project to Product by Modifying Off-the-Shelf Cases&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/46432/using-nordic-s-nrf7002-my-dehumidifier-tells-me-when-it-s-full----episode-650" data-icid="e14" data-e14adj="t"&gt;Episode 650: Using Nordic&amp;#39;s nRF7002, My Dehumidifier Tells Me When It&amp;#39;s Full!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/29545/giant-retro-gaming-magic-mirror-with-a-raspberry-pi-5----episode-649" data-icid="e14" data-e14adj="t"&gt;Episode 649: Giant Retro Gaming Magic Mirror with a Raspberry Pi 5!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/29540/home-ai-image-generation-server-with-lattepanda-and-stable-diffusion----episode-648" data-icid="e14" data-e14adj="t"&gt;Episode 648: Home AI Image Generation Server with LattePanda and Stable Diffusion&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/29537/building-an-open-source-tool-for-cave-surveying----episode-647" data-icid="e14" data-e14adj="t"&gt;Episode 647: Building an Open-Source Tool for Cave Surveying&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28802/creating-a-digital-roulette-table-with-an-esp32-devkit----episode-646" data-icid="e14" data-e14adj="t"&gt;Episode 646: Creating a Digital Roulette Table with an ESP32 DevKit&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28438/practical-diy-pi-pico-current-load-circuits----episode-645" data-icid="e14" data-e14adj="t"&gt;Episode 645: Practical DIY Pi Pico Current Load Circuits&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28421/turning-a-raspberry-pi-pico-into-a-gpu----episode-644" data-icid="e14" data-e14adj="t"&gt;Episode 644: Turning a Raspberry Pi Pico into a GPU!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28418/making-a-tribble-that-detects-klingons----episode-643" data-icid="e14" data-e14adj="t"&gt;Episode 643: Making a Tribble that Detects Klingons&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28416/making-a-time-lapse-camera-with-a-raspberry-pi-5----episode-642" data-icid="e14" data-e14adj="t"&gt;Episode 642: Making a Time-lapse Camera with a Raspberry Pi 5&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28409/moon-phase-display-with-raspberry-pi-pico----episode-641" data-icid="e14" data-e14adj="t"&gt;Episode 641: Moon Phase Display with Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28407/tinkering-vs-engineering-can-you-build-a-laptop-from-scratch----episode-640" data-icid="e14" data-e14adj="t"&gt;Episode 640: Tinkering vs Engineering: Can You Build a Laptop from Scratch?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28405/off-grid-remote-generator-starter----episode-639" data-icid="e14" data-e14adj="t"&gt;Episode 639: Off-Grid Remote Generator Starter?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28387/rp2040-pcb-design-turn-on-and-debug---how-hard-could-it-be----episode-638" data-icid="e14" data-e14adj="t"&gt;Episode 638: RP2040 PCB: Design, Turn-On, and Debug - How Hard Could It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28386/making-music-with-a-lego-guitar-and-capacitive-touch----episode-637" data-icid="e14" data-e14adj="t"&gt;Episode 637: Making Music with a Lego Guitar and Capacitive Touch&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28384/creating-an-imu-based-3d-mouse-with-an-esp32-s3----episode-636" data-icid="e14" data-e14adj="t"&gt;Episode 636: Creating an IMU based 3D Mouse with an ESP32-S3&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28382/vintage-electronics-exploration-with-a-bally-cypress-gardens-bingo-machine---episode-635" data-icid="e14" data-e14adj="t"&gt;Episode 635: Vintage Electronics Exploration with a Bally Cypress Gardens Bingo Machine&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28381/craft-a-festive-led-christmas-sweater-featuring-the-attiny416----episode-634" data-icid="e14" data-e14adj="t"&gt;Episode 634: Craft a Festive LED Christmas Sweater Featuring the ATtiny416&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28376/spying-under-the-christmas-tree-with-an-arduino-powered-ornament----episode-633" data-icid="e14" data-e14adj="t"&gt;Episode 633: Spying Under the Christmas Tree with an Arduino-powered Ornament&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28374/revamping-old-school-pinball-with-an-esp32----episode-632" data-icid="e14" data-e14adj="t"&gt;Episode 632: Revamping Old School Pinball with an ESP32&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28372/all-purpose-debugging-a-practical-universal-screen-with-lcd-displays----episode-631" data-icid="e14" data-e14adj="t"&gt;Episode 631: All-Purpose Debugging: A Practical Universal Screen with LCD Displays&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28370/mega-iie-first-fully-functional-computer-built-around-the-apple-mega-ii-chip----episode-630" data-icid="e14" data-e14adj="t"&gt;Episode 630: Mega IIe: First Fully Functional Computer built around the Apple Mega-II Chip&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28366/backpack-splash-mark-s-water-gun-upgrade-for-epic-outdoor-water-wars----episode-629" data-icid="e14" data-e14adj="t"&gt;Episode 629: Backpack Splash: Mark&amp;#39;s Water Gun Upgrade for Epic Outdoor Water Wars!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28361/affordable-diy-robot-arm-a-deep-dive-into-3d-printing-and-servo-motors----episode-628" data-icid="e14" data-e14adj="t"&gt;Episode 628: Affordable DIY Robot Arm - A Deep Dive into 3D Printing and Servo Motors&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28353/creating-sudostick---from-prototype-to-product----episode-627" data-icid="e14" data-e14adj="t"&gt;Episode 627: Creating sudostick - From Prototype to Product&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28351/catching-you-up-on-bonesnapper-ridge---off-grid-maker-shop----episode-626" data-icid="e14" data-e14adj="t"&gt;Episode 626: Catching you Up on Bonesnapper Ridge - Off-Grid Maker Shop&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28344/interactive-magic-creating-an-enchanted-cauldron----episode-625" data-icid="e14" data-e14adj="t"&gt;Episode 625: Interactive Magic - Creating an Enchanted Cauldron&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28342/episode-624-modding-a-smoke-machine-to-add-motion-detection" data-icid="e14" data-e14adj="t"&gt;Episode 624: Modding A Smoke Machine to Add Motion Detection&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28339/episode-623-how-to-run-linux-on-an-esp32" data-icid="e14" data-e14adj="t"&gt;Episode 623: How to Run Linux on an ESP32&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28334/episode-622-building-spooky-fun-halloween-sound-pranks-with-nrf-5340-ble-audio" data-icid="e14" data-e14adj="t"&gt;Episode 622: Building Spooky Fun: Halloween Sound Pranks with nRF 5340 BLE Audio&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28330/episode-621-color-sensor-based-water-quality-tracker-diy-environmental-monitoring" data-icid="e14" data-e14adj="t"&gt;Episode 621: Color Sensor-Based Water Quality Tracker: DIY Environmental Monitoring&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28328/episode-620-stey-by-step-guide-to-creating-your-own-speaking-animatronic-hat" data-icid="e14" data-e14adj="t"&gt;Episode 620: Stey-by-Step Guide to Creating your own Speaking Animatronic Hat&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28316/episode-619-how-to-build-an-open-source-bluetooth-mechanical-keyboard" data-icid="e14" data-e14adj="t"&gt;Episode 619: How to Build an Open Source Bluetooth Mechanical Keyboard&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28308/episode-618-upgrading-my-racing-sim-with-a-force-sensitive-keyboard" data-icid="e14" data-e14adj="t"&gt;Episode 618: Upgrading My Racing Sim with a Force-Sensitive Keyboard&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28306/episode-617-simplify-network-monitoring-building-an-esp32-powered-solution" data-icid="e14" data-e14adj="t"&gt;Episode 617: Simplify Network Monitoring: Building an ESP32-Powered Solution&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28300/episode-616-mastering-oven-control-precision-resin-curing-with-diy-modifications---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 616: Mastering Oven Control: Precision Resin Curing with DIY Modifications - How Hard Can it Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28290/episode-615-building-a-unique-usb-card-reader-from-idea-to-prototype" data-icid="e14" data-e14adj="t"&gt;Episode 615: Building a Unique USB Card Reader: From Idea to Prototype&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28278/episode-614-using-pid-proportional-integral-derivative-in-robotics---how-hard-could-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 614: Using PID (Proportional-Integral-Derivative) in Robotics - How Hard Could It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28274/episode-613-building-a-magic-wand-talking-sound-board" data-icid="e14" data-e14adj="t"&gt;Episode 613: Building a Magic Wand Talking Sound Board&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28271/episode-612-handheld-basic-computer-in-badge-format-with-the-arduino-uno" data-icid="e14" data-e14adj="t"&gt;Episode 612: Handheld BASIC computer in Badge Format with the Arduino Uno&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28267/episode-611-how-to-run-the-distance-to-the-moon-with-strava-data-and-a-pico-w-board" data-icid="e14" data-e14adj="t"&gt;Episode 611: How to Run the Distance to the Moon with Strava Data and a Pico W Board&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28214/episode-610-how-to-embroider-with-circuits-and-conductive-thread" data-icid="e14" data-e14adj="t"&gt;Episode 610: How to Embroider with Circuits and Conductive Thread&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28213/episode-609-updating-a-fujitsu-n860-2500-t111-keyboard-to-work-with-a-ps2-standard" data-icid="e14" data-e14adj="t"&gt;Episode 609: Updating a Fujitsu N860-2500-T111 Keyboard to Work with a PS2 Standard&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28200/episode-608-making-the-simplest-diy-wind-energy-generator---how-hard-could-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 608: Making the Simplest DIY Wind Energy Generator - How Hard Could it Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28198/episode-607-from-strava-to-motion-creating-an-arduino-powered-arcade-game-with-running-data" data-icid="e14" data-e14adj="t"&gt;Episode 607: From Strava to Motion: Creating an Arduino-Powered Arcade Game with Running Data&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28184/episode-606-how-to-use-lorawan-to-launch-model-rockets-wirelessly" data-icid="e14" data-e14adj="t"&gt;Episode 606: How to Use LoRaWAN to Launch Model Rockets Wirelessly&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28152/episode-605-arduino-and-leds-make-solitaire-easier-to-solve" data-icid="e14" data-e14adj="t"&gt;Episode 605: Arduino and LEDs Make Solitaire Easier to Solve&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28140/episode-604-charlieplexing-buttons-and-leds-at-the-same-time---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 604: Charlieplexing Buttons and LEDs at the Same Time - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28138/episode-603-create-your-own-air-hockey-table-with-arduino-scoring" data-icid="e14" data-e14adj="t"&gt;Episode 603: Create Your Own Air Hockey Table with Arduino Scoring&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28133/episode-602-diy-ac-dimmer-circuit-control-your-lights-with-a-raspberry-pi-pico" data-icid="e14" data-e14adj="t"&gt;Episode 602: DIY AC Dimmer Circuit: Control Your Lights with a Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28131/episode-601-how-to-reverse-engineer-electronics-building-a-developer-board-for-a-coding-class" data-icid="e14" data-e14adj="t"&gt;Episode 601: How to Reverse Engineer Electronics: Building a Developer Board for a Coding Class&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28126/episode-600-building-my-dream-digital-clock-diy-7-segment-display-with-a-cute-robot-twist" data-icid="e14" data-e14adj="t"&gt;Episode 600: Building My Dream Digital Clock: DIY 7 Segment Display with a Cute Robot Twist!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28117/episode-599-how-to-build-a-spectrum-analyzer-with-lego-bricks-discrete-electronics" data-icid="e14" data-e14adj="t"&gt;Episode 599: How to Build a Spectrum Analyzer with Lego Bricks &amp;amp; Discrete Electronics&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28102/episode-598-how-to-build-a-portable-solar-charged-off-grid-power-station" data-icid="e14" data-e14adj="t"&gt;Episode 598: How To Build a Portable, Solar-Charged Off-Grid Power Station&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28097/episode-597-how-to-build-a-robot-that-celebrates-good-grades-with-arduino" data-icid="e14" data-e14adj="t"&gt;Episode 597: How to Build a Robot that Celebrates Good Grades with Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28084/episode-596-how-to-build-your-own-voice-assistant-with-mycroft-ai---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 596: How to Build Your Own Voice Assistant with MyCroft AI - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28082/episode-595-member-challenge-accepted---universal-lanc-controller-for-dslr-cameras" data-icid="e14" data-e14adj="t"&gt;Episode 595: Member Challenge Accepted - Universal LANC Controller for DSLR cameras&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28059/episode-594-repairing-a-neewer-660-studio-light---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 594: Repairing a Neewer 660 Studio light - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28057/episode-593-playing-3d-famicom-games-wirelessly-on-the-nes---how-hard-could-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 593: Playing 3D Famicom Games Wirelessly on the NES - How Hard Could It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28050/episode-592-lamptopus-spinning-led-desk-lamp" data-icid="e14" data-e14adj="t"&gt;Episode 592: Lamptopus: Spinning LED Desk Lamp&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28036/episode-591-building-a-bluetooth-speaker-in-5-minutes---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 591: Building A Bluetooth Speaker in 5 Minutes - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28033/episode-590-seven-kingdoms-open-source-bartop-arcade" data-icid="e14" data-e14adj="t"&gt;Episode 590: Seven Kingdoms Open Source Bartop Arcade&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28024/episode-589-upgrading-the-imac-g4-with-a-nuc" data-icid="e14" data-e14adj="t"&gt;Episode 589: Upgrading the iMac G4 With a NUC&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28020/episode-588-highlights-from-element14-presents-2022" data-icid="e14" data-e14adj="t"&gt;Episode 588: Highlights from element14 presents 2022&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27982/episode-587-create-your-own-talking-stress-indicator" data-icid="e14" data-e14adj="t"&gt;Episode 587: Create Your Own Talking Stress Indicator&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27965/episode-586-diy-open-source-bluetooth-headphones" data-icid="e14" data-e14adj="t"&gt;Episode 586: DIY Open Source Bluetooth Headphones&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27960/episode-585-enhancing-a-magnifying-headband-with-auto-sensing-light" data-icid="e14" data-e14adj="t"&gt;Episode 585: Enhancing a Magnifying Headband with Auto Sensing Light&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27952/episode-584-going-beyond-periodic-wakes-using-wifi-to-revive-a-sleeping-device" data-icid="e14" data-e14adj="t"&gt;Episode 584: Going Beyond Periodic Wakes: Using WiFi to Revive a Sleeping Device&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27934/episode-583-epic-neopixel-birthday-cake" data-icid="e14" data-e14adj="t"&gt;Episode 583: Epic Neopixel Birthday Cake&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27917/episode-582-smart-christmas-decoration-with-raspberry-pi-pico-and-mqtt" data-icid="e14" data-e14adj="t"&gt;Episode 582: Smart Christmas Decoration with Raspberry Pi Pico and MQTT&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27900/episode-581-bee-saving-electronics-prototype" data-icid="e14" data-e14adj="t"&gt;Episode 581: Bee-Saving Electronics Prototype&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27894/episode-580-diy-low-cost-capacitance-meter-using-a-555-timer" data-icid="e14" data-e14adj="t"&gt;Episode 580: DIY Low Cost Capacitance Meter Using a 555 Timer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27881/episode-579-how-to-make-a-basketball-auto-score-keeper-using-colour-sensing" data-icid="e14" data-e14adj="t"&gt;Episode 579: How to Make a Basketball Auto Score Keeper Using Colour Sensing&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27879/episode-578-build-your-own-bat-detector-with-analog-parts" data-icid="e14" data-e14adj="t"&gt;Episode 578: Build your Own Bat Detector with Analog Parts&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27862/episode-577-the-game-guy-mini-upgrading-the-unportable-game-boy" data-icid="e14" data-e14adj="t"&gt;Episode 577: The Game Guy Mini, Upgrading the Unportable Game Boy!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27861/episode-576-build-your-own-underwater-drone-with-3d-printed-parts" data-icid="e14" data-e14adj="t"&gt;Episode 576: Build your own Underwater Drone with 3D Printed Parts&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27855/episode-575-how-to-make-a-secured-parcel-pickup-box-with-arduino" data-icid="e14" data-e14adj="t"&gt;Episode 575: How to Make a Secured Parcel Pickup Box with Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27846/episode-574-ghost-rider-halloween-costume" data-icid="e14" data-e14adj="t"&gt;Episode 574: Ghost Rider Halloween Costume&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27836/episode-573-using-a-pi-pico-to-convert-keyboard-input-to-morse-code" data-icid="e14" data-e14adj="t"&gt;Episode 573: Using a Pi Pico to Convert Keyboard Input to Morse Code&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27824/episode-572-how-to-use-an-esp32-camera-to-know-you-ve-got-mail" data-icid="e14" data-e14adj="t"&gt;Episode 572: How to Use an ESP32 &amp;amp; Camera to Know You&amp;#39;ve Got Mail!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27807/episode-571-using-dead-batteries-to-test-for-dead-batteries" data-icid="e14" data-e14adj="t"&gt;Episode 571: Using Dead Batteries to Test for Dead Batteries&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27805/episode-570-making-a-wifi-connected-audio-spectrum-analyzer-with-esp32" data-icid="e14" data-e14adj="t"&gt;Episode 570: Making a WiFi Connected Audio Spectrum Analyzer with ESP32&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27803/episode-569-multi-spectrum-uv-resin-curing-station-with-wurth-leds" data-icid="e14" data-e14adj="t"&gt;Episode 569: Multi-Spectrum UV Resin Curing Station with W&amp;uuml;rth LEDs&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27787/episode-568-how-to-make-a-custom-soundboard-with-the-stm32f4-using-freecad" data-icid="e14" data-e14adj="t"&gt;Episode 568: How to Make a Custom Soundboard with the STM32F4 using FreeCAD&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27785/episode-567-synced-neopixel-mickey-mouse-ears" data-icid="e14" data-e14adj="t"&gt;Episode 567: Synced NeoPixel Mickey Mouse Ears&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27760/episode-566-how-to-automate-industrial-welding-positioners-with-arduino" data-icid="e14" data-e14adj="t"&gt;Episode 566: How to Automate Industrial Welding Positioners with Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27758/episode-565-measuring-destructive-testing-force-with-a-20-ton-hydraulic-press" data-icid="e14" data-e14adj="t"&gt;Episode 565: Measuring Destructive Testing Force with a 20 Ton Hydraulic Press&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27734/episode-564-build-a-vu-meter-with-led-pixelated-nixie-tubes" data-icid="e14" data-e14adj="t"&gt;Episode 564: Build a VU Meter with LED Pixelated Nixie Tubes&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27732/episode-563-creating-augmented-reality-circuits-with-meta-quest-2-and-unity" data-icid="e14" data-e14adj="t"&gt;Episode 563: Creating Augmented Reality Circuits with Meta Quest 2 and Unity&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27730/episode-562-pi-home-temperature-monitoring-system" data-icid="e14" data-e14adj="t"&gt;Episode 562: Pi Home Temperature Monitoring System&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27728/episode-561-wifi-to-parallel-port-ascii-art-dot-matrix-printer" data-icid="e14" data-e14adj="t"&gt;Episode 561: WiFi to Parallel Port Ascii Art Dot-Matrix Printer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27727/episode-560-raspberry-pi-controlled-lego-train-with-build-hat" data-icid="e14" data-e14adj="t"&gt;Episode 560: Raspberry Pi Controlled Lego Train with Build HAT&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27706/episode-559-create-a-magic-makeup-mirror-with-pose-detection" data-icid="e14" data-e14adj="t"&gt;Episode 559: Create a Magic Makeup Mirror with Pose Detection&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27700/episode-558-3d-object-rendering-using-an-fpga" data-icid="e14" data-e14adj="t"&gt;Episode 558: 3D Object Rendering Using an FPGA&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27694/episode-557-create-your-own-handheld-serial-monitor-for-project-debugging" data-icid="e14" data-e14adj="t"&gt;Episode 557: Create your own Handheld Serial Monitor for Project Debugging&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27666/episode-556-hacking-a-hotel-pos-tablet---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 556: Hacking a Hotel POS Tablet - How Hard Can it Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27664/episode-555-dance-central-pose-estimation-game-with-tensorflow-and-raspberry-pi" data-icid="e14" data-e14adj="t"&gt;Episode 555: Dance Central Pose Estimation Game with Tensorflow and Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27647/episode-554-arduino-uno-mini-limited-edition-led-necklace" data-icid="e14" data-e14adj="t"&gt;Episode 554: Arduino Uno Mini Limited Edition LED Necklace&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27645/episode-553-adding-a-parallel-printer-port-to-an-android-phone" data-icid="e14" data-e14adj="t"&gt;Episode 553: Adding a Parallel Printer Port to an Android Phone&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27616/episode-552---magical-potion-bottle-rack" data-icid="e14" data-e14adj="t"&gt;Episode 552: Magical Potion Bottle Rack&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27614/episode-551-can-we-rebuild-a-1930s-accounting-machine" data-icid="e14" data-e14adj="t"&gt;Episode 551: Can We Rebuild a 1930s Accounting Machine?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27608/episode-550-diy-electronic-controlled-motorized-wheelchair" data-icid="e14" data-e14adj="t"&gt;Episode 550: DIY Electronic Controlled Motorized Wheelchair&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27606/episode-549-using-a-teletype-machine-as-a-usb-printer-with-arduino" data-icid="e14" data-e14adj="t"&gt;Episode 549: Using a Teletype Machine as a USB Printer with Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27597/episode-548-electronic-fidget-cube-building-your-ideas" data-icid="e14" data-e14adj="t"&gt;Episode 548: Electronic Fidget Cube, Building Your Ideas!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27577/episode-547-creating-a-mummy-wake-word-detector-with-raspberry-pi-and-edge-impulse" data-icid="e14" data-e14adj="t"&gt;Episode 547: Creating a &amp;ldquo;Mummy&amp;rdquo; Wake Word Detector with Raspberry Pi and Edge Impulse&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27567/episode-546-mapping-the-outputs-of-a-1960s-teletype-machine---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 546: Mapping the Outputs of a 1960s Teletype Machine - How Hard Can it Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27576/episode-545-designing-a-custom-pcb-for-microsoft-jacdac" data-icid="e14" data-e14adj="t"&gt;Episode 545: Designing a Custom PCB for Microsoft Jacdac&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27548/episode-544-reviving-the-1984-ibm-5155---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 544: Reviving the 1984 IBM 5155 - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27522/episode-543-lego-spike-prime-weather-station-with-raspberry-pi" data-icid="e14" data-e14adj="t"&gt;Episode 543: Lego Spike Prime Weather Station with Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27520/episode-542-a-noise-free-diy-switching-power-supply---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 542: A Noise-Free DIY Switching Power Supply - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27495/episode-541-vintage-laptop-battery-replaced-with-usb-power---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 541: Vintage Laptop Battery Replaced with USB Power - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27493/episode-540-object-detection-for-smart-recycling" data-icid="e14" data-e14adj="t"&gt;Episode 540: Object Detection for Smart Recycling&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27484/episode-539-training-a-machine-to-recognize-objects---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 539: Training a Machine to Recognize Objects - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27483/episode-538-how-to-build-a-quadruped-robot---no-math" data-icid="e14" data-e14adj="t"&gt;Episode 538: How to Build a Quadruped Robot - NO MATH!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27460/episode-537-build-a-phonograph-preamplifier---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 537: Build a Phonograph Preamplifier - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27458/episode-536-interactive-light-up-window-with-pose-detection-using-a-raspberry-pi-and-micro-bit" data-icid="e14" data-e14adj="t"&gt;Episode 536: Interactive Light-Up Window with Pose Detection using a Raspberry Pi and micro:bit&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27441/episode-535-repair-a-sega-game-gear---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 535: Repair a Sega Game Gear - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27435/episode-534-open-source-inventory-warehousing-system" data-icid="e14" data-e14adj="t"&gt;Episode 534: Open Source Inventory Warehousing System&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27432/episode-533-jumbo-diy-led" data-icid="e14" data-e14adj="t"&gt;Episode 533: Jumbo DIY LED&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27412/episode-532-world-s-first-single-chip-apple-ii-boots" data-icid="e14" data-e14adj="t"&gt;Episode 532: World&amp;rsquo;s First Single-Chip Apple II Boots!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27407/episode-531-game-guy---the-unportable-game-boy" data-icid="e14" data-e14adj="t"&gt;Episode 531: Game Guy - The Unportable Game Boy&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27399/episode-530-mqtt-controlled-led-christmas-baubles-with-raspberry-pi-pico" data-icid="e14" data-e14adj="t"&gt;Episode 530: MQTT controlled LED Christmas Baubles with Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27392/episode-529-updi-program-for-new-attiny" data-icid="e14" data-e14adj="t"&gt;Episode 529: UPDI Program for new ATTiny&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27383/episode-528-let-s-build-an-electronic-fidget-cube" data-icid="e14" data-e14adj="t"&gt;Episode 528: Let&amp;#39;s Build an Electronic Fidget Cube!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27375/episode-527---interactive-light-up-window-using-a-raspberry-pi-and-micro-bit" data-icid="e14" data-e14adj="t"&gt;Episode 527: Interactive Light Up Window using a Raspberry Pi and micro:bit&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27366/episode-526-cnc-router-remote-control" data-icid="e14" data-e14adj="t"&gt;Episode 526: CNC Router Remote Control&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27338/episode-525-demonstrating-magnetic-fields-with-helmholtz-coils-in-a-snow-globe" data-icid="e14" data-e14adj="t"&gt;Episode 525: DIY Helmholtz Snow Globe&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/27287/episode-524-arduino-iot-cloud-weather-station" data-e14adj="t"&gt;Episode 524: Arduino IoT Cloud Weather Station&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/27276/episode-523-make-your-own-auto-sensing-solder-fume-extractor" data-e14adj="t"&gt;Episode 523: Make your Own Auto-Sensing Solder Fume Extractor&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23245/episode-522-siren-head-halloween-wearable-costume" data-e14adj="t"&gt;Episode 522: Siren Head Halloween Wearable Costume&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23240/episode-521-diy-static-grass-applicator" data-e14adj="t"&gt;Episode 521: DIY Static Grass Applicator&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23232/episode-520-adding-android-auto-as-non-permanent-add-on-with-raspberry-pi" data-e14adj="t"&gt;Episode 520: Adding Android Auto as Non-Permanent Add-On with Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23225/episode-519-make-your-own-ye-olde-book-nook-diorama-with-arduino" data-e14adj="t"&gt;Episode 519: Make Your Own Ye Olde Book Nook Diorama with Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23212/episode-518-guitar-vacuum-tube-distortion-pedal" data-e14adj="t"&gt;Episode 518: Guitar Vacuum Tube Distortion Pedal&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/secret-element14-presents/w/documents/4141/episode-517-emulate-an-eprom---how-hard-could-it-be" data-e14adj="t"&gt;Episode 517: Emulate an EPROM - How Hard Could it Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23199/episode-516-modding-a-wireless-doorbell-with-raspberry-pi-and-esp8266" data-e14adj="t"&gt;Episode 516: Modding a Wireless Doorbell with Raspberry Pi and ESP8266&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23190/episode-515-upcycling-a-lenovo-pc-into-a-raspberry-pi-wifi-access-point" data-e14adj="t"&gt;Episode 515: Upcycling a Lenovo PC into a Raspberry Pi WiFi Access Point&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23183/episode-514-making-a-3d-graphics-card-for-the-atari-800-xl" data-e14adj="t"&gt;Episode 514: Making a 3D Graphics Card for the Atari 800 XL&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5429/episode-513-bike-speedometer-with-arduino-and-gps" data-e14adj="t"&gt;Episode 513: Bike Speedometer with Arduino and GPS&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5422/episode-512-you-cannot-buy-this-vacuum-tube-tester-you-build-it" data-e14adj="t"&gt;Episode 512: You Cannot Buy This Vacuum Tube Tester. You Build It!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5418/episode-511-face-tracking-cheeseball-launcher" data-e14adj="t"&gt;Episode 511:&amp;nbsp; Raspberry Pi Powered Cheeseball Launcher&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5407/episode-510-laser-cutter-command-station" data-e14adj="t"&gt;Episode 510: Laser Cutter Command Station&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5402/episode-509-diy-discrete-logic-led-countdown-timer" data-e14adj="t"&gt;Episode 509: DIY Discrete Logic LED Countdown Timer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5397/episode-508-raspberry-pi-fpv-rover-easy-robot-arm-upgrade" data-e14adj="t"&gt;Episode 508: Raspberry Pi FPV Rover Easy Robot Arm Upgrade&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5391/episode-507-massive-raspberry-pi" data-e14adj="t"&gt;Episode 507: Massive Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5377/episode-506-diy-star-trek-tricorder-from-build-inside-the-box" data-e14adj="t"&gt;Episode 506: DIY Star Trek Tricorder from Build Inside the Box&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5374/episode-505-super-8-camera-digitizer" data-e14adj="t"&gt;Episode 505: Super 8 Camera Digitizer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5369/episode-504-diy-sump-pump-alarm" data-e14adj="t"&gt;Episode 504: DIY Sump Pump Alarm&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5360/episode-503-meet-cheesoid---the-robot-that-smells" data-e14adj="t"&gt;Episode 503: Meet Cheesoid - The Robot That Smells!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5352/episode-502-make-your-bike-a-pokebike" data-e14adj="t"&gt;Episode 502: Make Your Bike a Pokebike!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5033/episode-501-raspberry-pi-nfc-button-free-music-player" data-e14adj="t"&gt;Episode 501: Raspberry Pi NFC Button-Free Music Player&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/20721/episode-500-build-inside-the-box-challenge" data-e14adj="t"&gt;Episode 500:&amp;nbsp; Build Inside The Box Challenge!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5332/episode-499-diy-four-channel-arduino-servo-tester" data-e14adj="t"&gt;Episode 499: DIY Four Channel Arduino Servo Tester&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8706/episode-498-raspberry-pi-smart-water-dispenser" data-e14adj="t"&gt;Episode 498: Raspberry Pi Smart Water Dispenser&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5318/episode-497-raspberry-pi-rfid-pocket-money-keeper" data-e14adj="t"&gt;Episode 497: RFID Pocket Money Keeper&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8705/episode-496-compute-module-4-powered-3d-printer-board" data-e14adj="t"&gt;Episode 496: Compute Module 4 Powered 3D Printer Board&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5308/episode-495-magic-gif-ball-powered-by-raspberry-pi" data-e14adj="t"&gt;Episode 495: Magic GIF Ball Powered By Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5299/episode-494-keyboard-shortcuts-keypad-with-raspberry-pi-pico" data-e14adj="t"&gt;Episode 494: Keyboard Shortcuts Keypad with Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5290/episode-493-neopixel-7-segment-display-clock-update" data-e14adj="t"&gt;Episode 493: NeoPixel 7 Segment Display Clock Update&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5275/episode-492-arduino-vs-555-timer---tiny-slot-car-racers" data-e14adj="t"&gt;Episode 492: Arduino vs 555 Timer - Tiny Slot Car Racers&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5273/episode-491-arduino-single-wheel-balancing-robot" data-e14adj="t"&gt;Episode 491: Arduino Single-Wheel Balancing Robot&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5256/episode-490-diy-raspberry-pi-pico-fizz-buzz-multiplication-game" data-e14adj="t"&gt;Episode 490: DIY Raspberry Pi Pico Fizz Buzz Multiplication Game&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5254/episode-489-build-an-fpv-rover-with-raspberry-pi" data-e14adj="t"&gt;Episode 489: Build An FPV Rover with Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5233/episode-488-diy-raspberry-pi-cyberdeck" data-e14adj="t"&gt;Episode 488: DIY Raspberry Pi Cyberdeck&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5232/episode-487-diy-magsafe-battery-charger" data-e14adj="t"&gt;Episode 487: DIY MagSafe Battery Charger&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5229/episode-486-make-the-ultimate-phone-charging-camping-flashlight" data-e14adj="t"&gt;Episode 486: Make The Ultimate Phone Charging Camping Flashlight&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5213/episode-485-how-to-make-a-custom-pcb-from-design-to-assembly" data-e14adj="t"&gt;Episode 485: How To Make A Custom PCB From Design To Assembly&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5211/episode-484-raspberry-pi-bird-watching-camera" data-e14adj="t"&gt;Episode 484: Raspberry Pi Bird Watching Camera&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5201/episode-483-diy-miniature-multimeter" data-e14adj="t"&gt;Episode 483: DIY Miniature Multimeter&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5196/episode-482-gigantic-3d-printed-7-segment-display-clock" data-e14adj="t"&gt;Episode 482: Gigantic 3D Printed 7 Segment Display Clock&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5188/episode-481-diy-lost-swan-station-split-flap-display-timer" data-e14adj="t"&gt;Episode 481: DIY LOST Swan Station Split Flap Display Timer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5181/episode-480-diy-toothbrush-timer" data-e14adj="t"&gt;Episode 480: DIY Toothbrush Timer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5179/episode-479-raspberry-pi-2xl-robot-assistant-part-2" data-e14adj="t"&gt;Episode 479: Raspberry Pi 2XL Robot Assistant Part 2&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5171/episode-478-upgrading-a-christmas-train-with-python-and-raspberry-pi" data-e14adj="t"&gt;Episode 478: Upgrading A Christmas Train&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5169/episode-477-metal-plate-your-3d-prints-with-a-diy-galvanizing-machine" data-e14adj="t"&gt;Episode 477: Metal Plate Your 3D Prints with a DIY Galvanizing Machine&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5160/episode-476-iot-arduino-ntp-world-clock-with-spi-display" data-e14adj="t"&gt;Episode 476: IoT Arduino NTP World Clock with SPI Display&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5147/episode-475-diy-wall-mounted-arduino-barometer" data-e14adj="t"&gt;Episode 475: DIY Wall Mounted Arduino Barometer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5144/episode-474-continuum-robot-tentacle-prototype" data-e14adj="t"&gt;Episode 474: Continuum Robot Tentacle Prototype&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8680/episode-473-mendel-3d-printer-upgrade-and-maintenance" data-e14adj="t"&gt;Episode 473: Mendel 3D Printer Upgrade and Maintenance&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5120/episode-472-diy-hydration-reminder-system" data-e14adj="t"&gt;Episode 472: DIY Hydration Reminder System&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5113/episode-471-diy-dance-dance-revolution-mat" data-e14adj="t"&gt;Episode 471: DIY Dance Dance Revolution Mat&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5102/episode-470-voice-activated-inspector-gadget-hat" data-e14adj="t"&gt;Episode 470: Voice Activated Inspector Gadget Hat&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5063/episode-469-nintendo-super-scope-modded-for-modern-televisions" data-e14adj="t"&gt;Episode 469: Nintendo Super Scope Modded For Modern Televisions&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5092/episode-468-socially-distanced-halloween-candy-dispenser" data-e14adj="t"&gt;Episode 468: Socially Distanced Halloween Candy Dispenser&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5077/episode-467-repairing-the-world-s-first-laptop-epson-hx-20" data-e14adj="t"&gt;Episode 467: Repairing the World&amp;#39;s First Laptop! (Epson HX-20)&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5061/episode-466-arduino-powered-hexadecimal-color-code-clock" data-e14adj="t"&gt;Episode 466: Arduino-powered Hexadecimal Color Code Clock&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5034/episode-465-lego-raspberry-pi-hq-camera" data-e14adj="t"&gt;Episode 465: Lego Raspberry Pi HQ Camera&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5031/episode-464-particle-voice-recognition-for-home-appliances" data-e14adj="t"&gt;Episode 464: Particle Voice Recognition for Home Appliances&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5002/episode-463-raspberry-pi-speech-to-text-led-face-mask" data-e14adj="t"&gt;Episode 463: Raspberry Pi Speech to Text LED Face Mask&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5012/episode-462-joycon-controlled-electronic-rock-em-sock-em-robots" data-e14adj="t"&gt;Episode 462: Joycon Controlled Electronic Rock&amp;#39;Em Sock&amp;#39;Em Robots&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4980/episode-461-portal-2-security-camera-with-raspberry-pi-2" data-e14adj="t"&gt;Episode 461: Portal 2 Security Camera with Raspberry Pi 2&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4985/episode-460-trinamic-open-source-ventilator-tosv-teardown" data-e14adj="t"&gt;Episode 460: Trinamic Open Source Ventilator (TOSV) Teardown&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4961/episode-459-raspberry-pi-4-vr-conference-call-assistant" data-e14adj="t"&gt;Episode 459: Raspberry Pi 4 VR Conference Call Assistant&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4971/episode-458-diy-arduino-automated-metal-bending-machine" data-e14adj="t"&gt;Episode 458: DIY Arduino Automated Metal Bending Machine&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4966/episode-457-arduino-mkr-zero-animatronic-rosie-the-robot-from-the-jetsons" data-e14adj="t"&gt;Episode 457: Raspberry Pi 4 Animatronic Rosie the Robot from the Jetsons&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8665/episode-456-unhackable-arduino-switch-matrix" data-e14adj="t"&gt;Episode 456: Unhackable Arduino Switch Matrix&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8664/episode-455-arduino-unit-conversion-calculator" data-e14adj="t"&gt;Episode 455: Arduino Unit Conversion Calculator&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4942/episode-454-soldering-up-the-rc2014-homebrew-z80-computer-kit" data-e14adj="t"&gt;Episode 454: Soldering Up the rc2014 Homebrew Z80 Computer Kit&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4937/episode-453-build-an-anti-troll-bot-using-tensorflow-and-arduino" data-e14adj="t"&gt;Episode 453: Build an Anti-Troll Bot Using TensorFlow and Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4914/episode-452-raspberry-pi-4-experimental-resin-3d-printer-updated" data-e14adj="t"&gt;Episode 452: Raspberry Pi 4 Experimental Resin 3D Printer Updated!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4913/episode-451-build-an-off-grid-wikipedia-with-raspberry-pi" data-e14adj="t"&gt;Episode 451: Build an Off Grid Wikipedia with Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4906/episode-450-sega-gamegear-rebuild-with-leds" data-e14adj="t"&gt;Episode 450: Sega GameGear Rebuild with LEDs&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8657/episode-449-diy-tamagotchi---build-a-virtual-pet" data-e14adj="t"&gt;Episode 449: DIY Tamagotchi - Build a Virtual Pet&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4895/episode-448-diy-raspberry-pi-4-boxing-game" data-e14adj="t"&gt;Episode 448: DIY Raspberry Pi 4 Boxing Game&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4873/episode-447-diy-stop-motion-rig-with-lattepanda" data-e14adj="t"&gt;Episode 447: DIY Stop Motion Rig with LattePanda&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4871/episode-446-raspberry-pi-2xl-robot-assistant-part-1" data-e14adj="t"&gt;Episode 446: Raspberry Pi 2XL Robot Assistant Part 1&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8652/episode-445-raspberry-pi-4-animatronic-bd-1-companion-robot" data-e14adj="t"&gt;Episode 445: Raspberry Pi 4 Animatronic BD-1 Companion Robot&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4848/episode-444-raspberry-pi-4-dvr" data-e14adj="t"&gt;Episode 444: Raspberry Pi 4 DVR&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4836/episode-443-arduino-uno-rc-remote---can-it-be-done" data-e14adj="t"&gt;Episode 443: Arduino Uno RC Remote - Can It Be Done?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4834/episode-442-make-your-own-giant-servo" data-e14adj="t"&gt;Episode 442: Make Your Own Giant Servo&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4818/episode-441-raspberry-pi-4-international-space-station-tracker" data-e14adj="t"&gt;Episode 441: Raspberry Pi 4 International Space Station Tracker&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4810/episode-440-diy-arduino-helicopter-collective-joystick-control" data-e14adj="t"&gt;Episode 440: DIY Arduino Helicopter Collective Joystick Control&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4796/episode-439---mechanical-arcade-game-with-barebones-arduino" data-e14adj="t"&gt;Episode 439 - Mechanical Arcade Game with Barebones Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4787/episode-438-smartphone-controlled-diy-rover-using-websockets" data-e14adj="t"&gt;Episode 438: Smartphone Controlled DIY Rover Using Websockets&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4771/episode-437-diy-motorized-zoom-for-your-dslr" data-e14adj="t"&gt;Episode 437: DIY Motorized Zoom for Your DSLR&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4767/episode-436-automated-raspberry-pi-planet-tracking-goto-telescope" data-e14adj="t"&gt;Episode 436: Automated Raspberry Pi Planet Tracking GOTO Telescope&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4756/episode-435-raspberry-pi-4-music-player-w-analog-controls" data-e14adj="t"&gt;Episode 435: Raspberry Pi 4 Music Player w/Analog Controls&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8637/episode-434-infineon-smart-city-model" data-e14adj="t"&gt;Episode 434: Infineon Smart City Model&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4742/episode-433---arduino-based-love-tester" data-e14adj="t"&gt;Episode 433: Arduino Based Love Tester&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4728/episode-432-super-fx-sword-using-the-bbc-micro-bit" data-e14adj="t"&gt;Episode 432: Super FX Sword using the BBC micro:bit&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4726/episode-431-room-sized-studio-light-speakers-combo" data-e14adj="t"&gt;Episode 431: Room-Sized Studio Light Speakers Combo&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4692/episode-430-flaming-xylophone-rubens-tube" data-e14adj="t"&gt;Episode 430: Flaming Xylophone Rubens&amp;#39; Tube&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4670/episode-429-youtuber-on-air-light-with-particle-mesh-network" data-e14adj="t"&gt;Episode 429: YouTuber &amp;quot;On Air&amp;quot; Light with Particle Mesh Network&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4668/episode-428-raspberry-pi-4-crt-based-vr-headset" data-e14adj="t"&gt;Episode 428: Raspberry Pi 4 CRT-based VR Headset&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4657/episode-427-diy-retro-gaming-portable-on-a-budget" data-e14adj="t"&gt; Episode 427: DIY Retro Gaming Portable on a Budget!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4142/episode-426-retro-tv-ads-holiday-ornament" data-e14adj="t"&gt; Episode 426: Retro TV Ads Holiday Ornament&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4651/episode-425-make-your-own-raspberry-pi-4-photobooth" data-e14adj="t"&gt; Episode 425: Make Your Own Raspberry Pi 4 Photobooth!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4646/episode-424-diy-escape-room-puzzle" data-e14adj="t"&gt; Episode 424: DIY Escape Room Puzzle&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4644/episode-423-programmable-arduino-synthesizer-watch" data-e14adj="t"&gt; Episode 423: Programmable Arduino Synthesizer Watch&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4628/episode-422-raspberry-pi-e-ink-task-organizer" data-e14adj="t"&gt; Episode 422: Raspberry Pi E-Ink Task Organizer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4627/episode-421-raspberry-pi-4-commodore-sx-64-inspired-portable-computer" data-e14adj="t"&gt; Episode 421: Raspberry Pi 4 Commodore SX-64 Inspired Portable Computer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4616/episode-420-diy-shapeoko-cnc-pendant" data-e14adj="t"&gt; Episode 420: DIY Shapeoko CNC Pendant&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4607/episode-419-altair-8800-laptop" data-e14adj="t"&gt; Episode 419: Altair 8800 Laptop &lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4604/episode-418-animatronic-terminator-skull-with-beaglebone-ai-and-giveaway" data-e14adj="t"&gt;&amp;nbsp;Episode 418: Animatronic Terminator Skull with BeagleBone&lt;span class="emoticon" data-url="https://community.element14.com/cfs-file/__key/system/emoji/00ae.svg" title="Registered"&gt;&amp;#x00ae;&lt;/span&gt;&amp;nbsp;AI&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8619/episode-417-pipboy-2000-mk-ii" data-e14adj="t"&gt;Episode 417: #Pipboy 2000 Mk II&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4596/episode-416---diy-3dprinted-label-spooler" data-e14adj="t"&gt;Episode 416: DIY #3DPrinted Label Spooler&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4588/episode-415-iron-man-helmet-heads-up-display" data-e14adj="t"&gt;Episode 415: Iron Man Helmet Heads Up Display&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4580/episode-414-raspberry-pi-4-experimental-resin-3d-printer" data-e14adj="t"&gt;Episode 414: Raspberry Pi 4 Experimental Resin 3D Printer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8610/episode-413-animatronic-claptrap-case-mod-part-2" data-e14adj="t"&gt;Episode 413: Animatronic Claptrap Case Mod Part 2&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4558/episode-412-get-to-know-your-adc-with-a-diy-temperature-probe" data-e14adj="t"&gt;Episode 412: Get to Know Your ADC with a DIY Temperature Probe&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4531/episode-411-animatronic-claptrap-computer-case---part-1" data-e14adj="t"&gt;Episode 411: Animatronic Claptrap Computer Case - Part 1&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4537/episode-410-macpro-g5-cheese-grater-with-raspberry-pi-4" data-e14adj="t"&gt;Episode 410: MacPro G5 Cheese Grater with Raspberry Pi 4&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4522/episode-409-commodore-sx-64-restoration" data-e14adj="t"&gt;Episode 409: Commodore SX-64 Restoration&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4516/episode-408-hand-soldered-led-oscilloscope" data-e14adj="t"&gt;Episode 408: Hand Soldered LED Oscilloscope&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4514/episode-407-the-ultimate-raspberry-pi-4-laptop" data-e14adj="t"&gt;Episode 407: The Ultimate Raspberry Pi 4 Laptop&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4507/episode-406-automated-robot-artist" data-e14adj="t"&gt;Episode 406: Automated Robot Artist&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4493/episode-405-rc-ornithopter-concept" data-e14adj="t"&gt;Episode 405: RC Ornithopter Concept&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4488/episode-404-arduino-powered-close-encounters-midi-light-board" data-e14adj="t"&gt;Episode 404: Arduino Powered Close Encounters Midi Light Board&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4459/episode-403-upcycled-iot-coffee-pot-ramen-maker" data-e14adj="t"&gt;Episode 403: Upcycled IoT Coffee Pot Ramen Maker&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4422/episode-402-piphone-the-giant-raspberry-pi-flip-phone" data-e14adj="t"&gt;Episode 402: PiPhone++ The Giant Raspberry Pi Flip Phone&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4128/episode-401-matrix-voice-controlled-robot" data-e14adj="t"&gt;Episode 401: Matrix Voice Controlled Robot&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4127/episode-400-the-ultimate-raspberry-pi-stress-test" data-e14adj="t"&gt;Episode 400: The Ultimate Raspberry Pi Stress Test&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4129/episode-399-candle-powered-robot" data-e14adj="t"&gt;Episode 399: Candle-Powered Robotl&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4044/episode-398-let-me-out-hooman-bluetooth-dog-doorbell" data-e14adj="t"&gt;Episode 398: Let Me Out Hooman! Bluetooth Dog Doorbell&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4126/episode-397-steam-powered-retropie-console" data-e14adj="t"&gt;Episode 397: Steam Powered Retropie Console&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4043/episode-396-arduino-retro-led-matrix-handheld" data-e14adj="t"&gt;Episode 396: Arduino Retro LED Matrix Handheld&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4042/episode-395-raspberry-pi-stop-motion-machine" data-e14adj="t"&gt;Episode 395: Raspberry Pi Stop Motion Machine&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8531/episode-394-animatronic-glados-head-with-raspberry-pi" data-e14adj="t"&gt;Episode 394: Animatronic GLaDOS Head with Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4125/episode-393-gameboy-walkman" data-e14adj="t"&gt;Episode 393: GameBoy Walkman&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4191/episode-392-multi-line-telephone-intercom" data-e14adj="t"&gt;Episode 392: Multi-Line Telephone Intercom&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4124/episode-391-first-person-view-rc-car-with-ps1-steering-wheel" data-e14adj="t"&gt;Episode 391: First Person View RC Car with PS2 Steering Wheel&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4122/episode-390-retro-texting-smart-watch-of-the-future" data-e14adj="t"&gt;Episode 390: Retro Texting Smart Watch of the Future!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4120/episode-389-playstation-classic-portable-prototype" data-e14adj="t"&gt;Episode 389: PlayStation Classic Portable Prototype&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8519/episode-388-fpga-midi-music-synthesizer" data-e14adj="t"&gt;Episode 388: FPGA MIDI Music Synthesizer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4057/episode-387-rotocell---the-rotary-cell-phone-of-the-future" data-e14adj="t"&gt;Episode 387: Rotocell - The Rotary Cell Phone of the Future!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4038/episode-386-xybernaut-wearable-pc" data-e14adj="t"&gt;Episode 386: Xybernaut Wearable PC&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4117/episode-385-20-pcb-design-pitfalls" data-e14adj="t"&gt;Episode 385: 20 PCB Design Pitfalls&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4035/episode-384-retro-gaming-handheld-without-a-pcb" data-e14adj="t"&gt;Episode 384: Retro Gaming Handheld Without a PCB&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4058/episode-383-gameboy-wireless-link-cable-dmg1" data-e14adj="t"&gt;Episode 383: Gameboy Wireless Link Cable (DMG1)&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8501/episode-382-modding-a-super-8-camera-into-a-digital" data-e14adj="t"&gt;Episode 382: Modding a Super 8 Camera into a Digital&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4067/episode-381-reverse-music-box" data-e14adj="t"&gt;Episode 381: Reverse Music Box&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4039/episode-380-nes-zapper-on-retropie" data-e14adj="t"&gt;Episode 380: NES Zapper on RetroPie&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4036/episode-379-macroscope-soldering-tool" data-e14adj="t"&gt;Episode 379: Macroscope Soldering Tool&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8500/episode-378-invader-zim-animatronic-gir" data-e14adj="t"&gt;Episode 378: Invader ZIM Animatronic GIR&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4034/episode-377-altair-8800-replica" data-e14adj="t"&gt;Episode 377: Altair 8800 Replica&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4028/episode-376-4d-gaming-with-the-matrix-creator" data-e14adj="t"&gt;Episode 376: 4D Gaming with the Matrix Creator&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4025/episode-375-hacked-fetal-detector-music-synthesizer" data-e14adj="t"&gt;Episode 375: Hacked Fetal Detector Music Synthesizer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4008/episode-374-raspberry-pi-donkey-kong-holiday-ornament" data-e14adj="t"&gt;Episode 374: Raspberry Pi Donkey Kong Holiday Ornament&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3992/episode-373-raspberry-pi-fallout-terminal-pc" data-e14adj="t"&gt;Episode 373: Raspberry Pi Fallout Terminal PC&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8497/episode-372-raspberry-pi-auto-etch-a-sketch" data-e14adj="t"&gt;Episode 372: Raspberry Pi Auto Etch A Sketch&lt;span class="emoticon" data-url="https://community.element14.com/cfs-file/__key/system/emoji/2122.svg" title="Tm"&gt;&amp;#x2122;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3990/episode-371-fpga-game-genie-for-atari-2600" data-e14adj="t"&gt;Episode 371: FPGA &amp;quot;Game Genie&amp;quot; for Atari 2600&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3989/episode-370-raspberry-pi-noaa-satellite-receiver" data-e14adj="t"&gt;Episode 370: Raspberry Pi NOAA Satellite Receiver&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3979/episode-369-recreating-the-atari-portfolio" data-e14adj="t"&gt;Episode 369: Recreating the Atari Portfolio&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3977/episode-368-arduino-automatic-wire-cutter-and-stripper" data-e14adj="t"&gt;Episode 368: Arduino Automatic Wire Cutter and Stripper&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3968/episode-367-most-useless-iot-device-ever---part-2" data-e14adj="t"&gt;Episode 367: Most Useless IoT Device Ever - Part 2&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3960/episode-366-infinity-icosahedron" data-e14adj="t"&gt;Episode 366: Infinity Icosahedron&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3949/episode-365-twilight-zone-fortune-telling-machine" data-e14adj="t"&gt;Episode 365: Twilight Zone Fortune Telling Machine&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3934/episode-364-raspberry-pi-virtual-reality-arcade" data-e14adj="t"&gt;Episode 364: Raspberry Pi Virtual Reality Arcade #VR&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3920/episode-363-add-a-motor-to-your-bike-with-arduino" data-e14adj="t"&gt;Episode 363 - Add a Motor to your Bike with Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3912/episode-362-most-worthless-iot-device-ever---part-1" data-e14adj="t"&gt;Episode 362: Most Worthless IoT Device Ever Pt. 1&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3903/episode-361-r-o-b-rebuild-and-upgrade" data-e14adj="t"&gt;Episode 361: R.O.B Rebuild and Upgrade&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3887/episode-360-make-your-own-raspberry-pi-cell-phone" data-e14adj="t"&gt;Episode 360: Make Your Own Raspberry Pi Cell Phone&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3875/episode-359-make-your-own-cnc-pyrography-wood-burner" data-e14adj="t"&gt;Episode 359: Make Your Own CNC Pyrography Wood Burner&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3863/episode-358-the-shrimp-of-terror" data-e14adj="t"&gt;Episode 358: The Shrimp of Terror!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3848/episode-357-raspberry-pi-asteroid-tracker" data-e14adj="t"&gt;Episode 357: Raspberry Pi Asteroid Tracker&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8491/episode-356-bank-to-the-future-with-arduino-ti" data-e14adj="t"&gt;Episode 356: Bank to the Future with Arduino &amp;amp; TI&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3826/episode-355-raspberry-pi-pirate-radio" data-e14adj="t"&gt;Episode 355: Raspberry Pi Pirate Radio&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3816/episode-354-tiny-vacuum-forming-machine" data-e14adj="t"&gt;Episode 354: Tiny Vacuum Forming Machine&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3809/episode-353-program-your-own-fpga-video-game" data-e14adj="t"&gt;Episode 353: Program Your Own FPGA Video Game&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3784/episode-352-pripyat---diy-geiger-counter" data-e14adj="t"&gt;Episode 352: Pripyat - DIY Geiger Counter&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3747/episode-349-raspberry-pi-selfie-rocket" data-e14adj="t"&gt;Episode 349: Raspberry Pi Selfie Rocket&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/benheck/ben-heck-exclusive/w/documents/9678/the-ben-heck-show-episode-archive" data-e14adj="t"&gt;See All Previous Episodes&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: episode releases, friday_release_archive, element14 presents, project videos, episodes, friday releases, episode release archive, episode archive, friday release archive, project_videos&lt;/div&gt;
</description></item><item><title>Creating a Multi-Function ESP32 Desk Pet with Custom PCB and Audio Processing</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72069/creating-a-multi-function-esp32-desk-pet-with-custom-pcb-and-audio-processing</link><pubDate>Thu, 11 Jun 2026 13:12:58 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:2868f4c0-73f3-4540-a1bf-de624fa66454</guid><dc:creator>e14sbhargav</dc:creator><description>Current Revision posted to Documents by e14sbhargav on 6/11/2026 1:12:58 PM&lt;br /&gt;
&lt;p&gt;Mark builds a desktop minion powered by an ESP32 that combines an animated eye display, temperature and humidity monitoring, audio playback, microphone input, a real-time spectrum analyser, and even a fog-generating humidifier. Along the way he designs a custom PCB, works through a hardware design issue, assembles the electronics, and brings the project to life with plenty of personality. Follow the build to see how the hardware, firmware, and enclosure come together to create a desk companion that watches, listens, reacts&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6nn2jd"&gt;Who Watches the Makers? Watch Now:&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://youtu.be/8J4jxaSzVtg"&gt;https://youtu.be/8J4jxaSzVtg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Mark set out to create something that sits somewhere between a desk companion, environmental monitor, and electronic novelty. The result is what he calls a &amp;quot;Desk Pet Minion&amp;quot; a desktop gadget built around an ESP32 that watches the room through an animated eye, measures environmental conditions, listens for noise, produces sound effects, and even emits fog to express its displeasure.&lt;/p&gt;
&lt;p&gt;What started as a fun desk ornament quickly became a surprisingly feature-rich embedded project. Along the way, Mark designed custom hardware, assembled a dedicated PCB, integrated multiple sensors and peripherals, and worked through a significant hardware design issue that required an unexpected mid-build correction.&lt;/p&gt;
&lt;p&gt;The finished device combines environmental sensing, audio processing, display graphics, and fog generation into a single desktop companion with plenty of room for future expansion.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/frame_5F00_000036.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl50"&gt;The Concept&lt;/h2&gt;
&lt;p&gt;At its core, the project is designed to bring a little personality to the workspace.&lt;/p&gt;
&lt;p&gt;The animated eye continuously moves and watches its surroundings, giving the impression that the device is paying attention to activity around the desk. Combined with environmental sensing and sound detection, the minion becomes more than a static display piece.&lt;/p&gt;
&lt;p&gt;As Mark explains:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It displays that well, mimic eye movement so it can stare at you while you&amp;#39;re sitting at your desk.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The eye is only part of the personality. A built-in humidifier creates visible fog effects, allowing the minion to react to events and express different moods. Loud noises in the office can trigger both sound and smoke effects, turning the device into a humorous commentary on workplace volume levels.&lt;/p&gt;
&lt;p&gt;The project also includes temperature and humidity monitoring, audio playback capabilities, microphone input, and a display mode that functions as a real-time spectrum analyser.&lt;/p&gt;
&lt;p&gt;Future expansion was also part of the design from the beginning.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;In the future I might even update it to function as a radio because I&amp;#39;m using an ESP32 and it has onboard Wi-Fi.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That choice of microcontroller leaves plenty of processing power and connectivity available for additional features.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/frame_5F00_000084.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl51"&gt;System Architecture&lt;/h2&gt;
&lt;p&gt;The ESP32 serves as the centre of the entire design, coordinating every subsystem.&lt;/p&gt;
&lt;p&gt;Mark&amp;#39;s schematic brings together several different hardware functions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ESP32 microcontroller&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;TFT display for eye animation and status screens&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DHT11 temperature and humidity sensor&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Light-dependent resistor (LDR)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I2S MEMS microphone&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I2S audio output board&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Speaker&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Humidifier module&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Push-button user interface&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Volume adjustment potentiometer&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Power regulation circuitry&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One particularly useful feature is the inclusion of ambient light detection. The LDR allows the device to respond to environmental changes.&lt;/p&gt;
&lt;p&gt;As Mark describes it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I can use that to detect whenever somebody enters the office in the morning and turns on the light.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The push button provides a simple interface for switching between display modes, allowing the animated eye to give way to environmental information when required.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/frame_5F00_000101.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl52"&gt;Custom PCB Design&lt;/h2&gt;
&lt;p&gt;Rather than wiring everything together on perfboard, Mark designed a dedicated PCB specifically for the enclosure.&lt;/p&gt;
&lt;p&gt;The custom board serves several purposes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Reduces wiring complexity&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Improves assembly&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ensures all components fit inside the minion housing&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Provides dedicated connections for audio, sensing, and display hardware&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Creates a cleaner final installation&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The PCB accommodates the ESP32 module, display, microphone, humidity sensor, audio circuitry, power distribution, and humidifier control circuitry.&lt;/p&gt;
&lt;p&gt;A dedicated switching circuit drives the humidifier assembly, allowing the ESP32 to enable or disable fog generation under software control.&lt;/p&gt;
&lt;p&gt;The humidifier itself consists of a commercially available ultrasonic fog generator module paired with a small water reservoir. A test tube serves as the water container and fits neatly into the enclosure.&lt;/p&gt;
&lt;p&gt;The arrangement provides a simple and effective way of generating visible fog without requiring any custom ultrasonic hardware design.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/frame_5F00_000120.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl53"&gt;Hardware Assembly&lt;/h2&gt;
&lt;p&gt;Assembly began with the surface-mount components. Working without solder paste or a reflow setup, Mark manually tinned pads before placing and soldering components individually. After completing the surface-mount work, he inspected the board and moved on to the through-hole components. Like many prototype builds, the finished PCB wasn&amp;#39;t cosmetically perfect, but functionally sound.&lt;/p&gt;
&lt;p&gt;Mark notes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;In general when you look closer to this, the soldering looks kind of messy but for prototype it&amp;#39;s okay.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He also points out that a quick pass with flux and cleaning solvent would significantly improve the appearance if desired.&lt;/p&gt;
&lt;p&gt;Several mechanical decisions were made during assembly to ensure components aligned correctly with openings in the enclosure. The microphone position required particular attention because of the distance between the PCB and the front housing.&lt;/p&gt;
&lt;p&gt;The humidity sensor was removed from its original breakout board and mounted directly onto the custom PCB, helping reduce space requirements inside the enclosure.&lt;/p&gt;
&lt;p&gt;One of the most useful parts of the build was seeing how Mark handled an unexpected hardware problem. During test fitting he discovered that the display footprint obtained from a standard library had been defined incorrectly.&lt;/p&gt;
&lt;p&gt;The display connector arrangement was effectively mirrored, meaning the screen could not be mounted in the intended orientation. As he explains:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I actually discovered a huge design flaw.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The problem wasn&amp;#39;t with the display itself but with the PCB footprint definition. To keep the project moving, Mark physically reversed the assembly orientation and rearranged component placement.&lt;/p&gt;
&lt;p&gt;The workaround allowed the prototype to function, but it created new packaging constraints inside the enclosure.&lt;/p&gt;
&lt;p&gt;Rather than simply accepting the issue, Mark documented the problem and committed to correcting the design files.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;If you&amp;#39;re rebuilding this I will make sure the PCB layout has been corrected.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This kind of design review and iteration is a normal part of hardware development, and documenting these mistakes is often more valuable than hiding them.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/frame_5F00_000142.png" /&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1jqr6mrl55"&gt;Audio Hardware and Signal Processing&lt;/h3&gt;
&lt;p&gt;Audio is one of the more sophisticated aspects of the project.&lt;/p&gt;
&lt;p&gt;The ESP32 interfaces with both an I2S microphone and an I2S audio output stage. Using I2S rather than analogue audio provides a cleaner signal path and simplifies digital processing.&lt;/p&gt;
&lt;p&gt;The firmware configuration reveals the audio architecture:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;INMP441 MEMS microphone input&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I2S digital audio interface&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dedicated speaker output&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Real-time frequency analysis&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Volume control support&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The software defines 32 frequency bands for spectrum analysis and includes a detailed cutoff table that spans frequencies from approximately 45 Hz to 17.5 kHz.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;float FreqBins[32];
int numBands=32;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The project also includes configurable noise thresholds and gain control behaviour.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;int NoiseTresshold = 2000;
#define GAIN_DAMPEN 2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Frequency band boundaries are carefully distributed across the audible spectrum.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;45, 90, 130, 180,
...
16500, 17000, 17500
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This allows the ESP32 to visualise incoming audio as a spectrum display while simultaneously using microphone data as a trigger source for behavioural responses.&lt;/p&gt;
&lt;p&gt;The result is a surprisingly capable audio subsystem for what initially appears to be a novelty desk gadget.&lt;/p&gt;
&lt;h3 id="mcetoc_1jqr6mrl56"&gt;Environmental Monitoring&lt;/h3&gt;
&lt;p&gt;Environmental sensing is handled using a DHT11 temperature and humidity sensor.&lt;/p&gt;
&lt;p&gt;The firmware configuration shows the sensor connected directly to the ESP32:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;#define DHTPIN 16
#define DHTTYPE DHT11
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The device can display:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Temperature&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Relative humidity&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Humidity index information&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These values can be accessed through the display interface, allowing the minion to double as a desktop environmental monitor.&lt;/p&gt;
&lt;p&gt;Combined with the LDR input, the system gains awareness of both ambient lighting conditions and room climate.&lt;/p&gt;
&lt;h3 id="mcetoc_1jqr6mrl57"&gt;The Animated Eye&lt;/h3&gt;
&lt;p&gt;Perhaps the most distinctive feature of the project is the animated eye.&lt;/p&gt;
&lt;p&gt;The display uses graphics assets derived from a large eye-rendering system and is configured to use a 240 &amp;times; 240 pixel display.&lt;/p&gt;
&lt;p&gt;The firmware enables both tracking and autonomous blinking behaviour.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;#define TRACKING
#define AUTOBLINK
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Additional eye behaviour includes dynamic iris adjustment based on ambient light levels.&lt;/p&gt;
&lt;p&gt;The software contains configurable parameters for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Iris size&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Light response curves&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ambient light limits&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Eyelid tracking&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Autonomous blinking&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Together these features create a display that feels surprisingly alive despite being driven by relatively modest hardware.&lt;/p&gt;
&lt;p&gt;Rather than functioning as a simple animation loop, the eye reacts to changing environmental conditions and continuously varies its appearance. Once assembly was complete, the firmware was loaded using a browser-based installation process,&amp;nbsp;the project supports direct USB programming through a web interface. This approach lowers the barrier for anyone wanting to reproduce the build. More advanced users can still modify the source code, rebuild the firmware, and upload their own versions, but newcomers can simply connect the hardware and install the firmware directly.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/frame_5F00_000395.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl59"&gt;Smoke, Sound and Personality and Future Development&lt;/h2&gt;
&lt;p&gt;The most entertaining behaviour appears once everything is assembled. The ultrasonic humidifier produces visible fog while the eye tracks movement and the microphone listens to the environment. At its current stage, excessive noise acts as a trigger condition. As Mark describes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;If your colleagues are too loud in your office then this device will basically say &amp;#39;Psh&amp;#39;.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The combination of sound effects and fog generation gives the minion a surprisingly expressive personality.&lt;/p&gt;
&lt;p&gt;Of course, the development process wasn&amp;#39;t entirely smoke-free. During testing, an accidental short circuit generated some very real smoke from the electronics.&lt;/p&gt;
&lt;p&gt;Mark jokes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I might have jinxed it a bit by trying to add artificial smoke.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Fortunately the issue was corrected and the project survived to reach its final form. Beyond environmental monitoring and animated eye graphics, the display can also switch into a spectrum analyser. This mode makes direct use of the I2S microphone and frequency processing code to create a visual representation of incoming audio.&lt;/p&gt;
&lt;p&gt;When demonstrating the feature, Mark jokingly asks:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Will it run Doom?&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;His answer:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It doesn&amp;#39;t run Doom though... but it runs the spectrum analyzer.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While perhaps not as famous as running Doom, a real-time audio analyser is arguably more useful for a device designed to monitor activity in an office environment. Although fully functional, the project clearly has room to grow. Several future directions were identified during development:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Wi-Fi connected features&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Internet radio functionality&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Additional audio behaviours&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Expanded environmental responses&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;New display modes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Further personality-driven interactions&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ESP32 platform provides ample opportunity for these additions without requiring major hardware redesign.&lt;/p&gt;
&lt;p&gt;Because the hardware already includes networking capability, microphone input, audio output, sensing hardware, and a display, much of the infrastructure required for future features is already in place. What began as a playful desktop companion evolved into a surprisingly capable embedded systems project. By combining environmental sensing, digital audio, display graphics, fog generation, and custom hardware design, Mark created something that feels much more interactive than a typical desk ornament. Equally valuable is the transparency shown throughout the build. Design mistakes, assembly challenges, packaging constraints, and debugging setbacks are all part of the story. Those lessons provide useful guidance for anyone planning to recreate or extend the project. The animated eye gives the minion character, the audio processing provides responsiveness, and the fog generator adds an unexpected physical element that makes the device stand out from conventional ESP32 projects.&lt;/p&gt;
&lt;p&gt;Most importantly, it succeeds at its original goal: creating something fun that sits on a desk, reacts to its surroundings, and occasionally reminds noisy colleagues to keep the volume down.&lt;/p&gt;
&lt;h2 id="mcetoc_1jqrchlj01"&gt;Supporting Files and Links&lt;/h2&gt;
&lt;p&gt;-&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/m/files/151428"&gt;Episode 718 Resources - Creating a Multi-Function ESP32 Desk Pet with Custom PCB and Audio Processing&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jqrcig963"&gt;Bill of Materials / Products Used&lt;/h2&gt;
&lt;table class="e14-product-bom-main"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;a id="e14-product-link-01a87" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9730940~5,9666222,2839850,2326018,2326021~2,9227881,3019949~2,9846310,9845348,2073612~3,9352651,9333711,2073784,2073608,2533101,3121992,9730940~2,4662064&amp;nsku=26M6335~5,88H4760,49AC0350,39AM8620,85Y4611~2,96K8339,68R4910~2,58K8841,58K1462,86T3742~3,62J1280,39K0329,86T3897,86T3738,74AC2602,33AH4037,26M6335~2,15J5302&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_BUY_KIT" class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('01a87'));" data-farnell="9730940~5,9666222,2839850,2326018,2326021~2,9227881,3019949~2,9846310,9845348,2073612~3,9352651,9333711,2073784,2073608,2533101,3121992,9730940~2,4662064" data-newark="26M6335~5,88H4760,49AC0350,39AM8620,85Y4611~2,96K8339,68R4910~2,58K8841,58K1462,86T3742~3,62J1280,39K0329,86T3897,86T3738,74AC2602,33AH4037,26M6335~2,15J5302" data-comoverride="" data-cmpoverride="" data-cpc="undefined~5,,,,undefined~2,,undefined~2,,,undefined~3,,,,,,,undefined~2,,,,,,,,,," data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MOLEX Pin Header, Wire-to-Board, 2.5 mm, 1 Rows, 2 Contacts, Through Hole Straight, KK 5045&lt;/td&gt;
&lt;td&gt;Molex&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-e6693" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9730940~5&amp;nsku=26M6335~5&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('e6693'));" data-farnell="9730940~5" data-newark="26M6335~5" data-comoverride="" data-cmpoverride="" data-cpc="undefined~5" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ONSEMI Linear Voltage Regulator, 7808, Fixed, Positive, 10V To 35V In, 8V/1A Out, TO-220-3&lt;/td&gt;
&lt;td&gt;Onsemi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-40400" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9666222&amp;nsku=88H4760&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('40400'));" data-farnell="9666222" data-newark="88H4760" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KYCON DC Power Connector, Jack, 3.5 A, 2 mm, PCB Mount, Through Hole&lt;/td&gt;
&lt;td&gt;KYCON&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-001be" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2839850&amp;nsku=49AC0350&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('001be'));" data-farnell="2839850" data-newark="49AC0350" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10u FECEA1EN100U&lt;/td&gt;
&lt;td&gt;Panasonic&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-39ca5" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2326018&amp;nsku=39AM8620&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('39ca5'));" data-farnell="2326018" data-newark="39AM8620" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22uF ECEA1EN220X&lt;/td&gt;
&lt;td&gt;Panasonic&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-5e897" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2326021~2&amp;nsku=85Y4611~2&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('5e897'));" data-farnell="2326021~2" data-newark="85Y4611~2" data-comoverride="" data-cmpoverride="" data-cpc="undefined~2" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10uF CL31A106KBHNNNE&lt;/td&gt;
&lt;td&gt;SAMSUNG&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-fcb01" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9227881&amp;nsku=96K8339&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('fcb01'));" data-farnell="9227881" data-newark="96K8339" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100nF CC0805KRX7R9BB104&lt;/td&gt;
&lt;td&gt;YAGEO(国巨)&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-a868d" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3019949~2&amp;nsku=68R4910~2&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('a868d'));" data-farnell="3019949~2" data-newark="68R4910~2" data-comoverride="" data-cmpoverride="" data-cpc="undefined~2" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FDN340P FDN340P&lt;/td&gt;
&lt;td&gt;TECH PUBLIC(台舟)&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-49a29" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9846310&amp;nsku=58K8841&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('49a29'));" data-farnell="9846310" data-newark="58K8841" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FDN335N FDN335N&lt;/td&gt;
&lt;td&gt;HUASHUO&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-88a0b" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9845348&amp;nsku=58K1462&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('88a0b'));" data-farnell="9845348" data-newark="58K1462" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10K 0805W8F1002T5E&lt;/td&gt;
&lt;td&gt;UniOhm&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-f2be9" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2073612~3&amp;nsku=86T3742~3&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('f2be9'));" data-farnell="2073612~3" data-newark="86T3742~3" data-comoverride="" data-cmpoverride="" data-cpc="undefined~3" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10k&amp;Omega; 3266W-1-103LF&lt;/td&gt;
&lt;td&gt;BOURNS&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-25fe6" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9352651&amp;nsku=62J1280&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('25fe6'));" data-farnell="9352651" data-newark="62J1280" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1K 0805W8F1001T5E&lt;/td&gt;
&lt;td&gt;UniOhm&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-3ab25" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9333711&amp;nsku=39K0329&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('3ab25'));" data-farnell="9333711" data-newark="39K0329" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4.7k&amp;Omega; 0805W8F4701T5E&lt;/td&gt;
&lt;td&gt;UNI-ROYAL(厚声)&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-f3071" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2073784&amp;nsku=86T3897&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('f3071'));" data-farnell="2073784" data-newark="86T3897" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100k&amp;Omega; 0805W8F1003T5E&lt;/td&gt;
&lt;td&gt;UNI-ROYAL(厚声)&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-abfbb" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2073608&amp;nsku=86T3738&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('abfbb'));" data-farnell="2073608" data-newark="86T3738" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2-1825910-7&lt;/td&gt;
&lt;td&gt;TE&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-412d9" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2533101&amp;nsku=74AC2602&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('412d9'));" data-farnell="2533101" data-newark="74AC2602" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LM1085IT-5.0/NOPB LM1084T-5.0&lt;/td&gt;
&lt;td&gt;HGSEMI(华冠)&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-621c5" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3121992&amp;nsku=33AH4037&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('621c5'));" data-farnell="3121992" data-newark="33AH4037" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22041021 22041021&lt;/td&gt;
&lt;td&gt;MOLEX&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-fe1ba" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9730940~2&amp;nsku=26M6335~2&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('fe1ba'));" data-farnell="9730940~2" data-newark="26M6335~2" data-comoverride="" data-cmpoverride="" data-cpc="undefined~2" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VISATON Speaker, Mini, 2 &amp;quot;, 500 mW, 8 ohm, 83 dB, 250 Hz to 10000 Hz&lt;/td&gt;
&lt;td&gt;Visaton&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-9fa7d" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4662064&amp;nsku=15J5302&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('9fa7d'));" data-farnell="4662064" data-newark="15J5302" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LCD display&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;lens OD43 ID37 H14.5 E2.5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I2s Audio Board&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ESP32 Devkit V1.0&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Power adapter 12V / 1A&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Humidifier Kit&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DHT11 Hum Sensor&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;INMP441-MEMS-I2S-MIC-MODULE&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GL5516 GL5516 LDR&lt;/td&gt;
&lt;td&gt;gepyun&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="xs-hide"&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: ESP32 audio project, MEMS microphone project, ESP32 display project, DIY electronics project, esp32 project, spectrum analyser esp32, ESP32 maker project, electronic desk toy, animated eye display, desk pet, humidity sensor project, ultrasonic humidifier project, Custom PCB design, friday_release, desktop companion, smart desk gadget&lt;/div&gt;
</description></item><item><title>Creating a Multi-Function ESP32 Desk Pet with Custom PCB and Audio Processing</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72069/creating-a-multi-function-esp32-desk-pet-with-custom-pcb-and-audio-processing/revision/6</link><pubDate>Thu, 11 Jun 2026 13:12:58 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:2868f4c0-73f3-4540-a1bf-de624fa66454</guid><dc:creator>cstanton</dc:creator><description>Revision 6 posted to Documents by cstanton on 6/11/2026 1:12:58 PM&lt;br /&gt;
&lt;p&gt;Mark builds a desktop minion powered by an ESP32 that combines an animated eye display, temperature and humidity monitoring, audio playback, microphone input, a real-time spectrum analyser, and even a fog-generating humidifier. Along the way he designs a custom PCB, works through a hardware design issue, assembles the electronics, and brings the project to life with plenty of personality. Follow the build to see how the hardware, firmware, and enclosure come together to create a desk companion that watches, listens, reacts&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6nn2jd"&gt;Who Watches the Makers? Watch Now:&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://youtu.be/8J4jxaSzVtg"&gt;https://youtu.be/8J4jxaSzVtg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Mark set out to create something that sits somewhere between a desk companion, environmental monitor, and electronic novelty. The result is what he calls a &amp;quot;Desk Pet Minion&amp;quot; a desktop gadget built around an ESP32 that watches the room through an animated eye, measures environmental conditions, listens for noise, produces sound effects, and even emits fog to express its displeasure.&lt;/p&gt;
&lt;p&gt;What started as a fun desk ornament quickly became a surprisingly feature-rich embedded project. Along the way, Mark designed custom hardware, assembled a dedicated PCB, integrated multiple sensors and peripherals, and worked through a significant hardware design issue that required an unexpected mid-build correction.&lt;/p&gt;
&lt;p&gt;The finished device combines environmental sensing, audio processing, display graphics, and fog generation into a single desktop companion with plenty of room for future expansion.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/frame_5F00_000036.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl50"&gt;The Concept&lt;/h2&gt;
&lt;p&gt;At its core, the project is designed to bring a little personality to the workspace.&lt;/p&gt;
&lt;p&gt;The animated eye continuously moves and watches its surroundings, giving the impression that the device is paying attention to activity around the desk. Combined with environmental sensing and sound detection, the minion becomes more than a static display piece.&lt;/p&gt;
&lt;p&gt;As Mark explains:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It displays that well, mimic eye movement so it can stare at you while you&amp;#39;re sitting at your desk.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The eye is only part of the personality. A built-in humidifier creates visible fog effects, allowing the minion to react to events and express different moods. Loud noises in the office can trigger both sound and smoke effects, turning the device into a humorous commentary on workplace volume levels.&lt;/p&gt;
&lt;p&gt;The project also includes temperature and humidity monitoring, audio playback capabilities, microphone input, and a display mode that functions as a real-time spectrum analyser.&lt;/p&gt;
&lt;p&gt;Future expansion was also part of the design from the beginning.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;In the future I might even update it to function as a radio because I&amp;#39;m using an ESP32 and it has onboard Wi-Fi.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That choice of microcontroller leaves plenty of processing power and connectivity available for additional features.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/frame_5F00_000084.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl51"&gt;System Architecture&lt;/h2&gt;
&lt;p&gt;The ESP32 serves as the centre of the entire design, coordinating every subsystem.&lt;/p&gt;
&lt;p&gt;Mark&amp;#39;s schematic brings together several different hardware functions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ESP32 microcontroller&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;TFT display for eye animation and status screens&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DHT11 temperature and humidity sensor&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Light-dependent resistor (LDR)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I2S MEMS microphone&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I2S audio output board&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Speaker&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Humidifier module&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Push-button user interface&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Volume adjustment potentiometer&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Power regulation circuitry&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One particularly useful feature is the inclusion of ambient light detection. The LDR allows the device to respond to environmental changes.&lt;/p&gt;
&lt;p&gt;As Mark describes it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I can use that to detect whenever somebody enters the office in the morning and turns on the light.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The push button provides a simple interface for switching between display modes, allowing the animated eye to give way to environmental information when required.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/frame_5F00_000101.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl52"&gt;Custom PCB Design&lt;/h2&gt;
&lt;p&gt;Rather than wiring everything together on perfboard, Mark designed a dedicated PCB specifically for the enclosure.&lt;/p&gt;
&lt;p&gt;The custom board serves several purposes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Reduces wiring complexity&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Improves assembly&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ensures all components fit inside the minion housing&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Provides dedicated connections for audio, sensing, and display hardware&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Creates a cleaner final installation&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The PCB accommodates the ESP32 module, display, microphone, humidity sensor, audio circuitry, power distribution, and humidifier control circuitry.&lt;/p&gt;
&lt;p&gt;A dedicated switching circuit drives the humidifier assembly, allowing the ESP32 to enable or disable fog generation under software control.&lt;/p&gt;
&lt;p&gt;The humidifier itself consists of a commercially available ultrasonic fog generator module paired with a small water reservoir. A test tube serves as the water container and fits neatly into the enclosure.&lt;/p&gt;
&lt;p&gt;The arrangement provides a simple and effective way of generating visible fog without requiring any custom ultrasonic hardware design.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/frame_5F00_000120.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl53"&gt;Hardware Assembly&lt;/h2&gt;
&lt;p&gt;Assembly began with the surface-mount components. Working without solder paste or a reflow setup, Mark manually tinned pads before placing and soldering components individually. After completing the surface-mount work, he inspected the board and moved on to the through-hole components. Like many prototype builds, the finished PCB wasn&amp;#39;t cosmetically perfect, but functionally sound.&lt;/p&gt;
&lt;p&gt;Mark notes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;In general when you look closer to this, the soldering looks kind of messy but for prototype it&amp;#39;s okay.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He also points out that a quick pass with flux and cleaning solvent would significantly improve the appearance if desired.&lt;/p&gt;
&lt;p&gt;Several mechanical decisions were made during assembly to ensure components aligned correctly with openings in the enclosure. The microphone position required particular attention because of the distance between the PCB and the front housing.&lt;/p&gt;
&lt;p&gt;The humidity sensor was removed from its original breakout board and mounted directly onto the custom PCB, helping reduce space requirements inside the enclosure.&lt;/p&gt;
&lt;p&gt;One of the most useful parts of the build was seeing how Mark handled an unexpected hardware problem. During test fitting he discovered that the display footprint obtained from a standard library had been defined incorrectly.&lt;/p&gt;
&lt;p&gt;The display connector arrangement was effectively mirrored, meaning the screen could not be mounted in the intended orientation. As he explains:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I actually discovered a huge design flaw.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The problem wasn&amp;#39;t with the display itself but with the PCB footprint definition. To keep the project moving, Mark physically reversed the assembly orientation and rearranged component placement.&lt;/p&gt;
&lt;p&gt;The workaround allowed the prototype to function, but it created new packaging constraints inside the enclosure.&lt;/p&gt;
&lt;p&gt;Rather than simply accepting the issue, Mark documented the problem and committed to correcting the design files.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;If you&amp;#39;re rebuilding this I will make sure the PCB layout has been corrected.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This kind of design review and iteration is a normal part of hardware development, and documenting these mistakes is often more valuable than hiding them.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/frame_5F00_000142.png" /&gt;&lt;/p&gt;
&lt;h3 id="mcetoc_1jqr6mrl55"&gt;Audio Hardware and Signal Processing&lt;/h3&gt;
&lt;p&gt;Audio is one of the more sophisticated aspects of the project.&lt;/p&gt;
&lt;p&gt;The ESP32 interfaces with both an I2S microphone and an I2S audio output stage. Using I2S rather than analogue audio provides a cleaner signal path and simplifies digital processing.&lt;/p&gt;
&lt;p&gt;The firmware configuration reveals the audio architecture:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;INMP441 MEMS microphone input&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I2S digital audio interface&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dedicated speaker output&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Real-time frequency analysis&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Volume control support&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The software defines 32 frequency bands for spectrum analysis and includes a detailed cutoff table that spans frequencies from approximately 45 Hz to 17.5 kHz.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;float FreqBins[32];
int numBands=32;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The project also includes configurable noise thresholds and gain control behaviour.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;int NoiseTresshold = 2000;
#define GAIN_DAMPEN 2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Frequency band boundaries are carefully distributed across the audible spectrum.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;45, 90, 130, 180,
...
16500, 17000, 17500
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This allows the ESP32 to visualise incoming audio as a spectrum display while simultaneously using microphone data as a trigger source for behavioural responses.&lt;/p&gt;
&lt;p&gt;The result is a surprisingly capable audio subsystem for what initially appears to be a novelty desk gadget.&lt;/p&gt;
&lt;h3 id="mcetoc_1jqr6mrl56"&gt;Environmental Monitoring&lt;/h3&gt;
&lt;p&gt;Environmental sensing is handled using a DHT11 temperature and humidity sensor.&lt;/p&gt;
&lt;p&gt;The firmware configuration shows the sensor connected directly to the ESP32:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;#define DHTPIN 16
#define DHTTYPE DHT11
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The device can display:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Temperature&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Relative humidity&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Humidity index information&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These values can be accessed through the display interface, allowing the minion to double as a desktop environmental monitor.&lt;/p&gt;
&lt;p&gt;Combined with the LDR input, the system gains awareness of both ambient lighting conditions and room climate.&lt;/p&gt;
&lt;h3 id="mcetoc_1jqr6mrl57"&gt;The Animated Eye&lt;/h3&gt;
&lt;p&gt;Perhaps the most distinctive feature of the project is the animated eye.&lt;/p&gt;
&lt;p&gt;The display uses graphics assets derived from a large eye-rendering system and is configured to use a 240 &amp;times; 240 pixel display.&lt;/p&gt;
&lt;p&gt;The firmware enables both tracking and autonomous blinking behaviour.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;#define TRACKING
#define AUTOBLINK
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Additional eye behaviour includes dynamic iris adjustment based on ambient light levels.&lt;/p&gt;
&lt;p&gt;The software contains configurable parameters for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Iris size&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Light response curves&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ambient light limits&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Eyelid tracking&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Autonomous blinking&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Together these features create a display that feels surprisingly alive despite being driven by relatively modest hardware.&lt;/p&gt;
&lt;p&gt;Rather than functioning as a simple animation loop, the eye reacts to changing environmental conditions and continuously varies its appearance. Once assembly was complete, the firmware was loaded using a browser-based installation process,&amp;nbsp;the project supports direct USB programming through a web interface. This approach lowers the barrier for anyone wanting to reproduce the build. More advanced users can still modify the source code, rebuild the firmware, and upload their own versions, but newcomers can simply connect the hardware and install the firmware directly.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/frame_5F00_000395.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl59"&gt;Smoke, Sound and Personality and Future Development&lt;/h2&gt;
&lt;p&gt;The most entertaining behaviour appears once everything is assembled. The ultrasonic humidifier produces visible fog while the eye tracks movement and the microphone listens to the environment. At its current stage, excessive noise acts as a trigger condition. As Mark describes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;If your colleagues are too loud in your office then this device will basically say &amp;#39;Psh&amp;#39;.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The combination of sound effects and fog generation gives the minion a surprisingly expressive personality.&lt;/p&gt;
&lt;p&gt;Of course, the development process wasn&amp;#39;t entirely smoke-free. During testing, an accidental short circuit generated some very real smoke from the electronics.&lt;/p&gt;
&lt;p&gt;Mark jokes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I might have jinxed it a bit by trying to add artificial smoke.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Fortunately the issue was corrected and the project survived to reach its final form. Beyond environmental monitoring and animated eye graphics, the display can also switch into a spectrum analyser. This mode makes direct use of the I2S microphone and frequency processing code to create a visual representation of incoming audio.&lt;/p&gt;
&lt;p&gt;When demonstrating the feature, Mark jokingly asks:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Will it run Doom?&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;His answer:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It doesn&amp;#39;t run Doom though... but it runs the spectrum analyzer.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While perhaps not as famous as running Doom, a real-time audio analyser is arguably more useful for a device designed to monitor activity in an office environment. Although fully functional, the project clearly has room to grow. Several future directions were identified during development:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Wi-Fi connected features&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Internet radio functionality&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Additional audio behaviours&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Expanded environmental responses&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;New display modes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Further personality-driven interactions&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ESP32 platform provides ample opportunity for these additions without requiring major hardware redesign.&lt;/p&gt;
&lt;p&gt;Because the hardware already includes networking capability, microphone input, audio output, sensing hardware, and a display, much of the infrastructure required for future features is already in place. What began as a playful desktop companion evolved into a surprisingly capable embedded systems project. By combining environmental sensing, digital audio, display graphics, fog generation, and custom hardware design, Mark created something that feels much more interactive than a typical desk ornament. Equally valuable is the transparency shown throughout the build. Design mistakes, assembly challenges, packaging constraints, and debugging setbacks are all part of the story. Those lessons provide useful guidance for anyone planning to recreate or extend the project. The animated eye gives the minion character, the audio processing provides responsiveness, and the fog generator adds an unexpected physical element that makes the device stand out from conventional ESP32 projects.&lt;/p&gt;
&lt;p&gt;Most importantly, it succeeds at its original goal: creating something fun that sits on a desk, reacts to its surroundings, and occasionally reminds noisy colleagues to keep the volume down.&lt;/p&gt;
&lt;h2 id="mcetoc_1jqrchlj01"&gt;Supporting Files and Links&lt;/h2&gt;
&lt;p&gt;-&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/m/files/151428"&gt;Episode 718 Resources - Creating a Multi-Function ESP32 Desk Pet with Custom PCB and Audio Processing&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jqrcig963"&gt;Bill of Materials / Products Used&lt;/h2&gt;
&lt;table class="e14-product-bom-main"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;a id="e14-product-link-ac13c" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9730940~5,9666222,2839850,2326018,2326021~2,9227881,3019949~2,9846310,9845348,2073612~3,9352651,9333711,2073784,2073608,2533101,3121992,9730940~2,4662064&amp;nsku=26M6335~5,88H4760,49AC0350,39AM8620,85Y4611~2,96K8339,68R4910~2,58K8841,58K1462,86T3742~3,62J1280,39K0329,86T3897,86T3738,74AC2602,33AH4037,26M6335~2,15J5302&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_BUY_KIT" class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('ac13c'));" data-farnell="9730940~5,9666222,2839850,2326018,2326021~2,9227881,3019949~2,9846310,9845348,2073612~3,9352651,9333711,2073784,2073608,2533101,3121992,9730940~2,4662064" data-newark="26M6335~5,88H4760,49AC0350,39AM8620,85Y4611~2,96K8339,68R4910~2,58K8841,58K1462,86T3742~3,62J1280,39K0329,86T3897,86T3738,74AC2602,33AH4037,26M6335~2,15J5302" data-comoverride="" data-cmpoverride="" data-cpc="undefined~5,,,,undefined~2,,undefined~2,,,undefined~3,,,,,,,undefined~2,,,,,,,,,," data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MOLEX Pin Header, Wire-to-Board, 2.5 mm, 1 Rows, 2 Contacts, Through Hole Straight, KK 5045&lt;/td&gt;
&lt;td&gt;Molex&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-12edb" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9730940~5&amp;nsku=26M6335~5&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('12edb'));" data-farnell="9730940~5" data-newark="26M6335~5" data-comoverride="" data-cmpoverride="" data-cpc="undefined~5" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ONSEMI Linear Voltage Regulator, 7808, Fixed, Positive, 10V To 35V In, 8V/1A Out, TO-220-3&lt;/td&gt;
&lt;td&gt;Onsemi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-30c4e" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9666222&amp;nsku=88H4760&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('30c4e'));" data-farnell="9666222" data-newark="88H4760" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KYCON DC Power Connector, Jack, 3.5 A, 2 mm, PCB Mount, Through Hole&lt;/td&gt;
&lt;td&gt;KYCON&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-6e16f" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2839850&amp;nsku=49AC0350&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('6e16f'));" data-farnell="2839850" data-newark="49AC0350" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10u FECEA1EN100U&lt;/td&gt;
&lt;td&gt;Panasonic&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-b48e4" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2326018&amp;nsku=39AM8620&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('b48e4'));" data-farnell="2326018" data-newark="39AM8620" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22uF ECEA1EN220X&lt;/td&gt;
&lt;td&gt;Panasonic&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-5fa2d" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2326021~2&amp;nsku=85Y4611~2&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('5fa2d'));" data-farnell="2326021~2" data-newark="85Y4611~2" data-comoverride="" data-cmpoverride="" data-cpc="undefined~2" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10uF CL31A106KBHNNNE&lt;/td&gt;
&lt;td&gt;SAMSUNG&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-85688" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9227881&amp;nsku=96K8339&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('85688'));" data-farnell="9227881" data-newark="96K8339" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100nF CC0805KRX7R9BB104&lt;/td&gt;
&lt;td&gt;YAGEO(国巨)&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-07d87" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3019949~2&amp;nsku=68R4910~2&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('07d87'));" data-farnell="3019949~2" data-newark="68R4910~2" data-comoverride="" data-cmpoverride="" data-cpc="undefined~2" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FDN340P FDN340P&lt;/td&gt;
&lt;td&gt;TECH PUBLIC(台舟)&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-c93eb" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9846310&amp;nsku=58K8841&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('c93eb'));" data-farnell="9846310" data-newark="58K8841" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FDN335N FDN335N&lt;/td&gt;
&lt;td&gt;HUASHUO&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-bde4a" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9845348&amp;nsku=58K1462&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('bde4a'));" data-farnell="9845348" data-newark="58K1462" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10K 0805W8F1002T5E&lt;/td&gt;
&lt;td&gt;UniOhm&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-35acb" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2073612~3&amp;nsku=86T3742~3&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('35acb'));" data-farnell="2073612~3" data-newark="86T3742~3" data-comoverride="" data-cmpoverride="" data-cpc="undefined~3" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10k&amp;Omega; 3266W-1-103LF&lt;/td&gt;
&lt;td&gt;BOURNS&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-c3043" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9352651&amp;nsku=62J1280&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('c3043'));" data-farnell="9352651" data-newark="62J1280" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1K 0805W8F1001T5E&lt;/td&gt;
&lt;td&gt;UniOhm&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-4acb0" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9333711&amp;nsku=39K0329&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('4acb0'));" data-farnell="9333711" data-newark="39K0329" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4.7k&amp;Omega; 0805W8F4701T5E&lt;/td&gt;
&lt;td&gt;UNI-ROYAL(厚声)&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-0b4da" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2073784&amp;nsku=86T3897&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('0b4da'));" data-farnell="2073784" data-newark="86T3897" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100k&amp;Omega; 0805W8F1003T5E&lt;/td&gt;
&lt;td&gt;UNI-ROYAL(厚声)&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-0257d" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2073608&amp;nsku=86T3738&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('0257d'));" data-farnell="2073608" data-newark="86T3738" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2-1825910-7&lt;/td&gt;
&lt;td&gt;TE&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-7b5bb" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2533101&amp;nsku=74AC2602&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('7b5bb'));" data-farnell="2533101" data-newark="74AC2602" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LM1085IT-5.0/NOPB LM1084T-5.0&lt;/td&gt;
&lt;td&gt;HGSEMI(华冠)&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-12fc3" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3121992&amp;nsku=33AH4037&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('12fc3'));" data-farnell="3121992" data-newark="33AH4037" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22041021 22041021&lt;/td&gt;
&lt;td&gt;MOLEX&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-5cab5" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9730940~2&amp;nsku=26M6335~2&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('5cab5'));" data-farnell="9730940~2" data-newark="26M6335~2" data-comoverride="" data-cmpoverride="" data-cpc="undefined~2" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VISATON Speaker, Mini, 2 &amp;quot;, 500 mW, 8 ohm, 83 dB, 250 Hz to 10000 Hz&lt;/td&gt;
&lt;td&gt;Visaton&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-d1b0b" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4662064&amp;nsku=15J5302&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('d1b0b'));" data-farnell="4662064" data-newark="15J5302" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LCD display&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;lens OD43 ID37 H14.5 E2.5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I2s Audio Board&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ESP32 Devkit V1.0&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Power adapter 12V / 1A&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Humidifier Kit&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DHT11 Hum Sensor&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;INMP441-MEMS-I2S-MIC-MODULE&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GL5516 GL5516 LDR&lt;/td&gt;
&lt;td&gt;gepyun&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="xs-hide"&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: ESP32 audio project, MEMS microphone project, ESP32 display project, DIY electronics project, esp32 project, spectrum analyser esp32, ESP32 maker project, electronic desk toy, animated eye display, desk pet, humidity sensor project, ultrasonic humidifier project, Custom PCB design, friday_release, desktop companion, smart desk gadget&lt;/div&gt;
</description></item><item><title>Creating a Multi-Function ESP32 Desk Pet with Custom PCB and Audio Processing</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72069/creating-a-multi-function-esp32-desk-pet-with-custom-pcb-and-audio-processing/revision/5</link><pubDate>Thu, 11 Jun 2026 13:05:39 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:2868f4c0-73f3-4540-a1bf-de624fa66454</guid><dc:creator>cstanton</dc:creator><description>Revision 5 posted to Documents by cstanton on 6/11/2026 1:05:39 PM&lt;br /&gt;
&lt;p&gt;Mark builds a desktop minion powered by an ESP32 that combines an animated eye display, temperature and humidity monitoring, audio playback, microphone input, a real-time spectrum analyser, and even a fog-generating humidifier. Along the way he designs a custom PCB, works through a hardware design issue, assembles the electronics, and brings the project to life with plenty of personality. Follow the build to see how the hardware, firmware, and enclosure come together to create a desk companion that watches, listens, reacts&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6nn2jd"&gt;Who Watches the Makers? Watch Now:&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://youtu.be/8J4jxaSzVtg"&gt;https://youtu.be/8J4jxaSzVtg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Mark set out to create something that sits somewhere between a desk companion, environmental monitor, and electronic novelty. The result is what he calls a &amp;quot;Desk Pet Minion&amp;quot; a desktop gadget built around an ESP32 that watches the room through an animated eye, measures environmental conditions, listens for noise, produces sound effects, and even emits fog to express its displeasure.&lt;/p&gt;
&lt;p&gt;What started as a fun desk ornament quickly became a surprisingly feature-rich embedded project. Along the way, Mark designed custom hardware, assembled a dedicated PCB, integrated multiple sensors and peripherals, and worked through a significant hardware design issue that required an unexpected mid-build correction.&lt;/p&gt;
&lt;p&gt;The finished device combines environmental sensing, audio processing, display graphics, and fog generation into a single desktop companion with plenty of room for future expansion.&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl50"&gt;The Concept&lt;/h2&gt;
&lt;p&gt;At its core, the project is designed to bring a little personality to the workspace.&lt;/p&gt;
&lt;p&gt;The animated eye continuously moves and watches its surroundings, giving the impression that the device is paying attention to activity around the desk. Combined with environmental sensing and sound detection, the minion becomes more than a static display piece.&lt;/p&gt;
&lt;p&gt;As Mark explains:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It displays that well, mimic eye movement so it can stare at you while you&amp;#39;re sitting at your desk.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The eye is only part of the personality. A built-in humidifier creates visible fog effects, allowing the minion to react to events and express different moods. Loud noises in the office can trigger both sound and smoke effects, turning the device into a humorous commentary on workplace volume levels.&lt;/p&gt;
&lt;p&gt;The project also includes temperature and humidity monitoring, audio playback capabilities, microphone input, and a display mode that functions as a real-time spectrum analyser.&lt;/p&gt;
&lt;p&gt;Future expansion was also part of the design from the beginning.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;In the future I might even update it to function as a radio because I&amp;#39;m using an ESP32 and it has onboard Wi-Fi.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That choice of microcontroller leaves plenty of processing power and connectivity available for additional features.&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl51"&gt;System Architecture&lt;/h2&gt;
&lt;p&gt;The ESP32 serves as the centre of the entire design, coordinating every subsystem.&lt;/p&gt;
&lt;p&gt;Mark&amp;#39;s schematic brings together several different hardware functions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ESP32 microcontroller&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;TFT display for eye animation and status screens&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DHT11 temperature and humidity sensor&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Light-dependent resistor (LDR)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I2S MEMS microphone&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I2S audio output board&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Speaker&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Humidifier module&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Push-button user interface&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Volume adjustment potentiometer&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Power regulation circuitry&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One particularly useful feature is the inclusion of ambient light detection. The LDR allows the device to respond to environmental changes.&lt;/p&gt;
&lt;p&gt;As Mark describes it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I can use that to detect whenever somebody enters the office in the morning and turns on the light.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The push button provides a simple interface for switching between display modes, allowing the animated eye to give way to environmental information when required.&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl52"&gt;Custom PCB Design&lt;/h2&gt;
&lt;p&gt;Rather than wiring everything together on perfboard, Mark designed a dedicated PCB specifically for the enclosure.&lt;/p&gt;
&lt;p&gt;The custom board serves several purposes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Reduces wiring complexity&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Improves assembly&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ensures all components fit inside the minion housing&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Provides dedicated connections for audio, sensing, and display hardware&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Creates a cleaner final installation&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The PCB accommodates the ESP32 module, display, microphone, humidity sensor, audio circuitry, power distribution, and humidifier control circuitry.&lt;/p&gt;
&lt;p&gt;A dedicated switching circuit drives the humidifier assembly, allowing the ESP32 to enable or disable fog generation under software control.&lt;/p&gt;
&lt;p&gt;The humidifier itself consists of a commercially available ultrasonic fog generator module paired with a small water reservoir. A test tube serves as the water container and fits neatly into the enclosure.&lt;/p&gt;
&lt;p&gt;The arrangement provides a simple and effective way of generating visible fog without requiring any custom ultrasonic hardware design.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl53"&gt;Hardware Assembly&lt;/h2&gt;
&lt;p&gt;Assembly began with the surface-mount components.&lt;/p&gt;
&lt;p&gt;Working without solder paste or a reflow setup, Mark manually tinned pads before placing and soldering components individually.&lt;/p&gt;
&lt;p&gt;After completing the surface-mount work, he inspected the board and moved on to the through-hole components.&lt;/p&gt;
&lt;p&gt;Like many prototype builds, the finished PCB wasn&amp;#39;t cosmetically perfect, but functionally sound.&lt;/p&gt;
&lt;p&gt;Mark notes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;In general when you look closer to this, the soldering looks kind of messy but for prototype it&amp;#39;s okay.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He also points out that a quick pass with flux and cleaning solvent would significantly improve the appearance if desired.&lt;/p&gt;
&lt;p&gt;Several mechanical decisions were made during assembly to ensure components aligned correctly with openings in the enclosure. The microphone position required particular attention because of the distance between the PCB and the front housing.&lt;/p&gt;
&lt;p&gt;The humidity sensor was removed from its original breakout board and mounted directly onto the custom PCB, helping reduce space requirements inside the enclosure.&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl54"&gt;A Design Flaw Appears&lt;/h2&gt;
&lt;p&gt;One of the most useful parts of the build was seeing how Mark handled an unexpected hardware problem. During test fitting he discovered that the display footprint obtained from a standard library had been defined incorrectly.&lt;/p&gt;
&lt;p&gt;The display connector arrangement was effectively mirrored, meaning the screen could not be mounted in the intended orientation. As he explains:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I actually discovered a huge design flaw.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The problem wasn&amp;#39;t with the display itself but with the PCB footprint definition. To keep the project moving, Mark physically reversed the assembly orientation and rearranged component placement.&lt;/p&gt;
&lt;p&gt;The workaround allowed the prototype to function, but it created new packaging constraints inside the enclosure.&lt;/p&gt;
&lt;p&gt;Rather than simply accepting the issue, Mark documented the problem and committed to correcting the design files.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;If you&amp;#39;re rebuilding this I will make sure the PCB layout has been corrected.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This kind of design review and iteration is a normal part of hardware development, and documenting these mistakes is often more valuable than hiding them.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl55"&gt;Audio Hardware and Signal Processing&lt;/h2&gt;
&lt;p&gt;Audio is one of the more sophisticated aspects of the project.&lt;/p&gt;
&lt;p&gt;The ESP32 interfaces with both an I2S microphone and an I2S audio output stage. Using I2S rather than analogue audio provides a cleaner signal path and simplifies digital processing.&lt;/p&gt;
&lt;p&gt;The firmware configuration reveals the audio architecture:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;INMP441 MEMS microphone input&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I2S digital audio interface&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dedicated speaker output&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Real-time frequency analysis&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Volume control support&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The software defines 32 frequency bands for spectrum analysis and includes a detailed cutoff table that spans frequencies from approximately 45 Hz to 17.5 kHz.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;float FreqBins[32];
int numBands=32;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The project also includes configurable noise thresholds and gain control behaviour.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;int NoiseTresshold = 2000;
#define GAIN_DAMPEN 2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Frequency band boundaries are carefully distributed across the audible spectrum.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;45, 90, 130, 180,
...
16500, 17000, 17500
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This allows the ESP32 to visualise incoming audio as a spectrum display while simultaneously using microphone data as a trigger source for behavioural responses.&lt;/p&gt;
&lt;p&gt;The result is a surprisingly capable audio subsystem for what initially appears to be a novelty desk gadget.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl56"&gt;Environmental Monitoring&lt;/h2&gt;
&lt;p&gt;Environmental sensing is handled using a DHT11 temperature and humidity sensor.&lt;/p&gt;
&lt;p&gt;The firmware configuration shows the sensor connected directly to the ESP32:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;#define DHTPIN 16
#define DHTTYPE DHT11
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The device can display:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Temperature&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Relative humidity&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Humidity index information&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These values can be accessed through the display interface, allowing the minion to double as a desktop environmental monitor.&lt;/p&gt;
&lt;p&gt;Combined with the LDR input, the system gains awareness of both ambient lighting conditions and room climate.&lt;/p&gt;
&lt;h2 id="mcetoc_1jqrchlj00"&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1jqr6mrl57"&gt;The Animated Eye&lt;/h2&gt;
&lt;p&gt;Perhaps the most distinctive feature of the project is the animated eye.&lt;/p&gt;
&lt;p&gt;The display uses graphics assets derived from a large eye-rendering system and is configured to use a 240 &amp;times; 240 pixel display.&lt;/p&gt;
&lt;p&gt;The firmware enables both tracking and autonomous blinking behaviour.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;#define TRACKING
#define AUTOBLINK
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Additional eye behaviour includes dynamic iris adjustment based on ambient light levels.&lt;/p&gt;
&lt;p&gt;The software contains configurable parameters for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Iris size&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Light response curves&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ambient light limits&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Eyelid tracking&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Autonomous blinking&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Together these features create a display that feels surprisingly alive despite being driven by relatively modest hardware.&lt;/p&gt;
&lt;p&gt;Rather than functioning as a simple animation loop, the eye reacts to changing environmental conditions and continuously varies its appearance. Once assembly was complete, the firmware was loaded using a browser-based installation process,&amp;nbsp;the project supports direct USB programming through a web interface. This approach lowers the barrier for anyone wanting to reproduce the build. More advanced users can still modify the source code, rebuild the firmware, and upload their own versions, but newcomers can simply connect the hardware and install the firmware directly.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl59"&gt;Smoke, Sound and Personality&lt;/h2&gt;
&lt;p&gt;The most entertaining behaviour appears once everything is assembled. The ultrasonic humidifier produces visible fog while the eye tracks movement and the microphone listens to the environment. At its current stage, excessive noise acts as a trigger condition. As Mark describes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;If your colleagues are too loud in your office then this device will basically say &amp;#39;Psh&amp;#39;.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The combination of sound effects and fog generation gives the minion a surprisingly expressive personality.&lt;/p&gt;
&lt;p&gt;Of course, the development process wasn&amp;#39;t entirely smoke-free. During testing, an accidental short circuit generated some very real smoke from the electronics.&lt;/p&gt;
&lt;p&gt;Mark jokes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I might have jinxed it a bit by trying to add artificial smoke.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Fortunately the issue was corrected and the project survived to reach its final form. Beyond environmental monitoring and animated eye graphics, the display can also switch into a spectrum analyser. This mode makes direct use of the I2S microphone and frequency processing code to create a visual representation of incoming audio.&lt;/p&gt;
&lt;p&gt;When demonstrating the feature, Mark jokingly asks:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Will it run Doom?&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;His answer:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It doesn&amp;#39;t run Doom though... but it runs the spectrum analyzer.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While perhaps not as famous as running Doom, a real-time audio analyser is arguably more useful for a device designed to monitor activity in an office environment.&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl5b"&gt;Future Development&lt;/h2&gt;
&lt;p&gt;Although fully functional, the project clearly has room to grow.&lt;/p&gt;
&lt;p&gt;Several future directions were identified during development:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Wi-Fi connected features&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Internet radio functionality&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Additional audio behaviours&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Expanded environmental responses&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;New display modes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Further personality-driven interactions&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ESP32 platform provides ample opportunity for these additions without requiring major hardware redesign.&lt;/p&gt;
&lt;p&gt;Because the hardware already includes networking capability, microphone input, audio output, sensing hardware, and a display, much of the infrastructure required for future features is already in place. What began as a playful desktop companion evolved into a surprisingly capable embedded systems project. By combining environmental sensing, digital audio, display graphics, fog generation, and custom hardware design, Mark created something that feels much more interactive than a typical desk ornament. Equally valuable is the transparency shown throughout the build. Design mistakes, assembly challenges, packaging constraints, and debugging setbacks are all part of the story. Those lessons provide useful guidance for anyone planning to recreate or extend the project.&lt;/p&gt;
&lt;p&gt;The animated eye gives the minion character, the audio processing provides responsiveness, and the fog generator adds an unexpected physical element that makes the device stand out from conventional ESP32 projects.&lt;/p&gt;
&lt;p&gt;Most importantly, it succeeds at its original goal: creating something fun that sits on a desk, reacts to its surroundings, and occasionally reminds noisy colleagues to keep the volume down.&lt;/p&gt;
&lt;h2 id="mcetoc_1jqrchlj01"&gt;Supporting Files and Links&lt;/h2&gt;
&lt;p&gt;-&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/m/files/151428"&gt;Episode 718 Resources - Creating a Multi-Function ESP32 Desk Pet with Custom PCB and Audio Processing&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jqrcig963"&gt;Bill of Materials / Products Used&lt;/h2&gt;
&lt;table class="e14-product-bom-main"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;a id="e14-product-link-64da8" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9730940~5,9666222,2839850,2326018,2326021~2,9227881,3019949~2,9846310,9845348,2073612~3,9352651,9333711,2073784,2073608,2533101,3121992,9730940~2,4662064&amp;nsku=26M6335~5,88H4760,49AC0350,39AM8620,85Y4611~2,96K8339,68R4910~2,58K8841,58K1462,86T3742~3,62J1280,39K0329,86T3897,86T3738,74AC2602,33AH4037,26M6335~2,15J5302&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_BUY_KIT" class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('64da8'));" data-farnell="9730940~5,9666222,2839850,2326018,2326021~2,9227881,3019949~2,9846310,9845348,2073612~3,9352651,9333711,2073784,2073608,2533101,3121992,9730940~2,4662064" data-newark="26M6335~5,88H4760,49AC0350,39AM8620,85Y4611~2,96K8339,68R4910~2,58K8841,58K1462,86T3742~3,62J1280,39K0329,86T3897,86T3738,74AC2602,33AH4037,26M6335~2,15J5302" data-comoverride="" data-cmpoverride="" data-cpc="undefined~5,,,,undefined~2,,undefined~2,,,undefined~3,,,,,,,undefined~2,,,,,,,,,," data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MOLEX Pin Header, Wire-to-Board, 2.5 mm, 1 Rows, 2 Contacts, Through Hole Straight, KK 5045&lt;/td&gt;
&lt;td&gt;Molex&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-f169c" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9730940~5&amp;nsku=26M6335~5&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('f169c'));" data-farnell="9730940~5" data-newark="26M6335~5" data-comoverride="" data-cmpoverride="" data-cpc="undefined~5" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ONSEMI Linear Voltage Regulator, 7808, Fixed, Positive, 10V To 35V In, 8V/1A Out, TO-220-3&lt;/td&gt;
&lt;td&gt;Onsemi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-7cfe1" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9666222&amp;nsku=88H4760&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('7cfe1'));" data-farnell="9666222" data-newark="88H4760" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KYCON DC Power Connector, Jack, 3.5 A, 2 mm, PCB Mount, Through Hole&lt;/td&gt;
&lt;td&gt;KYCON&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-16cbb" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2839850&amp;nsku=49AC0350&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('16cbb'));" data-farnell="2839850" data-newark="49AC0350" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10u FECEA1EN100U&lt;/td&gt;
&lt;td&gt;Panasonic&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-94a73" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2326018&amp;nsku=39AM8620&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('94a73'));" data-farnell="2326018" data-newark="39AM8620" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22uF ECEA1EN220X&lt;/td&gt;
&lt;td&gt;Panasonic&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-3cbc9" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2326021~2&amp;nsku=85Y4611~2&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('3cbc9'));" data-farnell="2326021~2" data-newark="85Y4611~2" data-comoverride="" data-cmpoverride="" data-cpc="undefined~2" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10uF CL31A106KBHNNNE&lt;/td&gt;
&lt;td&gt;SAMSUNG&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-eab8a" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9227881&amp;nsku=96K8339&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('eab8a'));" data-farnell="9227881" data-newark="96K8339" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100nF CC0805KRX7R9BB104&lt;/td&gt;
&lt;td&gt;YAGEO(国巨)&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-a1a3f" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3019949~2&amp;nsku=68R4910~2&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('a1a3f'));" data-farnell="3019949~2" data-newark="68R4910~2" data-comoverride="" data-cmpoverride="" data-cpc="undefined~2" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FDN340P FDN340P&lt;/td&gt;
&lt;td&gt;TECH PUBLIC(台舟)&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-41c57" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9846310&amp;nsku=58K8841&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('41c57'));" data-farnell="9846310" data-newark="58K8841" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FDN335N FDN335N&lt;/td&gt;
&lt;td&gt;HUASHUO&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-6ed60" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9845348&amp;nsku=58K1462&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('6ed60'));" data-farnell="9845348" data-newark="58K1462" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10K 0805W8F1002T5E&lt;/td&gt;
&lt;td&gt;UniOhm&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-2e8c4" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2073612~3&amp;nsku=86T3742~3&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('2e8c4'));" data-farnell="2073612~3" data-newark="86T3742~3" data-comoverride="" data-cmpoverride="" data-cpc="undefined~3" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10k&amp;Omega; 3266W-1-103LF&lt;/td&gt;
&lt;td&gt;BOURNS&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-176d2" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9352651&amp;nsku=62J1280&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('176d2'));" data-farnell="9352651" data-newark="62J1280" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1K 0805W8F1001T5E&lt;/td&gt;
&lt;td&gt;UniOhm&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-c0fa1" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9333711&amp;nsku=39K0329&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('c0fa1'));" data-farnell="9333711" data-newark="39K0329" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4.7k&amp;Omega; 0805W8F4701T5E&lt;/td&gt;
&lt;td&gt;UNI-ROYAL(厚声)&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-39fbf" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2073784&amp;nsku=86T3897&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('39fbf'));" data-farnell="2073784" data-newark="86T3897" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100k&amp;Omega; 0805W8F1003T5E&lt;/td&gt;
&lt;td&gt;UNI-ROYAL(厚声)&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-189b0" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2073608&amp;nsku=86T3738&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('189b0'));" data-farnell="2073608" data-newark="86T3738" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2-1825910-7&lt;/td&gt;
&lt;td&gt;TE&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-1265c" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2533101&amp;nsku=74AC2602&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('1265c'));" data-farnell="2533101" data-newark="74AC2602" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LM1085IT-5.0/NOPB LM1084T-5.0&lt;/td&gt;
&lt;td&gt;HGSEMI(华冠)&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-56295" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3121992&amp;nsku=33AH4037&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('56295'));" data-farnell="3121992" data-newark="33AH4037" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22041021 22041021&lt;/td&gt;
&lt;td&gt;MOLEX&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-93ad8" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9730940~2&amp;nsku=26M6335~2&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('93ad8'));" data-farnell="9730940~2" data-newark="26M6335~2" data-comoverride="" data-cmpoverride="" data-cpc="undefined~2" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VISATON Speaker, Mini, 2 &amp;quot;, 500 mW, 8 ohm, 83 dB, 250 Hz to 10000 Hz&lt;/td&gt;
&lt;td&gt;Visaton&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-f2acd" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4662064&amp;nsku=15J5302&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('f2acd'));" data-farnell="4662064" data-newark="15J5302" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LCD display&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;lens OD43 ID37 H14.5 E2.5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I2s Audio Board&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ESP32 Devkit V1.0&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Power adapter 12V / 1A&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Humidifier Kit&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DHT11 Hum Sensor&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;INMP441-MEMS-I2S-MIC-MODULE&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GL5516 GL5516 LDR&lt;/td&gt;
&lt;td&gt;gepyun&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="xs-hide"&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: ESP32 audio project, MEMS microphone project, ESP32 display project, DIY electronics project, esp32 project, spectrum analyser esp32, ESP32 maker project, electronic desk toy, animated eye display, desk pet, humidity sensor project, ultrasonic humidifier project, Custom PCB design, friday_release, desktop companion, smart desk gadget&lt;/div&gt;
</description></item><item><title>Creating a Multi-Function ESP32 Desk Pet with Custom PCB and Audio Processing</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72069/creating-a-multi-function-esp32-desk-pet-with-custom-pcb-and-audio-processing/revision/4</link><pubDate>Thu, 11 Jun 2026 12:43:24 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:2868f4c0-73f3-4540-a1bf-de624fa66454</guid><dc:creator>cstanton</dc:creator><description>Revision 4 posted to Documents by cstanton on 6/11/2026 12:43:24 PM&lt;br /&gt;
&lt;p&gt;Mark builds a desktop minion powered by an ESP32 that combines an animated eye display, temperature and humidity monitoring, audio playback, microphone input, a real-time spectrum analyser, and even a fog-generating humidifier. Along the way he designs a custom PCB, works through a hardware design issue, assembles the electronics, and brings the project to life with plenty of personality. Follow the build to see how the hardware, firmware, and enclosure come together to create a desk companion that watches, listens, reacts&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6nn2jd"&gt;Who Watches the Makers? Watch Now:&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://youtu.be/8J4jxaSzVtg"&gt;https://youtu.be/8J4jxaSzVtg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Mark set out to create something that sits somewhere between a desk companion, environmental monitor, and electronic novelty. The result is what he calls a &amp;quot;Desk Pet Minion&amp;quot; a desktop gadget built around an ESP32 that watches the room through an animated eye, measures environmental conditions, listens for noise, produces sound effects, and even emits fog to express its displeasure.&lt;/p&gt;
&lt;p&gt;What started as a fun desk ornament quickly became a surprisingly feature-rich embedded project. Along the way, Mark designed custom hardware, assembled a dedicated PCB, integrated multiple sensors and peripherals, and worked through a significant hardware design issue that required an unexpected mid-build correction.&lt;/p&gt;
&lt;p&gt;The finished device combines environmental sensing, audio processing, display graphics, and fog generation into a single desktop companion with plenty of room for future expansion.&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl50"&gt;The Concept&lt;/h2&gt;
&lt;p&gt;At its core, the project is designed to bring a little personality to the workspace.&lt;/p&gt;
&lt;p&gt;The animated eye continuously moves and watches its surroundings, giving the impression that the device is paying attention to activity around the desk. Combined with environmental sensing and sound detection, the minion becomes more than a static display piece.&lt;/p&gt;
&lt;p&gt;As Mark explains:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It displays that well, mimic eye movement so it can stare at you while you&amp;#39;re sitting at your desk.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The eye is only part of the personality. A built-in humidifier creates visible fog effects, allowing the minion to react to events and express different moods. Loud noises in the office can trigger both sound and smoke effects, turning the device into a humorous commentary on workplace volume levels.&lt;/p&gt;
&lt;p&gt;The project also includes temperature and humidity monitoring, audio playback capabilities, microphone input, and a display mode that functions as a real-time spectrum analyser.&lt;/p&gt;
&lt;p&gt;Future expansion was also part of the design from the beginning.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;In the future I might even update it to function as a radio because I&amp;#39;m using an ESP32 and it has onboard Wi-Fi.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That choice of microcontroller leaves plenty of processing power and connectivity available for additional features.&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl51"&gt;System Architecture&lt;/h2&gt;
&lt;p&gt;The ESP32 serves as the centre of the entire design, coordinating every subsystem.&lt;/p&gt;
&lt;p&gt;Mark&amp;#39;s schematic brings together several different hardware functions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ESP32 microcontroller&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;TFT display for eye animation and status screens&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DHT11 temperature and humidity sensor&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Light-dependent resistor (LDR)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I2S MEMS microphone&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I2S audio output board&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Speaker&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Humidifier module&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Push-button user interface&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Volume adjustment potentiometer&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Power regulation circuitry&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One particularly useful feature is the inclusion of ambient light detection. The LDR allows the device to respond to environmental changes.&lt;/p&gt;
&lt;p&gt;As Mark describes it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I can use that to detect whenever somebody enters the office in the morning and turns on the light.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The push button provides a simple interface for switching between display modes, allowing the animated eye to give way to environmental information when required.&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl52"&gt;Custom PCB Design&lt;/h2&gt;
&lt;p&gt;Rather than wiring everything together on perfboard, Mark designed a dedicated PCB specifically for the enclosure.&lt;/p&gt;
&lt;p&gt;The custom board serves several purposes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Reduces wiring complexity&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Improves assembly&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ensures all components fit inside the minion housing&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Provides dedicated connections for audio, sensing, and display hardware&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Creates a cleaner final installation&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The PCB accommodates the ESP32 module, display, microphone, humidity sensor, audio circuitry, power distribution, and humidifier control circuitry.&lt;/p&gt;
&lt;p&gt;A dedicated switching circuit drives the humidifier assembly, allowing the ESP32 to enable or disable fog generation under software control.&lt;/p&gt;
&lt;p&gt;The humidifier itself consists of a commercially available ultrasonic fog generator module paired with a small water reservoir. A test tube serves as the water container and fits neatly into the enclosure.&lt;/p&gt;
&lt;p&gt;The arrangement provides a simple and effective way of generating visible fog without requiring any custom ultrasonic hardware design.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl53"&gt;Hardware Assembly&lt;/h2&gt;
&lt;p&gt;Assembly began with the surface-mount components.&lt;/p&gt;
&lt;p&gt;Working without solder paste or a reflow setup, Mark manually tinned pads before placing and soldering components individually.&lt;/p&gt;
&lt;p&gt;After completing the surface-mount work, he inspected the board and moved on to the through-hole components.&lt;/p&gt;
&lt;p&gt;Like many prototype builds, the finished PCB wasn&amp;#39;t cosmetically perfect, but functionally sound.&lt;/p&gt;
&lt;p&gt;Mark notes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;In general when you look closer to this, the soldering looks kind of messy but for prototype it&amp;#39;s okay.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He also points out that a quick pass with flux and cleaning solvent would significantly improve the appearance if desired.&lt;/p&gt;
&lt;p&gt;Several mechanical decisions were made during assembly to ensure components aligned correctly with openings in the enclosure. The microphone position required particular attention because of the distance between the PCB and the front housing.&lt;/p&gt;
&lt;p&gt;The humidity sensor was removed from its original breakout board and mounted directly onto the custom PCB, helping reduce space requirements inside the enclosure.&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl54"&gt;A Design Flaw Appears&lt;/h2&gt;
&lt;p&gt;One of the most useful parts of the build was seeing how Mark handled an unexpected hardware problem. During test fitting he discovered that the display footprint obtained from a standard library had been defined incorrectly.&lt;/p&gt;
&lt;p&gt;The display connector arrangement was effectively mirrored, meaning the screen could not be mounted in the intended orientation. As he explains:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I actually discovered a huge design flaw.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The problem wasn&amp;#39;t with the display itself but with the PCB footprint definition. To keep the project moving, Mark physically reversed the assembly orientation and rearranged component placement.&lt;/p&gt;
&lt;p&gt;The workaround allowed the prototype to function, but it created new packaging constraints inside the enclosure.&lt;/p&gt;
&lt;p&gt;Rather than simply accepting the issue, Mark documented the problem and committed to correcting the design files.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;If you&amp;#39;re rebuilding this I will make sure the PCB layout has been corrected.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This kind of design review and iteration is a normal part of hardware development, and documenting these mistakes is often more valuable than hiding them.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl55"&gt;Audio Hardware and Signal Processing&lt;/h2&gt;
&lt;p&gt;Audio is one of the more sophisticated aspects of the project.&lt;/p&gt;
&lt;p&gt;The ESP32 interfaces with both an I2S microphone and an I2S audio output stage. Using I2S rather than analogue audio provides a cleaner signal path and simplifies digital processing.&lt;/p&gt;
&lt;p&gt;The firmware configuration reveals the audio architecture:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;INMP441 MEMS microphone input&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I2S digital audio interface&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dedicated speaker output&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Real-time frequency analysis&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Volume control support&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The software defines 32 frequency bands for spectrum analysis and includes a detailed cutoff table that spans frequencies from approximately 45 Hz to 17.5 kHz.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;float FreqBins[32];
int numBands=32;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The project also includes configurable noise thresholds and gain control behaviour.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;int NoiseTresshold = 2000;
#define GAIN_DAMPEN 2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Frequency band boundaries are carefully distributed across the audible spectrum.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;45, 90, 130, 180,
...
16500, 17000, 17500
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This allows the ESP32 to visualise incoming audio as a spectrum display while simultaneously using microphone data as a trigger source for behavioural responses.&lt;/p&gt;
&lt;p&gt;The result is a surprisingly capable audio subsystem for what initially appears to be a novelty desk gadget.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl56"&gt;Environmental Monitoring&lt;/h2&gt;
&lt;p&gt;Environmental sensing is handled using a DHT11 temperature and humidity sensor.&lt;/p&gt;
&lt;p&gt;The firmware configuration shows the sensor connected directly to the ESP32:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;#define DHTPIN 16
#define DHTTYPE DHT11
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The device can display:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Temperature&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Relative humidity&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Humidity index information&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These values can be accessed through the display interface, allowing the minion to double as a desktop environmental monitor.&lt;/p&gt;
&lt;p&gt;Combined with the LDR input, the system gains awareness of both ambient lighting conditions and room climate.&lt;/p&gt;
&lt;h2&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1jqr6mrl57"&gt;The Animated Eye&lt;/h2&gt;
&lt;p&gt;Perhaps the most distinctive feature of the project is the animated eye.&lt;/p&gt;
&lt;p&gt;The display uses graphics assets derived from a large eye-rendering system and is configured to use a 240 &amp;times; 240 pixel display.&lt;/p&gt;
&lt;p&gt;The firmware enables both tracking and autonomous blinking behaviour.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;#define TRACKING
#define AUTOBLINK
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Additional eye behaviour includes dynamic iris adjustment based on ambient light levels.&lt;/p&gt;
&lt;p&gt;The software contains configurable parameters for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Iris size&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Light response curves&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ambient light limits&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Eyelid tracking&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Autonomous blinking&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Together these features create a display that feels surprisingly alive despite being driven by relatively modest hardware.&lt;/p&gt;
&lt;p&gt;Rather than functioning as a simple animation loop, the eye reacts to changing environmental conditions and continuously varies its appearance. Once assembly was complete, the firmware was loaded using a browser-based installation process,&amp;nbsp;the project supports direct USB programming through a web interface. This approach lowers the barrier for anyone wanting to reproduce the build. More advanced users can still modify the source code, rebuild the firmware, and upload their own versions, but newcomers can simply connect the hardware and install the firmware directly.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl59"&gt;Smoke, Sound and Personality&lt;/h2&gt;
&lt;p&gt;The most entertaining behaviour appears once everything is assembled. The ultrasonic humidifier produces visible fog while the eye tracks movement and the microphone listens to the environment. At its current stage, excessive noise acts as a trigger condition. As Mark describes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;If your colleagues are too loud in your office then this device will basically say &amp;#39;Psh&amp;#39;.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The combination of sound effects and fog generation gives the minion a surprisingly expressive personality.&lt;/p&gt;
&lt;p&gt;Of course, the development process wasn&amp;#39;t entirely smoke-free. During testing, an accidental short circuit generated some very real smoke from the electronics.&lt;/p&gt;
&lt;p&gt;Mark jokes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I might have jinxed it a bit by trying to add artificial smoke.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Fortunately the issue was corrected and the project survived to reach its final form. Beyond environmental monitoring and animated eye graphics, the display can also switch into a spectrum analyser. This mode makes direct use of the I2S microphone and frequency processing code to create a visual representation of incoming audio.&lt;/p&gt;
&lt;p&gt;When demonstrating the feature, Mark jokingly asks:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Will it run Doom?&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;His answer:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It doesn&amp;#39;t run Doom though... but it runs the spectrum analyzer.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While perhaps not as famous as running Doom, a real-time audio analyser is arguably more useful for a device designed to monitor activity in an office environment.&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl5b"&gt;Future Development&lt;/h2&gt;
&lt;p&gt;Although fully functional, the project clearly has room to grow.&lt;/p&gt;
&lt;p&gt;Several future directions were identified during development:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Wi-Fi connected features&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Internet radio functionality&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Additional audio behaviours&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Expanded environmental responses&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;New display modes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Further personality-driven interactions&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ESP32 platform provides ample opportunity for these additions without requiring major hardware redesign.&lt;/p&gt;
&lt;p&gt;Because the hardware already includes networking capability, microphone input, audio output, sensing hardware, and a display, much of the infrastructure required for future features is already in place. What began as a playful desktop companion evolved into a surprisingly capable embedded systems project. By combining environmental sensing, digital audio, display graphics, fog generation, and custom hardware design, Mark created something that feels much more interactive than a typical desk ornament. Equally valuable is the transparency shown throughout the build. Design mistakes, assembly challenges, packaging constraints, and debugging setbacks are all part of the story. Those lessons provide useful guidance for anyone planning to recreate or extend the project.&lt;/p&gt;
&lt;p&gt;The animated eye gives the minion character, the audio processing provides responsiveness, and the fog generator adds an unexpected physical element that makes the device stand out from conventional ESP32 projects.&lt;/p&gt;
&lt;p&gt;Most importantly, it succeeds at its original goal: creating something fun that sits on a desk, reacts to its surroundings, and occasionally reminds noisy colleagues to keep the volume down.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: ESP32 audio project, MEMS microphone project, ESP32 display project, DIY electronics project, esp32 project, spectrum analyser esp32, ESP32 maker project, electronic desk toy, animated eye display, desk pet, humidity sensor project, ultrasonic humidifier project, Custom PCB design, friday_release, desktop companion, smart desk gadget&lt;/div&gt;
</description></item><item><title>Creating a Multi-Function ESP32 Desk Pet with Custom PCB and Audio Processing</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72069/creating-a-multi-function-esp32-desk-pet-with-custom-pcb-and-audio-processing/revision/3</link><pubDate>Thu, 11 Jun 2026 11:23:04 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:2868f4c0-73f3-4540-a1bf-de624fa66454</guid><dc:creator>cstanton</dc:creator><description>Revision 3 posted to Documents by cstanton on 6/11/2026 11:23:04 AM&lt;br /&gt;
&lt;p&gt;Mark builds a desktop minion powered by an ESP32 that combines an animated eye display, temperature and humidity monitoring, audio playback, microphone input, a real-time spectrum analyser, and even a fog-generating humidifier. Along the way he designs a custom PCB, works through a hardware design issue, assembles the electronics, and brings the project to life with plenty of personality. Follow the build to see how the hardware, firmware, and enclosure come together to create a desk companion that watches, listens, reacts&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6nn2jd"&gt;Who Watches the Makers? Watch Now:&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://youtu.be/8J4jxaSzVtg"&gt;https://youtu.be/8J4jxaSzVtg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Mark set out to create something that sits somewhere between a desk companion, environmental monitor, and electronic novelty. The result is what he calls a &amp;quot;Desk Pet Minion&amp;quot; &amp;mdash; a desktop gadget built around an ESP32 that watches the room through an animated eye, measures environmental conditions, listens for noise, produces sound effects, and even emits fog to express its displeasure.&lt;/p&gt;
&lt;p&gt;What started as a fun desk ornament quickly became a surprisingly feature-rich embedded project. Along the way, Mark designed custom hardware, assembled a dedicated PCB, integrated multiple sensors and peripherals, and worked through a significant hardware design issue that required an unexpected mid-build correction.&lt;/p&gt;
&lt;p&gt;The finished device combines environmental sensing, audio processing, display graphics, and fog generation into a single desktop companion with plenty of room for future expansion.&lt;/p&gt;
&lt;h2 id="mcetoc_1jqr6mrl50"&gt;The Concept&lt;/h2&gt;
&lt;p&gt;At its core, the project is designed to bring a little personality to the workspace.&lt;/p&gt;
&lt;p&gt;The animated eye continuously moves and watches its surroundings, giving the impression that the device is paying attention to activity around the desk. Combined with environmental sensing and sound detection, the minion becomes more than a static display piece.&lt;/p&gt;
&lt;p&gt;As Mark explains:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It displays that well, mimic eye movement so it can stare at you while you&amp;#39;re sitting at your desk.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The eye is only part of the personality. A built-in humidifier creates visible fog effects, allowing the minion to react to events and express different moods. Loud noises in the office can trigger both sound and smoke effects, turning the device into a humorous commentary on workplace volume levels.&lt;/p&gt;
&lt;p&gt;The project also includes temperature and humidity monitoring, audio playback capabilities, microphone input, and a display mode that functions as a real-time spectrum analyser.&lt;/p&gt;
&lt;p&gt;Future expansion was also part of the design from the beginning.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;In the future I might even update it to function as a radio because I&amp;#39;m using an ESP32 and it has onboard Wi-Fi.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That choice of microcontroller leaves plenty of processing power and connectivity available for additional features.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="mcetoc_1jqr6mrl51"&gt;System Architecture&lt;/h2&gt;
&lt;p&gt;The ESP32 serves as the centre of the entire design, coordinating every subsystem.&lt;/p&gt;
&lt;p&gt;Mark&amp;#39;s schematic brings together several different hardware functions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ESP32 microcontroller&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;TFT display for eye animation and status screens&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DHT11 temperature and humidity sensor&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Light-dependent resistor (LDR)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I2S MEMS microphone&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I2S audio output board&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Speaker&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Humidifier module&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Push-button user interface&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Volume adjustment potentiometer&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Power regulation circuitry&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One particularly useful feature is the inclusion of ambient light detection. The LDR allows the device to respond to environmental changes.&lt;/p&gt;
&lt;p&gt;As Mark describes it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I can use that to detect whenever somebody enters the office in the morning and turns on the light.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The push button provides a simple interface for switching between display modes, allowing the animated eye to give way to environmental information when required.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="mcetoc_1jqr6mrl52"&gt;Custom PCB Design&lt;/h2&gt;
&lt;p&gt;Rather than wiring everything together on perfboard, Mark designed a dedicated PCB specifically for the enclosure.&lt;/p&gt;
&lt;p&gt;The custom board serves several purposes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Reduces wiring complexity&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Improves assembly&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ensures all components fit inside the minion housing&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Provides dedicated connections for audio, sensing, and display hardware&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Creates a cleaner final installation&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The PCB accommodates the ESP32 module, display, microphone, humidity sensor, audio circuitry, power distribution, and humidifier control circuitry.&lt;/p&gt;
&lt;p&gt;A dedicated switching circuit drives the humidifier assembly, allowing the ESP32 to enable or disable fog generation under software control.&lt;/p&gt;
&lt;p&gt;The humidifier itself consists of a commercially available ultrasonic fog generator module paired with a small water reservoir. A test tube serves as the water container and fits neatly into the enclosure.&lt;/p&gt;
&lt;p&gt;The arrangement provides a simple and effective way of generating visible fog without requiring any custom ultrasonic hardware design.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="mcetoc_1jqr6mrl53"&gt;Hardware Assembly&lt;/h2&gt;
&lt;p&gt;Assembly began with the surface-mount components.&lt;/p&gt;
&lt;p&gt;Working without solder paste or a reflow setup, Mark manually tinned pads before placing and soldering components individually.&lt;/p&gt;
&lt;p&gt;After completing the surface-mount work, he inspected the board and moved on to the through-hole components.&lt;/p&gt;
&lt;p&gt;Like many prototype builds, the finished PCB wasn&amp;#39;t cosmetically perfect, but functionally sound.&lt;/p&gt;
&lt;p&gt;Mark notes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;In general when you look closer to this, the soldering looks kind of messy but for prototype it&amp;#39;s okay.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He also points out that a quick pass with flux and cleaning solvent would significantly improve the appearance if desired.&lt;/p&gt;
&lt;p&gt;Several mechanical decisions were made during assembly to ensure components aligned correctly with openings in the enclosure. The microphone position required particular attention because of the distance between the PCB and the front housing.&lt;/p&gt;
&lt;p&gt;The humidity sensor was removed from its original breakout board and mounted directly onto the custom PCB, helping reduce space requirements inside the enclosure.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="mcetoc_1jqr6mrl54"&gt;A Design Flaw Appears&lt;/h2&gt;
&lt;p&gt;One of the most useful parts of the build was seeing how Mark handled an unexpected hardware problem.&lt;/p&gt;
&lt;p&gt;During test fitting he discovered that the display footprint obtained from a standard library had been defined incorrectly.&lt;/p&gt;
&lt;p&gt;The display connector arrangement was effectively mirrored, meaning the screen could not be mounted in the intended orientation.&lt;/p&gt;
&lt;p&gt;As he explains:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I actually discovered a huge design flaw.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The problem wasn&amp;#39;t with the display itself but with the PCB footprint definition. To keep the project moving, Mark physically reversed the assembly orientation and rearranged component placement.&lt;/p&gt;
&lt;p&gt;The workaround allowed the prototype to function, but it created new packaging constraints inside the enclosure.&lt;/p&gt;
&lt;p&gt;Rather than simply accepting the issue, Mark documented the problem and committed to correcting the design files.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;If you&amp;#39;re rebuilding this I will make sure the PCB layout has been corrected.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This kind of design review and iteration is a normal part of hardware development, and documenting these mistakes is often more valuable than hiding them.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="mcetoc_1jqr6mrl55"&gt;Audio Hardware and Signal Processing&lt;/h2&gt;
&lt;p&gt;Audio is one of the more sophisticated aspects of the project.&lt;/p&gt;
&lt;p&gt;The ESP32 interfaces with both an I2S microphone and an I2S audio output stage. Using I2S rather than analogue audio provides a cleaner signal path and simplifies digital processing.&lt;/p&gt;
&lt;p&gt;The firmware configuration reveals the audio architecture:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;INMP441 MEMS microphone input&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I2S digital audio interface&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dedicated speaker output&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Real-time frequency analysis&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Volume control support&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The software defines 32 frequency bands for spectrum analysis and includes a detailed cutoff table that spans frequencies from approximately 45 Hz to 17.5 kHz.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;float FreqBins[32];
int numBands=32;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The project also includes configurable noise thresholds and gain control behaviour.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;int NoiseTresshold = 2000;
#define GAIN_DAMPEN 2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Frequency band boundaries are carefully distributed across the audible spectrum.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;45, 90, 130, 180,
...
16500, 17000, 17500
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This allows the ESP32 to visualise incoming audio as a spectrum display while simultaneously using microphone data as a trigger source for behavioural responses.&lt;/p&gt;
&lt;p&gt;The result is a surprisingly capable audio subsystem for what initially appears to be a novelty desk gadget.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="mcetoc_1jqr6mrl56"&gt;Environmental Monitoring&lt;/h2&gt;
&lt;p&gt;Environmental sensing is handled using a DHT11 temperature and humidity sensor.&lt;/p&gt;
&lt;p&gt;The firmware configuration shows the sensor connected directly to the ESP32:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;#define DHTPIN 16
#define DHTTYPE DHT11
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The device can display:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Temperature&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Relative humidity&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Humidity index information&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These values can be accessed through the display interface, allowing the minion to double as a desktop environmental monitor.&lt;/p&gt;
&lt;p&gt;Combined with the LDR input, the system gains awareness of both ambient lighting conditions and room climate.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="mcetoc_1jqr6mrl57"&gt;The Animated Eye&lt;/h2&gt;
&lt;p&gt;Perhaps the most distinctive feature of the project is the animated eye.&lt;/p&gt;
&lt;p&gt;The display uses graphics assets derived from a large eye-rendering system and is configured to use a 240 &amp;times; 240 pixel display.&lt;/p&gt;
&lt;p&gt;The firmware enables both tracking and autonomous blinking behaviour.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;#define TRACKING
#define AUTOBLINK
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Additional eye behaviour includes dynamic iris adjustment based on ambient light levels.&lt;/p&gt;
&lt;p&gt;The software contains configurable parameters for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Iris size&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Light response curves&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ambient light limits&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Eyelid tracking&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Autonomous blinking&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Together these features create a display that feels surprisingly alive despite being driven by relatively modest hardware.&lt;/p&gt;
&lt;p&gt;Rather than functioning as a simple animation loop, the eye reacts to changing environmental conditions and continuously varies its appearance.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="mcetoc_1jqr6mrl58"&gt;Programming the Device&lt;/h2&gt;
&lt;p&gt;Once assembly was complete, the firmware was loaded using a browser-based installation process.&lt;/p&gt;
&lt;p&gt;Rather than requiring users to install a full development environment, the project supports direct USB programming through a web interface.&lt;/p&gt;
&lt;p&gt;This approach lowers the barrier for anyone wanting to reproduce the build.&lt;/p&gt;
&lt;p&gt;More advanced users can still modify the source code, rebuild the firmware, and upload their own versions, but newcomers can simply connect the hardware and install the firmware directly.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="mcetoc_1jqr6mrl59"&gt;Smoke, Sound and Personality&lt;/h2&gt;
&lt;p&gt;The most entertaining behaviour appears once everything is assembled.&lt;/p&gt;
&lt;p&gt;The ultrasonic humidifier produces visible fog while the eye tracks movement and the microphone listens to the environment.&lt;/p&gt;
&lt;p&gt;At its current stage, excessive noise acts as a trigger condition.&lt;/p&gt;
&lt;p&gt;As Mark describes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;If your colleagues are too loud in your office then this device will basically say &amp;#39;Psh&amp;#39;.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The combination of sound effects and fog generation gives the minion a surprisingly expressive personality.&lt;/p&gt;
&lt;p&gt;Of course, the development process wasn&amp;#39;t entirely smoke-free.&lt;/p&gt;
&lt;p&gt;During testing, an accidental short circuit generated some very real smoke from the electronics.&lt;/p&gt;
&lt;p&gt;Mark jokes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I might have jinxed it a bit by trying to add artificial smoke.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Fortunately the issue was corrected and the project survived to reach its final form.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="mcetoc_1jqr6mrl5a"&gt;Spectrum Analyser Mode&lt;/h2&gt;
&lt;p&gt;Beyond environmental monitoring and animated eye graphics, the display can also switch into a spectrum analyser.&lt;/p&gt;
&lt;p&gt;This mode makes direct use of the I2S microphone and frequency processing code to create a visual representation of incoming audio.&lt;/p&gt;
&lt;p&gt;When demonstrating the feature, Mark jokingly asks:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Will it run Doom?&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;His answer:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It doesn&amp;#39;t run Doom though... but it runs the spectrum analyzer.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While perhaps not as famous as running Doom, a real-time audio analyser is arguably more useful for a device designed to monitor activity in an office environment.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="mcetoc_1jqr6mrl5b"&gt;Future Development&lt;/h2&gt;
&lt;p&gt;Although fully functional, the project clearly has room to grow.&lt;/p&gt;
&lt;p&gt;Several future directions were identified during development:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Wi-Fi connected features&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Internet radio functionality&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Additional audio behaviours&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Expanded environmental responses&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;New display modes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Further personality-driven interactions&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ESP32 platform provides ample opportunity for these additions without requiring major hardware redesign.&lt;/p&gt;
&lt;p&gt;Because the hardware already includes networking capability, microphone input, audio output, sensing hardware, and a display, much of the infrastructure required for future features is already in place.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="mcetoc_1jqr6mrl5c"&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;What began as a playful desktop companion evolved into a surprisingly capable embedded systems project.&lt;/p&gt;
&lt;p&gt;By combining environmental sensing, digital audio, display graphics, fog generation, and custom hardware design, Mark created something that feels much more interactive than a typical desk ornament.&lt;/p&gt;
&lt;p&gt;Equally valuable is the transparency shown throughout the build. Design mistakes, assembly challenges, packaging constraints, and debugging setbacks are all part of the story. Those lessons provide useful guidance for anyone planning to recreate or extend the project.&lt;/p&gt;
&lt;p&gt;The animated eye gives the minion character, the audio processing provides responsiveness, and the fog generator adds an unexpected physical element that makes the device stand out from conventional ESP32 projects.&lt;/p&gt;
&lt;p&gt;Most importantly, it succeeds at its original goal: creating something fun that sits on a desk, reacts to its surroundings, and occasionally reminds noisy colleagues to keep the volume down.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Creating a Multi-Function ESP32 Desk Pet with Custom PCB and Audio Processing</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72069/creating-a-multi-function-esp32-desk-pet-with-custom-pcb-and-audio-processing/revision/2</link><pubDate>Thu, 11 Jun 2026 09:13:38 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:2868f4c0-73f3-4540-a1bf-de624fa66454</guid><dc:creator>cstanton</dc:creator><description>Revision 2 posted to Documents by cstanton on 6/11/2026 9:13:38 AM&lt;br /&gt;
&lt;p&gt;Mark set out to create something that sits somewhere between a desk companion, environmental monitor, and electronic novelty. The result is what he calls a &amp;quot;Desk Pet Minion&amp;quot; &amp;mdash; a desktop gadget built around an ESP32 that watches the room through an animated eye, measures environmental conditions, listens for noise, produces sound effects, and even emits fog to express its displeasure.&lt;/p&gt;
&lt;p&gt;What started as a fun desk ornament quickly became a surprisingly feature-rich embedded project. Along the way, Mark designed custom hardware, assembled a dedicated PCB, integrated multiple sensors and peripherals, and worked through a significant hardware design issue that required an unexpected mid-build correction.&lt;/p&gt;
&lt;p&gt;The finished device combines environmental sensing, audio processing, display graphics, and fog generation into a single desktop companion with plenty of room for future expansion.&lt;/p&gt;
&lt;h2&gt;The Concept&lt;/h2&gt;
&lt;p&gt;At its core, the project is designed to bring a little personality to the workspace.&lt;/p&gt;
&lt;p&gt;The animated eye continuously moves and watches its surroundings, giving the impression that the device is paying attention to activity around the desk. Combined with environmental sensing and sound detection, the minion becomes more than a static display piece.&lt;/p&gt;
&lt;p&gt;As Mark explains:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It displays that well, mimic eye movement so it can stare at you while you&amp;#39;re sitting at your desk.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The eye is only part of the personality. A built-in humidifier creates visible fog effects, allowing the minion to react to events and express different moods. Loud noises in the office can trigger both sound and smoke effects, turning the device into a humorous commentary on workplace volume levels.&lt;/p&gt;
&lt;p&gt;The project also includes temperature and humidity monitoring, audio playback capabilities, microphone input, and a display mode that functions as a real-time spectrum analyser.&lt;/p&gt;
&lt;p&gt;Future expansion was also part of the design from the beginning.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;In the future I might even update it to function as a radio because I&amp;#39;m using an ESP32 and it has onboard Wi-Fi.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That choice of microcontroller leaves plenty of processing power and connectivity available for additional features.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;System Architecture&lt;/h2&gt;
&lt;p&gt;The ESP32 serves as the centre of the entire design, coordinating every subsystem.&lt;/p&gt;
&lt;p&gt;Mark&amp;#39;s schematic brings together several different hardware functions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ESP32 microcontroller&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;TFT display for eye animation and status screens&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DHT11 temperature and humidity sensor&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Light-dependent resistor (LDR)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I2S MEMS microphone&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I2S audio output board&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Speaker&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Humidifier module&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Push-button user interface&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Volume adjustment potentiometer&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Power regulation circuitry&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One particularly useful feature is the inclusion of ambient light detection. The LDR allows the device to respond to environmental changes.&lt;/p&gt;
&lt;p&gt;As Mark describes it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I can use that to detect whenever somebody enters the office in the morning and turns on the light.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The push button provides a simple interface for switching between display modes, allowing the animated eye to give way to environmental information when required.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Custom PCB Design&lt;/h2&gt;
&lt;p&gt;Rather than wiring everything together on perfboard, Mark designed a dedicated PCB specifically for the enclosure.&lt;/p&gt;
&lt;p&gt;The custom board serves several purposes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Reduces wiring complexity&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Improves assembly&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ensures all components fit inside the minion housing&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Provides dedicated connections for audio, sensing, and display hardware&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Creates a cleaner final installation&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The PCB accommodates the ESP32 module, display, microphone, humidity sensor, audio circuitry, power distribution, and humidifier control circuitry.&lt;/p&gt;
&lt;p&gt;A dedicated switching circuit drives the humidifier assembly, allowing the ESP32 to enable or disable fog generation under software control.&lt;/p&gt;
&lt;p&gt;The humidifier itself consists of a commercially available ultrasonic fog generator module paired with a small water reservoir. A test tube serves as the water container and fits neatly into the enclosure.&lt;/p&gt;
&lt;p&gt;The arrangement provides a simple and effective way of generating visible fog without requiring any custom ultrasonic hardware design.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Hardware Assembly&lt;/h2&gt;
&lt;p&gt;Assembly began with the surface-mount components.&lt;/p&gt;
&lt;p&gt;Working without solder paste or a reflow setup, Mark manually tinned pads before placing and soldering components individually.&lt;/p&gt;
&lt;p&gt;After completing the surface-mount work, he inspected the board and moved on to the through-hole components.&lt;/p&gt;
&lt;p&gt;Like many prototype builds, the finished PCB wasn&amp;#39;t cosmetically perfect, but functionally sound.&lt;/p&gt;
&lt;p&gt;Mark notes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;In general when you look closer to this, the soldering looks kind of messy but for prototype it&amp;#39;s okay.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He also points out that a quick pass with flux and cleaning solvent would significantly improve the appearance if desired.&lt;/p&gt;
&lt;p&gt;Several mechanical decisions were made during assembly to ensure components aligned correctly with openings in the enclosure. The microphone position required particular attention because of the distance between the PCB and the front housing.&lt;/p&gt;
&lt;p&gt;The humidity sensor was removed from its original breakout board and mounted directly onto the custom PCB, helping reduce space requirements inside the enclosure.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;A Design Flaw Appears&lt;/h2&gt;
&lt;p&gt;One of the most useful parts of the build was seeing how Mark handled an unexpected hardware problem.&lt;/p&gt;
&lt;p&gt;During test fitting he discovered that the display footprint obtained from a standard library had been defined incorrectly.&lt;/p&gt;
&lt;p&gt;The display connector arrangement was effectively mirrored, meaning the screen could not be mounted in the intended orientation.&lt;/p&gt;
&lt;p&gt;As he explains:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I actually discovered a huge design flaw.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The problem wasn&amp;#39;t with the display itself but with the PCB footprint definition. To keep the project moving, Mark physically reversed the assembly orientation and rearranged component placement.&lt;/p&gt;
&lt;p&gt;The workaround allowed the prototype to function, but it created new packaging constraints inside the enclosure.&lt;/p&gt;
&lt;p&gt;Rather than simply accepting the issue, Mark documented the problem and committed to correcting the design files.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;If you&amp;#39;re rebuilding this I will make sure the PCB layout has been corrected.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This kind of design review and iteration is a normal part of hardware development, and documenting these mistakes is often more valuable than hiding them.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Audio Hardware and Signal Processing&lt;/h2&gt;
&lt;p&gt;Audio is one of the more sophisticated aspects of the project.&lt;/p&gt;
&lt;p&gt;The ESP32 interfaces with both an I2S microphone and an I2S audio output stage. Using I2S rather than analogue audio provides a cleaner signal path and simplifies digital processing.&lt;/p&gt;
&lt;p&gt;The firmware configuration reveals the audio architecture:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;INMP441 MEMS microphone input&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I2S digital audio interface&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dedicated speaker output&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Real-time frequency analysis&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Volume control support&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The software defines 32 frequency bands for spectrum analysis and includes a detailed cutoff table that spans frequencies from approximately 45 Hz to 17.5 kHz.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;float FreqBins[32];
int numBands=32;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The project also includes configurable noise thresholds and gain control behaviour.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;int NoiseTresshold = 2000;
#define GAIN_DAMPEN 2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Frequency band boundaries are carefully distributed across the audible spectrum.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;45, 90, 130, 180,
...
16500, 17000, 17500
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This allows the ESP32 to visualise incoming audio as a spectrum display while simultaneously using microphone data as a trigger source for behavioural responses.&lt;/p&gt;
&lt;p&gt;The result is a surprisingly capable audio subsystem for what initially appears to be a novelty desk gadget.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Environmental Monitoring&lt;/h2&gt;
&lt;p&gt;Environmental sensing is handled using a DHT11 temperature and humidity sensor.&lt;/p&gt;
&lt;p&gt;The firmware configuration shows the sensor connected directly to the ESP32:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;#define DHTPIN 16
#define DHTTYPE DHT11
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The device can display:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Temperature&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Relative humidity&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Humidity index information&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These values can be accessed through the display interface, allowing the minion to double as a desktop environmental monitor.&lt;/p&gt;
&lt;p&gt;Combined with the LDR input, the system gains awareness of both ambient lighting conditions and room climate.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The Animated Eye&lt;/h2&gt;
&lt;p&gt;Perhaps the most distinctive feature of the project is the animated eye.&lt;/p&gt;
&lt;p&gt;The display uses graphics assets derived from a large eye-rendering system and is configured to use a 240 &amp;times; 240 pixel display.&lt;/p&gt;
&lt;p&gt;The firmware enables both tracking and autonomous blinking behaviour.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;#define TRACKING
#define AUTOBLINK
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Additional eye behaviour includes dynamic iris adjustment based on ambient light levels.&lt;/p&gt;
&lt;p&gt;The software contains configurable parameters for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Iris size&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Light response curves&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ambient light limits&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Eyelid tracking&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Autonomous blinking&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Together these features create a display that feels surprisingly alive despite being driven by relatively modest hardware.&lt;/p&gt;
&lt;p&gt;Rather than functioning as a simple animation loop, the eye reacts to changing environmental conditions and continuously varies its appearance.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Programming the Device&lt;/h2&gt;
&lt;p&gt;Once assembly was complete, the firmware was loaded using a browser-based installation process.&lt;/p&gt;
&lt;p&gt;Rather than requiring users to install a full development environment, the project supports direct USB programming through a web interface.&lt;/p&gt;
&lt;p&gt;This approach lowers the barrier for anyone wanting to reproduce the build.&lt;/p&gt;
&lt;p&gt;More advanced users can still modify the source code, rebuild the firmware, and upload their own versions, but newcomers can simply connect the hardware and install the firmware directly.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Smoke, Sound and Personality&lt;/h2&gt;
&lt;p&gt;The most entertaining behaviour appears once everything is assembled.&lt;/p&gt;
&lt;p&gt;The ultrasonic humidifier produces visible fog while the eye tracks movement and the microphone listens to the environment.&lt;/p&gt;
&lt;p&gt;At its current stage, excessive noise acts as a trigger condition.&lt;/p&gt;
&lt;p&gt;As Mark describes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;If your colleagues are too loud in your office then this device will basically say &amp;#39;Psh&amp;#39;.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The combination of sound effects and fog generation gives the minion a surprisingly expressive personality.&lt;/p&gt;
&lt;p&gt;Of course, the development process wasn&amp;#39;t entirely smoke-free.&lt;/p&gt;
&lt;p&gt;During testing, an accidental short circuit generated some very real smoke from the electronics.&lt;/p&gt;
&lt;p&gt;Mark jokes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I might have jinxed it a bit by trying to add artificial smoke.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Fortunately the issue was corrected and the project survived to reach its final form.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Spectrum Analyser Mode&lt;/h2&gt;
&lt;p&gt;Beyond environmental monitoring and animated eye graphics, the display can also switch into a spectrum analyser.&lt;/p&gt;
&lt;p&gt;This mode makes direct use of the I2S microphone and frequency processing code to create a visual representation of incoming audio.&lt;/p&gt;
&lt;p&gt;When demonstrating the feature, Mark jokingly asks:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Will it run Doom?&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;His answer:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It doesn&amp;#39;t run Doom though... but it runs the spectrum analyzer.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While perhaps not as famous as running Doom, a real-time audio analyser is arguably more useful for a device designed to monitor activity in an office environment.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Future Development&lt;/h2&gt;
&lt;p&gt;Although fully functional, the project clearly has room to grow.&lt;/p&gt;
&lt;p&gt;Several future directions were identified during development:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Wi-Fi connected features&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Internet radio functionality&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Additional audio behaviours&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Expanded environmental responses&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;New display modes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Further personality-driven interactions&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ESP32 platform provides ample opportunity for these additions without requiring major hardware redesign.&lt;/p&gt;
&lt;p&gt;Because the hardware already includes networking capability, microphone input, audio output, sensing hardware, and a display, much of the infrastructure required for future features is already in place.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;What began as a playful desktop companion evolved into a surprisingly capable embedded systems project.&lt;/p&gt;
&lt;p&gt;By combining environmental sensing, digital audio, display graphics, fog generation, and custom hardware design, Mark created something that feels much more interactive than a typical desk ornament.&lt;/p&gt;
&lt;p&gt;Equally valuable is the transparency shown throughout the build. Design mistakes, assembly challenges, packaging constraints, and debugging setbacks are all part of the story. Those lessons provide useful guidance for anyone planning to recreate or extend the project.&lt;/p&gt;
&lt;p&gt;The animated eye gives the minion character, the audio processing provides responsiveness, and the fog generator adds an unexpected physical element that makes the device stand out from conventional ESP32 projects.&lt;/p&gt;
&lt;p&gt;Most importantly, it succeeds at its original goal: creating something fun that sits on a desk, reacts to its surroundings, and occasionally reminds noisy colleagues to keep the volume down.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Creating a Multi-Function ESP32 Desk Pet with Custom PCB and Audio Processing</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72069/creating-a-multi-function-esp32-desk-pet-with-custom-pcb-and-audio-processing/revision/1</link><pubDate>Wed, 10 Jun 2026 12:15:25 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:2868f4c0-73f3-4540-a1bf-de624fa66454</guid><dc:creator>cstanton</dc:creator><description>Revision 1 posted to Documents by cstanton on 6/10/2026 12:15:25 PM&lt;br /&gt;
&lt;h1&gt;Building a Desktop Minion That Watches, Listens and Complains About Noise&lt;/h1&gt;
&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Mark set out to create something that sits somewhere between a desk companion, environmental monitor, and electronic novelty. The result is what he calls a &amp;quot;Desk Pet Minion&amp;quot; &amp;mdash; a desktop gadget built around an ESP32 that watches the room through an animated eye, measures environmental conditions, listens for noise, produces sound effects, and even emits fog to express its displeasure.&lt;/p&gt;
&lt;p&gt;What started as a fun desk ornament quickly became a surprisingly feature-rich embedded project. Along the way, Mark designed custom hardware, assembled a dedicated PCB, integrated multiple sensors and peripherals, and worked through a significant hardware design issue that required an unexpected mid-build correction.&lt;/p&gt;
&lt;p&gt;The finished device combines environmental sensing, audio processing, display graphics, and fog generation into a single desktop companion with plenty of room for future expansion.&lt;/p&gt;
&lt;h2&gt;The Concept&lt;/h2&gt;
&lt;p&gt;At its core, the project is designed to bring a little personality to the workspace.&lt;/p&gt;
&lt;p&gt;The animated eye continuously moves and watches its surroundings, giving the impression that the device is paying attention to activity around the desk. Combined with environmental sensing and sound detection, the minion becomes more than a static display piece.&lt;/p&gt;
&lt;p&gt;As Mark explains:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It displays that well, mimic eye movement so it can stare at you while you&amp;#39;re sitting at your desk.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The eye is only part of the personality. A built-in humidifier creates visible fog effects, allowing the minion to react to events and express different moods. Loud noises in the office can trigger both sound and smoke effects, turning the device into a humorous commentary on workplace volume levels.&lt;/p&gt;
&lt;p&gt;The project also includes temperature and humidity monitoring, audio playback capabilities, microphone input, and a display mode that functions as a real-time spectrum analyser.&lt;/p&gt;
&lt;p&gt;Future expansion was also part of the design from the beginning.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;In the future I might even update it to function as a radio because I&amp;#39;m using an ESP32 and it has onboard Wi-Fi.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That choice of microcontroller leaves plenty of processing power and connectivity available for additional features.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;System Architecture&lt;/h2&gt;
&lt;p&gt;The ESP32 serves as the centre of the entire design, coordinating every subsystem.&lt;/p&gt;
&lt;p&gt;Mark&amp;#39;s schematic brings together several different hardware functions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ESP32 microcontroller&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;TFT display for eye animation and status screens&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DHT11 temperature and humidity sensor&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Light-dependent resistor (LDR)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I2S MEMS microphone&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I2S audio output board&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Speaker&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Humidifier module&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Push-button user interface&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Volume adjustment potentiometer&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Power regulation circuitry&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One particularly useful feature is the inclusion of ambient light detection. The LDR allows the device to respond to environmental changes.&lt;/p&gt;
&lt;p&gt;As Mark describes it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I can use that to detect whenever somebody enters the office in the morning and turns on the light.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The push button provides a simple interface for switching between display modes, allowing the animated eye to give way to environmental information when required.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Custom PCB Design&lt;/h2&gt;
&lt;p&gt;Rather than wiring everything together on perfboard, Mark designed a dedicated PCB specifically for the enclosure.&lt;/p&gt;
&lt;p&gt;The custom board serves several purposes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Reduces wiring complexity&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Improves assembly&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ensures all components fit inside the minion housing&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Provides dedicated connections for audio, sensing, and display hardware&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Creates a cleaner final installation&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The PCB accommodates the ESP32 module, display, microphone, humidity sensor, audio circuitry, power distribution, and humidifier control circuitry.&lt;/p&gt;
&lt;p&gt;A dedicated switching circuit drives the humidifier assembly, allowing the ESP32 to enable or disable fog generation under software control.&lt;/p&gt;
&lt;p&gt;The humidifier itself consists of a commercially available ultrasonic fog generator module paired with a small water reservoir. A test tube serves as the water container and fits neatly into the enclosure.&lt;/p&gt;
&lt;p&gt;The arrangement provides a simple and effective way of generating visible fog without requiring any custom ultrasonic hardware design.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Hardware Assembly&lt;/h2&gt;
&lt;p&gt;Assembly began with the surface-mount components.&lt;/p&gt;
&lt;p&gt;Working without solder paste or a reflow setup, Mark manually tinned pads before placing and soldering components individually.&lt;/p&gt;
&lt;p&gt;After completing the surface-mount work, he inspected the board and moved on to the through-hole components.&lt;/p&gt;
&lt;p&gt;Like many prototype builds, the finished PCB wasn&amp;#39;t cosmetically perfect, but functionally sound.&lt;/p&gt;
&lt;p&gt;Mark notes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;In general when you look closer to this, the soldering looks kind of messy but for prototype it&amp;#39;s okay.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He also points out that a quick pass with flux and cleaning solvent would significantly improve the appearance if desired.&lt;/p&gt;
&lt;p&gt;Several mechanical decisions were made during assembly to ensure components aligned correctly with openings in the enclosure. The microphone position required particular attention because of the distance between the PCB and the front housing.&lt;/p&gt;
&lt;p&gt;The humidity sensor was removed from its original breakout board and mounted directly onto the custom PCB, helping reduce space requirements inside the enclosure.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;A Design Flaw Appears&lt;/h2&gt;
&lt;p&gt;One of the most useful parts of the build was seeing how Mark handled an unexpected hardware problem.&lt;/p&gt;
&lt;p&gt;During test fitting he discovered that the display footprint obtained from a standard library had been defined incorrectly.&lt;/p&gt;
&lt;p&gt;The display connector arrangement was effectively mirrored, meaning the screen could not be mounted in the intended orientation.&lt;/p&gt;
&lt;p&gt;As he explains:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I actually discovered a huge design flaw.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The problem wasn&amp;#39;t with the display itself but with the PCB footprint definition. To keep the project moving, Mark physically reversed the assembly orientation and rearranged component placement.&lt;/p&gt;
&lt;p&gt;The workaround allowed the prototype to function, but it created new packaging constraints inside the enclosure.&lt;/p&gt;
&lt;p&gt;Rather than simply accepting the issue, Mark documented the problem and committed to correcting the design files.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;If you&amp;#39;re rebuilding this I will make sure the PCB layout has been corrected.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This kind of design review and iteration is a normal part of hardware development, and documenting these mistakes is often more valuable than hiding them.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Audio Hardware and Signal Processing&lt;/h2&gt;
&lt;p&gt;Audio is one of the more sophisticated aspects of the project.&lt;/p&gt;
&lt;p&gt;The ESP32 interfaces with both an I2S microphone and an I2S audio output stage. Using I2S rather than analogue audio provides a cleaner signal path and simplifies digital processing.&lt;/p&gt;
&lt;p&gt;The firmware configuration reveals the audio architecture:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;INMP441 MEMS microphone input&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I2S digital audio interface&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dedicated speaker output&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Real-time frequency analysis&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Volume control support&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The software defines 32 frequency bands for spectrum analysis and includes a detailed cutoff table that spans frequencies from approximately 45 Hz to 17.5 kHz.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;float FreqBins[32];
int numBands=32;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The project also includes configurable noise thresholds and gain control behaviour.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;int NoiseTresshold = 2000;
#define GAIN_DAMPEN 2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Frequency band boundaries are carefully distributed across the audible spectrum.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;45, 90, 130, 180,
...
16500, 17000, 17500
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This allows the ESP32 to visualise incoming audio as a spectrum display while simultaneously using microphone data as a trigger source for behavioural responses.&lt;/p&gt;
&lt;p&gt;The result is a surprisingly capable audio subsystem for what initially appears to be a novelty desk gadget.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Environmental Monitoring&lt;/h2&gt;
&lt;p&gt;Environmental sensing is handled using a DHT11 temperature and humidity sensor.&lt;/p&gt;
&lt;p&gt;The firmware configuration shows the sensor connected directly to the ESP32:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;#define DHTPIN 16
#define DHTTYPE DHT11
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The device can display:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Temperature&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Relative humidity&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Humidity index information&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These values can be accessed through the display interface, allowing the minion to double as a desktop environmental monitor.&lt;/p&gt;
&lt;p&gt;Combined with the LDR input, the system gains awareness of both ambient lighting conditions and room climate.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The Animated Eye&lt;/h2&gt;
&lt;p&gt;Perhaps the most distinctive feature of the project is the animated eye.&lt;/p&gt;
&lt;p&gt;The display uses graphics assets derived from a large eye-rendering system and is configured to use a 240 &amp;times; 240 pixel display.&lt;/p&gt;
&lt;p&gt;The firmware enables both tracking and autonomous blinking behaviour.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;#define TRACKING
#define AUTOBLINK
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Additional eye behaviour includes dynamic iris adjustment based on ambient light levels.&lt;/p&gt;
&lt;p&gt;The software contains configurable parameters for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Iris size&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Light response curves&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ambient light limits&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Eyelid tracking&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Autonomous blinking&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Together these features create a display that feels surprisingly alive despite being driven by relatively modest hardware.&lt;/p&gt;
&lt;p&gt;Rather than functioning as a simple animation loop, the eye reacts to changing environmental conditions and continuously varies its appearance.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Programming the Device&lt;/h2&gt;
&lt;p&gt;Once assembly was complete, the firmware was loaded using a browser-based installation process.&lt;/p&gt;
&lt;p&gt;Rather than requiring users to install a full development environment, the project supports direct USB programming through a web interface.&lt;/p&gt;
&lt;p&gt;This approach lowers the barrier for anyone wanting to reproduce the build.&lt;/p&gt;
&lt;p&gt;More advanced users can still modify the source code, rebuild the firmware, and upload their own versions, but newcomers can simply connect the hardware and install the firmware directly.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Smoke, Sound and Personality&lt;/h2&gt;
&lt;p&gt;The most entertaining behaviour appears once everything is assembled.&lt;/p&gt;
&lt;p&gt;The ultrasonic humidifier produces visible fog while the eye tracks movement and the microphone listens to the environment.&lt;/p&gt;
&lt;p&gt;At its current stage, excessive noise acts as a trigger condition.&lt;/p&gt;
&lt;p&gt;As Mark describes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;If your colleagues are too loud in your office then this device will basically say &amp;#39;Psh&amp;#39;.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The combination of sound effects and fog generation gives the minion a surprisingly expressive personality.&lt;/p&gt;
&lt;p&gt;Of course, the development process wasn&amp;#39;t entirely smoke-free.&lt;/p&gt;
&lt;p&gt;During testing, an accidental short circuit generated some very real smoke from the electronics.&lt;/p&gt;
&lt;p&gt;Mark jokes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I might have jinxed it a bit by trying to add artificial smoke.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Fortunately the issue was corrected and the project survived to reach its final form.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Spectrum Analyser Mode&lt;/h2&gt;
&lt;p&gt;Beyond environmental monitoring and animated eye graphics, the display can also switch into a spectrum analyser.&lt;/p&gt;
&lt;p&gt;This mode makes direct use of the I2S microphone and frequency processing code to create a visual representation of incoming audio.&lt;/p&gt;
&lt;p&gt;When demonstrating the feature, Mark jokingly asks:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Will it run Doom?&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;His answer:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It doesn&amp;#39;t run Doom though... but it runs the spectrum analyzer.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While perhaps not as famous as running Doom, a real-time audio analyser is arguably more useful for a device designed to monitor activity in an office environment.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Future Development&lt;/h2&gt;
&lt;p&gt;Although fully functional, the project clearly has room to grow.&lt;/p&gt;
&lt;p&gt;Several future directions were identified during development:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Wi-Fi connected features&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Internet radio functionality&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Additional audio behaviours&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Expanded environmental responses&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;New display modes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Further personality-driven interactions&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ESP32 platform provides ample opportunity for these additions without requiring major hardware redesign.&lt;/p&gt;
&lt;p&gt;Because the hardware already includes networking capability, microphone input, audio output, sensing hardware, and a display, much of the infrastructure required for future features is already in place.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;What began as a playful desktop companion evolved into a surprisingly capable embedded systems project.&lt;/p&gt;
&lt;p&gt;By combining environmental sensing, digital audio, display graphics, fog generation, and custom hardware design, Mark created something that feels much more interactive than a typical desk ornament.&lt;/p&gt;
&lt;p&gt;Equally valuable is the transparency shown throughout the build. Design mistakes, assembly challenges, packaging constraints, and debugging setbacks are all part of the story. Those lessons provide useful guidance for anyone planning to recreate or extend the project.&lt;/p&gt;
&lt;p&gt;The animated eye gives the minion character, the audio processing provides responsiveness, and the fog generator adds an unexpected physical element that makes the device stand out from conventional ESP32 projects.&lt;/p&gt;
&lt;p&gt;Most importantly, it succeeds at its original goal: creating something fun that sits on a desk, reacts to its surroundings, and occasionally reminds noisy colleagues to keep the volume down.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Project Video Release Archive</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/3748/project-video-release-archive/revision/215</link><pubDate>Thu, 04 Jun 2026 14:06:36 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:59ab0abe-b32d-47f9-b00c-4b73b01f3bd8</guid><dc:creator>e14sbhargav</dc:creator><description>Revision 215 posted to Documents by e14sbhargav on 6/4/2026 2:06:36 PM&lt;br /&gt;
&lt;div style="background:#ffffff;border-bottom:1px solid #dadada;margin:0;padding:14px 16px 16px 18px;vertical-align:top;"&gt;
&lt;div style="display:inline-block;float:left;padding:0px 25px 8px 0px;"&gt;&lt;a href="/challengesprojects/element14-presents/" data-icid="e14" data-e14adj="t"&gt;&lt;img alt="image"  src="/e14/assets/legacy/2018/e14PresentsJune818.png" width="180px" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="display:inline-block;vertical-align:top;width:70%;"&gt;&lt;span style="font-size:18px;font-weight:bold;"&gt;Project Video Releases&lt;/span&gt;
&lt;p style="margin:0;"&gt;&lt;span&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" style="color:#f17c0e;" href="/challengesprojects/element14-presents/" data-icid="e14" data-e14adj="t"&gt;element14 presents&lt;/a&gt;&lt;/span&gt;&amp;nbsp; &lt;strong&gt;|&lt;/strong&gt;&amp;nbsp; &lt;span style="padding-right:5px;"&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" style="color:#f17c0e;" href="/challengesprojects/element14-presents/vcp-program/" data-icid="e14" data-e14adj="t"&gt;Meet the Hosts&lt;/a&gt;&lt;/span&gt;&lt;span style="padding-right:5px;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72068/simulating-prey-vision-with-raspberry-pi-5-a-dual-camera-perception-experiment" data-e14adj="t"&gt;Episode 717: Simulating Prey Vision with Raspberry Pi 5: A Dual Camera Perception Experiment&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72067/designing-a-mobile-robot-platform-with-inverse-kinematics-and-wireless-control" data-e14adj="t"&gt;Episode 716: Designing a Mobile Robot Platform with Inverse Kinematics and Wireless Control&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72063/how-to-build-a-reaction-based-catch-game-using-arduino-and-relays" data-e14adj="t"&gt;Episode 715: How to Build a Reaction-Based Catch Game Using Arduino and Relays&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72062/find-emi-fast-with-a-low-cost-automated-way-to-see-where-your-pcb-radiates" data-e14adj="t"&gt;Episode 714: Find EMI Fast with a Low‑Cost, Automated Way to See Where Your PCB Radiates&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 713:" href="/challenges-projects/element14-presents/project-videos/w/documents/72061/how-to-make-an-led-sculpture-react-to-sound-with-micro-bit" data-e14adj="t"&gt;Episode 713:&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72061/how-to-make-an-led-sculpture-react-to-sound-with-micro-bit"&gt;How to Make an LED Sculpture React to Sound with micro:bit&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 712: Designing a More Capable Dual Motor Driver Beyond the L298N (What worked and what didn't)" href="/challenges-projects/element14-presents/project-videos/w/documents/72060/designing-a-more-capable-dual-motor-driver-beyond-the-l298n-what-worked-and-what-didn-t" data-e14adj="t"&gt;Episode 712: Designing a More Capable Dual Motor Driver Beyond the L298N (What worked and what didn&amp;#39;t)&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 711: Modern Edge AI on Raspberry Pi 5 for an Animatronic Tracker: Vision Acceleration with AI Hat+ and AI Camera" href="/challenges-projects/element14-presents/project-videos/w/documents/72059/modern-edge-ai-on-raspberry-pi-5-for-an-animatronic-tracker-vision-acceleration-with-ai-hat-and-ai-camera" data-e14adj="t"&gt;Episode 711: Modern Edge AI on Raspberry Pi 5 for an Animatronic Tracker: Vision Acceleration with AI Hat+ and AI Camera&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 710: Your First Real PCB in KiCad : An Arduino Compatible Board Designed from Scratch" href="/challenges-projects/element14-presents/project-videos/w/documents/72057/your-first-real-pcb-in-kicad-an-arduino-compatible-board-designed-from-scratch" data-e14adj="t"&gt;Episode 710: Your First Real PCB in KiCad : An Arduino Compatible Board Designed from Scratch&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 709: Was that my Number!? Fixing Caf&amp;eacute; Order Chaos with a Raspberry Pi Announcer" href="/challenges-projects/element14-presents/project-videos/w/documents/72055/was-that-my-number-fixing-cafe-order-chaos-with-a-raspberry-pi-announcer" data-e14adj="t"&gt;Episode 709: Was that my Number!? Fixing Caf&amp;eacute; Order Chaos with a Raspberry Pi Announcer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 708: Reviving a Vintage LED Sign with Arduino and PS/2 Control" href="/challenges-projects/element14-presents/project-videos/w/documents/72042/reviving-a-vintage-led-sign-with-arduino-and-ps-2-control----episode-708" data-e14adj="t"&gt;Episode 708: Reviving a Vintage LED Sign with Arduino and PS/2 Control&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 707: Building a Circuit Sculpture with LED Filament" href="/challenges-projects/element14-presents/project-videos/w/documents/72038/building-a-circuit-sculpture-with-led-filament----episode-707" data-e14adj="t"&gt;Episode 707: Building a Circuit Sculpture with LED Filament&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72037/esp32-rfid-smart-access-control-in-a-simple-diy-build----episode-706"&gt;Episode 706: ESP32 + RFID = Smart Access Control in a Simple DIY Build&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 705: Building a Super Smooth Z-Scale Train Controller with Arduino" href="/challenges-projects/element14-presents/project-videos/w/documents/72036/building-a-super-smooth-z-scale-train-controller-with-arduino----episode-705" data-e14adj="t"&gt;Episode 705: Building a Super Smooth Z-Scale Train Controller with Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 704: Hacking an IKEA Desk into a Programmable Electric Workstation" href="/challenges-projects/element14-presents/project-videos/w/documents/72035/hacking-an-ikea-desk-into-a-programmable-electric-workstation----episode-704" data-e14adj="t"&gt;Episode 704: Hacking an IKEA Desk into a Programmable Electric Workstation&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 703: How to Set Up the Raspberry Pi 5: Complete Beginner Step-by-Step Guide" href="/challenges-projects/element14-presents/project-videos/w/documents/72034/how-to-set-up-the-raspberry-pi-5-complete-beginner-step-by-step-guide----episode-703" data-e14adj="t"&gt;Episode 703: How to Set Up the Raspberry Pi 5: Complete Beginner Step-by-Step Guide&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 702: Build Your Own USB Looper for Serial Debugging and File Transfer" href="/challenges-projects/element14-presents/project-videos/w/documents/72033/build-your-own-usb-looper-for-serial-debugging-and-file-transfer----episode-702" data-e14adj="t"&gt;Episode 702: Build Your Own USB Looper for Serial Debugging and File Transfer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 700: How Voice Recognition Works on Raspberry Pi (and Why It&amp;rsquo;s Easy to Break)" href="/challenges-projects/element14-presents/project-videos/w/documents/72031/from-snooze-to-launch-the-arduino-powered-lego-alarm-clock-inspired-by-artemis-2----episode-701" data-e14adj="t"&gt;Episode 701: From Snooze to Launch: The Arduino-Powered LEGO Alarm Clock Inspired by Artemis 2&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 700: How Voice Recognition Works on Raspberry Pi (and Why It&amp;rsquo;s Easy to Break)" href="/challenges-projects/element14-presents/project-videos/w/documents/72030/how-voice-recognition-works-on-raspberry-pi-and-why-it-s-easy-to-break----episode-700" data-e14adj="t"&gt;Episode 700: How Voice Recognition Works on Raspberry Pi (and Why It&amp;rsquo;s Easy to Break)&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 697:&amp;nbsp;A Smart, Safe 3D Printer Cabinet Using Raspberry Pi and Node-RED" href="/challenges-projects/element14-presents/project-videos/w/documents/72021/gimmegpio-a-simple-way-to-get-gpio-on-laptops-and-desktops----episode-699" data-e14adj="t"&gt;Episode 699:&amp;nbsp;GimmeGPIO: A Simple Way to Get GPIO on Laptops and Desktops&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 697:&amp;nbsp;A Smart, Safe 3D Printer Cabinet Using Raspberry Pi and Node-RED" href="/challenges-projects/element14-presents/project-videos/w/documents/72020/building-a-practical-electronics-workbench-for-makers-and-engineers----episode-698" data-e14adj="t"&gt;Episode 698:&amp;nbsp;Building a Practical Electronics Workbench for Makers and Engineers&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 697:&amp;nbsp;A Smart, Safe 3D Printer Cabinet Using Raspberry Pi and Node-RED" href="/challenges-projects/element14-presents/project-videos/w/documents/72009/a-smart-safe-3d-printer-cabinet-using-raspberry-pi-and-node-red----episode-697" data-e14adj="t"&gt;Episode 697:&amp;nbsp;A Smart, Safe 3D Printer Cabinet Using Raspberry Pi and Node-RED&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/72008/how-a-pulse-metal-detector-works-and-how-to-build-one" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 696: How a Pulse Metal Detector Works, and How to Build One&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/72007/a-diy-test-and-programming-rig-built-for-small-batch-electronics-production----episode-695" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 695: A DIY Test and Programming Rig Built for Small-Batch Electronics Production&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/secret-element14-presents/w/documents/72001/earn-your-fitness-reward-with-a-smart-cookie-jar-using-strava-and-esp32----episode-694" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 694: Earn Your Fitness Reward with a Smart Cookie Jar Using Strava and ESP32&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71999/open-source-multicolour-3d-printing-upgrade-clem-s-3d-chameleon-remix----episode-693" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 693: Open-Source Multicolour 3D Printing Upgrade: Clem&amp;rsquo;s 3D Chameleon Remix&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71995/build-your-own-esp32-fitness-heart-rate-monitor-tracker----episode-692" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 692: Build Your own ESP32 Fitness Heart Rate Monitor / Tracker&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71994/how-accurate-is-bluetooth-channel-sounding-a-deep-dive-with-the-nrf54l15" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 691: How Accurate Is Bluetooth Channel Sounding? A Deep Dive with the nRF54L15&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71993/meet-the-platypusbot-now-powered-by-raspberry-pi-ros----episode-690" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 690: Meet the PlatypusBot: Now Powered by Raspberry Pi &amp;amp; ROS&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71992/how-clem-built-a-handheld-sci-fi-communicator-that-really-works----episode-689" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 689: How Clem Built a Handheld Sci-Fi Communicator That Really Works&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71990/building-the-cylon-pumpkin-combining-a-larson-scanner-and-vocoder-for-halloween----episode-688" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 688: Building the Cylon Pumpkin: Combining a Larson Scanner and Vocoder for Halloween&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71989/turning-a-10-air-fryer-into-an-arduino-powered-filament-dryer----episode-687" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 687: Turning a $10 Air Fryer into an Arduino powered Filament Dryer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71988/creepy-motion-activated-painting-you-can-build-yourself----episode-686" data-icid="e14" data-e14adj="t"&gt;Episode 686: Creepy Motion-Activated Painting You Can Build Yourself&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71987/when-your-body-becomes-the-instrument-clem-builds-the-drone-synth----episode-685" data-icid="e14" data-e14adj="t"&gt;Episode 685: When Your Body Becomes the Instrument: Clem Builds the &amp;ldquo;Dr&amp;ouml;ne&amp;rdquo; Synth&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71985/building-an-audio-reactive-led-matrix-with-a-micro-bit-and-neopixels----episode-684" data-icid="e14" data-e14adj="t"&gt;Episode 684: Building an Audio Reactive LED Matrix with a micro:bit and NeoPixels&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71984/how-to-make-a-portable-emergency-radio-with-an-arduino-nano-in-a-mint-tin----episode-683" data-icid="e14" data-e14adj="t"&gt;Episode 683: How to Make a Portable Emergency Radio with an Arduino Nano in a Mint TinT&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71974/diy-rf-modulator-raspberry-pi-pico-gaming-on-a-sony-watchman-fd-10a-crt----episode-682" data-icid="e14" data-e14adj="t"&gt;Episode 682: DIY RF Modulator + Raspberry Pi Pico = Gaming on a Sony Watchman FD-10A CRT&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71963/turn-anything-into-an-arduino-module-reusing-everyday-electronics----episode-681" data-icid="e14" data-e14adj="t"&gt;Episode 681: Turn anything into an Arduino Module: Reusing Everyday Electronics&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71961/from-kit-to-custom-design-building-a-tube-based-fm-radio----episode-680" data-icid="e14" data-e14adj="t"&gt;Episode 680: From Kit to Custom Design: Building a Tube-Based FM Radio&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71960/esp32-duolingo-owl-project-never-miss-a-lesson-again----episode-679" data-icid="e14" data-e14adj="t"&gt;Episode 679: ESP32 Duolingo Owl Project: Never Miss a Lesson Again&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71959/open-source-attiny3226-arduino-calculator-hardware-case-code-build----episode-678" data-icid="e14" data-e14adj="t"&gt;Episode 678: Open Source ATtiny3226 Arduino Calculator &amp;ndash; Hardware, Case &amp;amp; Code Build&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71955/make-your-own-vocoder-with-teensy-4-0---voice-of-a-cylon----episode-677" data-icid="e14" data-e14adj="t"&gt;Episode 677: Make Your Own Vocoder with Teensy 4.0 - Voice of a Cylon?!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71954/i-tried-building-16-attiny-robots-with-vibration-motors-it-was-a-disaster----episode-676" data-icid="e14" data-e14adj="t"&gt;Episode 676: I Tried Building 16 ATtiny Robots with Vibration Motors &amp;ndash; It Was a Disaster&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71953/avoid-conflict-with-this-esp32-defcon-task-tracker----episode-675" data-icid="e14" data-e14adj="t"&gt;Episode 675:Avoid Conflict with this ESP32 Defcon Task Tracker&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71947/building-an-open-source-blood-pressure-heart-signal-monitor----episode-674" data-icid="e14" data-e14adj="t"&gt;Episode 674: Building an Open Source Blood Pressure &amp;amp; Heart Signal Monitor&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71942/building-an-esp32-powered-warhammer-40k-rhino-with-dynamic-led-effects----episode-673" data-icid="e14" data-e14adj="t"&gt;Episode 673: Building an ESP32 Powered Warhammer 40k Rhino with Dynamic LED Effects!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71936/building-an-autonomous-lego-train-with-circuitpython-and-lidar----episode-672" data-icid="e14" data-e14adj="t"&gt;Episode 672: Building an Autonomous LEGO Train with CircuitPython and LIDAR&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71934/platypusbot---scavenging-for-robotics-parts----episode-671" data-icid="e14" data-e14adj="t"&gt;Episode 671: PlatypusBot - Scavenging for Robotics Parts&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71927/build-a-larson-scanner-with-sound-using-an-esp32----episode-670" data-icid="e14" data-e14adj="t"&gt;Episode 670: Build your own Larson Scanner&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71926/creating-an-esd-or-lightning-detector----episode-669" data-icid="e14" data-e14adj="t"&gt;Episode 669: Creating an ESD (Or Lightning!) Detector!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71925/designing-an-arduino-pid-controlled-micro-drone----episode-668" data-icid="e14" data-e14adj="t"&gt;Episode 668: Designing an Arduino PID Controlled Micro Drone&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71921/emulating-a-speech-synthesis-chip-with-an-esp32----episode-667" data-icid="e14" data-e14adj="t"&gt;Episode 667: Emulating a Speech Synthesis Chip with an ESP32&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71920/how-far-can-i2c-go----episode-666" data-icid="e14" data-e14adj="t"&gt;Episode 666: How Far Can I2C Go?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71919/raspberry-pi-ai-tracking-eye-of-sauron---ai-al-barad-dur---episode-665" data-icid="e14" data-e14adj="t"&gt;Episode 665: Raspberry Pi AI Tracking Eye of Sauron - AI AL Barad Dur&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71915/learn-how-to-make-a-photo-booth-with-the-esp32-and-telegram-automation----episode-664" data-icid="e14" data-e14adj="t"&gt;Episode 664: Learn how to Make a Photo Booth with the ESP32 and Telegram Automation!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71911/upcycling-a-vintage-microphone-into-an-emergency-radio-system----episode-663" data-icid="e14" data-e14adj="t"&gt;Episode 663: Upcycling a Vintage Microphone into an Emergency Radio System&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71909/making-a-stronger-affordable-diy-robot-arm-with-3d-printing-with-raspberry-pi-pico----episode-662" data-icid="e14" data-e14adj="t"&gt;Episode 662: Making a Stronger Affordable DIY Robot Arm with 3D Printing with Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71904/make-your-own-led-wrist-watch----episode-661" data-icid="e14" data-e14adj="t"&gt;Episode 661: Clem makes his own LED Wristwatch&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71846/lofi-beats-to-solder-to----episode-660" data-icid="e14" data-e14adj="t"&gt;Episode 660: LoFi Beats to Solder To&lt;/a&gt;&lt;/p&gt;
&lt;p style="clear:both;margin:0;padding:0px;padding-top:12px;"&gt;&lt;a title="Episode 659:&amp;nbsp;DIY Single Board Computer with ESP32 and Raspberry Pi Pico" href="/challenges-projects/element14-presents/project-videos/w/documents/71844/diy-single-board-computer-with-esp32-and-raspberry-pi-pico----episode-659" data-e14adj="t"&gt;Episode 659:&amp;nbsp;DIY Single Board Computer with ESP32 and Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71841/a-smart-youtube-counter-with-an-audio-analyzer---episode---658" data-icid="e14" data-e14adj="t"&gt;Episode 658: A Smart Youtube Counter With An Audio Analyzer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71833/how-to-control-a-lego-mindstorms-kit-with-ai-and-raspberry-pi-5----episode-657" data-icid="e14" data-e14adj="t"&gt;Episode 657: How to Control a LEGO Mindstorms kit with AI and Raspberry Pi 5&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71831/diy-jig-for-your-laser-cutter-with-custom-arduino-automation----episode-656" data-icid="e14" data-e14adj="t"&gt;Episode 656: DIY Jig for your Laser Cutter with Custom Arduino Automation&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71810/diy-hot-plate-for-smd-soldering-using-raspberry-pi-pico----episode-655" data-icid="e14" data-e14adj="t"&gt;Episode 655: DIY Hot Plate for SMD Soldering Using Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71801/how-do-battlebots-work-in-the-pit-with-hypershock----episode-654" data-icid="e14" data-e14adj="t"&gt;Episode 654: How Do BattleBots Work? In the Pit with HyperShock&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71797/edge-lit-7-segment-display-clock-using-raspberry-pi-pico----episode-653" data-icid="e14" data-e14adj="t"&gt;Episode 653: Edge-lit 7-Segment Display Clock Using Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71793/smart-windows-and-blinds-with-arduino-and-raspberry-pi-pico----episode-652" data-icid="e14" data-e14adj="t"&gt;Episode 652: Smart Windows and Blinds with Arduino and Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71784/design-for-manufacturing---project-to-product-by-modifying-off-the-shelf-cases----episode-651" data-icid="e14" data-e14adj="t"&gt;Episode 651: Design for Manufacturing - Project to Product by Modifying Off-the-Shelf Cases&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/46432/using-nordic-s-nrf7002-my-dehumidifier-tells-me-when-it-s-full----episode-650" data-icid="e14" data-e14adj="t"&gt;Episode 650: Using Nordic&amp;#39;s nRF7002, My Dehumidifier Tells Me When It&amp;#39;s Full!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/29545/giant-retro-gaming-magic-mirror-with-a-raspberry-pi-5----episode-649" data-icid="e14" data-e14adj="t"&gt;Episode 649: Giant Retro Gaming Magic Mirror with a Raspberry Pi 5!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/29540/home-ai-image-generation-server-with-lattepanda-and-stable-diffusion----episode-648" data-icid="e14" data-e14adj="t"&gt;Episode 648: Home AI Image Generation Server with LattePanda and Stable Diffusion&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/29537/building-an-open-source-tool-for-cave-surveying----episode-647" data-icid="e14" data-e14adj="t"&gt;Episode 647: Building an Open-Source Tool for Cave Surveying&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28802/creating-a-digital-roulette-table-with-an-esp32-devkit----episode-646" data-icid="e14" data-e14adj="t"&gt;Episode 646: Creating a Digital Roulette Table with an ESP32 DevKit&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28438/practical-diy-pi-pico-current-load-circuits----episode-645" data-icid="e14" data-e14adj="t"&gt;Episode 645: Practical DIY Pi Pico Current Load Circuits&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28421/turning-a-raspberry-pi-pico-into-a-gpu----episode-644" data-icid="e14" data-e14adj="t"&gt;Episode 644: Turning a Raspberry Pi Pico into a GPU!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28418/making-a-tribble-that-detects-klingons----episode-643" data-icid="e14" data-e14adj="t"&gt;Episode 643: Making a Tribble that Detects Klingons&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28416/making-a-time-lapse-camera-with-a-raspberry-pi-5----episode-642" data-icid="e14" data-e14adj="t"&gt;Episode 642: Making a Time-lapse Camera with a Raspberry Pi 5&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28409/moon-phase-display-with-raspberry-pi-pico----episode-641" data-icid="e14" data-e14adj="t"&gt;Episode 641: Moon Phase Display with Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28407/tinkering-vs-engineering-can-you-build-a-laptop-from-scratch----episode-640" data-icid="e14" data-e14adj="t"&gt;Episode 640: Tinkering vs Engineering: Can You Build a Laptop from Scratch?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28405/off-grid-remote-generator-starter----episode-639" data-icid="e14" data-e14adj="t"&gt;Episode 639: Off-Grid Remote Generator Starter?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28387/rp2040-pcb-design-turn-on-and-debug---how-hard-could-it-be----episode-638" data-icid="e14" data-e14adj="t"&gt;Episode 638: RP2040 PCB: Design, Turn-On, and Debug - How Hard Could It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28386/making-music-with-a-lego-guitar-and-capacitive-touch----episode-637" data-icid="e14" data-e14adj="t"&gt;Episode 637: Making Music with a Lego Guitar and Capacitive Touch&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28384/creating-an-imu-based-3d-mouse-with-an-esp32-s3----episode-636" data-icid="e14" data-e14adj="t"&gt;Episode 636: Creating an IMU based 3D Mouse with an ESP32-S3&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28382/vintage-electronics-exploration-with-a-bally-cypress-gardens-bingo-machine---episode-635" data-icid="e14" data-e14adj="t"&gt;Episode 635: Vintage Electronics Exploration with a Bally Cypress Gardens Bingo Machine&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28381/craft-a-festive-led-christmas-sweater-featuring-the-attiny416----episode-634" data-icid="e14" data-e14adj="t"&gt;Episode 634: Craft a Festive LED Christmas Sweater Featuring the ATtiny416&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28376/spying-under-the-christmas-tree-with-an-arduino-powered-ornament----episode-633" data-icid="e14" data-e14adj="t"&gt;Episode 633: Spying Under the Christmas Tree with an Arduino-powered Ornament&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28374/revamping-old-school-pinball-with-an-esp32----episode-632" data-icid="e14" data-e14adj="t"&gt;Episode 632: Revamping Old School Pinball with an ESP32&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28372/all-purpose-debugging-a-practical-universal-screen-with-lcd-displays----episode-631" data-icid="e14" data-e14adj="t"&gt;Episode 631: All-Purpose Debugging: A Practical Universal Screen with LCD Displays&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28370/mega-iie-first-fully-functional-computer-built-around-the-apple-mega-ii-chip----episode-630" data-icid="e14" data-e14adj="t"&gt;Episode 630: Mega IIe: First Fully Functional Computer built around the Apple Mega-II Chip&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28366/backpack-splash-mark-s-water-gun-upgrade-for-epic-outdoor-water-wars----episode-629" data-icid="e14" data-e14adj="t"&gt;Episode 629: Backpack Splash: Mark&amp;#39;s Water Gun Upgrade for Epic Outdoor Water Wars!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28361/affordable-diy-robot-arm-a-deep-dive-into-3d-printing-and-servo-motors----episode-628" data-icid="e14" data-e14adj="t"&gt;Episode 628: Affordable DIY Robot Arm - A Deep Dive into 3D Printing and Servo Motors&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28353/creating-sudostick---from-prototype-to-product----episode-627" data-icid="e14" data-e14adj="t"&gt;Episode 627: Creating sudostick - From Prototype to Product&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28351/catching-you-up-on-bonesnapper-ridge---off-grid-maker-shop----episode-626" data-icid="e14" data-e14adj="t"&gt;Episode 626: Catching you Up on Bonesnapper Ridge - Off-Grid Maker Shop&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28344/interactive-magic-creating-an-enchanted-cauldron----episode-625" data-icid="e14" data-e14adj="t"&gt;Episode 625: Interactive Magic - Creating an Enchanted Cauldron&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28342/episode-624-modding-a-smoke-machine-to-add-motion-detection" data-icid="e14" data-e14adj="t"&gt;Episode 624: Modding A Smoke Machine to Add Motion Detection&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28339/episode-623-how-to-run-linux-on-an-esp32" data-icid="e14" data-e14adj="t"&gt;Episode 623: How to Run Linux on an ESP32&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28334/episode-622-building-spooky-fun-halloween-sound-pranks-with-nrf-5340-ble-audio" data-icid="e14" data-e14adj="t"&gt;Episode 622: Building Spooky Fun: Halloween Sound Pranks with nRF 5340 BLE Audio&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28330/episode-621-color-sensor-based-water-quality-tracker-diy-environmental-monitoring" data-icid="e14" data-e14adj="t"&gt;Episode 621: Color Sensor-Based Water Quality Tracker: DIY Environmental Monitoring&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28328/episode-620-stey-by-step-guide-to-creating-your-own-speaking-animatronic-hat" data-icid="e14" data-e14adj="t"&gt;Episode 620: Stey-by-Step Guide to Creating your own Speaking Animatronic Hat&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28316/episode-619-how-to-build-an-open-source-bluetooth-mechanical-keyboard" data-icid="e14" data-e14adj="t"&gt;Episode 619: How to Build an Open Source Bluetooth Mechanical Keyboard&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28308/episode-618-upgrading-my-racing-sim-with-a-force-sensitive-keyboard" data-icid="e14" data-e14adj="t"&gt;Episode 618: Upgrading My Racing Sim with a Force-Sensitive Keyboard&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28306/episode-617-simplify-network-monitoring-building-an-esp32-powered-solution" data-icid="e14" data-e14adj="t"&gt;Episode 617: Simplify Network Monitoring: Building an ESP32-Powered Solution&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28300/episode-616-mastering-oven-control-precision-resin-curing-with-diy-modifications---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 616: Mastering Oven Control: Precision Resin Curing with DIY Modifications - How Hard Can it Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28290/episode-615-building-a-unique-usb-card-reader-from-idea-to-prototype" data-icid="e14" data-e14adj="t"&gt;Episode 615: Building a Unique USB Card Reader: From Idea to Prototype&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28278/episode-614-using-pid-proportional-integral-derivative-in-robotics---how-hard-could-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 614: Using PID (Proportional-Integral-Derivative) in Robotics - How Hard Could It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28274/episode-613-building-a-magic-wand-talking-sound-board" data-icid="e14" data-e14adj="t"&gt;Episode 613: Building a Magic Wand Talking Sound Board&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28271/episode-612-handheld-basic-computer-in-badge-format-with-the-arduino-uno" data-icid="e14" data-e14adj="t"&gt;Episode 612: Handheld BASIC computer in Badge Format with the Arduino Uno&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28267/episode-611-how-to-run-the-distance-to-the-moon-with-strava-data-and-a-pico-w-board" data-icid="e14" data-e14adj="t"&gt;Episode 611: How to Run the Distance to the Moon with Strava Data and a Pico W Board&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28214/episode-610-how-to-embroider-with-circuits-and-conductive-thread" data-icid="e14" data-e14adj="t"&gt;Episode 610: How to Embroider with Circuits and Conductive Thread&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28213/episode-609-updating-a-fujitsu-n860-2500-t111-keyboard-to-work-with-a-ps2-standard" data-icid="e14" data-e14adj="t"&gt;Episode 609: Updating a Fujitsu N860-2500-T111 Keyboard to Work with a PS2 Standard&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28200/episode-608-making-the-simplest-diy-wind-energy-generator---how-hard-could-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 608: Making the Simplest DIY Wind Energy Generator - How Hard Could it Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28198/episode-607-from-strava-to-motion-creating-an-arduino-powered-arcade-game-with-running-data" data-icid="e14" data-e14adj="t"&gt;Episode 607: From Strava to Motion: Creating an Arduino-Powered Arcade Game with Running Data&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28184/episode-606-how-to-use-lorawan-to-launch-model-rockets-wirelessly" data-icid="e14" data-e14adj="t"&gt;Episode 606: How to Use LoRaWAN to Launch Model Rockets Wirelessly&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28152/episode-605-arduino-and-leds-make-solitaire-easier-to-solve" data-icid="e14" data-e14adj="t"&gt;Episode 605: Arduino and LEDs Make Solitaire Easier to Solve&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28140/episode-604-charlieplexing-buttons-and-leds-at-the-same-time---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 604: Charlieplexing Buttons and LEDs at the Same Time - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28138/episode-603-create-your-own-air-hockey-table-with-arduino-scoring" data-icid="e14" data-e14adj="t"&gt;Episode 603: Create Your Own Air Hockey Table with Arduino Scoring&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28133/episode-602-diy-ac-dimmer-circuit-control-your-lights-with-a-raspberry-pi-pico" data-icid="e14" data-e14adj="t"&gt;Episode 602: DIY AC Dimmer Circuit: Control Your Lights with a Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28131/episode-601-how-to-reverse-engineer-electronics-building-a-developer-board-for-a-coding-class" data-icid="e14" data-e14adj="t"&gt;Episode 601: How to Reverse Engineer Electronics: Building a Developer Board for a Coding Class&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28126/episode-600-building-my-dream-digital-clock-diy-7-segment-display-with-a-cute-robot-twist" data-icid="e14" data-e14adj="t"&gt;Episode 600: Building My Dream Digital Clock: DIY 7 Segment Display with a Cute Robot Twist!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28117/episode-599-how-to-build-a-spectrum-analyzer-with-lego-bricks-discrete-electronics" data-icid="e14" data-e14adj="t"&gt;Episode 599: How to Build a Spectrum Analyzer with Lego Bricks &amp;amp; Discrete Electronics&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28102/episode-598-how-to-build-a-portable-solar-charged-off-grid-power-station" data-icid="e14" data-e14adj="t"&gt;Episode 598: How To Build a Portable, Solar-Charged Off-Grid Power Station&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28097/episode-597-how-to-build-a-robot-that-celebrates-good-grades-with-arduino" data-icid="e14" data-e14adj="t"&gt;Episode 597: How to Build a Robot that Celebrates Good Grades with Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28084/episode-596-how-to-build-your-own-voice-assistant-with-mycroft-ai---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 596: How to Build Your Own Voice Assistant with MyCroft AI - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28082/episode-595-member-challenge-accepted---universal-lanc-controller-for-dslr-cameras" data-icid="e14" data-e14adj="t"&gt;Episode 595: Member Challenge Accepted - Universal LANC Controller for DSLR cameras&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28059/episode-594-repairing-a-neewer-660-studio-light---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 594: Repairing a Neewer 660 Studio light - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28057/episode-593-playing-3d-famicom-games-wirelessly-on-the-nes---how-hard-could-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 593: Playing 3D Famicom Games Wirelessly on the NES - How Hard Could It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28050/episode-592-lamptopus-spinning-led-desk-lamp" data-icid="e14" data-e14adj="t"&gt;Episode 592: Lamptopus: Spinning LED Desk Lamp&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28036/episode-591-building-a-bluetooth-speaker-in-5-minutes---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 591: Building A Bluetooth Speaker in 5 Minutes - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28033/episode-590-seven-kingdoms-open-source-bartop-arcade" data-icid="e14" data-e14adj="t"&gt;Episode 590: Seven Kingdoms Open Source Bartop Arcade&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28024/episode-589-upgrading-the-imac-g4-with-a-nuc" data-icid="e14" data-e14adj="t"&gt;Episode 589: Upgrading the iMac G4 With a NUC&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28020/episode-588-highlights-from-element14-presents-2022" data-icid="e14" data-e14adj="t"&gt;Episode 588: Highlights from element14 presents 2022&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27982/episode-587-create-your-own-talking-stress-indicator" data-icid="e14" data-e14adj="t"&gt;Episode 587: Create Your Own Talking Stress Indicator&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27965/episode-586-diy-open-source-bluetooth-headphones" data-icid="e14" data-e14adj="t"&gt;Episode 586: DIY Open Source Bluetooth Headphones&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27960/episode-585-enhancing-a-magnifying-headband-with-auto-sensing-light" data-icid="e14" data-e14adj="t"&gt;Episode 585: Enhancing a Magnifying Headband with Auto Sensing Light&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27952/episode-584-going-beyond-periodic-wakes-using-wifi-to-revive-a-sleeping-device" data-icid="e14" data-e14adj="t"&gt;Episode 584: Going Beyond Periodic Wakes: Using WiFi to Revive a Sleeping Device&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27934/episode-583-epic-neopixel-birthday-cake" data-icid="e14" data-e14adj="t"&gt;Episode 583: Epic Neopixel Birthday Cake&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27917/episode-582-smart-christmas-decoration-with-raspberry-pi-pico-and-mqtt" data-icid="e14" data-e14adj="t"&gt;Episode 582: Smart Christmas Decoration with Raspberry Pi Pico and MQTT&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27900/episode-581-bee-saving-electronics-prototype" data-icid="e14" data-e14adj="t"&gt;Episode 581: Bee-Saving Electronics Prototype&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27894/episode-580-diy-low-cost-capacitance-meter-using-a-555-timer" data-icid="e14" data-e14adj="t"&gt;Episode 580: DIY Low Cost Capacitance Meter Using a 555 Timer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27881/episode-579-how-to-make-a-basketball-auto-score-keeper-using-colour-sensing" data-icid="e14" data-e14adj="t"&gt;Episode 579: How to Make a Basketball Auto Score Keeper Using Colour Sensing&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27879/episode-578-build-your-own-bat-detector-with-analog-parts" data-icid="e14" data-e14adj="t"&gt;Episode 578: Build your Own Bat Detector with Analog Parts&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27862/episode-577-the-game-guy-mini-upgrading-the-unportable-game-boy" data-icid="e14" data-e14adj="t"&gt;Episode 577: The Game Guy Mini, Upgrading the Unportable Game Boy!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27861/episode-576-build-your-own-underwater-drone-with-3d-printed-parts" data-icid="e14" data-e14adj="t"&gt;Episode 576: Build your own Underwater Drone with 3D Printed Parts&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27855/episode-575-how-to-make-a-secured-parcel-pickup-box-with-arduino" data-icid="e14" data-e14adj="t"&gt;Episode 575: How to Make a Secured Parcel Pickup Box with Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27846/episode-574-ghost-rider-halloween-costume" data-icid="e14" data-e14adj="t"&gt;Episode 574: Ghost Rider Halloween Costume&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27836/episode-573-using-a-pi-pico-to-convert-keyboard-input-to-morse-code" data-icid="e14" data-e14adj="t"&gt;Episode 573: Using a Pi Pico to Convert Keyboard Input to Morse Code&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27824/episode-572-how-to-use-an-esp32-camera-to-know-you-ve-got-mail" data-icid="e14" data-e14adj="t"&gt;Episode 572: How to Use an ESP32 &amp;amp; Camera to Know You&amp;#39;ve Got Mail!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27807/episode-571-using-dead-batteries-to-test-for-dead-batteries" data-icid="e14" data-e14adj="t"&gt;Episode 571: Using Dead Batteries to Test for Dead Batteries&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27805/episode-570-making-a-wifi-connected-audio-spectrum-analyzer-with-esp32" data-icid="e14" data-e14adj="t"&gt;Episode 570: Making a WiFi Connected Audio Spectrum Analyzer with ESP32&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27803/episode-569-multi-spectrum-uv-resin-curing-station-with-wurth-leds" data-icid="e14" data-e14adj="t"&gt;Episode 569: Multi-Spectrum UV Resin Curing Station with W&amp;uuml;rth LEDs&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27787/episode-568-how-to-make-a-custom-soundboard-with-the-stm32f4-using-freecad" data-icid="e14" data-e14adj="t"&gt;Episode 568: How to Make a Custom Soundboard with the STM32F4 using FreeCAD&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27785/episode-567-synced-neopixel-mickey-mouse-ears" data-icid="e14" data-e14adj="t"&gt;Episode 567: Synced NeoPixel Mickey Mouse Ears&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27760/episode-566-how-to-automate-industrial-welding-positioners-with-arduino" data-icid="e14" data-e14adj="t"&gt;Episode 566: How to Automate Industrial Welding Positioners with Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27758/episode-565-measuring-destructive-testing-force-with-a-20-ton-hydraulic-press" data-icid="e14" data-e14adj="t"&gt;Episode 565: Measuring Destructive Testing Force with a 20 Ton Hydraulic Press&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27734/episode-564-build-a-vu-meter-with-led-pixelated-nixie-tubes" data-icid="e14" data-e14adj="t"&gt;Episode 564: Build a VU Meter with LED Pixelated Nixie Tubes&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27732/episode-563-creating-augmented-reality-circuits-with-meta-quest-2-and-unity" data-icid="e14" data-e14adj="t"&gt;Episode 563: Creating Augmented Reality Circuits with Meta Quest 2 and Unity&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27730/episode-562-pi-home-temperature-monitoring-system" data-icid="e14" data-e14adj="t"&gt;Episode 562: Pi Home Temperature Monitoring System&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27728/episode-561-wifi-to-parallel-port-ascii-art-dot-matrix-printer" data-icid="e14" data-e14adj="t"&gt;Episode 561: WiFi to Parallel Port Ascii Art Dot-Matrix Printer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27727/episode-560-raspberry-pi-controlled-lego-train-with-build-hat" data-icid="e14" data-e14adj="t"&gt;Episode 560: Raspberry Pi Controlled Lego Train with Build HAT&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27706/episode-559-create-a-magic-makeup-mirror-with-pose-detection" data-icid="e14" data-e14adj="t"&gt;Episode 559: Create a Magic Makeup Mirror with Pose Detection&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27700/episode-558-3d-object-rendering-using-an-fpga" data-icid="e14" data-e14adj="t"&gt;Episode 558: 3D Object Rendering Using an FPGA&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27694/episode-557-create-your-own-handheld-serial-monitor-for-project-debugging" data-icid="e14" data-e14adj="t"&gt;Episode 557: Create your own Handheld Serial Monitor for Project Debugging&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27666/episode-556-hacking-a-hotel-pos-tablet---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 556: Hacking a Hotel POS Tablet - How Hard Can it Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27664/episode-555-dance-central-pose-estimation-game-with-tensorflow-and-raspberry-pi" data-icid="e14" data-e14adj="t"&gt;Episode 555: Dance Central Pose Estimation Game with Tensorflow and Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27647/episode-554-arduino-uno-mini-limited-edition-led-necklace" data-icid="e14" data-e14adj="t"&gt;Episode 554: Arduino Uno Mini Limited Edition LED Necklace&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27645/episode-553-adding-a-parallel-printer-port-to-an-android-phone" data-icid="e14" data-e14adj="t"&gt;Episode 553: Adding a Parallel Printer Port to an Android Phone&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27616/episode-552---magical-potion-bottle-rack" data-icid="e14" data-e14adj="t"&gt;Episode 552: Magical Potion Bottle Rack&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27614/episode-551-can-we-rebuild-a-1930s-accounting-machine" data-icid="e14" data-e14adj="t"&gt;Episode 551: Can We Rebuild a 1930s Accounting Machine?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27608/episode-550-diy-electronic-controlled-motorized-wheelchair" data-icid="e14" data-e14adj="t"&gt;Episode 550: DIY Electronic Controlled Motorized Wheelchair&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27606/episode-549-using-a-teletype-machine-as-a-usb-printer-with-arduino" data-icid="e14" data-e14adj="t"&gt;Episode 549: Using a Teletype Machine as a USB Printer with Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27597/episode-548-electronic-fidget-cube-building-your-ideas" data-icid="e14" data-e14adj="t"&gt;Episode 548: Electronic Fidget Cube, Building Your Ideas!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27577/episode-547-creating-a-mummy-wake-word-detector-with-raspberry-pi-and-edge-impulse" data-icid="e14" data-e14adj="t"&gt;Episode 547: Creating a &amp;ldquo;Mummy&amp;rdquo; Wake Word Detector with Raspberry Pi and Edge Impulse&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27567/episode-546-mapping-the-outputs-of-a-1960s-teletype-machine---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 546: Mapping the Outputs of a 1960s Teletype Machine - How Hard Can it Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27576/episode-545-designing-a-custom-pcb-for-microsoft-jacdac" data-icid="e14" data-e14adj="t"&gt;Episode 545: Designing a Custom PCB for Microsoft Jacdac&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27548/episode-544-reviving-the-1984-ibm-5155---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 544: Reviving the 1984 IBM 5155 - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27522/episode-543-lego-spike-prime-weather-station-with-raspberry-pi" data-icid="e14" data-e14adj="t"&gt;Episode 543: Lego Spike Prime Weather Station with Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27520/episode-542-a-noise-free-diy-switching-power-supply---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 542: A Noise-Free DIY Switching Power Supply - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27495/episode-541-vintage-laptop-battery-replaced-with-usb-power---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 541: Vintage Laptop Battery Replaced with USB Power - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27493/episode-540-object-detection-for-smart-recycling" data-icid="e14" data-e14adj="t"&gt;Episode 540: Object Detection for Smart Recycling&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27484/episode-539-training-a-machine-to-recognize-objects---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 539: Training a Machine to Recognize Objects - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27483/episode-538-how-to-build-a-quadruped-robot---no-math" data-icid="e14" data-e14adj="t"&gt;Episode 538: How to Build a Quadruped Robot - NO MATH!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27460/episode-537-build-a-phonograph-preamplifier---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 537: Build a Phonograph Preamplifier - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27458/episode-536-interactive-light-up-window-with-pose-detection-using-a-raspberry-pi-and-micro-bit" data-icid="e14" data-e14adj="t"&gt;Episode 536: Interactive Light-Up Window with Pose Detection using a Raspberry Pi and micro:bit&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27441/episode-535-repair-a-sega-game-gear---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 535: Repair a Sega Game Gear - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27435/episode-534-open-source-inventory-warehousing-system" data-icid="e14" data-e14adj="t"&gt;Episode 534: Open Source Inventory Warehousing System&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27432/episode-533-jumbo-diy-led" data-icid="e14" data-e14adj="t"&gt;Episode 533: Jumbo DIY LED&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27412/episode-532-world-s-first-single-chip-apple-ii-boots" data-icid="e14" data-e14adj="t"&gt;Episode 532: World&amp;rsquo;s First Single-Chip Apple II Boots!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27407/episode-531-game-guy---the-unportable-game-boy" data-icid="e14" data-e14adj="t"&gt;Episode 531: Game Guy - The Unportable Game Boy&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27399/episode-530-mqtt-controlled-led-christmas-baubles-with-raspberry-pi-pico" data-icid="e14" data-e14adj="t"&gt;Episode 530: MQTT controlled LED Christmas Baubles with Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27392/episode-529-updi-program-for-new-attiny" data-icid="e14" data-e14adj="t"&gt;Episode 529: UPDI Program for new ATTiny&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27383/episode-528-let-s-build-an-electronic-fidget-cube" data-icid="e14" data-e14adj="t"&gt;Episode 528: Let&amp;#39;s Build an Electronic Fidget Cube!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27375/episode-527---interactive-light-up-window-using-a-raspberry-pi-and-micro-bit" data-icid="e14" data-e14adj="t"&gt;Episode 527: Interactive Light Up Window using a Raspberry Pi and micro:bit&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27366/episode-526-cnc-router-remote-control" data-icid="e14" data-e14adj="t"&gt;Episode 526: CNC Router Remote Control&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27338/episode-525-demonstrating-magnetic-fields-with-helmholtz-coils-in-a-snow-globe" data-icid="e14" data-e14adj="t"&gt;Episode 525: DIY Helmholtz Snow Globe&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/27287/episode-524-arduino-iot-cloud-weather-station" data-e14adj="t"&gt;Episode 524: Arduino IoT Cloud Weather Station&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/27276/episode-523-make-your-own-auto-sensing-solder-fume-extractor" data-e14adj="t"&gt;Episode 523: Make your Own Auto-Sensing Solder Fume Extractor&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23245/episode-522-siren-head-halloween-wearable-costume" data-e14adj="t"&gt;Episode 522: Siren Head Halloween Wearable Costume&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23240/episode-521-diy-static-grass-applicator" data-e14adj="t"&gt;Episode 521: DIY Static Grass Applicator&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23232/episode-520-adding-android-auto-as-non-permanent-add-on-with-raspberry-pi" data-e14adj="t"&gt;Episode 520: Adding Android Auto as Non-Permanent Add-On with Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23225/episode-519-make-your-own-ye-olde-book-nook-diorama-with-arduino" data-e14adj="t"&gt;Episode 519: Make Your Own Ye Olde Book Nook Diorama with Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23212/episode-518-guitar-vacuum-tube-distortion-pedal" data-e14adj="t"&gt;Episode 518: Guitar Vacuum Tube Distortion Pedal&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/secret-element14-presents/w/documents/4141/episode-517-emulate-an-eprom---how-hard-could-it-be" data-e14adj="t"&gt;Episode 517: Emulate an EPROM - How Hard Could it Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23199/episode-516-modding-a-wireless-doorbell-with-raspberry-pi-and-esp8266" data-e14adj="t"&gt;Episode 516: Modding a Wireless Doorbell with Raspberry Pi and ESP8266&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23190/episode-515-upcycling-a-lenovo-pc-into-a-raspberry-pi-wifi-access-point" data-e14adj="t"&gt;Episode 515: Upcycling a Lenovo PC into a Raspberry Pi WiFi Access Point&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23183/episode-514-making-a-3d-graphics-card-for-the-atari-800-xl" data-e14adj="t"&gt;Episode 514: Making a 3D Graphics Card for the Atari 800 XL&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5429/episode-513-bike-speedometer-with-arduino-and-gps" data-e14adj="t"&gt;Episode 513: Bike Speedometer with Arduino and GPS&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5422/episode-512-you-cannot-buy-this-vacuum-tube-tester-you-build-it" data-e14adj="t"&gt;Episode 512: You Cannot Buy This Vacuum Tube Tester. You Build It!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5418/episode-511-face-tracking-cheeseball-launcher" data-e14adj="t"&gt;Episode 511:&amp;nbsp; Raspberry Pi Powered Cheeseball Launcher&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5407/episode-510-laser-cutter-command-station" data-e14adj="t"&gt;Episode 510: Laser Cutter Command Station&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5402/episode-509-diy-discrete-logic-led-countdown-timer" data-e14adj="t"&gt;Episode 509: DIY Discrete Logic LED Countdown Timer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5397/episode-508-raspberry-pi-fpv-rover-easy-robot-arm-upgrade" data-e14adj="t"&gt;Episode 508: Raspberry Pi FPV Rover Easy Robot Arm Upgrade&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5391/episode-507-massive-raspberry-pi" data-e14adj="t"&gt;Episode 507: Massive Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5377/episode-506-diy-star-trek-tricorder-from-build-inside-the-box" data-e14adj="t"&gt;Episode 506: DIY Star Trek Tricorder from Build Inside the Box&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5374/episode-505-super-8-camera-digitizer" data-e14adj="t"&gt;Episode 505: Super 8 Camera Digitizer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5369/episode-504-diy-sump-pump-alarm" data-e14adj="t"&gt;Episode 504: DIY Sump Pump Alarm&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5360/episode-503-meet-cheesoid---the-robot-that-smells" data-e14adj="t"&gt;Episode 503: Meet Cheesoid - The Robot That Smells!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5352/episode-502-make-your-bike-a-pokebike" data-e14adj="t"&gt;Episode 502: Make Your Bike a Pokebike!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5033/episode-501-raspberry-pi-nfc-button-free-music-player" data-e14adj="t"&gt;Episode 501: Raspberry Pi NFC Button-Free Music Player&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/20721/episode-500-build-inside-the-box-challenge" data-e14adj="t"&gt;Episode 500:&amp;nbsp; Build Inside The Box Challenge!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5332/episode-499-diy-four-channel-arduino-servo-tester" data-e14adj="t"&gt;Episode 499: DIY Four Channel Arduino Servo Tester&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8706/episode-498-raspberry-pi-smart-water-dispenser" data-e14adj="t"&gt;Episode 498: Raspberry Pi Smart Water Dispenser&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5318/episode-497-raspberry-pi-rfid-pocket-money-keeper" data-e14adj="t"&gt;Episode 497: RFID Pocket Money Keeper&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8705/episode-496-compute-module-4-powered-3d-printer-board" data-e14adj="t"&gt;Episode 496: Compute Module 4 Powered 3D Printer Board&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5308/episode-495-magic-gif-ball-powered-by-raspberry-pi" data-e14adj="t"&gt;Episode 495: Magic GIF Ball Powered By Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5299/episode-494-keyboard-shortcuts-keypad-with-raspberry-pi-pico" data-e14adj="t"&gt;Episode 494: Keyboard Shortcuts Keypad with Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5290/episode-493-neopixel-7-segment-display-clock-update" data-e14adj="t"&gt;Episode 493: NeoPixel 7 Segment Display Clock Update&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5275/episode-492-arduino-vs-555-timer---tiny-slot-car-racers" data-e14adj="t"&gt;Episode 492: Arduino vs 555 Timer - Tiny Slot Car Racers&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5273/episode-491-arduino-single-wheel-balancing-robot" data-e14adj="t"&gt;Episode 491: Arduino Single-Wheel Balancing Robot&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5256/episode-490-diy-raspberry-pi-pico-fizz-buzz-multiplication-game" data-e14adj="t"&gt;Episode 490: DIY Raspberry Pi Pico Fizz Buzz Multiplication Game&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5254/episode-489-build-an-fpv-rover-with-raspberry-pi" data-e14adj="t"&gt;Episode 489: Build An FPV Rover with Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5233/episode-488-diy-raspberry-pi-cyberdeck" data-e14adj="t"&gt;Episode 488: DIY Raspberry Pi Cyberdeck&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5232/episode-487-diy-magsafe-battery-charger" data-e14adj="t"&gt;Episode 487: DIY MagSafe Battery Charger&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5229/episode-486-make-the-ultimate-phone-charging-camping-flashlight" data-e14adj="t"&gt;Episode 486: Make The Ultimate Phone Charging Camping Flashlight&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5213/episode-485-how-to-make-a-custom-pcb-from-design-to-assembly" data-e14adj="t"&gt;Episode 485: How To Make A Custom PCB From Design To Assembly&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5211/episode-484-raspberry-pi-bird-watching-camera" data-e14adj="t"&gt;Episode 484: Raspberry Pi Bird Watching Camera&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5201/episode-483-diy-miniature-multimeter" data-e14adj="t"&gt;Episode 483: DIY Miniature Multimeter&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5196/episode-482-gigantic-3d-printed-7-segment-display-clock" data-e14adj="t"&gt;Episode 482: Gigantic 3D Printed 7 Segment Display Clock&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5188/episode-481-diy-lost-swan-station-split-flap-display-timer" data-e14adj="t"&gt;Episode 481: DIY LOST Swan Station Split Flap Display Timer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5181/episode-480-diy-toothbrush-timer" data-e14adj="t"&gt;Episode 480: DIY Toothbrush Timer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5179/episode-479-raspberry-pi-2xl-robot-assistant-part-2" data-e14adj="t"&gt;Episode 479: Raspberry Pi 2XL Robot Assistant Part 2&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5171/episode-478-upgrading-a-christmas-train-with-python-and-raspberry-pi" data-e14adj="t"&gt;Episode 478: Upgrading A Christmas Train&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5169/episode-477-metal-plate-your-3d-prints-with-a-diy-galvanizing-machine" data-e14adj="t"&gt;Episode 477: Metal Plate Your 3D Prints with a DIY Galvanizing Machine&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5160/episode-476-iot-arduino-ntp-world-clock-with-spi-display" data-e14adj="t"&gt;Episode 476: IoT Arduino NTP World Clock with SPI Display&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5147/episode-475-diy-wall-mounted-arduino-barometer" data-e14adj="t"&gt;Episode 475: DIY Wall Mounted Arduino Barometer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5144/episode-474-continuum-robot-tentacle-prototype" data-e14adj="t"&gt;Episode 474: Continuum Robot Tentacle Prototype&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8680/episode-473-mendel-3d-printer-upgrade-and-maintenance" data-e14adj="t"&gt;Episode 473: Mendel 3D Printer Upgrade and Maintenance&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5120/episode-472-diy-hydration-reminder-system" data-e14adj="t"&gt;Episode 472: DIY Hydration Reminder System&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5113/episode-471-diy-dance-dance-revolution-mat" data-e14adj="t"&gt;Episode 471: DIY Dance Dance Revolution Mat&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5102/episode-470-voice-activated-inspector-gadget-hat" data-e14adj="t"&gt;Episode 470: Voice Activated Inspector Gadget Hat&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5063/episode-469-nintendo-super-scope-modded-for-modern-televisions" data-e14adj="t"&gt;Episode 469: Nintendo Super Scope Modded For Modern Televisions&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5092/episode-468-socially-distanced-halloween-candy-dispenser" data-e14adj="t"&gt;Episode 468: Socially Distanced Halloween Candy Dispenser&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5077/episode-467-repairing-the-world-s-first-laptop-epson-hx-20" data-e14adj="t"&gt;Episode 467: Repairing the World&amp;#39;s First Laptop! (Epson HX-20)&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5061/episode-466-arduino-powered-hexadecimal-color-code-clock" data-e14adj="t"&gt;Episode 466: Arduino-powered Hexadecimal Color Code Clock&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5034/episode-465-lego-raspberry-pi-hq-camera" data-e14adj="t"&gt;Episode 465: Lego Raspberry Pi HQ Camera&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5031/episode-464-particle-voice-recognition-for-home-appliances" data-e14adj="t"&gt;Episode 464: Particle Voice Recognition for Home Appliances&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5002/episode-463-raspberry-pi-speech-to-text-led-face-mask" data-e14adj="t"&gt;Episode 463: Raspberry Pi Speech to Text LED Face Mask&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5012/episode-462-joycon-controlled-electronic-rock-em-sock-em-robots" data-e14adj="t"&gt;Episode 462: Joycon Controlled Electronic Rock&amp;#39;Em Sock&amp;#39;Em Robots&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4980/episode-461-portal-2-security-camera-with-raspberry-pi-2" data-e14adj="t"&gt;Episode 461: Portal 2 Security Camera with Raspberry Pi 2&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4985/episode-460-trinamic-open-source-ventilator-tosv-teardown" data-e14adj="t"&gt;Episode 460: Trinamic Open Source Ventilator (TOSV) Teardown&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4961/episode-459-raspberry-pi-4-vr-conference-call-assistant" data-e14adj="t"&gt;Episode 459: Raspberry Pi 4 VR Conference Call Assistant&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4971/episode-458-diy-arduino-automated-metal-bending-machine" data-e14adj="t"&gt;Episode 458: DIY Arduino Automated Metal Bending Machine&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4966/episode-457-arduino-mkr-zero-animatronic-rosie-the-robot-from-the-jetsons" data-e14adj="t"&gt;Episode 457: Raspberry Pi 4 Animatronic Rosie the Robot from the Jetsons&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8665/episode-456-unhackable-arduino-switch-matrix" data-e14adj="t"&gt;Episode 456: Unhackable Arduino Switch Matrix&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8664/episode-455-arduino-unit-conversion-calculator" data-e14adj="t"&gt;Episode 455: Arduino Unit Conversion Calculator&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4942/episode-454-soldering-up-the-rc2014-homebrew-z80-computer-kit" data-e14adj="t"&gt;Episode 454: Soldering Up the rc2014 Homebrew Z80 Computer Kit&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4937/episode-453-build-an-anti-troll-bot-using-tensorflow-and-arduino" data-e14adj="t"&gt;Episode 453: Build an Anti-Troll Bot Using TensorFlow and Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4914/episode-452-raspberry-pi-4-experimental-resin-3d-printer-updated" data-e14adj="t"&gt;Episode 452: Raspberry Pi 4 Experimental Resin 3D Printer Updated!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4913/episode-451-build-an-off-grid-wikipedia-with-raspberry-pi" data-e14adj="t"&gt;Episode 451: Build an Off Grid Wikipedia with Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4906/episode-450-sega-gamegear-rebuild-with-leds" data-e14adj="t"&gt;Episode 450: Sega GameGear Rebuild with LEDs&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8657/episode-449-diy-tamagotchi---build-a-virtual-pet" data-e14adj="t"&gt;Episode 449: DIY Tamagotchi - Build a Virtual Pet&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4895/episode-448-diy-raspberry-pi-4-boxing-game" data-e14adj="t"&gt;Episode 448: DIY Raspberry Pi 4 Boxing Game&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4873/episode-447-diy-stop-motion-rig-with-lattepanda" data-e14adj="t"&gt;Episode 447: DIY Stop Motion Rig with LattePanda&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4871/episode-446-raspberry-pi-2xl-robot-assistant-part-1" data-e14adj="t"&gt;Episode 446: Raspberry Pi 2XL Robot Assistant Part 1&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8652/episode-445-raspberry-pi-4-animatronic-bd-1-companion-robot" data-e14adj="t"&gt;Episode 445: Raspberry Pi 4 Animatronic BD-1 Companion Robot&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4848/episode-444-raspberry-pi-4-dvr" data-e14adj="t"&gt;Episode 444: Raspberry Pi 4 DVR&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4836/episode-443-arduino-uno-rc-remote---can-it-be-done" data-e14adj="t"&gt;Episode 443: Arduino Uno RC Remote - Can It Be Done?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4834/episode-442-make-your-own-giant-servo" data-e14adj="t"&gt;Episode 442: Make Your Own Giant Servo&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4818/episode-441-raspberry-pi-4-international-space-station-tracker" data-e14adj="t"&gt;Episode 441: Raspberry Pi 4 International Space Station Tracker&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4810/episode-440-diy-arduino-helicopter-collective-joystick-control" data-e14adj="t"&gt;Episode 440: DIY Arduino Helicopter Collective Joystick Control&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4796/episode-439---mechanical-arcade-game-with-barebones-arduino" data-e14adj="t"&gt;Episode 439 - Mechanical Arcade Game with Barebones Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4787/episode-438-smartphone-controlled-diy-rover-using-websockets" data-e14adj="t"&gt;Episode 438: Smartphone Controlled DIY Rover Using Websockets&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4771/episode-437-diy-motorized-zoom-for-your-dslr" data-e14adj="t"&gt;Episode 437: DIY Motorized Zoom for Your DSLR&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4767/episode-436-automated-raspberry-pi-planet-tracking-goto-telescope" data-e14adj="t"&gt;Episode 436: Automated Raspberry Pi Planet Tracking GOTO Telescope&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4756/episode-435-raspberry-pi-4-music-player-w-analog-controls" data-e14adj="t"&gt;Episode 435: Raspberry Pi 4 Music Player w/Analog Controls&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8637/episode-434-infineon-smart-city-model" data-e14adj="t"&gt;Episode 434: Infineon Smart City Model&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4742/episode-433---arduino-based-love-tester" data-e14adj="t"&gt;Episode 433: Arduino Based Love Tester&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4728/episode-432-super-fx-sword-using-the-bbc-micro-bit" data-e14adj="t"&gt;Episode 432: Super FX Sword using the BBC micro:bit&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4726/episode-431-room-sized-studio-light-speakers-combo" data-e14adj="t"&gt;Episode 431: Room-Sized Studio Light Speakers Combo&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4692/episode-430-flaming-xylophone-rubens-tube" data-e14adj="t"&gt;Episode 430: Flaming Xylophone Rubens&amp;#39; Tube&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4670/episode-429-youtuber-on-air-light-with-particle-mesh-network" data-e14adj="t"&gt;Episode 429: YouTuber &amp;quot;On Air&amp;quot; Light with Particle Mesh Network&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4668/episode-428-raspberry-pi-4-crt-based-vr-headset" data-e14adj="t"&gt;Episode 428: Raspberry Pi 4 CRT-based VR Headset&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4657/episode-427-diy-retro-gaming-portable-on-a-budget" data-e14adj="t"&gt; Episode 427: DIY Retro Gaming Portable on a Budget!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4142/episode-426-retro-tv-ads-holiday-ornament" data-e14adj="t"&gt; Episode 426: Retro TV Ads Holiday Ornament&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4651/episode-425-make-your-own-raspberry-pi-4-photobooth" data-e14adj="t"&gt; Episode 425: Make Your Own Raspberry Pi 4 Photobooth!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4646/episode-424-diy-escape-room-puzzle" data-e14adj="t"&gt; Episode 424: DIY Escape Room Puzzle&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4644/episode-423-programmable-arduino-synthesizer-watch" data-e14adj="t"&gt; Episode 423: Programmable Arduino Synthesizer Watch&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4628/episode-422-raspberry-pi-e-ink-task-organizer" data-e14adj="t"&gt; Episode 422: Raspberry Pi E-Ink Task Organizer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4627/episode-421-raspberry-pi-4-commodore-sx-64-inspired-portable-computer" data-e14adj="t"&gt; Episode 421: Raspberry Pi 4 Commodore SX-64 Inspired Portable Computer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4616/episode-420-diy-shapeoko-cnc-pendant" data-e14adj="t"&gt; Episode 420: DIY Shapeoko CNC Pendant&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4607/episode-419-altair-8800-laptop" data-e14adj="t"&gt; Episode 419: Altair 8800 Laptop &lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4604/episode-418-animatronic-terminator-skull-with-beaglebone-ai-and-giveaway" data-e14adj="t"&gt;&amp;nbsp;Episode 418: Animatronic Terminator Skull with BeagleBone&lt;span class="emoticon" data-url="https://community.element14.com/cfs-file/__key/system/emoji/00ae.svg" title="Registered"&gt;&amp;#x00ae;&lt;/span&gt;&amp;nbsp;AI&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8619/episode-417-pipboy-2000-mk-ii" data-e14adj="t"&gt;Episode 417: #Pipboy 2000 Mk II&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4596/episode-416---diy-3dprinted-label-spooler" data-e14adj="t"&gt;Episode 416: DIY #3DPrinted Label Spooler&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4588/episode-415-iron-man-helmet-heads-up-display" data-e14adj="t"&gt;Episode 415: Iron Man Helmet Heads Up Display&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4580/episode-414-raspberry-pi-4-experimental-resin-3d-printer" data-e14adj="t"&gt;Episode 414: Raspberry Pi 4 Experimental Resin 3D Printer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8610/episode-413-animatronic-claptrap-case-mod-part-2" data-e14adj="t"&gt;Episode 413: Animatronic Claptrap Case Mod Part 2&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4558/episode-412-get-to-know-your-adc-with-a-diy-temperature-probe" data-e14adj="t"&gt;Episode 412: Get to Know Your ADC with a DIY Temperature Probe&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4531/episode-411-animatronic-claptrap-computer-case---part-1" data-e14adj="t"&gt;Episode 411: Animatronic Claptrap Computer Case - Part 1&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4537/episode-410-macpro-g5-cheese-grater-with-raspberry-pi-4" data-e14adj="t"&gt;Episode 410: MacPro G5 Cheese Grater with Raspberry Pi 4&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4522/episode-409-commodore-sx-64-restoration" data-e14adj="t"&gt;Episode 409: Commodore SX-64 Restoration&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4516/episode-408-hand-soldered-led-oscilloscope" data-e14adj="t"&gt;Episode 408: Hand Soldered LED Oscilloscope&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4514/episode-407-the-ultimate-raspberry-pi-4-laptop" data-e14adj="t"&gt;Episode 407: The Ultimate Raspberry Pi 4 Laptop&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4507/episode-406-automated-robot-artist" data-e14adj="t"&gt;Episode 406: Automated Robot Artist&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4493/episode-405-rc-ornithopter-concept" data-e14adj="t"&gt;Episode 405: RC Ornithopter Concept&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4488/episode-404-arduino-powered-close-encounters-midi-light-board" data-e14adj="t"&gt;Episode 404: Arduino Powered Close Encounters Midi Light Board&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4459/episode-403-upcycled-iot-coffee-pot-ramen-maker" data-e14adj="t"&gt;Episode 403: Upcycled IoT Coffee Pot Ramen Maker&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4422/episode-402-piphone-the-giant-raspberry-pi-flip-phone" data-e14adj="t"&gt;Episode 402: PiPhone++ The Giant Raspberry Pi Flip Phone&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4128/episode-401-matrix-voice-controlled-robot" data-e14adj="t"&gt;Episode 401: Matrix Voice Controlled Robot&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4127/episode-400-the-ultimate-raspberry-pi-stress-test" data-e14adj="t"&gt;Episode 400: The Ultimate Raspberry Pi Stress Test&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4129/episode-399-candle-powered-robot" data-e14adj="t"&gt;Episode 399: Candle-Powered Robotl&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4044/episode-398-let-me-out-hooman-bluetooth-dog-doorbell" data-e14adj="t"&gt;Episode 398: Let Me Out Hooman! Bluetooth Dog Doorbell&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4126/episode-397-steam-powered-retropie-console" data-e14adj="t"&gt;Episode 397: Steam Powered Retropie Console&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4043/episode-396-arduino-retro-led-matrix-handheld" data-e14adj="t"&gt;Episode 396: Arduino Retro LED Matrix Handheld&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4042/episode-395-raspberry-pi-stop-motion-machine" data-e14adj="t"&gt;Episode 395: Raspberry Pi Stop Motion Machine&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8531/episode-394-animatronic-glados-head-with-raspberry-pi" data-e14adj="t"&gt;Episode 394: Animatronic GLaDOS Head with Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4125/episode-393-gameboy-walkman" data-e14adj="t"&gt;Episode 393: GameBoy Walkman&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4191/episode-392-multi-line-telephone-intercom" data-e14adj="t"&gt;Episode 392: Multi-Line Telephone Intercom&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4124/episode-391-first-person-view-rc-car-with-ps1-steering-wheel" data-e14adj="t"&gt;Episode 391: First Person View RC Car with PS2 Steering Wheel&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4122/episode-390-retro-texting-smart-watch-of-the-future" data-e14adj="t"&gt;Episode 390: Retro Texting Smart Watch of the Future!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4120/episode-389-playstation-classic-portable-prototype" data-e14adj="t"&gt;Episode 389: PlayStation Classic Portable Prototype&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8519/episode-388-fpga-midi-music-synthesizer" data-e14adj="t"&gt;Episode 388: FPGA MIDI Music Synthesizer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4057/episode-387-rotocell---the-rotary-cell-phone-of-the-future" data-e14adj="t"&gt;Episode 387: Rotocell - The Rotary Cell Phone of the Future!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4038/episode-386-xybernaut-wearable-pc" data-e14adj="t"&gt;Episode 386: Xybernaut Wearable PC&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4117/episode-385-20-pcb-design-pitfalls" data-e14adj="t"&gt;Episode 385: 20 PCB Design Pitfalls&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4035/episode-384-retro-gaming-handheld-without-a-pcb" data-e14adj="t"&gt;Episode 384: Retro Gaming Handheld Without a PCB&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4058/episode-383-gameboy-wireless-link-cable-dmg1" data-e14adj="t"&gt;Episode 383: Gameboy Wireless Link Cable (DMG1)&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8501/episode-382-modding-a-super-8-camera-into-a-digital" data-e14adj="t"&gt;Episode 382: Modding a Super 8 Camera into a Digital&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4067/episode-381-reverse-music-box" data-e14adj="t"&gt;Episode 381: Reverse Music Box&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4039/episode-380-nes-zapper-on-retropie" data-e14adj="t"&gt;Episode 380: NES Zapper on RetroPie&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4036/episode-379-macroscope-soldering-tool" data-e14adj="t"&gt;Episode 379: Macroscope Soldering Tool&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8500/episode-378-invader-zim-animatronic-gir" data-e14adj="t"&gt;Episode 378: Invader ZIM Animatronic GIR&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4034/episode-377-altair-8800-replica" data-e14adj="t"&gt;Episode 377: Altair 8800 Replica&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4028/episode-376-4d-gaming-with-the-matrix-creator" data-e14adj="t"&gt;Episode 376: 4D Gaming with the Matrix Creator&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4025/episode-375-hacked-fetal-detector-music-synthesizer" data-e14adj="t"&gt;Episode 375: Hacked Fetal Detector Music Synthesizer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4008/episode-374-raspberry-pi-donkey-kong-holiday-ornament" data-e14adj="t"&gt;Episode 374: Raspberry Pi Donkey Kong Holiday Ornament&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3992/episode-373-raspberry-pi-fallout-terminal-pc" data-e14adj="t"&gt;Episode 373: Raspberry Pi Fallout Terminal PC&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8497/episode-372-raspberry-pi-auto-etch-a-sketch" data-e14adj="t"&gt;Episode 372: Raspberry Pi Auto Etch A Sketch&lt;span class="emoticon" data-url="https://community.element14.com/cfs-file/__key/system/emoji/2122.svg" title="Tm"&gt;&amp;#x2122;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3990/episode-371-fpga-game-genie-for-atari-2600" data-e14adj="t"&gt;Episode 371: FPGA &amp;quot;Game Genie&amp;quot; for Atari 2600&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3989/episode-370-raspberry-pi-noaa-satellite-receiver" data-e14adj="t"&gt;Episode 370: Raspberry Pi NOAA Satellite Receiver&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3979/episode-369-recreating-the-atari-portfolio" data-e14adj="t"&gt;Episode 369: Recreating the Atari Portfolio&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3977/episode-368-arduino-automatic-wire-cutter-and-stripper" data-e14adj="t"&gt;Episode 368: Arduino Automatic Wire Cutter and Stripper&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3968/episode-367-most-useless-iot-device-ever---part-2" data-e14adj="t"&gt;Episode 367: Most Useless IoT Device Ever - Part 2&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3960/episode-366-infinity-icosahedron" data-e14adj="t"&gt;Episode 366: Infinity Icosahedron&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3949/episode-365-twilight-zone-fortune-telling-machine" data-e14adj="t"&gt;Episode 365: Twilight Zone Fortune Telling Machine&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3934/episode-364-raspberry-pi-virtual-reality-arcade" data-e14adj="t"&gt;Episode 364: Raspberry Pi Virtual Reality Arcade #VR&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3920/episode-363-add-a-motor-to-your-bike-with-arduino" data-e14adj="t"&gt;Episode 363 - Add a Motor to your Bike with Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3912/episode-362-most-worthless-iot-device-ever---part-1" data-e14adj="t"&gt;Episode 362: Most Worthless IoT Device Ever Pt. 1&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3903/episode-361-r-o-b-rebuild-and-upgrade" data-e14adj="t"&gt;Episode 361: R.O.B Rebuild and Upgrade&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3887/episode-360-make-your-own-raspberry-pi-cell-phone" data-e14adj="t"&gt;Episode 360: Make Your Own Raspberry Pi Cell Phone&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3875/episode-359-make-your-own-cnc-pyrography-wood-burner" data-e14adj="t"&gt;Episode 359: Make Your Own CNC Pyrography Wood Burner&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3863/episode-358-the-shrimp-of-terror" data-e14adj="t"&gt;Episode 358: The Shrimp of Terror!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3848/episode-357-raspberry-pi-asteroid-tracker" data-e14adj="t"&gt;Episode 357: Raspberry Pi Asteroid Tracker&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8491/episode-356-bank-to-the-future-with-arduino-ti" data-e14adj="t"&gt;Episode 356: Bank to the Future with Arduino &amp;amp; TI&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3826/episode-355-raspberry-pi-pirate-radio" data-e14adj="t"&gt;Episode 355: Raspberry Pi Pirate Radio&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3816/episode-354-tiny-vacuum-forming-machine" data-e14adj="t"&gt;Episode 354: Tiny Vacuum Forming Machine&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3809/episode-353-program-your-own-fpga-video-game" data-e14adj="t"&gt;Episode 353: Program Your Own FPGA Video Game&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3784/episode-352-pripyat---diy-geiger-counter" data-e14adj="t"&gt;Episode 352: Pripyat - DIY Geiger Counter&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3747/episode-349-raspberry-pi-selfie-rocket" data-e14adj="t"&gt;Episode 349: Raspberry Pi Selfie Rocket&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/benheck/ben-heck-exclusive/w/documents/9678/the-ben-heck-show-episode-archive" data-e14adj="t"&gt;See All Previous Episodes&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: episode releases, friday_release_archive, element14 presents, project videos, episodes, friday releases, episode release archive, episode archive, friday release archive, project_videos&lt;/div&gt;
</description></item><item><title>Simulating Prey Vision with Raspberry Pi 5: A Dual Camera Perception Experiment</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72068/simulating-prey-vision-with-raspberry-pi-5-a-dual-camera-perception-experiment</link><pubDate>Thu, 04 Jun 2026 12:16:49 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:0b8a68af-2642-443f-86b4-b8ea298b5075</guid><dc:creator>e14sbhargav</dc:creator><description>Current Revision posted to Documents by e14sbhargav on 6/4/2026 12:16:49 PM&lt;br /&gt;
&lt;p&gt;This project explores what human vision might feel like if it worked like that of a prey animal, using a Raspberry Pi 5 and dual wide‑angle NoIR cameras to recreate side‑mounted eyes in real time. By stitching two camera feeds together and testing the result through FPV goggles, Clem shows how peripheral awareness increases while depth perception and coordination quickly fall apart, turning simple tasks into a genuine challenge. The result is a technically simple but mentally demanding experiment in perception, you can find the episode and supporting files below.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq98ga3h0"&gt;We Have Our Eyes on This Project&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://youtu.be/BpULV2dXubg"&gt;https://youtu.be/BpULV2dXubg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What would the world look like if human vision worked the way it does for prey animals? Not metaphorically, not philosophically, but physically, if the eyes were mounted on the sides of the head instead of facing forward. That deceptively simple question is the foundation of Clem&amp;rsquo;s latest experiment, a project that blends biology, perception science, and hands-on electronics into an experience that is as uncomfortable as it is illuminating.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/frame_5F00_000006.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi30"&gt;Predators, Prey, and Perspective&lt;/h2&gt;
&lt;p&gt;Eye placement is not an aesthetic accident of evolution; it is a survival strategy. Predators, humans included, have forward-facing eyes that prioritise depth perception and focus. Prey animals such as rabbits or deer trade that precision for awareness, gaining an enormous field of view at the cost of frontal clarity. Clem&amp;rsquo;s project sets out to explore that trade-off directly, asking not just &lt;em&gt;what&lt;/em&gt; prey animals see, but how it &lt;em&gt;feels&lt;/em&gt; to operate with such a radically different visual system.&lt;/p&gt;
&lt;p&gt;Rather than resorting to anything biologically questionable, the project takes a decidedly non-gory approach. Cameras, computing, and some carefully considered image processing do the heavy lifting, allowing a human brain to be dropped, temporarily, into a prey-like visual configuration.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/frame_5F00_000030.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi31"&gt;The Hardware Foundation&lt;/h2&gt;
&lt;p&gt;At the centre of the build is a Raspberry Pi 5, chosen not just because it supports two camera connectors, but because it has enough processing headroom to handle real-time video manipulation. Two wide-angle NoIR camera modules act as surrogate eyes, each mounted to the side rather than the front, deliberately exaggerating peripheral vision. Wide lenses are essential here, as prey animals typically enjoy a much broader field of view than humans ever do.&lt;/p&gt;
&lt;p&gt;The cameras feed directly into the Raspberry Pi, which outputs video either to a conventional HDMI display during development or to a pair of FPV goggles for the full experience. Power delivery and cabling are intentionally simple, with the focus kept firmly on perception rather than polish.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/frame_5F00_000076.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi32"&gt;From Two Eyes to One View&lt;/h2&gt;
&lt;p&gt;The technical heart of the project lies in how the two camera feeds are combined. Rather than attempting any complex depth reconstruction, the system relies on simple interpolation, mirroring how the brain blends overlapping visual information from each eye. As Clem explains, this same process is why humans do not normally see their own nose, even though it sits squarely within the field of view.&lt;/p&gt;
&lt;p&gt;This philosophy is reflected in the Python code driving the system. Frames are captured simultaneously from both cameras, normalised into a common colour format, and optionally rotated to account for physical mounting. The real trick happens in the fusion stage:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;def brain_fusion(left, right, fusion_width):
    h, w, c = left.shape
    combined_width = w*2 - fusion_width
    combined = np.zeros((h, combined_width, c), dtype=np.uint8)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The overlap region, the &amp;ldquo;fusion width&amp;rdquo;, acts as a crude stand-in for binocular blending. By adjusting it, Clem can tune how much the two images bleed into one another, directly influencing how disorienting the result becomes.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/frame_5F00_000091.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi33"&gt;Displays, Limitations, and Workarounds&lt;/h2&gt;
&lt;p&gt;Getting the video where it needs to go turns out to be one of the project&amp;rsquo;s more interesting challenges. The FPV goggles expect composite video, while the development setup relies on HDMI. Unfortunately, the Raspberry Pi cannot drive both simultaneously. Enabling composite output disables HDMI entirely.&lt;/p&gt;
&lt;p&gt;The workaround is a very maker-style solution: network streaming. The Raspberry Pi runs a lightweight web server inside the vision script, streaming the processed video over the local network. A second computer simply opens the stream in a browser and records the screen. It is inelegant, but effective, and it preserves the integrity of the experiment.&lt;/p&gt;
&lt;p&gt;This same streaming infrastructure hints at future flexibility. Once the video exists as a network stream, it can be viewed, recorded, or even post-processed elsewhere without touching the core vision code.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/frame_5F00_000163.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi34"&gt;Strapping It On: The Human Test&lt;/h2&gt;
&lt;p&gt;With the system assembled, the real experiment begins. The cameras and Raspberry Pi are mounted directly onto the FPV goggles, with 3D-printed parts doing little more than holding everything in place and keeping cables out of the way. Ironically, the abundance of cables quickly becomes irrelevant: with eyes effectively on the sides of the head, anything directly in front simply fades from awareness.&lt;/p&gt;
&lt;p&gt;The first test configuration places the cameras at a more animal-like angle, around 70 degrees. In this mode, everyday tasks become difficult but not impossible. Measuring the voltage of a AAA battery, writing the value down, and packing everything away can be done, albeit slowly and with exaggerated head movements. The brain begins to adapt, treating this strange stitched panorama as a new normal.&lt;/p&gt;
&lt;p&gt;Push the cameras out to a full 90 degrees, however, and the experience deteriorates rapidly. Frontal vision all but disappears. Tasks rely almost entirely on touch. Even reading a multimeter display becomes a struggle. The discomfort escalates from simple disorientation to genuine nausea, accompanied by headaches that linger long after the goggles come off.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Beyond the discomfort, the experiment reveals something subtle about animal behaviour. Zig-zagging prey movements, often dismissed as panic, suddenly make sense. With side-mounted vision, maintaining visual contact with a threat means constant changes in direction. What looks erratic from the outside is, in fact, a logical response to a very different sensory input.&lt;/p&gt;
&lt;p&gt;Equally revealing is how quickly the human brain attempts to adapt. Given enough time, it is clear that operating with side-mounted vision is possible. It is just profoundly unpleasant for a brain evolved to expect depth and focus straight ahead.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/frame_5F00_000294.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi36"&gt;Is It Worth Building?&lt;/h2&gt;
&lt;p&gt;As a practical tool, the answer is simple: no. The system is not useful, comfortable, or efficient. But that is entirely beside the point. The real value lies in the experience. This project turns an abstract biological concept into something immediate and visceral, forcing a direct confrontation with how deeply perception shapes behaviour.&lt;/p&gt;
&lt;p&gt;For anyone interested in human vision, animal biology, or the limits of adaptation, Clem&amp;rsquo;s side-eyed experiment is a reminder that sometimes the most meaningful projects are the ones that exist purely to be felt, not perfected.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq96eo288"&gt;Supporting Files and Links&lt;/h2&gt;
&lt;p&gt;-&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/m/files/151420"&gt;Episode 717 resources - Simulating Prey Vision with Raspberry Pi 5: A Dual Camera Perception Experiment&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1jq96dt4n7"&gt;Bill of Materials&lt;/h2&gt;
&lt;table class="e14-product-bom-main"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;a id="e14-product-link-6fc94" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4255998,4132321~2,4263045,3107129&amp;nsku=81AK1346,62AK8685~2,82AK3960,07AH1274&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_BUY_KIT" class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('6fc94'));" data-farnell="4255998,4132321~2,4263045,3107129" data-newark="81AK1346,62AK8685~2,82AK3960,07AH1274" data-comoverride="" data-cmpoverride="" data-cpc=",undefined~2,,," data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RPI5-4GB-SINGLE&lt;/td&gt;
&lt;td&gt;Raspberry Pi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-72899" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4255998&amp;nsku=81AK1346&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('72899'));" data-farnell="4255998" data-newark="81AK1346" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Raspberry Pi Wide NoIR Camera Module3, 11.9MP, Wide Lens, 2.75mm Focal Length, Raspberry Pi Computer&lt;/td&gt;
&lt;td&gt;Raspberry Pi&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-cf7b7" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4132321~2&amp;nsku=62AK8685~2&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('cf7b7'));" data-farnell="4132321~2" data-newark="62AK8685~2" data-comoverride="" data-cmpoverride="" data-cpc="undefined~2" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Power Supply, USB-C, 5.1 V, 5 A, Black, EU Plug&lt;/td&gt;
&lt;td&gt;Raspberry Pi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-4b5ca" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4263045&amp;nsku=82AK3960&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('4b5ca'));" data-farnell="4263045" data-newark="82AK3960" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Raspberry Pi Accessory, Raspberry Pi 4 Model B HDMI Cable, Micro HDMI To HDMI, 2m, Black&lt;/td&gt;
&lt;td&gt;Raspberry Pi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-163fa" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3107129&amp;nsku=07AH1274&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('163fa'));" data-farnell="3107129" data-newark="07AH1274" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FPV goggles with AV input&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="xs-hide"&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: vision perception experiment, bio inspired electronics, side mounted vision simulation, Raspberry Pi camera project, e14presents_mayermakes, prey animal vision, dual camera vision experiment, FPV goggles build, wide angle camera Raspberry Pi, maker electronics build, Raspberry Pi 5 project, image stitching Python, OpenCV Raspberry Pi, computer vision maker project, friday_release, human perception simulation&lt;/div&gt;
</description></item><item><title>Simulating Prey Vision with Raspberry Pi 5: A Dual Camera Perception Experiment</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72068/simulating-prey-vision-with-raspberry-pi-5-a-dual-camera-perception-experiment/revision/4</link><pubDate>Thu, 04 Jun 2026 12:16:49 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:0b8a68af-2642-443f-86b4-b8ea298b5075</guid><dc:creator>cstanton</dc:creator><description>Revision 4 posted to Documents by cstanton on 6/4/2026 12:16:49 PM&lt;br /&gt;
&lt;p&gt;This project explores what human vision might feel like if it worked like that of a prey animal, using a Raspberry Pi 5 and dual wide‑angle NoIR cameras to recreate side‑mounted eyes in real time. By stitching two camera feeds together and testing the result through FPV goggles, Clem shows how peripheral awareness increases while depth perception and coordination quickly fall apart, turning simple tasks into a genuine challenge. The result is a technically simple but mentally demanding experiment in perception, you can find the episode and supporting files below.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq98ga3h0"&gt;We Have Our Eyes on This Project&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://youtu.be/BpULV2dXubg"&gt;https://youtu.be/BpULV2dXubg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What would the world look like if human vision worked the way it does for prey animals? Not metaphorically, not philosophically, but physically, if the eyes were mounted on the sides of the head instead of facing forward. That deceptively simple question is the foundation of Clem&amp;rsquo;s latest experiment, a project that blends biology, perception science, and hands-on electronics into an experience that is as uncomfortable as it is illuminating.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/frame_5F00_000006.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi30"&gt;Predators, Prey, and Perspective&lt;/h2&gt;
&lt;p&gt;Eye placement is not an aesthetic accident of evolution; it is a survival strategy. Predators, humans included, have forward-facing eyes that prioritise depth perception and focus. Prey animals such as rabbits or deer trade that precision for awareness, gaining an enormous field of view at the cost of frontal clarity. Clem&amp;rsquo;s project sets out to explore that trade-off directly, asking not just &lt;em&gt;what&lt;/em&gt; prey animals see, but how it &lt;em&gt;feels&lt;/em&gt; to operate with such a radically different visual system.&lt;/p&gt;
&lt;p&gt;Rather than resorting to anything biologically questionable, the project takes a decidedly non-gory approach. Cameras, computing, and some carefully considered image processing do the heavy lifting, allowing a human brain to be dropped, temporarily, into a prey-like visual configuration.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/frame_5F00_000030.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi31"&gt;The Hardware Foundation&lt;/h2&gt;
&lt;p&gt;At the centre of the build is a Raspberry Pi 5, chosen not just because it supports two camera connectors, but because it has enough processing headroom to handle real-time video manipulation. Two wide-angle NoIR camera modules act as surrogate eyes, each mounted to the side rather than the front, deliberately exaggerating peripheral vision. Wide lenses are essential here, as prey animals typically enjoy a much broader field of view than humans ever do.&lt;/p&gt;
&lt;p&gt;The cameras feed directly into the Raspberry Pi, which outputs video either to a conventional HDMI display during development or to a pair of FPV goggles for the full experience. Power delivery and cabling are intentionally simple, with the focus kept firmly on perception rather than polish.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/frame_5F00_000076.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi32"&gt;From Two Eyes to One View&lt;/h2&gt;
&lt;p&gt;The technical heart of the project lies in how the two camera feeds are combined. Rather than attempting any complex depth reconstruction, the system relies on simple interpolation, mirroring how the brain blends overlapping visual information from each eye. As Clem explains, this same process is why humans do not normally see their own nose, even though it sits squarely within the field of view.&lt;/p&gt;
&lt;p&gt;This philosophy is reflected in the Python code driving the system. Frames are captured simultaneously from both cameras, normalised into a common colour format, and optionally rotated to account for physical mounting. The real trick happens in the fusion stage:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;def brain_fusion(left, right, fusion_width):
    h, w, c = left.shape
    combined_width = w*2 - fusion_width
    combined = np.zeros((h, combined_width, c), dtype=np.uint8)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The overlap region, the &amp;ldquo;fusion width&amp;rdquo;, acts as a crude stand-in for binocular blending. By adjusting it, Clem can tune how much the two images bleed into one another, directly influencing how disorienting the result becomes.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/frame_5F00_000091.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi33"&gt;Displays, Limitations, and Workarounds&lt;/h2&gt;
&lt;p&gt;Getting the video where it needs to go turns out to be one of the project&amp;rsquo;s more interesting challenges. The FPV goggles expect composite video, while the development setup relies on HDMI. Unfortunately, the Raspberry Pi cannot drive both simultaneously. Enabling composite output disables HDMI entirely.&lt;/p&gt;
&lt;p&gt;The workaround is a very maker-style solution: network streaming. The Raspberry Pi runs a lightweight web server inside the vision script, streaming the processed video over the local network. A second computer simply opens the stream in a browser and records the screen. It is inelegant, but effective, and it preserves the integrity of the experiment.&lt;/p&gt;
&lt;p&gt;This same streaming infrastructure hints at future flexibility. Once the video exists as a network stream, it can be viewed, recorded, or even post-processed elsewhere without touching the core vision code.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/frame_5F00_000163.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi34"&gt;Strapping It On: The Human Test&lt;/h2&gt;
&lt;p&gt;With the system assembled, the real experiment begins. The cameras and Raspberry Pi are mounted directly onto the FPV goggles, with 3D-printed parts doing little more than holding everything in place and keeping cables out of the way. Ironically, the abundance of cables quickly becomes irrelevant: with eyes effectively on the sides of the head, anything directly in front simply fades from awareness.&lt;/p&gt;
&lt;p&gt;The first test configuration places the cameras at a more animal-like angle, around 70 degrees. In this mode, everyday tasks become difficult but not impossible. Measuring the voltage of a AAA battery, writing the value down, and packing everything away can be done, albeit slowly and with exaggerated head movements. The brain begins to adapt, treating this strange stitched panorama as a new normal.&lt;/p&gt;
&lt;p&gt;Push the cameras out to a full 90 degrees, however, and the experience deteriorates rapidly. Frontal vision all but disappears. Tasks rely almost entirely on touch. Even reading a multimeter display becomes a struggle. The discomfort escalates from simple disorientation to genuine nausea, accompanied by headaches that linger long after the goggles come off.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Beyond the discomfort, the experiment reveals something subtle about animal behaviour. Zig-zagging prey movements, often dismissed as panic, suddenly make sense. With side-mounted vision, maintaining visual contact with a threat means constant changes in direction. What looks erratic from the outside is, in fact, a logical response to a very different sensory input.&lt;/p&gt;
&lt;p&gt;Equally revealing is how quickly the human brain attempts to adapt. Given enough time, it is clear that operating with side-mounted vision is possible. It is just profoundly unpleasant for a brain evolved to expect depth and focus straight ahead.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/frame_5F00_000294.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi36"&gt;Is It Worth Building?&lt;/h2&gt;
&lt;p&gt;As a practical tool, the answer is simple: no. The system is not useful, comfortable, or efficient. But that is entirely beside the point. The real value lies in the experience. This project turns an abstract biological concept into something immediate and visceral, forcing a direct confrontation with how deeply perception shapes behaviour.&lt;/p&gt;
&lt;p&gt;For anyone interested in human vision, animal biology, or the limits of adaptation, Clem&amp;rsquo;s side-eyed experiment is a reminder that sometimes the most meaningful projects are the ones that exist purely to be felt, not perfected.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq96eo288"&gt;Supporting Files and Links&lt;/h2&gt;
&lt;p&gt;-&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/m/files/151420"&gt;Episode 717 resources - Simulating Prey Vision with Raspberry Pi 5: A Dual Camera Perception Experiment&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1jq96dt4n7"&gt;Bill of Materials&lt;/h2&gt;
&lt;table class="e14-product-bom-main"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;a id="e14-product-link-ebf30" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4255998,4132321~2,4263045,3107129&amp;nsku=81AK1346,62AK8685~2,82AK3960,07AH1274&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_BUY_KIT" class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('ebf30'));" data-farnell="4255998,4132321~2,4263045,3107129" data-newark="81AK1346,62AK8685~2,82AK3960,07AH1274" data-comoverride="" data-cmpoverride="" data-cpc=",undefined~2,,," data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RPI5-4GB-SINGLE&lt;/td&gt;
&lt;td&gt;Raspberry Pi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-52e90" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4255998&amp;nsku=81AK1346&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('52e90'));" data-farnell="4255998" data-newark="81AK1346" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Raspberry Pi Wide NoIR Camera Module3, 11.9MP, Wide Lens, 2.75mm Focal Length, Raspberry Pi Computer&lt;/td&gt;
&lt;td&gt;Raspberry Pi&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-63553" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4132321~2&amp;nsku=62AK8685~2&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('63553'));" data-farnell="4132321~2" data-newark="62AK8685~2" data-comoverride="" data-cmpoverride="" data-cpc="undefined~2" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Power Supply, USB-C, 5.1 V, 5 A, Black, EU Plug&lt;/td&gt;
&lt;td&gt;Raspberry Pi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-6b6aa" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4263045&amp;nsku=82AK3960&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('6b6aa'));" data-farnell="4263045" data-newark="82AK3960" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Raspberry Pi Accessory, Raspberry Pi 4 Model B HDMI Cable, Micro HDMI To HDMI, 2m, Black&lt;/td&gt;
&lt;td&gt;Raspberry Pi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-f30c6" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3107129&amp;nsku=07AH1274&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('f30c6'));" data-farnell="3107129" data-newark="07AH1274" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FPV goggles with AV input&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="xs-hide"&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: vision perception experiment, bio inspired electronics, side mounted vision simulation, Raspberry Pi camera project, e14presents_mayermakes, prey animal vision, dual camera vision experiment, FPV goggles build, wide angle camera Raspberry Pi, maker electronics build, Raspberry Pi 5 project, image stitching Python, OpenCV Raspberry Pi, computer vision maker project, friday_release, human perception simulation&lt;/div&gt;
</description></item><item><title>Simulating Prey Vision with Raspberry Pi 5: A Dual Camera Perception Experiment</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72068/simulating-prey-vision-with-raspberry-pi-5-a-dual-camera-perception-experiment/revision/3</link><pubDate>Thu, 04 Jun 2026 11:47:07 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:0b8a68af-2642-443f-86b4-b8ea298b5075</guid><dc:creator>cstanton</dc:creator><description>Revision 3 posted to Documents by cstanton on 6/4/2026 11:47:07 AM&lt;br /&gt;
&lt;p&gt;.&lt;/p&gt;
&lt;p&gt;We Have Our Eyes on This Project&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/BpULV2dXubg"&gt;https://youtu.be/BpULV2dXubg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;What would the world look like if human vision worked the way it does for prey animals? Not metaphorically, not philosophically, but physically&amp;mdash;if the eyes were mounted on the sides of the head instead of facing forward. That deceptively simple question is the foundation of Clem&amp;rsquo;s latest experiment, a project that blends biology, perception science, and hands-on electronics into an experience that is as uncomfortable as it is illuminating.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi30"&gt;Predators, Prey, and Perspective&lt;/h2&gt;
&lt;p&gt;Eye placement is not an aesthetic accident of evolution; it is a survival strategy. Predators&amp;mdash;humans included&amp;mdash;have forward-facing eyes that prioritise depth perception and focus. Prey animals such as rabbits or deer trade that precision for awareness, gaining an enormous field of view at the cost of frontal clarity. Clem&amp;rsquo;s project sets out to explore that trade-off directly, asking not just &lt;em&gt;what&lt;/em&gt; prey animals see, but how it &lt;em&gt;feels&lt;/em&gt; to operate with such a radically different visual system.&lt;/p&gt;
&lt;p&gt;Rather than resorting to anything biologically questionable, the project takes a decidedly non-gory approach. Cameras, computing, and some carefully considered image processing do the heavy lifting, allowing a human brain to be dropped&amp;mdash;temporarily&amp;mdash;into a prey-like visual configuration.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi31"&gt;The Hardware Foundation&lt;/h2&gt;
&lt;p&gt;At the centre of the build is a Raspberry Pi 5, chosen not just because it supports two camera connectors, but because it has enough processing headroom to handle real-time video manipulation. Two wide-angle NoIR camera modules act as surrogate eyes, each mounted to the side rather than the front, deliberately exaggerating peripheral vision. Wide lenses are essential here, as prey animals typically enjoy a much broader field of view than humans ever do.&lt;/p&gt;
&lt;p&gt;The cameras feed directly into the Raspberry Pi, which outputs video either to a conventional HDMI display during development or to a pair of FPV goggles for the full experience. Power delivery and cabling are intentionally simple, with the focus kept firmly on perception rather than polish.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi32"&gt;From Two Eyes to One View&lt;/h2&gt;
&lt;p&gt;The technical heart of the project lies in how the two camera feeds are combined. Rather than attempting any complex depth reconstruction, the system relies on simple interpolation&amp;mdash;mirroring how the brain blends overlapping visual information from each eye. As Clem explains, this same process is why humans do not normally see their own nose, even though it sits squarely within the field of view.&lt;/p&gt;
&lt;p&gt;This philosophy is reflected in the Python code driving the system. Frames are captured simultaneously from both cameras, normalised into a common colour format, and optionally rotated to account for physical mounting. The real trick happens in the fusion stage:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;def brain_fusion(left, right, fusion_width):
    h, w, c = left.shape
    combined_width = w*2 - fusion_width
    combined = np.zeros((h, combined_width, c), dtype=np.uint8)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The overlap region&amp;mdash;the &amp;ldquo;fusion width&amp;rdquo;&amp;mdash;acts as a crude stand-in for binocular blending. By adjusting it, Clem can tune how much the two images bleed into one another, directly influencing how disorienting the result becomes.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi33"&gt;Displays, Limitations, and Workarounds&lt;/h2&gt;
&lt;p&gt;Getting the video where it needs to go turns out to be one of the project&amp;rsquo;s more interesting challenges. The FPV goggles expect composite video, while the development setup relies on HDMI. Unfortunately, the Raspberry Pi cannot drive both simultaneously. Enabling composite output disables HDMI entirely.&lt;/p&gt;
&lt;p&gt;The workaround is a very maker-style solution: network streaming. The Raspberry Pi runs a lightweight web server inside the vision script, streaming the processed video over the local network. A second computer simply opens the stream in a browser and records the screen. It is inelegant, but effective&amp;mdash;and it preserves the integrity of the experiment.&lt;/p&gt;
&lt;p&gt;This same streaming infrastructure hints at future flexibility. Once the video exists as a network stream, it can be viewed, recorded, or even post-processed elsewhere without touching the core vision code.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi34"&gt;Strapping It On: The Human Test&lt;/h2&gt;
&lt;p&gt;With the system assembled, the real experiment begins. The cameras and Raspberry Pi are mounted directly onto the FPV goggles, with 3D-printed parts doing little more than holding everything in place and keeping cables out of the way. Ironically, the abundance of cables quickly becomes irrelevant: with eyes effectively on the sides of the head, anything directly in front simply fades from awareness.&lt;/p&gt;
&lt;p&gt;The first test configuration places the cameras at a more animal-like angle&amp;mdash;around 70 degrees. In this mode, everyday tasks become difficult but not impossible. Measuring the voltage of a AAA battery, writing the value down, and packing everything away can be done, albeit slowly and with exaggerated head movements. The brain begins to adapt, treating this strange stitched panorama as a new normal.&lt;/p&gt;
&lt;p&gt;Push the cameras out to a full 90 degrees, however, and the experience deteriorates rapidly. Frontal vision all but disappears. Tasks rely almost entirely on touch. Even reading a multimeter display becomes a struggle. The discomfort escalates from simple disorientation to genuine nausea, accompanied by headaches that linger long after the goggles come off.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi35"&gt;Unexpected Insights&lt;/h2&gt;
&lt;p&gt;Beyond the discomfort, the experiment reveals something subtle about animal behaviour. Zig-zagging prey movements, often dismissed as panic, suddenly make sense. With side-mounted vision, maintaining visual contact with a threat means constant changes in direction. What looks erratic from the outside is, in fact, a logical response to a very different sensory input.&lt;/p&gt;
&lt;p&gt;Equally revealing is how quickly the human brain attempts to adapt. Given enough time, it is clear that operating with side-mounted vision is possible. It is just profoundly unpleasant for a brain evolved to expect depth and focus straight ahead.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi36"&gt;Is It Worth Building?&lt;/h2&gt;
&lt;p&gt;As a practical tool, the answer is simple: no. The system is not useful, comfortable, or efficient. But that is entirely beside the point. The real value lies in the experience. This project turns an abstract biological concept into something immediate and visceral, forcing a direct confrontation with how deeply perception shapes behaviour.&lt;/p&gt;
&lt;p&gt;For anyone interested in human vision, animal biology, or the limits of adaptation, Clem&amp;rsquo;s side-eyed experiment is a reminder that sometimes the most meaningful projects are the ones that exist purely to be felt, not perfected.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq96eo288"&gt;Supporting Files and Links&lt;/h2&gt;
&lt;p&gt;-&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1jq96dt4n7"&gt;Bill of Materials&lt;/h2&gt;
&lt;table class="e14-product-bom-main"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;a id="e14-product-link-0d9f2" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4255998,4132321~2,4263045,3107129&amp;nsku=81AK1346,62AK8685~2,82AK3960,07AH1274&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_BUY_KIT" class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('0d9f2'));" data-farnell="4255998,4132321~2,4263045,3107129" data-newark="81AK1346,62AK8685~2,82AK3960,07AH1274" data-comoverride="" data-cmpoverride="" data-cpc=",undefined~2,,," data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RPI5-4GB-SINGLE&lt;/td&gt;
&lt;td&gt;Raspberry Pi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-edd69" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4255998&amp;nsku=81AK1346&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('edd69'));" data-farnell="4255998" data-newark="81AK1346" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Raspberry Pi Wide NoIR Camera Module3, 11.9MP, Wide Lens, 2.75mm Focal Length, Raspberry Pi Computer&lt;/td&gt;
&lt;td&gt;Raspberry Pi&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-37721" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4132321~2&amp;nsku=62AK8685~2&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('37721'));" data-farnell="4132321~2" data-newark="62AK8685~2" data-comoverride="" data-cmpoverride="" data-cpc="undefined~2" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Power Supply, USB-C, 5.1 V, 5 A, Black, EU Plug&lt;/td&gt;
&lt;td&gt;Raspberry Pi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-38b5a" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4263045&amp;nsku=82AK3960&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('38b5a'));" data-farnell="4263045" data-newark="82AK3960" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Raspberry Pi Accessory, Raspberry Pi 4 Model B HDMI Cable, Micro HDMI To HDMI, 2m, Black&lt;/td&gt;
&lt;td&gt;Raspberry Pi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-42711" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3107129&amp;nsku=07AH1274&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('42711'));" data-farnell="3107129" data-newark="07AH1274" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FPV goggles with AV input&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="xs-hide"&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;-&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Simulating Prey Vision with Raspberry Pi 5: A Dual Camera Perception Experiment</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72068/simulating-prey-vision-with-raspberry-pi-5-a-dual-camera-perception-experiment/revision/2</link><pubDate>Thu, 04 Jun 2026 11:31:54 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:0b8a68af-2642-443f-86b4-b8ea298b5075</guid><dc:creator>cstanton</dc:creator><description>Revision 2 posted to Documents by cstanton on 6/4/2026 11:31:54 AM&lt;br /&gt;
&lt;p&gt;What would the world look like if human vision worked the way it does for prey animals? Not metaphorically, not philosophically, but physically&amp;mdash;if the eyes were mounted on the sides of the head instead of facing forward. That deceptively simple question is the foundation of Clem&amp;rsquo;s latest experiment, a project that blends biology, perception science, and hands-on electronics into an experience that is as uncomfortable as it is illuminating.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi30"&gt;Predators, Prey, and Perspective&lt;/h2&gt;
&lt;p&gt;Eye placement is not an aesthetic accident of evolution; it is a survival strategy. Predators&amp;mdash;humans included&amp;mdash;have forward-facing eyes that prioritise depth perception and focus. Prey animals such as rabbits or deer trade that precision for awareness, gaining an enormous field of view at the cost of frontal clarity. Clem&amp;rsquo;s project sets out to explore that trade-off directly, asking not just &lt;em&gt;what&lt;/em&gt; prey animals see, but how it &lt;em&gt;feels&lt;/em&gt; to operate with such a radically different visual system.&lt;/p&gt;
&lt;p&gt;Rather than resorting to anything biologically questionable, the project takes a decidedly non-gory approach. Cameras, computing, and some carefully considered image processing do the heavy lifting, allowing a human brain to be dropped&amp;mdash;temporarily&amp;mdash;into a prey-like visual configuration.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi31"&gt;The Hardware Foundation&lt;/h2&gt;
&lt;p&gt;At the centre of the build is a Raspberry Pi 5, chosen not just because it supports two camera connectors, but because it has enough processing headroom to handle real-time video manipulation. Two wide-angle NoIR camera modules act as surrogate eyes, each mounted to the side rather than the front, deliberately exaggerating peripheral vision. Wide lenses are essential here, as prey animals typically enjoy a much broader field of view than humans ever do.&lt;/p&gt;
&lt;p&gt;The cameras feed directly into the Raspberry Pi, which outputs video either to a conventional HDMI display during development or to a pair of FPV goggles for the full experience. Power delivery and cabling are intentionally simple, with the focus kept firmly on perception rather than polish.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi32"&gt;From Two Eyes to One View&lt;/h2&gt;
&lt;p&gt;The technical heart of the project lies in how the two camera feeds are combined. Rather than attempting any complex depth reconstruction, the system relies on simple interpolation&amp;mdash;mirroring how the brain blends overlapping visual information from each eye. As Clem explains, this same process is why humans do not normally see their own nose, even though it sits squarely within the field of view.&lt;/p&gt;
&lt;p&gt;This philosophy is reflected in the Python code driving the system. Frames are captured simultaneously from both cameras, normalised into a common colour format, and optionally rotated to account for physical mounting. The real trick happens in the fusion stage:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;def brain_fusion(left, right, fusion_width):
    h, w, c = left.shape
    combined_width = w*2 - fusion_width
    combined = np.zeros((h, combined_width, c), dtype=np.uint8)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The overlap region&amp;mdash;the &amp;ldquo;fusion width&amp;rdquo;&amp;mdash;acts as a crude stand-in for binocular blending. By adjusting it, Clem can tune how much the two images bleed into one another, directly influencing how disorienting the result becomes.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi33"&gt;Displays, Limitations, and Workarounds&lt;/h2&gt;
&lt;p&gt;Getting the video where it needs to go turns out to be one of the project&amp;rsquo;s more interesting challenges. The FPV goggles expect composite video, while the development setup relies on HDMI. Unfortunately, the Raspberry Pi cannot drive both simultaneously. Enabling composite output disables HDMI entirely.&lt;/p&gt;
&lt;p&gt;The workaround is a very maker-style solution: network streaming. The Raspberry Pi runs a lightweight web server inside the vision script, streaming the processed video over the local network. A second computer simply opens the stream in a browser and records the screen. It is inelegant, but effective&amp;mdash;and it preserves the integrity of the experiment.&lt;/p&gt;
&lt;p&gt;This same streaming infrastructure hints at future flexibility. Once the video exists as a network stream, it can be viewed, recorded, or even post-processed elsewhere without touching the core vision code.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi34"&gt;Strapping It On: The Human Test&lt;/h2&gt;
&lt;p&gt;With the system assembled, the real experiment begins. The cameras and Raspberry Pi are mounted directly onto the FPV goggles, with 3D-printed parts doing little more than holding everything in place and keeping cables out of the way. Ironically, the abundance of cables quickly becomes irrelevant: with eyes effectively on the sides of the head, anything directly in front simply fades from awareness.&lt;/p&gt;
&lt;p&gt;The first test configuration places the cameras at a more animal-like angle&amp;mdash;around 70 degrees. In this mode, everyday tasks become difficult but not impossible. Measuring the voltage of a AAA battery, writing the value down, and packing everything away can be done, albeit slowly and with exaggerated head movements. The brain begins to adapt, treating this strange stitched panorama as a new normal.&lt;/p&gt;
&lt;p&gt;Push the cameras out to a full 90 degrees, however, and the experience deteriorates rapidly. Frontal vision all but disappears. Tasks rely almost entirely on touch. Even reading a multimeter display becomes a struggle. The discomfort escalates from simple disorientation to genuine nausea, accompanied by headaches that linger long after the goggles come off.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi35"&gt;Unexpected Insights&lt;/h2&gt;
&lt;p&gt;Beyond the discomfort, the experiment reveals something subtle about animal behaviour. Zig-zagging prey movements, often dismissed as panic, suddenly make sense. With side-mounted vision, maintaining visual contact with a threat means constant changes in direction. What looks erratic from the outside is, in fact, a logical response to a very different sensory input.&lt;/p&gt;
&lt;p&gt;Equally revealing is how quickly the human brain attempts to adapt. Given enough time, it is clear that operating with side-mounted vision is possible. It is just profoundly unpleasant for a brain evolved to expect depth and focus straight ahead.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq95sqi36"&gt;Is It Worth Building?&lt;/h2&gt;
&lt;p&gt;As a practical tool, the answer is simple: no. The system is not useful, comfortable, or efficient. But that is entirely beside the point. The real value lies in the experience. This project turns an abstract biological concept into something immediate and visceral, forcing a direct confrontation with how deeply perception shapes behaviour.&lt;/p&gt;
&lt;p&gt;For anyone interested in human vision, animal biology, or the limits of adaptation, Clem&amp;rsquo;s side-eyed experiment is a reminder that sometimes the most meaningful projects are the ones that exist purely to be felt, not perfected.&lt;/p&gt;
&lt;h2 id="mcetoc_1jq96eo288"&gt;Supporting Files and Links&lt;/h2&gt;
&lt;p&gt;-&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1jq96dt4n7"&gt;Bill of Materials&lt;/h2&gt;
&lt;table class="e14-product-bom-main"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;a id="e14-product-link-c8c71" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4255998,4132321~2,4263045,3107129&amp;nsku=81AK1346,62AK8685~2,82AK3960,07AH1274&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_BUY_KIT" class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('c8c71'));" data-farnell="4255998,4132321~2,4263045,3107129" data-newark="81AK1346,62AK8685~2,82AK3960,07AH1274" data-comoverride="" data-cmpoverride="" data-cpc=",undefined~2,,," data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RPI5-4GB-SINGLE&lt;/td&gt;
&lt;td&gt;Raspberry Pi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-29413" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4255998&amp;nsku=81AK1346&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('29413'));" data-farnell="4255998" data-newark="81AK1346" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Raspberry Pi Wide NoIR Camera Module3, 11.9MP, Wide Lens, 2.75mm Focal Length, Raspberry Pi Computer&lt;/td&gt;
&lt;td&gt;Raspberry Pi&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-566d7" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4132321~2&amp;nsku=62AK8685~2&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('566d7'));" data-farnell="4132321~2" data-newark="62AK8685~2" data-comoverride="" data-cmpoverride="" data-cpc="undefined~2" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Power Supply, USB-C, 5.1 V, 5 A, Black, EU Plug&lt;/td&gt;
&lt;td&gt;Raspberry Pi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-268d1" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4263045&amp;nsku=82AK3960&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('268d1'));" data-farnell="4263045" data-newark="82AK3960" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Raspberry Pi Accessory, Raspberry Pi 4 Model B HDMI Cable, Micro HDMI To HDMI, 2m, Black&lt;/td&gt;
&lt;td&gt;Raspberry Pi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-285de" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3107129&amp;nsku=07AH1274&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('285de'));" data-farnell="3107129" data-newark="07AH1274" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FPV goggles with AV input&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="xs-hide"&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;-&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Simulating Prey Vision with Raspberry Pi 5: A Dual Camera Perception Experiment</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72068/simulating-prey-vision-with-raspberry-pi-5-a-dual-camera-perception-experiment/revision/1</link><pubDate>Thu, 04 Jun 2026 09:45:10 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:0b8a68af-2642-443f-86b4-b8ea298b5075</guid><dc:creator>cstanton</dc:creator><description>Revision 1 posted to Documents by cstanton on 6/4/2026 9:45:10 AM&lt;br /&gt;
&lt;p&gt;What would the world look like if human vision worked the way it does for prey animals? Not metaphorically, not philosophically, but physically&amp;mdash;if the eyes were mounted on the sides of the head instead of facing forward. That deceptively simple question is the foundation of Clem&amp;rsquo;s latest experiment, a project that blends biology, perception science, and hands-on electronics into an experience that is as uncomfortable as it is illuminating.&lt;/p&gt;
&lt;h2&gt;Predators, Prey, and Perspective&lt;/h2&gt;
&lt;p&gt;Eye placement is not an aesthetic accident of evolution; it is a survival strategy. Predators&amp;mdash;humans included&amp;mdash;have forward-facing eyes that prioritise depth perception and focus. Prey animals such as rabbits or deer trade that precision for awareness, gaining an enormous field of view at the cost of frontal clarity. Clem&amp;rsquo;s project sets out to explore that trade-off directly, asking not just &lt;em&gt;what&lt;/em&gt; prey animals see, but how it &lt;em&gt;feels&lt;/em&gt; to operate with such a radically different visual system.&lt;/p&gt;
&lt;p&gt;Rather than resorting to anything biologically questionable, the project takes a decidedly non-gory approach. Cameras, computing, and some carefully considered image processing do the heavy lifting, allowing a human brain to be dropped&amp;mdash;temporarily&amp;mdash;into a prey-like visual configuration.&lt;/p&gt;
&lt;h2&gt;The Hardware Foundation&lt;/h2&gt;
&lt;p&gt;At the centre of the build is a Raspberry Pi 5, chosen not just because it supports two camera connectors, but because it has enough processing headroom to handle real-time video manipulation. Two wide-angle NoIR camera modules act as surrogate eyes, each mounted to the side rather than the front, deliberately exaggerating peripheral vision. Wide lenses are essential here, as prey animals typically enjoy a much broader field of view than humans ever do.&lt;/p&gt;
&lt;p&gt;The cameras feed directly into the Raspberry Pi, which outputs video either to a conventional HDMI display during development or to a pair of FPV goggles for the full experience. Power delivery and cabling are intentionally simple, with the focus kept firmly on perception rather than polish.&lt;/p&gt;
&lt;h2&gt;From Two Eyes to One View&lt;/h2&gt;
&lt;p&gt;The technical heart of the project lies in how the two camera feeds are combined. Rather than attempting any complex depth reconstruction, the system relies on simple interpolation&amp;mdash;mirroring how the brain blends overlapping visual information from each eye. As Clem explains, this same process is why humans do not normally see their own nose, even though it sits squarely within the field of view.&lt;/p&gt;
&lt;p&gt;This philosophy is reflected in the Python code driving the system. Frames are captured simultaneously from both cameras, normalised into a common colour format, and optionally rotated to account for physical mounting. The real trick happens in the fusion stage:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;def brain_fusion(left, right, fusion_width):
    h, w, c = left.shape
    combined_width = w*2 - fusion_width
    combined = np.zeros((h, combined_width, c), dtype=np.uint8)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The overlap region&amp;mdash;the &amp;ldquo;fusion width&amp;rdquo;&amp;mdash;acts as a crude stand-in for binocular blending. By adjusting it, Clem can tune how much the two images bleed into one another, directly influencing how disorienting the result becomes.&lt;/p&gt;
&lt;h2&gt;Displays, Limitations, and Workarounds&lt;/h2&gt;
&lt;p&gt;Getting the video where it needs to go turns out to be one of the project&amp;rsquo;s more interesting challenges. The FPV goggles expect composite video, while the development setup relies on HDMI. Unfortunately, the Raspberry Pi cannot drive both simultaneously. Enabling composite output disables HDMI entirely.&lt;/p&gt;
&lt;p&gt;The workaround is a very maker-style solution: network streaming. The Raspberry Pi runs a lightweight web server inside the vision script, streaming the processed video over the local network. A second computer simply opens the stream in a browser and records the screen. It is inelegant, but effective&amp;mdash;and it preserves the integrity of the experiment.&lt;/p&gt;
&lt;p&gt;This same streaming infrastructure hints at future flexibility. Once the video exists as a network stream, it can be viewed, recorded, or even post-processed elsewhere without touching the core vision code.&lt;/p&gt;
&lt;h2&gt;Strapping It On: The Human Test&lt;/h2&gt;
&lt;p&gt;With the system assembled, the real experiment begins. The cameras and Raspberry Pi are mounted directly onto the FPV goggles, with 3D-printed parts doing little more than holding everything in place and keeping cables out of the way. Ironically, the abundance of cables quickly becomes irrelevant: with eyes effectively on the sides of the head, anything directly in front simply fades from awareness.&lt;/p&gt;
&lt;p&gt;The first test configuration places the cameras at a more animal-like angle&amp;mdash;around 70 degrees. In this mode, everyday tasks become difficult but not impossible. Measuring the voltage of a AAA battery, writing the value down, and packing everything away can be done, albeit slowly and with exaggerated head movements. The brain begins to adapt, treating this strange stitched panorama as a new normal.&lt;/p&gt;
&lt;p&gt;Push the cameras out to a full 90 degrees, however, and the experience deteriorates rapidly. Frontal vision all but disappears. Tasks rely almost entirely on touch. Even reading a multimeter display becomes a struggle. The discomfort escalates from simple disorientation to genuine nausea, accompanied by headaches that linger long after the goggles come off.&lt;/p&gt;
&lt;h2&gt;Unexpected Insights&lt;/h2&gt;
&lt;p&gt;Beyond the discomfort, the experiment reveals something subtle about animal behaviour. Zig-zagging prey movements, often dismissed as panic, suddenly make sense. With side-mounted vision, maintaining visual contact with a threat means constant changes in direction. What looks erratic from the outside is, in fact, a logical response to a very different sensory input.&lt;/p&gt;
&lt;p&gt;Equally revealing is how quickly the human brain attempts to adapt. Given enough time, it is clear that operating with side-mounted vision is possible. It is just profoundly unpleasant for a brain evolved to expect depth and focus straight ahead.&lt;/p&gt;
&lt;h2&gt;Is It Worth Building?&lt;/h2&gt;
&lt;p&gt;As a practical tool, the answer is simple: no. The system is not useful, comfortable, or efficient. But that is entirely beside the point. The real value lies in the experience. This project turns an abstract biological concept into something immediate and visceral, forcing a direct confrontation with how deeply perception shapes behaviour.&lt;/p&gt;
&lt;p&gt;For anyone interested in human vision, animal biology, or the limits of adaptation, Clem&amp;rsquo;s side-eyed experiment is a reminder that sometimes the most meaningful projects are the ones that exist purely to be felt, not perfected.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Project Video Release Archive</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/3748/project-video-release-archive/revision/214</link><pubDate>Thu, 28 May 2026 14:08:58 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:59ab0abe-b32d-47f9-b00c-4b73b01f3bd8</guid><dc:creator>e14sbhargav</dc:creator><description>Revision 214 posted to Documents by e14sbhargav on 5/28/2026 2:08:58 PM&lt;br /&gt;
&lt;div style="background:#ffffff;border-bottom:1px solid #dadada;margin:0;padding:14px 16px 16px 18px;vertical-align:top;"&gt;
&lt;div style="display:inline-block;float:left;padding:0px 25px 8px 0px;"&gt;&lt;a href="/challengesprojects/element14-presents/" data-icid="e14" data-e14adj="t"&gt;&lt;img alt="image"  src="/e14/assets/legacy/2018/e14PresentsJune818.png" width="180px" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="display:inline-block;vertical-align:top;width:70%;"&gt;&lt;span style="font-size:18px;font-weight:bold;"&gt;Project Video Releases&lt;/span&gt;
&lt;p style="margin:0;"&gt;&lt;span&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" style="color:#f17c0e;" href="/challengesprojects/element14-presents/" data-icid="e14" data-e14adj="t"&gt;element14 presents&lt;/a&gt;&lt;/span&gt;&amp;nbsp; &lt;strong&gt;|&lt;/strong&gt;&amp;nbsp; &lt;span style="padding-right:5px;"&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" style="color:#f17c0e;" href="/challengesprojects/element14-presents/vcp-program/" data-icid="e14" data-e14adj="t"&gt;Meet the Hosts&lt;/a&gt;&lt;/span&gt;&lt;span style="padding-right:5px;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72067/designing-a-mobile-robot-platform-with-inverse-kinematics-and-wireless-control" data-e14adj="t"&gt;Episode 716: Designing a Mobile Robot Platform with Inverse Kinematics and Wireless Control&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72063/how-to-build-a-reaction-based-catch-game-using-arduino-and-relays" data-e14adj="t"&gt;Episode 715: How to Build a Reaction-Based Catch Game Using Arduino and Relays&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72062/find-emi-fast-with-a-low-cost-automated-way-to-see-where-your-pcb-radiates" data-e14adj="t"&gt;Episode 714: Find EMI Fast with a Low‑Cost, Automated Way to See Where Your PCB Radiates&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 713:" href="/challenges-projects/element14-presents/project-videos/w/documents/72061/how-to-make-an-led-sculpture-react-to-sound-with-micro-bit" data-e14adj="t"&gt;Episode 713:&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72061/how-to-make-an-led-sculpture-react-to-sound-with-micro-bit"&gt;How to Make an LED Sculpture React to Sound with micro:bit&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 712: Designing a More Capable Dual Motor Driver Beyond the L298N (What worked and what didn't)" href="/challenges-projects/element14-presents/project-videos/w/documents/72060/designing-a-more-capable-dual-motor-driver-beyond-the-l298n-what-worked-and-what-didn-t" data-e14adj="t"&gt;Episode 712: Designing a More Capable Dual Motor Driver Beyond the L298N (What worked and what didn&amp;#39;t)&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 711: Modern Edge AI on Raspberry Pi 5 for an Animatronic Tracker: Vision Acceleration with AI Hat+ and AI Camera" href="/challenges-projects/element14-presents/project-videos/w/documents/72059/modern-edge-ai-on-raspberry-pi-5-for-an-animatronic-tracker-vision-acceleration-with-ai-hat-and-ai-camera" data-e14adj="t"&gt;Episode 711: Modern Edge AI on Raspberry Pi 5 for an Animatronic Tracker: Vision Acceleration with AI Hat+ and AI Camera&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 710: Your First Real PCB in KiCad : An Arduino Compatible Board Designed from Scratch" href="/challenges-projects/element14-presents/project-videos/w/documents/72057/your-first-real-pcb-in-kicad-an-arduino-compatible-board-designed-from-scratch" data-e14adj="t"&gt;Episode 710: Your First Real PCB in KiCad : An Arduino Compatible Board Designed from Scratch&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 709: Was that my Number!? Fixing Caf&amp;eacute; Order Chaos with a Raspberry Pi Announcer" href="/challenges-projects/element14-presents/project-videos/w/documents/72055/was-that-my-number-fixing-cafe-order-chaos-with-a-raspberry-pi-announcer" data-e14adj="t"&gt;Episode 709: Was that my Number!? Fixing Caf&amp;eacute; Order Chaos with a Raspberry Pi Announcer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 708: Reviving a Vintage LED Sign with Arduino and PS/2 Control" href="/challenges-projects/element14-presents/project-videos/w/documents/72042/reviving-a-vintage-led-sign-with-arduino-and-ps-2-control----episode-708" data-e14adj="t"&gt;Episode 708: Reviving a Vintage LED Sign with Arduino and PS/2 Control&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 707: Building a Circuit Sculpture with LED Filament" href="/challenges-projects/element14-presents/project-videos/w/documents/72038/building-a-circuit-sculpture-with-led-filament----episode-707" data-e14adj="t"&gt;Episode 707: Building a Circuit Sculpture with LED Filament&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72037/esp32-rfid-smart-access-control-in-a-simple-diy-build----episode-706"&gt;Episode 706: ESP32 + RFID = Smart Access Control in a Simple DIY Build&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 705: Building a Super Smooth Z-Scale Train Controller with Arduino" href="/challenges-projects/element14-presents/project-videos/w/documents/72036/building-a-super-smooth-z-scale-train-controller-with-arduino----episode-705" data-e14adj="t"&gt;Episode 705: Building a Super Smooth Z-Scale Train Controller with Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 704: Hacking an IKEA Desk into a Programmable Electric Workstation" href="/challenges-projects/element14-presents/project-videos/w/documents/72035/hacking-an-ikea-desk-into-a-programmable-electric-workstation----episode-704" data-e14adj="t"&gt;Episode 704: Hacking an IKEA Desk into a Programmable Electric Workstation&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 703: How to Set Up the Raspberry Pi 5: Complete Beginner Step-by-Step Guide" href="/challenges-projects/element14-presents/project-videos/w/documents/72034/how-to-set-up-the-raspberry-pi-5-complete-beginner-step-by-step-guide----episode-703" data-e14adj="t"&gt;Episode 703: How to Set Up the Raspberry Pi 5: Complete Beginner Step-by-Step Guide&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 702: Build Your Own USB Looper for Serial Debugging and File Transfer" href="/challenges-projects/element14-presents/project-videos/w/documents/72033/build-your-own-usb-looper-for-serial-debugging-and-file-transfer----episode-702" data-e14adj="t"&gt;Episode 702: Build Your Own USB Looper for Serial Debugging and File Transfer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 700: How Voice Recognition Works on Raspberry Pi (and Why It&amp;rsquo;s Easy to Break)" href="/challenges-projects/element14-presents/project-videos/w/documents/72031/from-snooze-to-launch-the-arduino-powered-lego-alarm-clock-inspired-by-artemis-2----episode-701" data-e14adj="t"&gt;Episode 701: From Snooze to Launch: The Arduino-Powered LEGO Alarm Clock Inspired by Artemis 2&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 700: How Voice Recognition Works on Raspberry Pi (and Why It&amp;rsquo;s Easy to Break)" href="/challenges-projects/element14-presents/project-videos/w/documents/72030/how-voice-recognition-works-on-raspberry-pi-and-why-it-s-easy-to-break----episode-700" data-e14adj="t"&gt;Episode 700: How Voice Recognition Works on Raspberry Pi (and Why It&amp;rsquo;s Easy to Break)&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 697:&amp;nbsp;A Smart, Safe 3D Printer Cabinet Using Raspberry Pi and Node-RED" href="/challenges-projects/element14-presents/project-videos/w/documents/72021/gimmegpio-a-simple-way-to-get-gpio-on-laptops-and-desktops----episode-699" data-e14adj="t"&gt;Episode 699:&amp;nbsp;GimmeGPIO: A Simple Way to Get GPIO on Laptops and Desktops&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 697:&amp;nbsp;A Smart, Safe 3D Printer Cabinet Using Raspberry Pi and Node-RED" href="/challenges-projects/element14-presents/project-videos/w/documents/72020/building-a-practical-electronics-workbench-for-makers-and-engineers----episode-698" data-e14adj="t"&gt;Episode 698:&amp;nbsp;Building a Practical Electronics Workbench for Makers and Engineers&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a title="Episode 697:&amp;nbsp;A Smart, Safe 3D Printer Cabinet Using Raspberry Pi and Node-RED" href="/challenges-projects/element14-presents/project-videos/w/documents/72009/a-smart-safe-3d-printer-cabinet-using-raspberry-pi-and-node-red----episode-697" data-e14adj="t"&gt;Episode 697:&amp;nbsp;A Smart, Safe 3D Printer Cabinet Using Raspberry Pi and Node-RED&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/72008/how-a-pulse-metal-detector-works-and-how-to-build-one" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 696: How a Pulse Metal Detector Works, and How to Build One&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/72007/a-diy-test-and-programming-rig-built-for-small-batch-electronics-production----episode-695" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 695: A DIY Test and Programming Rig Built for Small-Batch Electronics Production&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/secret-element14-presents/w/documents/72001/earn-your-fitness-reward-with-a-smart-cookie-jar-using-strava-and-esp32----episode-694" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 694: Earn Your Fitness Reward with a Smart Cookie Jar Using Strava and ESP32&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71999/open-source-multicolour-3d-printing-upgrade-clem-s-3d-chameleon-remix----episode-693" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 693: Open-Source Multicolour 3D Printing Upgrade: Clem&amp;rsquo;s 3D Chameleon Remix&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71995/build-your-own-esp32-fitness-heart-rate-monitor-tracker----episode-692" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 692: Build Your own ESP32 Fitness Heart Rate Monitor / Tracker&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71994/how-accurate-is-bluetooth-channel-sounding-a-deep-dive-with-the-nrf54l15" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 691: How Accurate Is Bluetooth Channel Sounding? A Deep Dive with the nRF54L15&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71993/meet-the-platypusbot-now-powered-by-raspberry-pi-ros----episode-690" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 690: Meet the PlatypusBot: Now Powered by Raspberry Pi &amp;amp; ROS&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71992/how-clem-built-a-handheld-sci-fi-communicator-that-really-works----episode-689" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 689: How Clem Built a Handheld Sci-Fi Communicator That Really Works&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71990/building-the-cylon-pumpkin-combining-a-larson-scanner-and-vocoder-for-halloween----episode-688" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 688: Building the Cylon Pumpkin: Combining a Larson Scanner and Vocoder for Halloween&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71989/turning-a-10-air-fryer-into-an-arduino-powered-filament-dryer----episode-687" data-icid="e14p-ep687-eplist" data-e14adj="t"&gt;Episode 687: Turning a $10 Air Fryer into an Arduino powered Filament Dryer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71988/creepy-motion-activated-painting-you-can-build-yourself----episode-686" data-icid="e14" data-e14adj="t"&gt;Episode 686: Creepy Motion-Activated Painting You Can Build Yourself&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71987/when-your-body-becomes-the-instrument-clem-builds-the-drone-synth----episode-685" data-icid="e14" data-e14adj="t"&gt;Episode 685: When Your Body Becomes the Instrument: Clem Builds the &amp;ldquo;Dr&amp;ouml;ne&amp;rdquo; Synth&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71985/building-an-audio-reactive-led-matrix-with-a-micro-bit-and-neopixels----episode-684" data-icid="e14" data-e14adj="t"&gt;Episode 684: Building an Audio Reactive LED Matrix with a micro:bit and NeoPixels&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71984/how-to-make-a-portable-emergency-radio-with-an-arduino-nano-in-a-mint-tin----episode-683" data-icid="e14" data-e14adj="t"&gt;Episode 683: How to Make a Portable Emergency Radio with an Arduino Nano in a Mint TinT&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71974/diy-rf-modulator-raspberry-pi-pico-gaming-on-a-sony-watchman-fd-10a-crt----episode-682" data-icid="e14" data-e14adj="t"&gt;Episode 682: DIY RF Modulator + Raspberry Pi Pico = Gaming on a Sony Watchman FD-10A CRT&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71963/turn-anything-into-an-arduino-module-reusing-everyday-electronics----episode-681" data-icid="e14" data-e14adj="t"&gt;Episode 681: Turn anything into an Arduino Module: Reusing Everyday Electronics&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71961/from-kit-to-custom-design-building-a-tube-based-fm-radio----episode-680" data-icid="e14" data-e14adj="t"&gt;Episode 680: From Kit to Custom Design: Building a Tube-Based FM Radio&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71960/esp32-duolingo-owl-project-never-miss-a-lesson-again----episode-679" data-icid="e14" data-e14adj="t"&gt;Episode 679: ESP32 Duolingo Owl Project: Never Miss a Lesson Again&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71959/open-source-attiny3226-arduino-calculator-hardware-case-code-build----episode-678" data-icid="e14" data-e14adj="t"&gt;Episode 678: Open Source ATtiny3226 Arduino Calculator &amp;ndash; Hardware, Case &amp;amp; Code Build&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71955/make-your-own-vocoder-with-teensy-4-0---voice-of-a-cylon----episode-677" data-icid="e14" data-e14adj="t"&gt;Episode 677: Make Your Own Vocoder with Teensy 4.0 - Voice of a Cylon?!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71954/i-tried-building-16-attiny-robots-with-vibration-motors-it-was-a-disaster----episode-676" data-icid="e14" data-e14adj="t"&gt;Episode 676: I Tried Building 16 ATtiny Robots with Vibration Motors &amp;ndash; It Was a Disaster&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71953/avoid-conflict-with-this-esp32-defcon-task-tracker----episode-675" data-icid="e14" data-e14adj="t"&gt;Episode 675:Avoid Conflict with this ESP32 Defcon Task Tracker&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71947/building-an-open-source-blood-pressure-heart-signal-monitor----episode-674" data-icid="e14" data-e14adj="t"&gt;Episode 674: Building an Open Source Blood Pressure &amp;amp; Heart Signal Monitor&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71942/building-an-esp32-powered-warhammer-40k-rhino-with-dynamic-led-effects----episode-673" data-icid="e14" data-e14adj="t"&gt;Episode 673: Building an ESP32 Powered Warhammer 40k Rhino with Dynamic LED Effects!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71936/building-an-autonomous-lego-train-with-circuitpython-and-lidar----episode-672" data-icid="e14" data-e14adj="t"&gt;Episode 672: Building an Autonomous LEGO Train with CircuitPython and LIDAR&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71934/platypusbot---scavenging-for-robotics-parts----episode-671" data-icid="e14" data-e14adj="t"&gt;Episode 671: PlatypusBot - Scavenging for Robotics Parts&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71927/build-a-larson-scanner-with-sound-using-an-esp32----episode-670" data-icid="e14" data-e14adj="t"&gt;Episode 670: Build your own Larson Scanner&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71926/creating-an-esd-or-lightning-detector----episode-669" data-icid="e14" data-e14adj="t"&gt;Episode 669: Creating an ESD (Or Lightning!) Detector!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71925/designing-an-arduino-pid-controlled-micro-drone----episode-668" data-icid="e14" data-e14adj="t"&gt;Episode 668: Designing an Arduino PID Controlled Micro Drone&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71921/emulating-a-speech-synthesis-chip-with-an-esp32----episode-667" data-icid="e14" data-e14adj="t"&gt;Episode 667: Emulating a Speech Synthesis Chip with an ESP32&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71920/how-far-can-i2c-go----episode-666" data-icid="e14" data-e14adj="t"&gt;Episode 666: How Far Can I2C Go?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71919/raspberry-pi-ai-tracking-eye-of-sauron---ai-al-barad-dur---episode-665" data-icid="e14" data-e14adj="t"&gt;Episode 665: Raspberry Pi AI Tracking Eye of Sauron - AI AL Barad Dur&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71915/learn-how-to-make-a-photo-booth-with-the-esp32-and-telegram-automation----episode-664" data-icid="e14" data-e14adj="t"&gt;Episode 664: Learn how to Make a Photo Booth with the ESP32 and Telegram Automation!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71911/upcycling-a-vintage-microphone-into-an-emergency-radio-system----episode-663" data-icid="e14" data-e14adj="t"&gt;Episode 663: Upcycling a Vintage Microphone into an Emergency Radio System&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/71909/making-a-stronger-affordable-diy-robot-arm-with-3d-printing-with-raspberry-pi-pico----episode-662" data-icid="e14" data-e14adj="t"&gt;Episode 662: Making a Stronger Affordable DIY Robot Arm with 3D Printing with Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71904/make-your-own-led-wrist-watch----episode-661" data-icid="e14" data-e14adj="t"&gt;Episode 661: Clem makes his own LED Wristwatch&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71846/lofi-beats-to-solder-to----episode-660" data-icid="e14" data-e14adj="t"&gt;Episode 660: LoFi Beats to Solder To&lt;/a&gt;&lt;/p&gt;
&lt;p style="clear:both;margin:0;padding:0px;padding-top:12px;"&gt;&lt;a title="Episode 659:&amp;nbsp;DIY Single Board Computer with ESP32 and Raspberry Pi Pico" href="/challenges-projects/element14-presents/project-videos/w/documents/71844/diy-single-board-computer-with-esp32-and-raspberry-pi-pico----episode-659" data-e14adj="t"&gt;Episode 659:&amp;nbsp;DIY Single Board Computer with ESP32 and Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71841/a-smart-youtube-counter-with-an-audio-analyzer---episode---658" data-icid="e14" data-e14adj="t"&gt;Episode 658: A Smart Youtube Counter With An Audio Analyzer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71833/how-to-control-a-lego-mindstorms-kit-with-ai-and-raspberry-pi-5----episode-657" data-icid="e14" data-e14adj="t"&gt;Episode 657: How to Control a LEGO Mindstorms kit with AI and Raspberry Pi 5&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71831/diy-jig-for-your-laser-cutter-with-custom-arduino-automation----episode-656" data-icid="e14" data-e14adj="t"&gt;Episode 656: DIY Jig for your Laser Cutter with Custom Arduino Automation&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71810/diy-hot-plate-for-smd-soldering-using-raspberry-pi-pico----episode-655" data-icid="e14" data-e14adj="t"&gt;Episode 655: DIY Hot Plate for SMD Soldering Using Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71801/how-do-battlebots-work-in-the-pit-with-hypershock----episode-654" data-icid="e14" data-e14adj="t"&gt;Episode 654: How Do BattleBots Work? In the Pit with HyperShock&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71797/edge-lit-7-segment-display-clock-using-raspberry-pi-pico----episode-653" data-icid="e14" data-e14adj="t"&gt;Episode 653: Edge-lit 7-Segment Display Clock Using Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71793/smart-windows-and-blinds-with-arduino-and-raspberry-pi-pico----episode-652" data-icid="e14" data-e14adj="t"&gt;Episode 652: Smart Windows and Blinds with Arduino and Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/71784/design-for-manufacturing---project-to-product-by-modifying-off-the-shelf-cases----episode-651" data-icid="e14" data-e14adj="t"&gt;Episode 651: Design for Manufacturing - Project to Product by Modifying Off-the-Shelf Cases&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/46432/using-nordic-s-nrf7002-my-dehumidifier-tells-me-when-it-s-full----episode-650" data-icid="e14" data-e14adj="t"&gt;Episode 650: Using Nordic&amp;#39;s nRF7002, My Dehumidifier Tells Me When It&amp;#39;s Full!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/29545/giant-retro-gaming-magic-mirror-with-a-raspberry-pi-5----episode-649" data-icid="e14" data-e14adj="t"&gt;Episode 649: Giant Retro Gaming Magic Mirror with a Raspberry Pi 5!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/29540/home-ai-image-generation-server-with-lattepanda-and-stable-diffusion----episode-648" data-icid="e14" data-e14adj="t"&gt;Episode 648: Home AI Image Generation Server with LattePanda and Stable Diffusion&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/29537/building-an-open-source-tool-for-cave-surveying----episode-647" data-icid="e14" data-e14adj="t"&gt;Episode 647: Building an Open-Source Tool for Cave Surveying&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28802/creating-a-digital-roulette-table-with-an-esp32-devkit----episode-646" data-icid="e14" data-e14adj="t"&gt;Episode 646: Creating a Digital Roulette Table with an ESP32 DevKit&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28438/practical-diy-pi-pico-current-load-circuits----episode-645" data-icid="e14" data-e14adj="t"&gt;Episode 645: Practical DIY Pi Pico Current Load Circuits&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28421/turning-a-raspberry-pi-pico-into-a-gpu----episode-644" data-icid="e14" data-e14adj="t"&gt;Episode 644: Turning a Raspberry Pi Pico into a GPU!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28418/making-a-tribble-that-detects-klingons----episode-643" data-icid="e14" data-e14adj="t"&gt;Episode 643: Making a Tribble that Detects Klingons&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28416/making-a-time-lapse-camera-with-a-raspberry-pi-5----episode-642" data-icid="e14" data-e14adj="t"&gt;Episode 642: Making a Time-lapse Camera with a Raspberry Pi 5&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28409/moon-phase-display-with-raspberry-pi-pico----episode-641" data-icid="e14" data-e14adj="t"&gt;Episode 641: Moon Phase Display with Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28407/tinkering-vs-engineering-can-you-build-a-laptop-from-scratch----episode-640" data-icid="e14" data-e14adj="t"&gt;Episode 640: Tinkering vs Engineering: Can You Build a Laptop from Scratch?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28405/off-grid-remote-generator-starter----episode-639" data-icid="e14" data-e14adj="t"&gt;Episode 639: Off-Grid Remote Generator Starter?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28387/rp2040-pcb-design-turn-on-and-debug---how-hard-could-it-be----episode-638" data-icid="e14" data-e14adj="t"&gt;Episode 638: RP2040 PCB: Design, Turn-On, and Debug - How Hard Could It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28386/making-music-with-a-lego-guitar-and-capacitive-touch----episode-637" data-icid="e14" data-e14adj="t"&gt;Episode 637: Making Music with a Lego Guitar and Capacitive Touch&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28384/creating-an-imu-based-3d-mouse-with-an-esp32-s3----episode-636" data-icid="e14" data-e14adj="t"&gt;Episode 636: Creating an IMU based 3D Mouse with an ESP32-S3&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28382/vintage-electronics-exploration-with-a-bally-cypress-gardens-bingo-machine---episode-635" data-icid="e14" data-e14adj="t"&gt;Episode 635: Vintage Electronics Exploration with a Bally Cypress Gardens Bingo Machine&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28381/craft-a-festive-led-christmas-sweater-featuring-the-attiny416----episode-634" data-icid="e14" data-e14adj="t"&gt;Episode 634: Craft a Festive LED Christmas Sweater Featuring the ATtiny416&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28376/spying-under-the-christmas-tree-with-an-arduino-powered-ornament----episode-633" data-icid="e14" data-e14adj="t"&gt;Episode 633: Spying Under the Christmas Tree with an Arduino-powered Ornament&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28374/revamping-old-school-pinball-with-an-esp32----episode-632" data-icid="e14" data-e14adj="t"&gt;Episode 632: Revamping Old School Pinball with an ESP32&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28372/all-purpose-debugging-a-practical-universal-screen-with-lcd-displays----episode-631" data-icid="e14" data-e14adj="t"&gt;Episode 631: All-Purpose Debugging: A Practical Universal Screen with LCD Displays&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28370/mega-iie-first-fully-functional-computer-built-around-the-apple-mega-ii-chip----episode-630" data-icid="e14" data-e14adj="t"&gt;Episode 630: Mega IIe: First Fully Functional Computer built around the Apple Mega-II Chip&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28366/backpack-splash-mark-s-water-gun-upgrade-for-epic-outdoor-water-wars----episode-629" data-icid="e14" data-e14adj="t"&gt;Episode 629: Backpack Splash: Mark&amp;#39;s Water Gun Upgrade for Epic Outdoor Water Wars!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28361/affordable-diy-robot-arm-a-deep-dive-into-3d-printing-and-servo-motors----episode-628" data-icid="e14" data-e14adj="t"&gt;Episode 628: Affordable DIY Robot Arm - A Deep Dive into 3D Printing and Servo Motors&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28353/creating-sudostick---from-prototype-to-product----episode-627" data-icid="e14" data-e14adj="t"&gt;Episode 627: Creating sudostick - From Prototype to Product&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28351/catching-you-up-on-bonesnapper-ridge---off-grid-maker-shop----episode-626" data-icid="e14" data-e14adj="t"&gt;Episode 626: Catching you Up on Bonesnapper Ridge - Off-Grid Maker Shop&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28344/interactive-magic-creating-an-enchanted-cauldron----episode-625" data-icid="e14" data-e14adj="t"&gt;Episode 625: Interactive Magic - Creating an Enchanted Cauldron&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28342/episode-624-modding-a-smoke-machine-to-add-motion-detection" data-icid="e14" data-e14adj="t"&gt;Episode 624: Modding A Smoke Machine to Add Motion Detection&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28339/episode-623-how-to-run-linux-on-an-esp32" data-icid="e14" data-e14adj="t"&gt;Episode 623: How to Run Linux on an ESP32&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28334/episode-622-building-spooky-fun-halloween-sound-pranks-with-nrf-5340-ble-audio" data-icid="e14" data-e14adj="t"&gt;Episode 622: Building Spooky Fun: Halloween Sound Pranks with nRF 5340 BLE Audio&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28330/episode-621-color-sensor-based-water-quality-tracker-diy-environmental-monitoring" data-icid="e14" data-e14adj="t"&gt;Episode 621: Color Sensor-Based Water Quality Tracker: DIY Environmental Monitoring&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28328/episode-620-stey-by-step-guide-to-creating-your-own-speaking-animatronic-hat" data-icid="e14" data-e14adj="t"&gt;Episode 620: Stey-by-Step Guide to Creating your own Speaking Animatronic Hat&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28316/episode-619-how-to-build-an-open-source-bluetooth-mechanical-keyboard" data-icid="e14" data-e14adj="t"&gt;Episode 619: How to Build an Open Source Bluetooth Mechanical Keyboard&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28308/episode-618-upgrading-my-racing-sim-with-a-force-sensitive-keyboard" data-icid="e14" data-e14adj="t"&gt;Episode 618: Upgrading My Racing Sim with a Force-Sensitive Keyboard&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28306/episode-617-simplify-network-monitoring-building-an-esp32-powered-solution" data-icid="e14" data-e14adj="t"&gt;Episode 617: Simplify Network Monitoring: Building an ESP32-Powered Solution&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28300/episode-616-mastering-oven-control-precision-resin-curing-with-diy-modifications---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 616: Mastering Oven Control: Precision Resin Curing with DIY Modifications - How Hard Can it Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28290/episode-615-building-a-unique-usb-card-reader-from-idea-to-prototype" data-icid="e14" data-e14adj="t"&gt;Episode 615: Building a Unique USB Card Reader: From Idea to Prototype&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28278/episode-614-using-pid-proportional-integral-derivative-in-robotics---how-hard-could-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 614: Using PID (Proportional-Integral-Derivative) in Robotics - How Hard Could It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28274/episode-613-building-a-magic-wand-talking-sound-board" data-icid="e14" data-e14adj="t"&gt;Episode 613: Building a Magic Wand Talking Sound Board&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28271/episode-612-handheld-basic-computer-in-badge-format-with-the-arduino-uno" data-icid="e14" data-e14adj="t"&gt;Episode 612: Handheld BASIC computer in Badge Format with the Arduino Uno&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28267/episode-611-how-to-run-the-distance-to-the-moon-with-strava-data-and-a-pico-w-board" data-icid="e14" data-e14adj="t"&gt;Episode 611: How to Run the Distance to the Moon with Strava Data and a Pico W Board&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28214/episode-610-how-to-embroider-with-circuits-and-conductive-thread" data-icid="e14" data-e14adj="t"&gt;Episode 610: How to Embroider with Circuits and Conductive Thread&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28213/episode-609-updating-a-fujitsu-n860-2500-t111-keyboard-to-work-with-a-ps2-standard" data-icid="e14" data-e14adj="t"&gt;Episode 609: Updating a Fujitsu N860-2500-T111 Keyboard to Work with a PS2 Standard&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28200/episode-608-making-the-simplest-diy-wind-energy-generator---how-hard-could-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 608: Making the Simplest DIY Wind Energy Generator - How Hard Could it Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28198/episode-607-from-strava-to-motion-creating-an-arduino-powered-arcade-game-with-running-data" data-icid="e14" data-e14adj="t"&gt;Episode 607: From Strava to Motion: Creating an Arduino-Powered Arcade Game with Running Data&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28184/episode-606-how-to-use-lorawan-to-launch-model-rockets-wirelessly" data-icid="e14" data-e14adj="t"&gt;Episode 606: How to Use LoRaWAN to Launch Model Rockets Wirelessly&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28152/episode-605-arduino-and-leds-make-solitaire-easier-to-solve" data-icid="e14" data-e14adj="t"&gt;Episode 605: Arduino and LEDs Make Solitaire Easier to Solve&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28140/episode-604-charlieplexing-buttons-and-leds-at-the-same-time---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 604: Charlieplexing Buttons and LEDs at the Same Time - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28138/episode-603-create-your-own-air-hockey-table-with-arduino-scoring" data-icid="e14" data-e14adj="t"&gt;Episode 603: Create Your Own Air Hockey Table with Arduino Scoring&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28133/episode-602-diy-ac-dimmer-circuit-control-your-lights-with-a-raspberry-pi-pico" data-icid="e14" data-e14adj="t"&gt;Episode 602: DIY AC Dimmer Circuit: Control Your Lights with a Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28131/episode-601-how-to-reverse-engineer-electronics-building-a-developer-board-for-a-coding-class" data-icid="e14" data-e14adj="t"&gt;Episode 601: How to Reverse Engineer Electronics: Building a Developer Board for a Coding Class&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28126/episode-600-building-my-dream-digital-clock-diy-7-segment-display-with-a-cute-robot-twist" data-icid="e14" data-e14adj="t"&gt;Episode 600: Building My Dream Digital Clock: DIY 7 Segment Display with a Cute Robot Twist!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28117/episode-599-how-to-build-a-spectrum-analyzer-with-lego-bricks-discrete-electronics" data-icid="e14" data-e14adj="t"&gt;Episode 599: How to Build a Spectrum Analyzer with Lego Bricks &amp;amp; Discrete Electronics&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28102/episode-598-how-to-build-a-portable-solar-charged-off-grid-power-station" data-icid="e14" data-e14adj="t"&gt;Episode 598: How To Build a Portable, Solar-Charged Off-Grid Power Station&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28097/episode-597-how-to-build-a-robot-that-celebrates-good-grades-with-arduino" data-icid="e14" data-e14adj="t"&gt;Episode 597: How to Build a Robot that Celebrates Good Grades with Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28084/episode-596-how-to-build-your-own-voice-assistant-with-mycroft-ai---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 596: How to Build Your Own Voice Assistant with MyCroft AI - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28082/episode-595-member-challenge-accepted---universal-lanc-controller-for-dslr-cameras" data-icid="e14" data-e14adj="t"&gt;Episode 595: Member Challenge Accepted - Universal LANC Controller for DSLR cameras&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28059/episode-594-repairing-a-neewer-660-studio-light---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 594: Repairing a Neewer 660 Studio light - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28057/episode-593-playing-3d-famicom-games-wirelessly-on-the-nes---how-hard-could-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 593: Playing 3D Famicom Games Wirelessly on the NES - How Hard Could It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28050/episode-592-lamptopus-spinning-led-desk-lamp" data-icid="e14" data-e14adj="t"&gt;Episode 592: Lamptopus: Spinning LED Desk Lamp&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28036/episode-591-building-a-bluetooth-speaker-in-5-minutes---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 591: Building A Bluetooth Speaker in 5 Minutes - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28033/episode-590-seven-kingdoms-open-source-bartop-arcade" data-icid="e14" data-e14adj="t"&gt;Episode 590: Seven Kingdoms Open Source Bartop Arcade&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28024/episode-589-upgrading-the-imac-g4-with-a-nuc" data-icid="e14" data-e14adj="t"&gt;Episode 589: Upgrading the iMac G4 With a NUC&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/28020/episode-588-highlights-from-element14-presents-2022" data-icid="e14" data-e14adj="t"&gt;Episode 588: Highlights from element14 presents 2022&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27982/episode-587-create-your-own-talking-stress-indicator" data-icid="e14" data-e14adj="t"&gt;Episode 587: Create Your Own Talking Stress Indicator&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27965/episode-586-diy-open-source-bluetooth-headphones" data-icid="e14" data-e14adj="t"&gt;Episode 586: DIY Open Source Bluetooth Headphones&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27960/episode-585-enhancing-a-magnifying-headband-with-auto-sensing-light" data-icid="e14" data-e14adj="t"&gt;Episode 585: Enhancing a Magnifying Headband with Auto Sensing Light&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27952/episode-584-going-beyond-periodic-wakes-using-wifi-to-revive-a-sleeping-device" data-icid="e14" data-e14adj="t"&gt;Episode 584: Going Beyond Periodic Wakes: Using WiFi to Revive a Sleeping Device&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27934/episode-583-epic-neopixel-birthday-cake" data-icid="e14" data-e14adj="t"&gt;Episode 583: Epic Neopixel Birthday Cake&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27917/episode-582-smart-christmas-decoration-with-raspberry-pi-pico-and-mqtt" data-icid="e14" data-e14adj="t"&gt;Episode 582: Smart Christmas Decoration with Raspberry Pi Pico and MQTT&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27900/episode-581-bee-saving-electronics-prototype" data-icid="e14" data-e14adj="t"&gt;Episode 581: Bee-Saving Electronics Prototype&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27894/episode-580-diy-low-cost-capacitance-meter-using-a-555-timer" data-icid="e14" data-e14adj="t"&gt;Episode 580: DIY Low Cost Capacitance Meter Using a 555 Timer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27881/episode-579-how-to-make-a-basketball-auto-score-keeper-using-colour-sensing" data-icid="e14" data-e14adj="t"&gt;Episode 579: How to Make a Basketball Auto Score Keeper Using Colour Sensing&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27879/episode-578-build-your-own-bat-detector-with-analog-parts" data-icid="e14" data-e14adj="t"&gt;Episode 578: Build your Own Bat Detector with Analog Parts&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27862/episode-577-the-game-guy-mini-upgrading-the-unportable-game-boy" data-icid="e14" data-e14adj="t"&gt;Episode 577: The Game Guy Mini, Upgrading the Unportable Game Boy!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27861/episode-576-build-your-own-underwater-drone-with-3d-printed-parts" data-icid="e14" data-e14adj="t"&gt;Episode 576: Build your own Underwater Drone with 3D Printed Parts&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27855/episode-575-how-to-make-a-secured-parcel-pickup-box-with-arduino" data-icid="e14" data-e14adj="t"&gt;Episode 575: How to Make a Secured Parcel Pickup Box with Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27846/episode-574-ghost-rider-halloween-costume" data-icid="e14" data-e14adj="t"&gt;Episode 574: Ghost Rider Halloween Costume&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27836/episode-573-using-a-pi-pico-to-convert-keyboard-input-to-morse-code" data-icid="e14" data-e14adj="t"&gt;Episode 573: Using a Pi Pico to Convert Keyboard Input to Morse Code&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27824/episode-572-how-to-use-an-esp32-camera-to-know-you-ve-got-mail" data-icid="e14" data-e14adj="t"&gt;Episode 572: How to Use an ESP32 &amp;amp; Camera to Know You&amp;#39;ve Got Mail!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27807/episode-571-using-dead-batteries-to-test-for-dead-batteries" data-icid="e14" data-e14adj="t"&gt;Episode 571: Using Dead Batteries to Test for Dead Batteries&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27805/episode-570-making-a-wifi-connected-audio-spectrum-analyzer-with-esp32" data-icid="e14" data-e14adj="t"&gt;Episode 570: Making a WiFi Connected Audio Spectrum Analyzer with ESP32&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27803/episode-569-multi-spectrum-uv-resin-curing-station-with-wurth-leds" data-icid="e14" data-e14adj="t"&gt;Episode 569: Multi-Spectrum UV Resin Curing Station with W&amp;uuml;rth LEDs&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27787/episode-568-how-to-make-a-custom-soundboard-with-the-stm32f4-using-freecad" data-icid="e14" data-e14adj="t"&gt;Episode 568: How to Make a Custom Soundboard with the STM32F4 using FreeCAD&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27785/episode-567-synced-neopixel-mickey-mouse-ears" data-icid="e14" data-e14adj="t"&gt;Episode 567: Synced NeoPixel Mickey Mouse Ears&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27760/episode-566-how-to-automate-industrial-welding-positioners-with-arduino" data-icid="e14" data-e14adj="t"&gt;Episode 566: How to Automate Industrial Welding Positioners with Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27758/episode-565-measuring-destructive-testing-force-with-a-20-ton-hydraulic-press" data-icid="e14" data-e14adj="t"&gt;Episode 565: Measuring Destructive Testing Force with a 20 Ton Hydraulic Press&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27734/episode-564-build-a-vu-meter-with-led-pixelated-nixie-tubes" data-icid="e14" data-e14adj="t"&gt;Episode 564: Build a VU Meter with LED Pixelated Nixie Tubes&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27732/episode-563-creating-augmented-reality-circuits-with-meta-quest-2-and-unity" data-icid="e14" data-e14adj="t"&gt;Episode 563: Creating Augmented Reality Circuits with Meta Quest 2 and Unity&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27730/episode-562-pi-home-temperature-monitoring-system" data-icid="e14" data-e14adj="t"&gt;Episode 562: Pi Home Temperature Monitoring System&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27728/episode-561-wifi-to-parallel-port-ascii-art-dot-matrix-printer" data-icid="e14" data-e14adj="t"&gt;Episode 561: WiFi to Parallel Port Ascii Art Dot-Matrix Printer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27727/episode-560-raspberry-pi-controlled-lego-train-with-build-hat" data-icid="e14" data-e14adj="t"&gt;Episode 560: Raspberry Pi Controlled Lego Train with Build HAT&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27706/episode-559-create-a-magic-makeup-mirror-with-pose-detection" data-icid="e14" data-e14adj="t"&gt;Episode 559: Create a Magic Makeup Mirror with Pose Detection&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27700/episode-558-3d-object-rendering-using-an-fpga" data-icid="e14" data-e14adj="t"&gt;Episode 558: 3D Object Rendering Using an FPGA&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27694/episode-557-create-your-own-handheld-serial-monitor-for-project-debugging" data-icid="e14" data-e14adj="t"&gt;Episode 557: Create your own Handheld Serial Monitor for Project Debugging&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27666/episode-556-hacking-a-hotel-pos-tablet---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 556: Hacking a Hotel POS Tablet - How Hard Can it Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27664/episode-555-dance-central-pose-estimation-game-with-tensorflow-and-raspberry-pi" data-icid="e14" data-e14adj="t"&gt;Episode 555: Dance Central Pose Estimation Game with Tensorflow and Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27647/episode-554-arduino-uno-mini-limited-edition-led-necklace" data-icid="e14" data-e14adj="t"&gt;Episode 554: Arduino Uno Mini Limited Edition LED Necklace&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27645/episode-553-adding-a-parallel-printer-port-to-an-android-phone" data-icid="e14" data-e14adj="t"&gt;Episode 553: Adding a Parallel Printer Port to an Android Phone&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27616/episode-552---magical-potion-bottle-rack" data-icid="e14" data-e14adj="t"&gt;Episode 552: Magical Potion Bottle Rack&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27614/episode-551-can-we-rebuild-a-1930s-accounting-machine" data-icid="e14" data-e14adj="t"&gt;Episode 551: Can We Rebuild a 1930s Accounting Machine?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27608/episode-550-diy-electronic-controlled-motorized-wheelchair" data-icid="e14" data-e14adj="t"&gt;Episode 550: DIY Electronic Controlled Motorized Wheelchair&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27606/episode-549-using-a-teletype-machine-as-a-usb-printer-with-arduino" data-icid="e14" data-e14adj="t"&gt;Episode 549: Using a Teletype Machine as a USB Printer with Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27597/episode-548-electronic-fidget-cube-building-your-ideas" data-icid="e14" data-e14adj="t"&gt;Episode 548: Electronic Fidget Cube, Building Your Ideas!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27577/episode-547-creating-a-mummy-wake-word-detector-with-raspberry-pi-and-edge-impulse" data-icid="e14" data-e14adj="t"&gt;Episode 547: Creating a &amp;ldquo;Mummy&amp;rdquo; Wake Word Detector with Raspberry Pi and Edge Impulse&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27567/episode-546-mapping-the-outputs-of-a-1960s-teletype-machine---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 546: Mapping the Outputs of a 1960s Teletype Machine - How Hard Can it Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27576/episode-545-designing-a-custom-pcb-for-microsoft-jacdac" data-icid="e14" data-e14adj="t"&gt;Episode 545: Designing a Custom PCB for Microsoft Jacdac&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27548/episode-544-reviving-the-1984-ibm-5155---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 544: Reviving the 1984 IBM 5155 - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27522/episode-543-lego-spike-prime-weather-station-with-raspberry-pi" data-icid="e14" data-e14adj="t"&gt;Episode 543: Lego Spike Prime Weather Station with Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27520/episode-542-a-noise-free-diy-switching-power-supply---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 542: A Noise-Free DIY Switching Power Supply - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27495/episode-541-vintage-laptop-battery-replaced-with-usb-power---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 541: Vintage Laptop Battery Replaced with USB Power - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27493/episode-540-object-detection-for-smart-recycling" data-icid="e14" data-e14adj="t"&gt;Episode 540: Object Detection for Smart Recycling&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27484/episode-539-training-a-machine-to-recognize-objects---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 539: Training a Machine to Recognize Objects - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27483/episode-538-how-to-build-a-quadruped-robot---no-math" data-icid="e14" data-e14adj="t"&gt;Episode 538: How to Build a Quadruped Robot - NO MATH!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27460/episode-537-build-a-phonograph-preamplifier---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 537: Build a Phonograph Preamplifier - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27458/episode-536-interactive-light-up-window-with-pose-detection-using-a-raspberry-pi-and-micro-bit" data-icid="e14" data-e14adj="t"&gt;Episode 536: Interactive Light-Up Window with Pose Detection using a Raspberry Pi and micro:bit&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27441/episode-535-repair-a-sega-game-gear---how-hard-can-it-be" data-icid="e14" data-e14adj="t"&gt;Episode 535: Repair a Sega Game Gear - How Hard Can It Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27435/episode-534-open-source-inventory-warehousing-system" data-icid="e14" data-e14adj="t"&gt;Episode 534: Open Source Inventory Warehousing System&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27432/episode-533-jumbo-diy-led" data-icid="e14" data-e14adj="t"&gt;Episode 533: Jumbo DIY LED&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27412/episode-532-world-s-first-single-chip-apple-ii-boots" data-icid="e14" data-e14adj="t"&gt;Episode 532: World&amp;rsquo;s First Single-Chip Apple II Boots!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27407/episode-531-game-guy---the-unportable-game-boy" data-icid="e14" data-e14adj="t"&gt;Episode 531: Game Guy - The Unportable Game Boy&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27399/episode-530-mqtt-controlled-led-christmas-baubles-with-raspberry-pi-pico" data-icid="e14" data-e14adj="t"&gt;Episode 530: MQTT controlled LED Christmas Baubles with Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27392/episode-529-updi-program-for-new-attiny" data-icid="e14" data-e14adj="t"&gt;Episode 529: UPDI Program for new ATTiny&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27383/episode-528-let-s-build-an-electronic-fidget-cube" data-icid="e14" data-e14adj="t"&gt;Episode 528: Let&amp;#39;s Build an Electronic Fidget Cube!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27375/episode-527---interactive-light-up-window-using-a-raspberry-pi-and-micro-bit" data-icid="e14" data-e14adj="t"&gt;Episode 527: Interactive Light Up Window using a Raspberry Pi and micro:bit&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27366/episode-526-cnc-router-remote-control" data-icid="e14" data-e14adj="t"&gt;Episode 526: CNC Router Remote Control&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/w/documents/27338/episode-525-demonstrating-magnetic-fields-with-helmholtz-coils-in-a-snow-globe" data-icid="e14" data-e14adj="t"&gt;Episode 525: DIY Helmholtz Snow Globe&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/27287/episode-524-arduino-iot-cloud-weather-station" data-e14adj="t"&gt;Episode 524: Arduino IoT Cloud Weather Station&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/27276/episode-523-make-your-own-auto-sensing-solder-fume-extractor" data-e14adj="t"&gt;Episode 523: Make your Own Auto-Sensing Solder Fume Extractor&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23245/episode-522-siren-head-halloween-wearable-costume" data-e14adj="t"&gt;Episode 522: Siren Head Halloween Wearable Costume&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23240/episode-521-diy-static-grass-applicator" data-e14adj="t"&gt;Episode 521: DIY Static Grass Applicator&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23232/episode-520-adding-android-auto-as-non-permanent-add-on-with-raspberry-pi" data-e14adj="t"&gt;Episode 520: Adding Android Auto as Non-Permanent Add-On with Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23225/episode-519-make-your-own-ye-olde-book-nook-diorama-with-arduino" data-e14adj="t"&gt;Episode 519: Make Your Own Ye Olde Book Nook Diorama with Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23212/episode-518-guitar-vacuum-tube-distortion-pedal" data-e14adj="t"&gt;Episode 518: Guitar Vacuum Tube Distortion Pedal&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/secret-element14-presents/w/documents/4141/episode-517-emulate-an-eprom---how-hard-could-it-be" data-e14adj="t"&gt;Episode 517: Emulate an EPROM - How Hard Could it Be?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23199/episode-516-modding-a-wireless-doorbell-with-raspberry-pi-and-esp8266" data-e14adj="t"&gt;Episode 516: Modding a Wireless Doorbell with Raspberry Pi and ESP8266&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23190/episode-515-upcycling-a-lenovo-pc-into-a-raspberry-pi-wifi-access-point" data-e14adj="t"&gt;Episode 515: Upcycling a Lenovo PC into a Raspberry Pi WiFi Access Point&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/23183/episode-514-making-a-3d-graphics-card-for-the-atari-800-xl" data-e14adj="t"&gt;Episode 514: Making a 3D Graphics Card for the Atari 800 XL&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5429/episode-513-bike-speedometer-with-arduino-and-gps" data-e14adj="t"&gt;Episode 513: Bike Speedometer with Arduino and GPS&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5422/episode-512-you-cannot-buy-this-vacuum-tube-tester-you-build-it" data-e14adj="t"&gt;Episode 512: You Cannot Buy This Vacuum Tube Tester. You Build It!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5418/episode-511-face-tracking-cheeseball-launcher" data-e14adj="t"&gt;Episode 511:&amp;nbsp; Raspberry Pi Powered Cheeseball Launcher&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5407/episode-510-laser-cutter-command-station" data-e14adj="t"&gt;Episode 510: Laser Cutter Command Station&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5402/episode-509-diy-discrete-logic-led-countdown-timer" data-e14adj="t"&gt;Episode 509: DIY Discrete Logic LED Countdown Timer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5397/episode-508-raspberry-pi-fpv-rover-easy-robot-arm-upgrade" data-e14adj="t"&gt;Episode 508: Raspberry Pi FPV Rover Easy Robot Arm Upgrade&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5391/episode-507-massive-raspberry-pi" data-e14adj="t"&gt;Episode 507: Massive Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5377/episode-506-diy-star-trek-tricorder-from-build-inside-the-box" data-e14adj="t"&gt;Episode 506: DIY Star Trek Tricorder from Build Inside the Box&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5374/episode-505-super-8-camera-digitizer" data-e14adj="t"&gt;Episode 505: Super 8 Camera Digitizer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5369/episode-504-diy-sump-pump-alarm" data-e14adj="t"&gt;Episode 504: DIY Sump Pump Alarm&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5360/episode-503-meet-cheesoid---the-robot-that-smells" data-e14adj="t"&gt;Episode 503: Meet Cheesoid - The Robot That Smells!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5352/episode-502-make-your-bike-a-pokebike" data-e14adj="t"&gt;Episode 502: Make Your Bike a Pokebike!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5033/episode-501-raspberry-pi-nfc-button-free-music-player" data-e14adj="t"&gt;Episode 501: Raspberry Pi NFC Button-Free Music Player&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/20721/episode-500-build-inside-the-box-challenge" data-e14adj="t"&gt;Episode 500:&amp;nbsp; Build Inside The Box Challenge!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5332/episode-499-diy-four-channel-arduino-servo-tester" data-e14adj="t"&gt;Episode 499: DIY Four Channel Arduino Servo Tester&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8706/episode-498-raspberry-pi-smart-water-dispenser" data-e14adj="t"&gt;Episode 498: Raspberry Pi Smart Water Dispenser&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5318/episode-497-raspberry-pi-rfid-pocket-money-keeper" data-e14adj="t"&gt;Episode 497: RFID Pocket Money Keeper&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8705/episode-496-compute-module-4-powered-3d-printer-board" data-e14adj="t"&gt;Episode 496: Compute Module 4 Powered 3D Printer Board&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5308/episode-495-magic-gif-ball-powered-by-raspberry-pi" data-e14adj="t"&gt;Episode 495: Magic GIF Ball Powered By Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5299/episode-494-keyboard-shortcuts-keypad-with-raspberry-pi-pico" data-e14adj="t"&gt;Episode 494: Keyboard Shortcuts Keypad with Raspberry Pi Pico&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5290/episode-493-neopixel-7-segment-display-clock-update" data-e14adj="t"&gt;Episode 493: NeoPixel 7 Segment Display Clock Update&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5275/episode-492-arduino-vs-555-timer---tiny-slot-car-racers" data-e14adj="t"&gt;Episode 492: Arduino vs 555 Timer - Tiny Slot Car Racers&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5273/episode-491-arduino-single-wheel-balancing-robot" data-e14adj="t"&gt;Episode 491: Arduino Single-Wheel Balancing Robot&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5256/episode-490-diy-raspberry-pi-pico-fizz-buzz-multiplication-game" data-e14adj="t"&gt;Episode 490: DIY Raspberry Pi Pico Fizz Buzz Multiplication Game&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5254/episode-489-build-an-fpv-rover-with-raspberry-pi" data-e14adj="t"&gt;Episode 489: Build An FPV Rover with Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5233/episode-488-diy-raspberry-pi-cyberdeck" data-e14adj="t"&gt;Episode 488: DIY Raspberry Pi Cyberdeck&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5232/episode-487-diy-magsafe-battery-charger" data-e14adj="t"&gt;Episode 487: DIY MagSafe Battery Charger&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5229/episode-486-make-the-ultimate-phone-charging-camping-flashlight" data-e14adj="t"&gt;Episode 486: Make The Ultimate Phone Charging Camping Flashlight&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5213/episode-485-how-to-make-a-custom-pcb-from-design-to-assembly" data-e14adj="t"&gt;Episode 485: How To Make A Custom PCB From Design To Assembly&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5211/episode-484-raspberry-pi-bird-watching-camera" data-e14adj="t"&gt;Episode 484: Raspberry Pi Bird Watching Camera&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5201/episode-483-diy-miniature-multimeter" data-e14adj="t"&gt;Episode 483: DIY Miniature Multimeter&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5196/episode-482-gigantic-3d-printed-7-segment-display-clock" data-e14adj="t"&gt;Episode 482: Gigantic 3D Printed 7 Segment Display Clock&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5188/episode-481-diy-lost-swan-station-split-flap-display-timer" data-e14adj="t"&gt;Episode 481: DIY LOST Swan Station Split Flap Display Timer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5181/episode-480-diy-toothbrush-timer" data-e14adj="t"&gt;Episode 480: DIY Toothbrush Timer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5179/episode-479-raspberry-pi-2xl-robot-assistant-part-2" data-e14adj="t"&gt;Episode 479: Raspberry Pi 2XL Robot Assistant Part 2&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5171/episode-478-upgrading-a-christmas-train-with-python-and-raspberry-pi" data-e14adj="t"&gt;Episode 478: Upgrading A Christmas Train&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5169/episode-477-metal-plate-your-3d-prints-with-a-diy-galvanizing-machine" data-e14adj="t"&gt;Episode 477: Metal Plate Your 3D Prints with a DIY Galvanizing Machine&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5160/episode-476-iot-arduino-ntp-world-clock-with-spi-display" data-e14adj="t"&gt;Episode 476: IoT Arduino NTP World Clock with SPI Display&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5147/episode-475-diy-wall-mounted-arduino-barometer" data-e14adj="t"&gt;Episode 475: DIY Wall Mounted Arduino Barometer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5144/episode-474-continuum-robot-tentacle-prototype" data-e14adj="t"&gt;Episode 474: Continuum Robot Tentacle Prototype&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8680/episode-473-mendel-3d-printer-upgrade-and-maintenance" data-e14adj="t"&gt;Episode 473: Mendel 3D Printer Upgrade and Maintenance&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5120/episode-472-diy-hydration-reminder-system" data-e14adj="t"&gt;Episode 472: DIY Hydration Reminder System&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5113/episode-471-diy-dance-dance-revolution-mat" data-e14adj="t"&gt;Episode 471: DIY Dance Dance Revolution Mat&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5102/episode-470-voice-activated-inspector-gadget-hat" data-e14adj="t"&gt;Episode 470: Voice Activated Inspector Gadget Hat&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5063/episode-469-nintendo-super-scope-modded-for-modern-televisions" data-e14adj="t"&gt;Episode 469: Nintendo Super Scope Modded For Modern Televisions&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5092/episode-468-socially-distanced-halloween-candy-dispenser" data-e14adj="t"&gt;Episode 468: Socially Distanced Halloween Candy Dispenser&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5077/episode-467-repairing-the-world-s-first-laptop-epson-hx-20" data-e14adj="t"&gt;Episode 467: Repairing the World&amp;#39;s First Laptop! (Epson HX-20)&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5061/episode-466-arduino-powered-hexadecimal-color-code-clock" data-e14adj="t"&gt;Episode 466: Arduino-powered Hexadecimal Color Code Clock&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5034/episode-465-lego-raspberry-pi-hq-camera" data-e14adj="t"&gt;Episode 465: Lego Raspberry Pi HQ Camera&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5031/episode-464-particle-voice-recognition-for-home-appliances" data-e14adj="t"&gt;Episode 464: Particle Voice Recognition for Home Appliances&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5002/episode-463-raspberry-pi-speech-to-text-led-face-mask" data-e14adj="t"&gt;Episode 463: Raspberry Pi Speech to Text LED Face Mask&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/5012/episode-462-joycon-controlled-electronic-rock-em-sock-em-robots" data-e14adj="t"&gt;Episode 462: Joycon Controlled Electronic Rock&amp;#39;Em Sock&amp;#39;Em Robots&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4980/episode-461-portal-2-security-camera-with-raspberry-pi-2" data-e14adj="t"&gt;Episode 461: Portal 2 Security Camera with Raspberry Pi 2&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4985/episode-460-trinamic-open-source-ventilator-tosv-teardown" data-e14adj="t"&gt;Episode 460: Trinamic Open Source Ventilator (TOSV) Teardown&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4961/episode-459-raspberry-pi-4-vr-conference-call-assistant" data-e14adj="t"&gt;Episode 459: Raspberry Pi 4 VR Conference Call Assistant&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4971/episode-458-diy-arduino-automated-metal-bending-machine" data-e14adj="t"&gt;Episode 458: DIY Arduino Automated Metal Bending Machine&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4966/episode-457-arduino-mkr-zero-animatronic-rosie-the-robot-from-the-jetsons" data-e14adj="t"&gt;Episode 457: Raspberry Pi 4 Animatronic Rosie the Robot from the Jetsons&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8665/episode-456-unhackable-arduino-switch-matrix" data-e14adj="t"&gt;Episode 456: Unhackable Arduino Switch Matrix&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8664/episode-455-arduino-unit-conversion-calculator" data-e14adj="t"&gt;Episode 455: Arduino Unit Conversion Calculator&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4942/episode-454-soldering-up-the-rc2014-homebrew-z80-computer-kit" data-e14adj="t"&gt;Episode 454: Soldering Up the rc2014 Homebrew Z80 Computer Kit&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4937/episode-453-build-an-anti-troll-bot-using-tensorflow-and-arduino" data-e14adj="t"&gt;Episode 453: Build an Anti-Troll Bot Using TensorFlow and Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4914/episode-452-raspberry-pi-4-experimental-resin-3d-printer-updated" data-e14adj="t"&gt;Episode 452: Raspberry Pi 4 Experimental Resin 3D Printer Updated!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4913/episode-451-build-an-off-grid-wikipedia-with-raspberry-pi" data-e14adj="t"&gt;Episode 451: Build an Off Grid Wikipedia with Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4906/episode-450-sega-gamegear-rebuild-with-leds" data-e14adj="t"&gt;Episode 450: Sega GameGear Rebuild with LEDs&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8657/episode-449-diy-tamagotchi---build-a-virtual-pet" data-e14adj="t"&gt;Episode 449: DIY Tamagotchi - Build a Virtual Pet&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4895/episode-448-diy-raspberry-pi-4-boxing-game" data-e14adj="t"&gt;Episode 448: DIY Raspberry Pi 4 Boxing Game&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4873/episode-447-diy-stop-motion-rig-with-lattepanda" data-e14adj="t"&gt;Episode 447: DIY Stop Motion Rig with LattePanda&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4871/episode-446-raspberry-pi-2xl-robot-assistant-part-1" data-e14adj="t"&gt;Episode 446: Raspberry Pi 2XL Robot Assistant Part 1&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8652/episode-445-raspberry-pi-4-animatronic-bd-1-companion-robot" data-e14adj="t"&gt;Episode 445: Raspberry Pi 4 Animatronic BD-1 Companion Robot&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4848/episode-444-raspberry-pi-4-dvr" data-e14adj="t"&gt;Episode 444: Raspberry Pi 4 DVR&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4836/episode-443-arduino-uno-rc-remote---can-it-be-done" data-e14adj="t"&gt;Episode 443: Arduino Uno RC Remote - Can It Be Done?&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4834/episode-442-make-your-own-giant-servo" data-e14adj="t"&gt;Episode 442: Make Your Own Giant Servo&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4818/episode-441-raspberry-pi-4-international-space-station-tracker" data-e14adj="t"&gt;Episode 441: Raspberry Pi 4 International Space Station Tracker&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4810/episode-440-diy-arduino-helicopter-collective-joystick-control" data-e14adj="t"&gt;Episode 440: DIY Arduino Helicopter Collective Joystick Control&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4796/episode-439---mechanical-arcade-game-with-barebones-arduino" data-e14adj="t"&gt;Episode 439 - Mechanical Arcade Game with Barebones Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4787/episode-438-smartphone-controlled-diy-rover-using-websockets" data-e14adj="t"&gt;Episode 438: Smartphone Controlled DIY Rover Using Websockets&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4771/episode-437-diy-motorized-zoom-for-your-dslr" data-e14adj="t"&gt;Episode 437: DIY Motorized Zoom for Your DSLR&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4767/episode-436-automated-raspberry-pi-planet-tracking-goto-telescope" data-e14adj="t"&gt;Episode 436: Automated Raspberry Pi Planet Tracking GOTO Telescope&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4756/episode-435-raspberry-pi-4-music-player-w-analog-controls" data-e14adj="t"&gt;Episode 435: Raspberry Pi 4 Music Player w/Analog Controls&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8637/episode-434-infineon-smart-city-model" data-e14adj="t"&gt;Episode 434: Infineon Smart City Model&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4742/episode-433---arduino-based-love-tester" data-e14adj="t"&gt;Episode 433: Arduino Based Love Tester&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4728/episode-432-super-fx-sword-using-the-bbc-micro-bit" data-e14adj="t"&gt;Episode 432: Super FX Sword using the BBC micro:bit&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4726/episode-431-room-sized-studio-light-speakers-combo" data-e14adj="t"&gt;Episode 431: Room-Sized Studio Light Speakers Combo&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4692/episode-430-flaming-xylophone-rubens-tube" data-e14adj="t"&gt;Episode 430: Flaming Xylophone Rubens&amp;#39; Tube&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4670/episode-429-youtuber-on-air-light-with-particle-mesh-network" data-e14adj="t"&gt;Episode 429: YouTuber &amp;quot;On Air&amp;quot; Light with Particle Mesh Network&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4668/episode-428-raspberry-pi-4-crt-based-vr-headset" data-e14adj="t"&gt;Episode 428: Raspberry Pi 4 CRT-based VR Headset&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4657/episode-427-diy-retro-gaming-portable-on-a-budget" data-e14adj="t"&gt; Episode 427: DIY Retro Gaming Portable on a Budget!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4142/episode-426-retro-tv-ads-holiday-ornament" data-e14adj="t"&gt; Episode 426: Retro TV Ads Holiday Ornament&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4651/episode-425-make-your-own-raspberry-pi-4-photobooth" data-e14adj="t"&gt; Episode 425: Make Your Own Raspberry Pi 4 Photobooth!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4646/episode-424-diy-escape-room-puzzle" data-e14adj="t"&gt; Episode 424: DIY Escape Room Puzzle&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4644/episode-423-programmable-arduino-synthesizer-watch" data-e14adj="t"&gt; Episode 423: Programmable Arduino Synthesizer Watch&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4628/episode-422-raspberry-pi-e-ink-task-organizer" data-e14adj="t"&gt; Episode 422: Raspberry Pi E-Ink Task Organizer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4627/episode-421-raspberry-pi-4-commodore-sx-64-inspired-portable-computer" data-e14adj="t"&gt; Episode 421: Raspberry Pi 4 Commodore SX-64 Inspired Portable Computer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4616/episode-420-diy-shapeoko-cnc-pendant" data-e14adj="t"&gt; Episode 420: DIY Shapeoko CNC Pendant&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4607/episode-419-altair-8800-laptop" data-e14adj="t"&gt; Episode 419: Altair 8800 Laptop &lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4604/episode-418-animatronic-terminator-skull-with-beaglebone-ai-and-giveaway" data-e14adj="t"&gt;&amp;nbsp;Episode 418: Animatronic Terminator Skull with BeagleBone&lt;span class="emoticon" data-url="https://community.element14.com/cfs-file/__key/system/emoji/00ae.svg" title="Registered"&gt;&amp;#x00ae;&lt;/span&gt;&amp;nbsp;AI&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8619/episode-417-pipboy-2000-mk-ii" data-e14adj="t"&gt;Episode 417: #Pipboy 2000 Mk II&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4596/episode-416---diy-3dprinted-label-spooler" data-e14adj="t"&gt;Episode 416: DIY #3DPrinted Label Spooler&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4588/episode-415-iron-man-helmet-heads-up-display" data-e14adj="t"&gt;Episode 415: Iron Man Helmet Heads Up Display&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4580/episode-414-raspberry-pi-4-experimental-resin-3d-printer" data-e14adj="t"&gt;Episode 414: Raspberry Pi 4 Experimental Resin 3D Printer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8610/episode-413-animatronic-claptrap-case-mod-part-2" data-e14adj="t"&gt;Episode 413: Animatronic Claptrap Case Mod Part 2&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4558/episode-412-get-to-know-your-adc-with-a-diy-temperature-probe" data-e14adj="t"&gt;Episode 412: Get to Know Your ADC with a DIY Temperature Probe&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4531/episode-411-animatronic-claptrap-computer-case---part-1" data-e14adj="t"&gt;Episode 411: Animatronic Claptrap Computer Case - Part 1&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4537/episode-410-macpro-g5-cheese-grater-with-raspberry-pi-4" data-e14adj="t"&gt;Episode 410: MacPro G5 Cheese Grater with Raspberry Pi 4&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4522/episode-409-commodore-sx-64-restoration" data-e14adj="t"&gt;Episode 409: Commodore SX-64 Restoration&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4516/episode-408-hand-soldered-led-oscilloscope" data-e14adj="t"&gt;Episode 408: Hand Soldered LED Oscilloscope&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4514/episode-407-the-ultimate-raspberry-pi-4-laptop" data-e14adj="t"&gt;Episode 407: The Ultimate Raspberry Pi 4 Laptop&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4507/episode-406-automated-robot-artist" data-e14adj="t"&gt;Episode 406: Automated Robot Artist&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4493/episode-405-rc-ornithopter-concept" data-e14adj="t"&gt;Episode 405: RC Ornithopter Concept&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4488/episode-404-arduino-powered-close-encounters-midi-light-board" data-e14adj="t"&gt;Episode 404: Arduino Powered Close Encounters Midi Light Board&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4459/episode-403-upcycled-iot-coffee-pot-ramen-maker" data-e14adj="t"&gt;Episode 403: Upcycled IoT Coffee Pot Ramen Maker&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4422/episode-402-piphone-the-giant-raspberry-pi-flip-phone" data-e14adj="t"&gt;Episode 402: PiPhone++ The Giant Raspberry Pi Flip Phone&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4128/episode-401-matrix-voice-controlled-robot" data-e14adj="t"&gt;Episode 401: Matrix Voice Controlled Robot&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4127/episode-400-the-ultimate-raspberry-pi-stress-test" data-e14adj="t"&gt;Episode 400: The Ultimate Raspberry Pi Stress Test&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4129/episode-399-candle-powered-robot" data-e14adj="t"&gt;Episode 399: Candle-Powered Robotl&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4044/episode-398-let-me-out-hooman-bluetooth-dog-doorbell" data-e14adj="t"&gt;Episode 398: Let Me Out Hooman! Bluetooth Dog Doorbell&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4126/episode-397-steam-powered-retropie-console" data-e14adj="t"&gt;Episode 397: Steam Powered Retropie Console&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4043/episode-396-arduino-retro-led-matrix-handheld" data-e14adj="t"&gt;Episode 396: Arduino Retro LED Matrix Handheld&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4042/episode-395-raspberry-pi-stop-motion-machine" data-e14adj="t"&gt;Episode 395: Raspberry Pi Stop Motion Machine&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8531/episode-394-animatronic-glados-head-with-raspberry-pi" data-e14adj="t"&gt;Episode 394: Animatronic GLaDOS Head with Raspberry Pi&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4125/episode-393-gameboy-walkman" data-e14adj="t"&gt;Episode 393: GameBoy Walkman&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4191/episode-392-multi-line-telephone-intercom" data-e14adj="t"&gt;Episode 392: Multi-Line Telephone Intercom&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4124/episode-391-first-person-view-rc-car-with-ps1-steering-wheel" data-e14adj="t"&gt;Episode 391: First Person View RC Car with PS2 Steering Wheel&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4122/episode-390-retro-texting-smart-watch-of-the-future" data-e14adj="t"&gt;Episode 390: Retro Texting Smart Watch of the Future!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4120/episode-389-playstation-classic-portable-prototype" data-e14adj="t"&gt;Episode 389: PlayStation Classic Portable Prototype&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8519/episode-388-fpga-midi-music-synthesizer" data-e14adj="t"&gt;Episode 388: FPGA MIDI Music Synthesizer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4057/episode-387-rotocell---the-rotary-cell-phone-of-the-future" data-e14adj="t"&gt;Episode 387: Rotocell - The Rotary Cell Phone of the Future!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4038/episode-386-xybernaut-wearable-pc" data-e14adj="t"&gt;Episode 386: Xybernaut Wearable PC&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4117/episode-385-20-pcb-design-pitfalls" data-e14adj="t"&gt;Episode 385: 20 PCB Design Pitfalls&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4035/episode-384-retro-gaming-handheld-without-a-pcb" data-e14adj="t"&gt;Episode 384: Retro Gaming Handheld Without a PCB&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4058/episode-383-gameboy-wireless-link-cable-dmg1" data-e14adj="t"&gt;Episode 383: Gameboy Wireless Link Cable (DMG1)&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8501/episode-382-modding-a-super-8-camera-into-a-digital" data-e14adj="t"&gt;Episode 382: Modding a Super 8 Camera into a Digital&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4067/episode-381-reverse-music-box" data-e14adj="t"&gt;Episode 381: Reverse Music Box&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4039/episode-380-nes-zapper-on-retropie" data-e14adj="t"&gt;Episode 380: NES Zapper on RetroPie&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4036/episode-379-macroscope-soldering-tool" data-e14adj="t"&gt;Episode 379: Macroscope Soldering Tool&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8500/episode-378-invader-zim-animatronic-gir" data-e14adj="t"&gt;Episode 378: Invader ZIM Animatronic GIR&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4034/episode-377-altair-8800-replica" data-e14adj="t"&gt;Episode 377: Altair 8800 Replica&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4028/episode-376-4d-gaming-with-the-matrix-creator" data-e14adj="t"&gt;Episode 376: 4D Gaming with the Matrix Creator&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4025/episode-375-hacked-fetal-detector-music-synthesizer" data-e14adj="t"&gt;Episode 375: Hacked Fetal Detector Music Synthesizer&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/4008/episode-374-raspberry-pi-donkey-kong-holiday-ornament" data-e14adj="t"&gt;Episode 374: Raspberry Pi Donkey Kong Holiday Ornament&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3992/episode-373-raspberry-pi-fallout-terminal-pc" data-e14adj="t"&gt;Episode 373: Raspberry Pi Fallout Terminal PC&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8497/episode-372-raspberry-pi-auto-etch-a-sketch" data-e14adj="t"&gt;Episode 372: Raspberry Pi Auto Etch A Sketch&lt;span class="emoticon" data-url="https://community.element14.com/cfs-file/__key/system/emoji/2122.svg" title="Tm"&gt;&amp;#x2122;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3990/episode-371-fpga-game-genie-for-atari-2600" data-e14adj="t"&gt;Episode 371: FPGA &amp;quot;Game Genie&amp;quot; for Atari 2600&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3989/episode-370-raspberry-pi-noaa-satellite-receiver" data-e14adj="t"&gt;Episode 370: Raspberry Pi NOAA Satellite Receiver&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3979/episode-369-recreating-the-atari-portfolio" data-e14adj="t"&gt;Episode 369: Recreating the Atari Portfolio&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3977/episode-368-arduino-automatic-wire-cutter-and-stripper" data-e14adj="t"&gt;Episode 368: Arduino Automatic Wire Cutter and Stripper&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3968/episode-367-most-useless-iot-device-ever---part-2" data-e14adj="t"&gt;Episode 367: Most Useless IoT Device Ever - Part 2&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3960/episode-366-infinity-icosahedron" data-e14adj="t"&gt;Episode 366: Infinity Icosahedron&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3949/episode-365-twilight-zone-fortune-telling-machine" data-e14adj="t"&gt;Episode 365: Twilight Zone Fortune Telling Machine&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3934/episode-364-raspberry-pi-virtual-reality-arcade" data-e14adj="t"&gt;Episode 364: Raspberry Pi Virtual Reality Arcade #VR&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3920/episode-363-add-a-motor-to-your-bike-with-arduino" data-e14adj="t"&gt;Episode 363 - Add a Motor to your Bike with Arduino&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3912/episode-362-most-worthless-iot-device-ever---part-1" data-e14adj="t"&gt;Episode 362: Most Worthless IoT Device Ever Pt. 1&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3903/episode-361-r-o-b-rebuild-and-upgrade" data-e14adj="t"&gt;Episode 361: R.O.B Rebuild and Upgrade&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3887/episode-360-make-your-own-raspberry-pi-cell-phone" data-e14adj="t"&gt;Episode 360: Make Your Own Raspberry Pi Cell Phone&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3875/episode-359-make-your-own-cnc-pyrography-wood-burner" data-e14adj="t"&gt;Episode 359: Make Your Own CNC Pyrography Wood Burner&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3863/episode-358-the-shrimp-of-terror" data-e14adj="t"&gt;Episode 358: The Shrimp of Terror!&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3848/episode-357-raspberry-pi-asteroid-tracker" data-e14adj="t"&gt;Episode 357: Raspberry Pi Asteroid Tracker&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/8491/episode-356-bank-to-the-future-with-arduino-ti" data-e14adj="t"&gt;Episode 356: Bank to the Future with Arduino &amp;amp; TI&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3826/episode-355-raspberry-pi-pirate-radio" data-e14adj="t"&gt;Episode 355: Raspberry Pi Pirate Radio&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3816/episode-354-tiny-vacuum-forming-machine" data-e14adj="t"&gt;Episode 354: Tiny Vacuum Forming Machine&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3809/episode-353-program-your-own-fpga-video-game" data-e14adj="t"&gt;Episode 353: Program Your Own FPGA Video Game&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3784/episode-352-pripyat---diy-geiger-counter" data-e14adj="t"&gt;Episode 352: Pripyat - DIY Geiger Counter&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/project-videos/w/documents/3747/episode-349-raspberry-pi-selfie-rocket" data-e14adj="t"&gt;Episode 349: Raspberry Pi Selfie Rocket&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/benheck/ben-heck-exclusive/w/documents/9678/the-ben-heck-show-episode-archive" data-e14adj="t"&gt;See All Previous Episodes&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: episode releases, friday_release_archive, element14 presents, project videos, episodes, friday releases, episode release archive, episode archive, friday release archive, project_videos&lt;/div&gt;
</description></item><item><title>Designing a Mobile Robot Platform with Inverse Kinematics and Wireless Control</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72067/designing-a-mobile-robot-platform-with-inverse-kinematics-and-wireless-control/revision/4</link><pubDate>Wed, 27 May 2026 16:09:55 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:6e2682a7-8e1c-4db3-ad28-039762ae48c3</guid><dc:creator>cstanton</dc:creator><description>Revision 4 posted to Documents by cstanton on 5/27/2026 4:09:55 PM&lt;br /&gt;
&lt;p&gt;&lt;span&gt;Milos takes his servo driven robot arm off the bench and turns it into a four wheel drive mobile platform built around the NXP FRDM RW612. The project combines an aluminium extrusion chassis, DC geared motors with L298N drivers, PCA9685 servo control, and wireless joystick input to tackle real challenges like torque, calibration, surface traction, and jitter. On the software side, he moves beyond joint by joint control into inverse kinematics and Cartesian motion, using simulation to validate behaviour before driving real hardware. The result is a modular robotics platform designed for learning, iteration, and future upgrades.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl1r50d4"&gt;&lt;span&gt;Watch the Robot&amp;nbsp;Arm on Wheels&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://youtu.be/hSKMcJEPSlE"&gt;https://youtu.be/hSKMcJEPSlE&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This project marks a natural but ambitious evolution of Milos&amp;rsquo;s earlier work on a desktop robotic arm. What began as an exploration of servo-driven motion, joint recording, and basic trajectory playback has now been transformed into a fully mobile robotic platform that combines mechanics, electronics, and software into a cohesive system.&lt;/p&gt;
&lt;p&gt;Rather than treating the robot arm and the base as separate challenges, Milos approached this build as a single platform problem: how to create a robot that can move through space, manipulate objects with intent, and serve as a foundation for far more advanced autonomy in the future.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/1641.Picture1.png" /&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/8507.Picture3.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1aq0"&gt;Idea and Plan&lt;/h2&gt;
&lt;p&gt;The starting point for this build was a clear limitation of the previous project. While the arm could replay learned movements, it was fixed in place and constrained to joint-by-joint control. As Milos puts it, the earlier version worked, &amp;ldquo;but in the end it&amp;rsquo;s just a robot arm.&amp;rdquo; The next logical step was mobility.&lt;/p&gt;
&lt;p&gt;The core idea was to mount the arm onto a four-wheel-drive base and design everything around modularity. The arm would sit on top of a rigid chassis, with space below reserved for motors, power, and electronics. Two locomotion strategies were planned from the outset: a first version using skid-steer (tank-style) drive, and a second version that would later replace the wheels with mecanum wheels for true omnidirectional movement.&lt;/p&gt;
&lt;p&gt;Crucially, Milos also decided that control needed to move beyond jogging joints or replaying recorded angles. Inverse kinematics would become central to the project, allowing the arm to be commanded in Cartesian space rather than micromanaged servo by servo.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/4377.Picture4.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1ar1"&gt;Electronics and Heart of the Project&lt;/h2&gt;
&lt;p&gt;At the heart of the electronics is an NXP FRDM-RW612 development board. The choice was deliberate: the board offers ample GPIO, built-in Wi-Fi, and enough processing power that Milos notes he is &amp;ldquo;only scratching the surface with what this can do.&amp;rdquo; For this stage of development, Wi-Fi connectivity and I&amp;sup2;C were the primary features in use.&lt;/p&gt;
&lt;p&gt;Wireless control is handled via a Bluetooth gamepad connected to a laptop. Commands are sent over UDP to the robot, leveraging the board&amp;rsquo;s Wi-Fi to avoid additional communication modules. As Milos explains, &amp;ldquo;I want to send commands over UDP, so over the internet to the board&amp;hellip; since the board already has built-in Wi-Fi, we&amp;rsquo;re going to utilize that.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Motor and servo control is centralized through a PCA9685 PWM driver. This single module generates PWM signals for both the five servo motors in the arm and the brushed DC motors driving the wheels. Two L298N motor driver modules handle the four geared DC motors, giving the robot full four-wheel drive and, as testing later shows, a surprising amount of torque.&lt;/p&gt;
&lt;p&gt;One subtle but important design decision involved PWM frequency. Servo motors and DC motor drivers prefer different operating ranges, but Milos settled on a compromise of around 300 Hz, noting that &amp;ldquo;at around 300 hertz everything will be happy, both the motor drivers and all of the servo motors.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Power is supplied by a 12 V drill battery mounted at the rear of the robot. A robust DC-DC buck converter steps this down to 5 V for the servos and logic, while the drive motors receive the full battery voltage. An emergency stop switch doubles as a main power switch, an essential safety feature given the platform&amp;rsquo;s weight and torque.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/0167.Picture5.jpg" /&gt;&lt;img loading="lazy" alt="image" style="max-height:287px;max-width:383px;"  height="287" src="/resized-image/__size/766x574/__key/communityserver-wikis-components-files/00-00-00-04-35/5857.Picture7.jpg" width="383" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1ar2"&gt;Core Mechanics&lt;/h2&gt;
&lt;p&gt;If there is one area where this project demanded the most effort, it was the mechanical design. Milos is candid about this, describing the mechanical side as &amp;ldquo;actually kind of complicated and a lot of work.&amp;rdquo; The challenge was to balance strength, accessibility, and flexibility.&lt;/p&gt;
&lt;p&gt;The main chassis is constructed from standard 20&amp;times;20 and 40&amp;times;20 T-slot aluminum extrusions. These are fastened with machine screws to form a stiff, rectangular frame that resists twisting while remaining easy to modify. This choice was intentional: aluminum extrusions are widely available, easy to cut, and ideal for iterative projects.&lt;/p&gt;
&lt;p&gt;Secondary structures, mounts, and brackets are 3D printed. PLA was used for this version, with the understanding that higher-performance materials such as PC or PA may replace it later, particularly for gears. This hybrid approach keeps the build approachable while still allowing custom geometry where needed.&lt;/p&gt;
&lt;p&gt;To protect the motors from excessive radial loads, each wheel is mounted on its own axle made from an M8 bolt, supported by dual bearings. This design ensures that the bearings, rather than the motor shafts, absorb the mechanical stress. It also makes maintenance easier, since bearings are inexpensive and simple to replace.&lt;/p&gt;
&lt;p&gt;The finished platform weighs around 7 kg, giving it a low center of gravity but also making power and traction critical considerations. Ground clearance is modest, and while the robot performs well on smooth surfaces, Milos observes that &amp;ldquo;it doesn&amp;rsquo;t like surfaces like the carpet because they are extremely grippy,&amp;rdquo; leading to wheel scrub and vibration.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/Picture11.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1ar3"&gt;Control and Software&lt;/h2&gt;
&lt;p&gt;On the software side, the project is split cleanly between the robot and the control computer. The microcontroller firmware focuses on receiving UDP packets, parsing a compact binary payload, and translating those values into PWM outputs. As Milos summarizes, &amp;ldquo;what the code for the MCU actually does is it just gets the data over UDP&amp;hellip; and sends the PWM values through the PCA module to the motors or the servo motors.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The more complex logic lives on the computer side, written in Python. Two main scripts handle this. One is responsible for reading the gamepad and managing UDP communication. The other implements the control logic that converts joystick inputs into meaningful robot commands.&lt;/p&gt;
&lt;p&gt;For driving, the robot uses a differential (tank) drive model. The left joystick maps directly to forward motion and turning, with the software mixing these inputs into left and right motor commands. This makes the platform intuitive to drive while remaining simple to implement.&lt;/p&gt;
&lt;p&gt;The arm control is where the project becomes significantly more advanced. Instead of commanding individual joints, the software implements both direct and inverse kinematics. Milos explains the motivation clearly: &amp;ldquo;If we want the robot arm to reach this point&amp;hellip; how do we actually even know where the end effector is located? That&amp;rsquo;s called kinematics in robotics.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Direct kinematics calculates the position of the tool center point (TCP) from known joint angles and link lengths. Inverse kinematics does the opposite, solving for joint angles that will place the TCP at a desired coordinate. Even for a simple planar arm, Milos demonstrates that inverse kinematics quickly becomes mathematically heavy, with multiple valid solutions such as elbow-up and elbow-down configurations.&lt;/p&gt;
&lt;p&gt;Rather than reinventing the wheel, the software uses established solving techniques and provides flexibility in how solutions are chosen. Link lengths, joint limits, and servo pulse ranges are explicitly defined in code, ensuring that the mathematical model matches the physical hardware. Calibration data is stored in a JSON file, allowing the arm to be zeroed accurately after assembly. As Milos emphasizes, improper calibration &amp;ldquo;will just add up and there is just a function to actually calibrate the arm so you tell it where the actual zero position is.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;To make development safer and more intuitive, a visualization script simulates the arm&amp;rsquo;s motion in real time. This allows kinematic behavior to be inspected before applying commands to the real hardware, and it highlights issues such as jitter and singularities that will eventually need path planning to resolve.&lt;/p&gt;
&lt;p&gt;The control system for the MR21 platform was designed around a clear separation of responsibilities. Low-level, time‑critical tasks run on the robot itself, while higher‑level interpretation, kinematic logic, and user interaction are handled externally. This keeps the embedded side predictable and responsive, while allowing the control logic to evolve rapidly without being constrained by microcontroller resources.&lt;/p&gt;
&lt;p&gt;At the center of the system is a wireless control link. Commands are sent to the robot over Wi‑Fi using UDP, carrying both drive and arm control data in a single, fixed‑size packet. On the robot, the microcontroller&amp;rsquo;s role is intentionally narrow: receive the packet, extract values, and generate PWM outputs via the PCA9685 for the servo motors and motor drivers. As Milos describes it, the board &amp;ldquo;just gets the data over UDP and sends the PWM values to the motors or the servo motors.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The packet itself is compact and structured to be easy to parse deterministically. It contains drive motor commands alongside pulse values for the arm servos, allowing the mobile base and arm to be controlled at the same time without additional synchronization logic:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-python"&gt;
# uint32 message ID
# int16 left drive motor
# int16 right drive motor
# uint16 servo_1 .. servo_6
# Total payload size: 20 bytes
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This approach avoids the overhead of text-based protocols and ensures consistent timing, which becomes especially important once the arm is moving while the platform is driving.&lt;/p&gt;
&lt;p&gt;For locomotion, the robot uses a differential drive model. Forward motion and turning are combined in software and translated into left and right motor commands. The mixing logic also normalizes the output so that neither side exceeds its allowed range:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-python"&gt;
def mix_diff_drive(forward, turn):
    left = forward + turn
    right = forward - turn
    max_mag = max(1.0, abs(left), abs(right))
    left /= max_mag
    right /= max_mag
    return int(left * 100), int(right * 100)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In practice, this gives the robot predictable handling: pushing the joystick forward drives all wheels forward, pushing it sideways causes the robot to rotate in place, and intermediate positions allow smooth combined motion. This becomes particularly noticeable during testing, where the platform&amp;rsquo;s high torque makes abrupt or poorly scaled commands immediately obvious.&lt;/p&gt;
&lt;p&gt;Arm control is handled very differently. Instead of commanding individual joints directly, the software operates in Cartesian space using kinematics. The intent is not to tell each servo where to go, but to tell the arm where the tool should be. As Milos puts it, &amp;ldquo;if we want the robot arm to reach a point in space, the question becomes which joint angles get us there.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;To support this, the physical structure of the arm is defined explicitly in software. Link lengths and base offsets are encoded so the mathematical model matches the real hardware:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-python"&gt;
LINK1 = 100.0  # shoulder to elbow (mm)
LINK2 = 100.0  # elbow to wrist (mm)
LINK3 = 100.0  # wrist to tool (mm)
BASE_HEIGHT = 64.52
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Joint limits are also defined for every axis, both in terms of angular range and the corresponding PWM values. This prevents the solver from generating solutions that the hardware cannot physically achieve and protects the servos from being driven into hard stops.&lt;/p&gt;
&lt;p&gt;A practical challenge with this kind of system is calibration. Servos must be mounted at known reference angles during assembly, and even small errors at this stage affect every kinematic calculation that follows. To account for this, the software supports per‑joint offset values that can be adjusted and stored after assembly. These offsets are applied automatically whenever kinematic solutions are converted into servo commands, allowing the arm to be aligned accurately without repeated mechanical rework.&lt;/p&gt;
&lt;p&gt;Before running movements on the real hardware, the same kinematic logic is also used in a visualisation tool. This renders the arm&amp;rsquo;s motion on screen and makes it easier to spot unreachable targets, singularities, or jitter in the solution. Some uneven motion remains, particularly near the limits of reach, which Milos notes is expected without additional path planning. At this stage, the focus is on correctness and clarity rather than perfectly smooth trajectories.&lt;/p&gt;
&lt;p&gt;Taken together, the control software reflects a deliberate design philosophy. The robot executes commands simply and reliably, while the complexity lives where it is easier to debug, visualise, and extend. This structure not only makes the current platform easier to understand and reproduce, but also leaves a clear path toward future upgrades such as onboard computation, more advanced motion planning, or autonomous behaviours.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/Picture12.png" /&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/Picture13.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl1n1n83"&gt;Practical Testing&lt;/h2&gt;
&lt;p&gt;With the electronics wired, software running, and mechanics assembled, the robot was finally tested as a complete system. Driving performance matched expectations: strong acceleration, the ability to turn on the spot, and enough torque to pull several kilograms, albeit with wheel slip.&lt;/p&gt;
&lt;p&gt;The arm and base can be controlled simultaneously, a key milestone that demonstrates the viability of the overall architecture. While movements can still be jittery&amp;mdash;particularly along the Z-axis&amp;mdash;the system behaves predictably once calibrated.&lt;/p&gt;
&lt;p&gt;To cap off testing, Milos put the robot to a practical, if slightly humorous, task: feeding his dog. The experiment proved that the robot can manipulate objects in the real world, even if the results were messy. The verdict was mixed, but the demonstration underscored the platform&amp;rsquo;s potential.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/Picture14.png" /&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/Picture15.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1ar5"&gt;Looking Ahead&lt;/h2&gt;
&lt;p&gt;This version of the robot is best described as a foundation. Future plans include replacing the wheels with mecanum wheels, adding sensors for mapping and navigation, and integrating an embedded computer such as a Raspberry Pi or NVIDIA Jetson. With that in place, running ROS or ROS 2 becomes a realistic next step.&lt;/p&gt;
&lt;p&gt;As Milos notes, once mobility, perception, and higher-level planning are combined, &amp;ldquo;we&amp;rsquo;re going to have a rather nice platform.&amp;rdquo; This project does not aim to be a finished product, but rather a flexible robotics playground, one that invites iteration, experimentation, and continual improvement.&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1ar6"&gt;Supporting Links and Files&lt;/h2&gt;
&lt;p&gt;-&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/m/files/151377"&gt;Episode 716 Resources - Designing a Mobile Robot Platform with Inverse Kinematics and Wireless Control&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/71909/making-a-stronger-affordable-diy-robot-arm-with-3d-printing-with-raspberry-pi-pico----episode-662"&gt;Making a Stronger Affordable DIY Robot Arm with 3D Printing with Raspberry Pi Pico -- Episode 662&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl1k8bo0"&gt;Bill of Materials&lt;/h2&gt;
&lt;table class="e14-product-bom-main"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;a id="e14-product-link-8a190" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3769950~5,2845501~3,3769947~4,4060368~2,2816312,4552201&amp;nsku=52AJ5993~5,50AC9540~3,52AJ5079~4,55AK3445~2,42X3730,14AM7035&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_BUY_KIT" class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('8a190'));" data-farnell="3769950~5,2845501~3,3769947~4,4060368~2,2816312,4552201" data-newark="52AJ5993~5,50AC9540~3,52AJ5079~4,55AK3445~2,42X3730,14AM7035" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DFROBOT SERVO MOTOR&lt;/td&gt;
&lt;td&gt;DFROBOT&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-58c7b" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3769950~5&amp;nsku=52AJ5993~5&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('58c7b'));" data-farnell="3769950~5" data-newark="52AJ5993~5" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WHITE PLA 3D PRINTING FILAMENT&lt;/td&gt;
&lt;td&gt;MULTICOMP&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-5dd30" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2845501~3&amp;nsku=50AC9540~3&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('5dd30'));" data-farnell="2845501~3" data-newark="50AC9540~3" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DC GEARED MOTOR - FIT0185&lt;/td&gt;
&lt;td&gt;DFROBOT&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-b0c71" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3769947~4&amp;nsku=52AJ5079~4&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('b0c71'));" data-farnell="3769947~4" data-newark="52AJ5079~4" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L298N MOTOR DRIVER&lt;/td&gt;
&lt;td&gt;SEEED STUDIO&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-707f5" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4060368~2&amp;nsku=55AK3445~2&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('707f5'));" data-farnell="4060368~2" data-newark="55AK3445~2" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PCA9685 - SERVO MOTOR DRIVERr&lt;/td&gt;
&lt;td&gt;ADAFRUIT&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-fee59" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2816312&amp;nsku=42X3730&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('fee59'));" data-farnell="2816312" data-newark="42X3730" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NXP FRDM-RW612&lt;/td&gt;
&lt;td&gt;NXP&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-a19fd" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4552201&amp;nsku=14AM7035&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('a19fd'));" data-farnell="4552201" data-newark="14AM7035" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="xs-hide"&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl1k8bp1"&gt;Additional Parts&lt;/h2&gt;
&lt;table class="e14-product-bom-additional"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;M3, M4, M5, M6 Screws&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aluminum 20x20 profiles&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;M8 Bearing With Mount&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;M8 bolts and nuts&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Small bearings&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RC Wheels&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;T slot nuts&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strong Buck Converter for the robot arm&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12V Battery&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="mcetoc_1jpl1k8bp2"&gt;&lt;/h3&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: wireless robot control using Wi-Fi, joystick controlled robot arm, inverse kinematics robot arm build, NXP FRDM-RW612 robotics project, modular robot chassis aluminium extrusion, DIY mobile robot with arm, differential drive robot design, mobile robot platform with robotic arm, PCA9685 servo controller robotics, robotics platform for experimentation, four wheel drive robot platform, element14 probotics project build, Python robotics control software, robot arm kinematics explained, e14presents_milosrasic, L298N motor driver robot project, friday_release&lt;/div&gt;
</description></item><item><title>Designing a Mobile Robot Platform with Inverse Kinematics and Wireless Control</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72067/designing-a-mobile-robot-platform-with-inverse-kinematics-and-wireless-control</link><pubDate>Wed, 27 May 2026 16:09:55 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:6e2682a7-8e1c-4db3-ad28-039762ae48c3</guid><dc:creator>e14sbhargav</dc:creator><description>Current Revision posted to Documents by e14sbhargav on 5/27/2026 4:09:55 PM&lt;br /&gt;
&lt;p&gt;&lt;span&gt;Milos takes his servo driven robot arm off the bench and turns it into a four wheel drive mobile platform built around the NXP FRDM RW612. The project combines an aluminium extrusion chassis, DC geared motors with L298N drivers, PCA9685 servo control, and wireless joystick input to tackle real challenges like torque, calibration, surface traction, and jitter. On the software side, he moves beyond joint by joint control into inverse kinematics and Cartesian motion, using simulation to validate behaviour before driving real hardware. The result is a modular robotics platform designed for learning, iteration, and future upgrades.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl1r50d4"&gt;&lt;span&gt;Watch the Robot&amp;nbsp;Arm on Wheels&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://youtu.be/hSKMcJEPSlE"&gt;https://youtu.be/hSKMcJEPSlE&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This project marks a natural but ambitious evolution of Milos&amp;rsquo;s earlier work on a desktop robotic arm. What began as an exploration of servo-driven motion, joint recording, and basic trajectory playback has now been transformed into a fully mobile robotic platform that combines mechanics, electronics, and software into a cohesive system.&lt;/p&gt;
&lt;p&gt;Rather than treating the robot arm and the base as separate challenges, Milos approached this build as a single platform problem: how to create a robot that can move through space, manipulate objects with intent, and serve as a foundation for far more advanced autonomy in the future.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/1641.Picture1.png" /&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/8507.Picture3.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1aq0"&gt;Idea and Plan&lt;/h2&gt;
&lt;p&gt;The starting point for this build was a clear limitation of the previous project. While the arm could replay learned movements, it was fixed in place and constrained to joint-by-joint control. As Milos puts it, the earlier version worked, &amp;ldquo;but in the end it&amp;rsquo;s just a robot arm.&amp;rdquo; The next logical step was mobility.&lt;/p&gt;
&lt;p&gt;The core idea was to mount the arm onto a four-wheel-drive base and design everything around modularity. The arm would sit on top of a rigid chassis, with space below reserved for motors, power, and electronics. Two locomotion strategies were planned from the outset: a first version using skid-steer (tank-style) drive, and a second version that would later replace the wheels with mecanum wheels for true omnidirectional movement.&lt;/p&gt;
&lt;p&gt;Crucially, Milos also decided that control needed to move beyond jogging joints or replaying recorded angles. Inverse kinematics would become central to the project, allowing the arm to be commanded in Cartesian space rather than micromanaged servo by servo.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/4377.Picture4.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1ar1"&gt;Electronics and Heart of the Project&lt;/h2&gt;
&lt;p&gt;At the heart of the electronics is an NXP FRDM-RW612 development board. The choice was deliberate: the board offers ample GPIO, built-in Wi-Fi, and enough processing power that Milos notes he is &amp;ldquo;only scratching the surface with what this can do.&amp;rdquo; For this stage of development, Wi-Fi connectivity and I&amp;sup2;C were the primary features in use.&lt;/p&gt;
&lt;p&gt;Wireless control is handled via a Bluetooth gamepad connected to a laptop. Commands are sent over UDP to the robot, leveraging the board&amp;rsquo;s Wi-Fi to avoid additional communication modules. As Milos explains, &amp;ldquo;I want to send commands over UDP, so over the internet to the board&amp;hellip; since the board already has built-in Wi-Fi, we&amp;rsquo;re going to utilize that.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Motor and servo control is centralized through a PCA9685 PWM driver. This single module generates PWM signals for both the five servo motors in the arm and the brushed DC motors driving the wheels. Two L298N motor driver modules handle the four geared DC motors, giving the robot full four-wheel drive and, as testing later shows, a surprising amount of torque.&lt;/p&gt;
&lt;p&gt;One subtle but important design decision involved PWM frequency. Servo motors and DC motor drivers prefer different operating ranges, but Milos settled on a compromise of around 300 Hz, noting that &amp;ldquo;at around 300 hertz everything will be happy, both the motor drivers and all of the servo motors.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Power is supplied by a 12 V drill battery mounted at the rear of the robot. A robust DC-DC buck converter steps this down to 5 V for the servos and logic, while the drive motors receive the full battery voltage. An emergency stop switch doubles as a main power switch, an essential safety feature given the platform&amp;rsquo;s weight and torque.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/0167.Picture5.jpg" /&gt;&lt;img loading="lazy" alt="image" style="max-height:287px;max-width:383px;"  height="287" src="/resized-image/__size/766x574/__key/communityserver-wikis-components-files/00-00-00-03-81/5857.Picture7.jpg" width="383" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1ar2"&gt;Core Mechanics&lt;/h2&gt;
&lt;p&gt;If there is one area where this project demanded the most effort, it was the mechanical design. Milos is candid about this, describing the mechanical side as &amp;ldquo;actually kind of complicated and a lot of work.&amp;rdquo; The challenge was to balance strength, accessibility, and flexibility.&lt;/p&gt;
&lt;p&gt;The main chassis is constructed from standard 20&amp;times;20 and 40&amp;times;20 T-slot aluminum extrusions. These are fastened with machine screws to form a stiff, rectangular frame that resists twisting while remaining easy to modify. This choice was intentional: aluminum extrusions are widely available, easy to cut, and ideal for iterative projects.&lt;/p&gt;
&lt;p&gt;Secondary structures, mounts, and brackets are 3D printed. PLA was used for this version, with the understanding that higher-performance materials such as PC or PA may replace it later, particularly for gears. This hybrid approach keeps the build approachable while still allowing custom geometry where needed.&lt;/p&gt;
&lt;p&gt;To protect the motors from excessive radial loads, each wheel is mounted on its own axle made from an M8 bolt, supported by dual bearings. This design ensures that the bearings, rather than the motor shafts, absorb the mechanical stress. It also makes maintenance easier, since bearings are inexpensive and simple to replace.&lt;/p&gt;
&lt;p&gt;The finished platform weighs around 7 kg, giving it a low center of gravity but also making power and traction critical considerations. Ground clearance is modest, and while the robot performs well on smooth surfaces, Milos observes that &amp;ldquo;it doesn&amp;rsquo;t like surfaces like the carpet because they are extremely grippy,&amp;rdquo; leading to wheel scrub and vibration.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/Picture11.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1ar3"&gt;Control and Software&lt;/h2&gt;
&lt;p&gt;On the software side, the project is split cleanly between the robot and the control computer. The microcontroller firmware focuses on receiving UDP packets, parsing a compact binary payload, and translating those values into PWM outputs. As Milos summarizes, &amp;ldquo;what the code for the MCU actually does is it just gets the data over UDP&amp;hellip; and sends the PWM values through the PCA module to the motors or the servo motors.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The more complex logic lives on the computer side, written in Python. Two main scripts handle this. One is responsible for reading the gamepad and managing UDP communication. The other implements the control logic that converts joystick inputs into meaningful robot commands.&lt;/p&gt;
&lt;p&gt;For driving, the robot uses a differential (tank) drive model. The left joystick maps directly to forward motion and turning, with the software mixing these inputs into left and right motor commands. This makes the platform intuitive to drive while remaining simple to implement.&lt;/p&gt;
&lt;p&gt;The arm control is where the project becomes significantly more advanced. Instead of commanding individual joints, the software implements both direct and inverse kinematics. Milos explains the motivation clearly: &amp;ldquo;If we want the robot arm to reach this point&amp;hellip; how do we actually even know where the end effector is located? That&amp;rsquo;s called kinematics in robotics.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Direct kinematics calculates the position of the tool center point (TCP) from known joint angles and link lengths. Inverse kinematics does the opposite, solving for joint angles that will place the TCP at a desired coordinate. Even for a simple planar arm, Milos demonstrates that inverse kinematics quickly becomes mathematically heavy, with multiple valid solutions such as elbow-up and elbow-down configurations.&lt;/p&gt;
&lt;p&gt;Rather than reinventing the wheel, the software uses established solving techniques and provides flexibility in how solutions are chosen. Link lengths, joint limits, and servo pulse ranges are explicitly defined in code, ensuring that the mathematical model matches the physical hardware. Calibration data is stored in a JSON file, allowing the arm to be zeroed accurately after assembly. As Milos emphasizes, improper calibration &amp;ldquo;will just add up and there is just a function to actually calibrate the arm so you tell it where the actual zero position is.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;To make development safer and more intuitive, a visualization script simulates the arm&amp;rsquo;s motion in real time. This allows kinematic behavior to be inspected before applying commands to the real hardware, and it highlights issues such as jitter and singularities that will eventually need path planning to resolve.&lt;/p&gt;
&lt;p&gt;The control system for the MR21 platform was designed around a clear separation of responsibilities. Low-level, time‑critical tasks run on the robot itself, while higher‑level interpretation, kinematic logic, and user interaction are handled externally. This keeps the embedded side predictable and responsive, while allowing the control logic to evolve rapidly without being constrained by microcontroller resources.&lt;/p&gt;
&lt;p&gt;At the center of the system is a wireless control link. Commands are sent to the robot over Wi‑Fi using UDP, carrying both drive and arm control data in a single, fixed‑size packet. On the robot, the microcontroller&amp;rsquo;s role is intentionally narrow: receive the packet, extract values, and generate PWM outputs via the PCA9685 for the servo motors and motor drivers. As Milos describes it, the board &amp;ldquo;just gets the data over UDP and sends the PWM values to the motors or the servo motors.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The packet itself is compact and structured to be easy to parse deterministically. It contains drive motor commands alongside pulse values for the arm servos, allowing the mobile base and arm to be controlled at the same time without additional synchronization logic:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-python"&gt;
# uint32 message ID
# int16 left drive motor
# int16 right drive motor
# uint16 servo_1 .. servo_6
# Total payload size: 20 bytes
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This approach avoids the overhead of text-based protocols and ensures consistent timing, which becomes especially important once the arm is moving while the platform is driving.&lt;/p&gt;
&lt;p&gt;For locomotion, the robot uses a differential drive model. Forward motion and turning are combined in software and translated into left and right motor commands. The mixing logic also normalizes the output so that neither side exceeds its allowed range:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-python"&gt;
def mix_diff_drive(forward, turn):
    left = forward + turn
    right = forward - turn
    max_mag = max(1.0, abs(left), abs(right))
    left /= max_mag
    right /= max_mag
    return int(left * 100), int(right * 100)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In practice, this gives the robot predictable handling: pushing the joystick forward drives all wheels forward, pushing it sideways causes the robot to rotate in place, and intermediate positions allow smooth combined motion. This becomes particularly noticeable during testing, where the platform&amp;rsquo;s high torque makes abrupt or poorly scaled commands immediately obvious.&lt;/p&gt;
&lt;p&gt;Arm control is handled very differently. Instead of commanding individual joints directly, the software operates in Cartesian space using kinematics. The intent is not to tell each servo where to go, but to tell the arm where the tool should be. As Milos puts it, &amp;ldquo;if we want the robot arm to reach a point in space, the question becomes which joint angles get us there.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;To support this, the physical structure of the arm is defined explicitly in software. Link lengths and base offsets are encoded so the mathematical model matches the real hardware:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-python"&gt;
LINK1 = 100.0  # shoulder to elbow (mm)
LINK2 = 100.0  # elbow to wrist (mm)
LINK3 = 100.0  # wrist to tool (mm)
BASE_HEIGHT = 64.52
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Joint limits are also defined for every axis, both in terms of angular range and the corresponding PWM values. This prevents the solver from generating solutions that the hardware cannot physically achieve and protects the servos from being driven into hard stops.&lt;/p&gt;
&lt;p&gt;A practical challenge with this kind of system is calibration. Servos must be mounted at known reference angles during assembly, and even small errors at this stage affect every kinematic calculation that follows. To account for this, the software supports per‑joint offset values that can be adjusted and stored after assembly. These offsets are applied automatically whenever kinematic solutions are converted into servo commands, allowing the arm to be aligned accurately without repeated mechanical rework.&lt;/p&gt;
&lt;p&gt;Before running movements on the real hardware, the same kinematic logic is also used in a visualisation tool. This renders the arm&amp;rsquo;s motion on screen and makes it easier to spot unreachable targets, singularities, or jitter in the solution. Some uneven motion remains, particularly near the limits of reach, which Milos notes is expected without additional path planning. At this stage, the focus is on correctness and clarity rather than perfectly smooth trajectories.&lt;/p&gt;
&lt;p&gt;Taken together, the control software reflects a deliberate design philosophy. The robot executes commands simply and reliably, while the complexity lives where it is easier to debug, visualise, and extend. This structure not only makes the current platform easier to understand and reproduce, but also leaves a clear path toward future upgrades such as onboard computation, more advanced motion planning, or autonomous behaviours.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/Picture12.png" /&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/Picture13.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl1n1n83"&gt;Practical Testing&lt;/h2&gt;
&lt;p&gt;With the electronics wired, software running, and mechanics assembled, the robot was finally tested as a complete system. Driving performance matched expectations: strong acceleration, the ability to turn on the spot, and enough torque to pull several kilograms, albeit with wheel slip.&lt;/p&gt;
&lt;p&gt;The arm and base can be controlled simultaneously, a key milestone that demonstrates the viability of the overall architecture. While movements can still be jittery&amp;mdash;particularly along the Z-axis&amp;mdash;the system behaves predictably once calibrated.&lt;/p&gt;
&lt;p&gt;To cap off testing, Milos put the robot to a practical, if slightly humorous, task: feeding his dog. The experiment proved that the robot can manipulate objects in the real world, even if the results were messy. The verdict was mixed, but the demonstration underscored the platform&amp;rsquo;s potential.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/Picture14.png" /&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/Picture15.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1ar5"&gt;Looking Ahead&lt;/h2&gt;
&lt;p&gt;This version of the robot is best described as a foundation. Future plans include replacing the wheels with mecanum wheels, adding sensors for mapping and navigation, and integrating an embedded computer such as a Raspberry Pi or NVIDIA Jetson. With that in place, running ROS or ROS 2 becomes a realistic next step.&lt;/p&gt;
&lt;p&gt;As Milos notes, once mobility, perception, and higher-level planning are combined, &amp;ldquo;we&amp;rsquo;re going to have a rather nice platform.&amp;rdquo; This project does not aim to be a finished product, but rather a flexible robotics playground, one that invites iteration, experimentation, and continual improvement.&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1ar6"&gt;Supporting Links and Files&lt;/h2&gt;
&lt;p&gt;-&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/m/files/151377"&gt;Episode 716 Resources - Designing a Mobile Robot Platform with Inverse Kinematics and Wireless Control&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/71909/making-a-stronger-affordable-diy-robot-arm-with-3d-printing-with-raspberry-pi-pico----episode-662"&gt;Making a Stronger Affordable DIY Robot Arm with 3D Printing with Raspberry Pi Pico -- Episode 662&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl1k8bo0"&gt;Bill of Materials&lt;/h2&gt;
&lt;table class="e14-product-bom-main"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;a id="e14-product-link-c7588" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3769950~5,2845501~3,3769947~4,4060368~2,2816312,4552201&amp;nsku=52AJ5993~5,50AC9540~3,52AJ5079~4,55AK3445~2,42X3730,14AM7035&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_BUY_KIT" class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('c7588'));" data-farnell="3769950~5,2845501~3,3769947~4,4060368~2,2816312,4552201" data-newark="52AJ5993~5,50AC9540~3,52AJ5079~4,55AK3445~2,42X3730,14AM7035" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DFROBOT SERVO MOTOR&lt;/td&gt;
&lt;td&gt;DFROBOT&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-616f6" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3769950~5&amp;nsku=52AJ5993~5&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('616f6'));" data-farnell="3769950~5" data-newark="52AJ5993~5" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WHITE PLA 3D PRINTING FILAMENT&lt;/td&gt;
&lt;td&gt;MULTICOMP&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-616e3" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2845501~3&amp;nsku=50AC9540~3&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('616e3'));" data-farnell="2845501~3" data-newark="50AC9540~3" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DC GEARED MOTOR - FIT0185&lt;/td&gt;
&lt;td&gt;DFROBOT&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-bdfa5" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3769947~4&amp;nsku=52AJ5079~4&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('bdfa5'));" data-farnell="3769947~4" data-newark="52AJ5079~4" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L298N MOTOR DRIVER&lt;/td&gt;
&lt;td&gt;SEEED STUDIO&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-45693" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4060368~2&amp;nsku=55AK3445~2&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('45693'));" data-farnell="4060368~2" data-newark="55AK3445~2" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PCA9685 - SERVO MOTOR DRIVERr&lt;/td&gt;
&lt;td&gt;ADAFRUIT&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-b8f18" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2816312&amp;nsku=42X3730&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('b8f18'));" data-farnell="2816312" data-newark="42X3730" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NXP FRDM-RW612&lt;/td&gt;
&lt;td&gt;NXP&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-2e1dc" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4552201&amp;nsku=14AM7035&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('2e1dc'));" data-farnell="4552201" data-newark="14AM7035" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="xs-hide"&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl1k8bp1"&gt;Additional Parts&lt;/h2&gt;
&lt;table class="e14-product-bom-additional"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;M3, M4, M5, M6 Screws&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aluminum 20x20 profiles&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;M8 Bearing With Mount&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;M8 bolts and nuts&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Small bearings&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RC Wheels&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;T slot nuts&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strong Buck Converter for the robot arm&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12V Battery&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="mcetoc_1jpl1k8bp2"&gt;&lt;/h3&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: wireless robot control using Wi-Fi, joystick controlled robot arm, inverse kinematics robot arm build, NXP FRDM-RW612 robotics project, modular robot chassis aluminium extrusion, DIY mobile robot with arm, differential drive robot design, mobile robot platform with robotic arm, PCA9685 servo controller robotics, robotics platform for experimentation, four wheel drive robot platform, element14 probotics project build, Python robotics control software, robot arm kinematics explained, e14presents_milosrasic, L298N motor driver robot project, friday_release&lt;/div&gt;
</description></item><item><title>Designing a Mobile Robot Platform with Inverse Kinematics and Wireless Control</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72067/designing-a-mobile-robot-platform-with-inverse-kinematics-and-wireless-control/revision/3</link><pubDate>Wed, 27 May 2026 15:47:06 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:6e2682a7-8e1c-4db3-ad28-039762ae48c3</guid><dc:creator>cstanton</dc:creator><description>Revision 3 posted to Documents by cstanton on 5/27/2026 3:47:06 PM&lt;br /&gt;
&lt;p&gt;&lt;span&gt;Milos takes his servo driven robot arm off the bench and turns it into a four wheel drive mobile platform built around the NXP FRDM RW612. The project combines an aluminium extrusion chassis, DC geared motors with L298N drivers, PCA9685 servo control, and wireless joystick input to tackle real challenges like torque, calibration, surface traction, and jitter. On the software side, he moves beyond joint by joint control into inverse kinematics and Cartesian motion, using simulation to validate behaviour before driving real hardware. The result is a modular robotics platform designed for learning, iteration, and future upgrades.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl1r50d4"&gt;&lt;span&gt;Watch the Robot&amp;nbsp;Arm on Wheels&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://youtu.be/hSKMcJEPSlE"&gt;https://youtu.be/hSKMcJEPSlE&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This project marks a natural but ambitious evolution of Milos&amp;rsquo;s earlier work on a desktop robotic arm. What began as an exploration of servo-driven motion, joint recording, and basic trajectory playback has now been transformed into a fully mobile robotic platform that combines mechanics, electronics, and software into a cohesive system.&lt;/p&gt;
&lt;p&gt;Rather than treating the robot arm and the base as separate challenges, Milos approached this build as a single platform problem: how to create a robot that can move through space, manipulate objects with intent, and serve as a foundation for far more advanced autonomy in the future.&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1aq0"&gt;Idea and Plan&lt;/h2&gt;
&lt;p&gt;The starting point for this build was a clear limitation of the previous project. While the arm could replay learned movements, it was fixed in place and constrained to joint-by-joint control. As Milos puts it, the earlier version worked, &amp;ldquo;but in the end it&amp;rsquo;s just a robot arm.&amp;rdquo; The next logical step was mobility.&lt;/p&gt;
&lt;p&gt;The core idea was to mount the arm onto a four-wheel-drive base and design everything around modularity. The arm would sit on top of a rigid chassis, with space below reserved for motors, power, and electronics. Two locomotion strategies were planned from the outset: a first version using skid-steer (tank-style) drive, and a second version that would later replace the wheels with mecanum wheels for true omnidirectional movement.&lt;/p&gt;
&lt;p&gt;Crucially, Milos also decided that control needed to move beyond jogging joints or replaying recorded angles. Inverse kinematics would become central to the project, allowing the arm to be commanded in Cartesian space rather than micromanaged servo by servo.&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1ar1"&gt;Electronics and Heart of the Project&lt;/h2&gt;
&lt;p&gt;At the heart of the electronics is an NXP FRDM-RW612 development board. The choice was deliberate: the board offers ample GPIO, built-in Wi-Fi, and enough processing power that Milos notes he is &amp;ldquo;only scratching the surface with what this can do.&amp;rdquo; For this stage of development, Wi-Fi connectivity and I&amp;sup2;C were the primary features in use.&lt;/p&gt;
&lt;p&gt;Wireless control is handled via a Bluetooth gamepad connected to a laptop. Commands are sent over UDP to the robot, leveraging the board&amp;rsquo;s Wi-Fi to avoid additional communication modules. As Milos explains, &amp;ldquo;I want to send commands over UDP, so over the internet to the board&amp;hellip; since the board already has built-in Wi-Fi, we&amp;rsquo;re going to utilize that.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Motor and servo control is centralized through a PCA9685 PWM driver. This single module generates PWM signals for both the five servo motors in the arm and the brushed DC motors driving the wheels. Two L298N motor driver modules handle the four geared DC motors, giving the robot full four-wheel drive and, as testing later shows, a surprising amount of torque.&lt;/p&gt;
&lt;p&gt;One subtle but important design decision involved PWM frequency. Servo motors and DC motor drivers prefer different operating ranges, but Milos settled on a compromise of around 300 Hz, noting that &amp;ldquo;at around 300 hertz everything will be happy, both the motor drivers and all of the servo motors.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Power is supplied by a 12 V drill battery mounted at the rear of the robot. A robust DC-DC buck converter steps this down to 5 V for the servos and logic, while the drive motors receive the full battery voltage. An emergency stop switch doubles as a main power switch, an essential safety feature given the platform&amp;rsquo;s weight and torque.&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1ar2"&gt;Core Mechanics&lt;/h2&gt;
&lt;p&gt;If there is one area where this project demanded the most effort, it was the mechanical design. Milos is candid about this, describing the mechanical side as &amp;ldquo;actually kind of complicated and a lot of work.&amp;rdquo; The challenge was to balance strength, accessibility, and flexibility.&lt;/p&gt;
&lt;p&gt;The main chassis is constructed from standard 20&amp;times;20 and 40&amp;times;20 T-slot aluminum extrusions. These are fastened with machine screws to form a stiff, rectangular frame that resists twisting while remaining easy to modify. This choice was intentional: aluminum extrusions are widely available, easy to cut, and ideal for iterative projects.&lt;/p&gt;
&lt;p&gt;Secondary structures, mounts, and brackets are 3D printed. PLA was used for this version, with the understanding that higher-performance materials such as PC or PA may replace it later, particularly for gears. This hybrid approach keeps the build approachable while still allowing custom geometry where needed.&lt;/p&gt;
&lt;p&gt;To protect the motors from excessive radial loads, each wheel is mounted on its own axle made from an M8 bolt, supported by dual bearings. This design ensures that the bearings, rather than the motor shafts, absorb the mechanical stress. It also makes maintenance easier, since bearings are inexpensive and simple to replace.&lt;/p&gt;
&lt;p&gt;The finished platform weighs around 7 kg, giving it a low center of gravity but also making power and traction critical considerations. Ground clearance is modest, and while the robot performs well on smooth surfaces, Milos observes that &amp;ldquo;it doesn&amp;rsquo;t like surfaces like the carpet because they are extremely grippy,&amp;rdquo; leading to wheel scrub and vibration.&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1ar3"&gt;Control and Software&lt;/h2&gt;
&lt;p&gt;On the software side, the project is split cleanly between the robot and the control computer. The microcontroller firmware focuses on receiving UDP packets, parsing a compact binary payload, and translating those values into PWM outputs. As Milos summarizes, &amp;ldquo;what the code for the MCU actually does is it just gets the data over UDP&amp;hellip; and sends the PWM values through the PCA module to the motors or the servo motors.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The more complex logic lives on the computer side, written in Python. Two main scripts handle this. One is responsible for reading the gamepad and managing UDP communication. The other implements the control logic that converts joystick inputs into meaningful robot commands.&lt;/p&gt;
&lt;p&gt;For driving, the robot uses a differential (tank) drive model. The left joystick maps directly to forward motion and turning, with the software mixing these inputs into left and right motor commands. This makes the platform intuitive to drive while remaining simple to implement.&lt;/p&gt;
&lt;p&gt;The arm control is where the project becomes significantly more advanced. Instead of commanding individual joints, the software implements both direct and inverse kinematics. Milos explains the motivation clearly: &amp;ldquo;If we want the robot arm to reach this point&amp;hellip; how do we actually even know where the end effector is located? That&amp;rsquo;s called kinematics in robotics.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Direct kinematics calculates the position of the tool center point (TCP) from known joint angles and link lengths. Inverse kinematics does the opposite, solving for joint angles that will place the TCP at a desired coordinate. Even for a simple planar arm, Milos demonstrates that inverse kinematics quickly becomes mathematically heavy, with multiple valid solutions such as elbow-up and elbow-down configurations.&lt;/p&gt;
&lt;p&gt;Rather than reinventing the wheel, the software uses established solving techniques and provides flexibility in how solutions are chosen. Link lengths, joint limits, and servo pulse ranges are explicitly defined in code, ensuring that the mathematical model matches the physical hardware. Calibration data is stored in a JSON file, allowing the arm to be zeroed accurately after assembly. As Milos emphasizes, improper calibration &amp;ldquo;will just add up and there is just a function to actually calibrate the arm so you tell it where the actual zero position is.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;To make development safer and more intuitive, a visualization script simulates the arm&amp;rsquo;s motion in real time. This allows kinematic behavior to be inspected before applying commands to the real hardware, and it highlights issues such as jitter and singularities that will eventually need path planning to resolve.&lt;/p&gt;
&lt;p&gt;The control system for the MR21 platform was designed around a clear separation of responsibilities. Low-level, time‑critical tasks run on the robot itself, while higher‑level interpretation, kinematic logic, and user interaction are handled externally. This keeps the embedded side predictable and responsive, while allowing the control logic to evolve rapidly without being constrained by microcontroller resources.&lt;/p&gt;
&lt;p&gt;At the center of the system is a wireless control link. Commands are sent to the robot over Wi‑Fi using UDP, carrying both drive and arm control data in a single, fixed‑size packet. On the robot, the microcontroller&amp;rsquo;s role is intentionally narrow: receive the packet, extract values, and generate PWM outputs via the PCA9685 for the servo motors and motor drivers. As Milos describes it, the board &amp;ldquo;just gets the data over UDP and sends the PWM values to the motors or the servo motors.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The packet itself is compact and structured to be easy to parse deterministically. It contains drive motor commands alongside pulse values for the arm servos, allowing the mobile base and arm to be controlled at the same time without additional synchronization logic:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-python"&gt;
# uint32 message ID
# int16 left drive motor
# int16 right drive motor
# uint16 servo_1 .. servo_6
# Total payload size: 20 bytes
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This approach avoids the overhead of text-based protocols and ensures consistent timing, which becomes especially important once the arm is moving while the platform is driving.&lt;/p&gt;
&lt;p&gt;For locomotion, the robot uses a differential drive model. Forward motion and turning are combined in software and translated into left and right motor commands. The mixing logic also normalizes the output so that neither side exceeds its allowed range:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-python"&gt;
def mix_diff_drive(forward, turn):
    left = forward + turn
    right = forward - turn
    max_mag = max(1.0, abs(left), abs(right))
    left /= max_mag
    right /= max_mag
    return int(left * 100), int(right * 100)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In practice, this gives the robot predictable handling: pushing the joystick forward drives all wheels forward, pushing it sideways causes the robot to rotate in place, and intermediate positions allow smooth combined motion. This becomes particularly noticeable during testing, where the platform&amp;rsquo;s high torque makes abrupt or poorly scaled commands immediately obvious.&lt;/p&gt;
&lt;p&gt;Arm control is handled very differently. Instead of commanding individual joints directly, the software operates in Cartesian space using kinematics. The intent is not to tell each servo where to go, but to tell the arm where the tool should be. As Milos puts it, &amp;ldquo;if we want the robot arm to reach a point in space, the question becomes which joint angles get us there.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;To support this, the physical structure of the arm is defined explicitly in software. Link lengths and base offsets are encoded so the mathematical model matches the real hardware:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-python"&gt;
LINK1 = 100.0  # shoulder to elbow (mm)
LINK2 = 100.0  # elbow to wrist (mm)
LINK3 = 100.0  # wrist to tool (mm)
BASE_HEIGHT = 64.52
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Joint limits are also defined for every axis, both in terms of angular range and the corresponding PWM values. This prevents the solver from generating solutions that the hardware cannot physically achieve and protects the servos from being driven into hard stops.&lt;/p&gt;
&lt;p&gt;A practical challenge with this kind of system is calibration. Servos must be mounted at known reference angles during assembly, and even small errors at this stage affect every kinematic calculation that follows. To account for this, the software supports per‑joint offset values that can be adjusted and stored after assembly. These offsets are applied automatically whenever kinematic solutions are converted into servo commands, allowing the arm to be aligned accurately without repeated mechanical rework.&lt;/p&gt;
&lt;p&gt;Before running movements on the real hardware, the same kinematic logic is also used in a visualization tool. This renders the arm&amp;rsquo;s motion on screen and makes it easier to spot unreachable targets, singularities, or jitter in the solution. Some uneven motion remains, particularly near the limits of reach, which Milos notes is expected without additional path planning. At this stage, the focus is on correctness and clarity rather than perfectly smooth trajectories.&lt;/p&gt;
&lt;p&gt;Taken together, the control software reflects a deliberate design philosophy. The robot executes commands simply and reliably, while the complexity lives where it is easier to debug, visualize, and extend. This structure not only makes the current platform easier to understand and reproduce, but also leaves a clear path toward future upgrades such as onboard computation, more advanced motion planning, or autonomous behaviours.&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl1n1n83"&gt;Practical Testing&lt;/h2&gt;
&lt;p&gt;With the electronics wired, software running, and mechanics assembled, the robot was finally tested as a complete system. Driving performance matched expectations: strong acceleration, the ability to turn on the spot, and enough torque to pull several kilograms, albeit with wheel slip.&lt;/p&gt;
&lt;p&gt;The arm and base can be controlled simultaneously, a key milestone that demonstrates the viability of the overall architecture. While movements can still be jittery&amp;mdash;particularly along the Z-axis&amp;mdash;the system behaves predictably once calibrated.&lt;/p&gt;
&lt;p&gt;To cap off testing, Milos put the robot to a practical, if slightly humorous, task: feeding his dog. The experiment proved that the robot can manipulate objects in the real world, even if the results were messy. The verdict was mixed, but the demonstration underscored the platform&amp;rsquo;s potential.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1ar5"&gt;Looking Ahead&lt;/h2&gt;
&lt;p&gt;This version of the robot is best described as a foundation. Future plans include replacing the wheels with mecanum wheels, adding sensors for mapping and navigation, and integrating an embedded computer such as a Raspberry Pi or NVIDIA Jetson. With that in place, running ROS or ROS 2 becomes a realistic next step.&lt;/p&gt;
&lt;p&gt;As Milos notes, once mobility, perception, and higher-level planning are combined, &amp;ldquo;we&amp;rsquo;re going to have a rather nice platform.&amp;rdquo; This project does not aim to be a finished product, but rather a flexible robotics playground, one that invites iteration, experimentation, and continual improvement.&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1ar6"&gt;Supporting Links and Files&lt;/h2&gt;
&lt;p&gt;-&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/m/files/151377"&gt;Episode 716 Resources - Designing a Mobile Robot Platform with Inverse Kinematics and Wireless Control&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/71909/making-a-stronger-affordable-diy-robot-arm-with-3d-printing-with-raspberry-pi-pico----episode-662"&gt;Making a Stronger Affordable DIY Robot Arm with 3D Printing with Raspberry Pi Pico -- Episode 662&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl1k8bo0"&gt;Bill of Materials&lt;/h2&gt;
&lt;table class="e14-product-bom-main"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;a id="e14-product-link-9afea" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3769950~5,2845501~3,3769947~4,4060368~2,2816312,4552201&amp;nsku=52AJ5993~5,50AC9540~3,52AJ5079~4,55AK3445~2,42X3730,14AM7035&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_BUY_KIT" class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('9afea'));" data-farnell="3769950~5,2845501~3,3769947~4,4060368~2,2816312,4552201" data-newark="52AJ5993~5,50AC9540~3,52AJ5079~4,55AK3445~2,42X3730,14AM7035" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DFROBOT SERVO MOTOR&lt;/td&gt;
&lt;td&gt;DFROBOT&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-4e634" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3769950~5&amp;nsku=52AJ5993~5&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('4e634'));" data-farnell="3769950~5" data-newark="52AJ5993~5" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WHITE PLA 3D PRINTING FILAMENT&lt;/td&gt;
&lt;td&gt;MULTICOMP&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-a991f" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2845501~3&amp;nsku=50AC9540~3&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('a991f'));" data-farnell="2845501~3" data-newark="50AC9540~3" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DC GEARED MOTOR - FIT0185&lt;/td&gt;
&lt;td&gt;DFROBOT&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-6c83f" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3769947~4&amp;nsku=52AJ5079~4&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('6c83f'));" data-farnell="3769947~4" data-newark="52AJ5079~4" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L298N MOTOR DRIVER&lt;/td&gt;
&lt;td&gt;SEEED STUDIO&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-a2ade" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4060368~2&amp;nsku=55AK3445~2&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('a2ade'));" data-farnell="4060368~2" data-newark="55AK3445~2" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PCA9685 - SERVO MOTOR DRIVERr&lt;/td&gt;
&lt;td&gt;ADAFRUIT&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-7150f" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2816312&amp;nsku=42X3730&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('7150f'));" data-farnell="2816312" data-newark="42X3730" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NXP FRDM-RW612&lt;/td&gt;
&lt;td&gt;NXP&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-05706" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4552201&amp;nsku=14AM7035&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('05706'));" data-farnell="4552201" data-newark="14AM7035" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="xs-hide"&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl1k8bp1"&gt;Additional Parts&lt;/h2&gt;
&lt;table class="e14-product-bom-additional"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;M3, M4, M5, M6 Screws&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aluminum 20x20 profiles&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;M8 Bearing With Mount&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;M8 bolts and nuts&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Small bearings&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RC Wheels&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;T slot nuts&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strong Buck Converter for the robot arm&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12V Battery&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="mcetoc_1jpl1k8bp2"&gt;&lt;/h3&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: e14presents_milosrasic, friday_release&lt;/div&gt;
</description></item><item><title>Designing a Mobile Robot Platform with Inverse Kinematics and Wireless Control</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72067/designing-a-mobile-robot-platform-with-inverse-kinematics-and-wireless-control/revision/2</link><pubDate>Wed, 27 May 2026 15:36:23 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:6e2682a7-8e1c-4db3-ad28-039762ae48c3</guid><dc:creator>cstanton</dc:creator><description>Revision 2 posted to Documents by cstanton on 5/27/2026 3:36:23 PM&lt;br /&gt;
&lt;p&gt;This project marks a natural but ambitious evolution of Milos&amp;rsquo;s earlier work on a desktop robotic arm. What began as an exploration of servo-driven motion, joint recording, and basic trajectory playback has now been transformed into a fully mobile robotic platform that combines mechanics, electronics, and software into a cohesive system.&lt;/p&gt;
&lt;p&gt;Rather than treating the robot arm and the base as separate challenges, Milos approached this build as a single platform problem: how to create a robot that can move through space, manipulate objects with intent, and serve as a foundation for far more advanced autonomy in the future.&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1aq0"&gt;Idea and Plan&lt;/h2&gt;
&lt;p&gt;The starting point for this build was a clear limitation of the previous project. While the arm could replay learned movements, it was fixed in place and constrained to joint-by-joint control. As Milos puts it, the earlier version worked, &amp;ldquo;but in the end it&amp;rsquo;s just a robot arm.&amp;rdquo; The next logical step was mobility.&lt;/p&gt;
&lt;p&gt;The core idea was to mount the arm onto a four-wheel-drive base and design everything around modularity. The arm would sit on top of a rigid chassis, with space below reserved for motors, power, and electronics. Two locomotion strategies were planned from the outset: a first version using skid-steer (tank-style) drive, and a second version that would later replace the wheels with mecanum wheels for true omnidirectional movement.&lt;/p&gt;
&lt;p&gt;Crucially, Milos also decided that control needed to move beyond jogging joints or replaying recorded angles. Inverse kinematics would become central to the project, allowing the arm to be commanded in Cartesian space rather than micromanaged servo by servo.&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1ar1"&gt;Electronics and Heart of the Project&lt;/h2&gt;
&lt;p&gt;At the heart of the electronics is an NXP FRDM-RW612 development board. The choice was deliberate: the board offers ample GPIO, built-in Wi-Fi, and enough processing power that Milos notes he is &amp;ldquo;only scratching the surface with what this can do.&amp;rdquo; For this stage of development, Wi-Fi connectivity and I&amp;sup2;C were the primary features in use.&lt;/p&gt;
&lt;p&gt;Wireless control is handled via a Bluetooth gamepad connected to a laptop. Commands are sent over UDP to the robot, leveraging the board&amp;rsquo;s Wi-Fi to avoid additional communication modules. As Milos explains, &amp;ldquo;I want to send commands over UDP, so over the internet to the board&amp;hellip; since the board already has built-in Wi-Fi, we&amp;rsquo;re going to utilize that.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Motor and servo control is centralized through a PCA9685 PWM driver. This single module generates PWM signals for both the five servo motors in the arm and the brushed DC motors driving the wheels. Two L298N motor driver modules handle the four geared DC motors, giving the robot full four-wheel drive and, as testing later shows, a surprising amount of torque.&lt;/p&gt;
&lt;p&gt;One subtle but important design decision involved PWM frequency. Servo motors and DC motor drivers prefer different operating ranges, but Milos settled on a compromise of around 300 Hz, noting that &amp;ldquo;at around 300 hertz everything will be happy, both the motor drivers and all of the servo motors.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Power is supplied by a 12 V drill battery mounted at the rear of the robot. A robust DC-DC buck converter steps this down to 5 V for the servos and logic, while the drive motors receive the full battery voltage. An emergency stop switch doubles as a main power switch, an essential safety feature given the platform&amp;rsquo;s weight and torque.&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1ar2"&gt;Core Mechanics&lt;/h2&gt;
&lt;p&gt;If there is one area where this project demanded the most effort, it was the mechanical design. Milos is candid about this, describing the mechanical side as &amp;ldquo;actually kind of complicated and a lot of work.&amp;rdquo; The challenge was to balance strength, accessibility, and flexibility.&lt;/p&gt;
&lt;p&gt;The main chassis is constructed from standard 20&amp;times;20 and 40&amp;times;20 T-slot aluminum extrusions. These are fastened with machine screws to form a stiff, rectangular frame that resists twisting while remaining easy to modify. This choice was intentional: aluminum extrusions are widely available, easy to cut, and ideal for iterative projects.&lt;/p&gt;
&lt;p&gt;Secondary structures, mounts, and brackets are 3D printed. PLA was used for this version, with the understanding that higher-performance materials such as PC or PA may replace it later, particularly for gears. This hybrid approach keeps the build approachable while still allowing custom geometry where needed.&lt;/p&gt;
&lt;p&gt;To protect the motors from excessive radial loads, each wheel is mounted on its own axle made from an M8 bolt, supported by dual bearings. This design ensures that the bearings, rather than the motor shafts, absorb the mechanical stress. It also makes maintenance easier, since bearings are inexpensive and simple to replace.&lt;/p&gt;
&lt;p&gt;The finished platform weighs around 7 kg, giving it a low center of gravity but also making power and traction critical considerations. Ground clearance is modest, and while the robot performs well on smooth surfaces, Milos observes that &amp;ldquo;it doesn&amp;rsquo;t like surfaces like the carpet because they are extremely grippy,&amp;rdquo; leading to wheel scrub and vibration.&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1ar3"&gt;Control and Software&lt;/h2&gt;
&lt;p&gt;On the software side, the project is split cleanly between the robot and the control computer. The microcontroller firmware focuses on receiving UDP packets, parsing a compact binary payload, and translating those values into PWM outputs. As Milos summarizes, &amp;ldquo;what the code for the MCU actually does is it just gets the data over UDP&amp;hellip; and sends the PWM values through the PCA module to the motors or the servo motors.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The more complex logic lives on the computer side, written in Python. Two main scripts handle this. One is responsible for reading the gamepad and managing UDP communication. The other implements the control logic that converts joystick inputs into meaningful robot commands.&lt;/p&gt;
&lt;p&gt;For driving, the robot uses a differential (tank) drive model. The left joystick maps directly to forward motion and turning, with the software mixing these inputs into left and right motor commands. This makes the platform intuitive to drive while remaining simple to implement.&lt;/p&gt;
&lt;p&gt;The arm control is where the project becomes significantly more advanced. Instead of commanding individual joints, the software implements both direct and inverse kinematics. Milos explains the motivation clearly: &amp;ldquo;If we want the robot arm to reach this point&amp;hellip; how do we actually even know where the end effector is located? That&amp;rsquo;s called kinematics in robotics.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Direct kinematics calculates the position of the tool center point (TCP) from known joint angles and link lengths. Inverse kinematics does the opposite, solving for joint angles that will place the TCP at a desired coordinate. Even for a simple planar arm, Milos demonstrates that inverse kinematics quickly becomes mathematically heavy, with multiple valid solutions such as elbow-up and elbow-down configurations.&lt;/p&gt;
&lt;p&gt;Rather than reinventing the wheel, the software uses established solving techniques and provides flexibility in how solutions are chosen. Link lengths, joint limits, and servo pulse ranges are explicitly defined in code, ensuring that the mathematical model matches the physical hardware. Calibration data is stored in a JSON file, allowing the arm to be zeroed accurately after assembly. As Milos emphasizes, improper calibration &amp;ldquo;will just add up and there is just a function to actually calibrate the arm so you tell it where the actual zero position is.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;To make development safer and more intuitive, a visualization script simulates the arm&amp;rsquo;s motion in real time. This allows kinematic behavior to be inspected before applying commands to the real hardware, and it highlights issues such as jitter and singularities that will eventually need path planning to resolve.&lt;/p&gt;
&lt;p&gt;The control system for the MR21 platform was designed around a clear separation of responsibilities. Low-level, time‑critical tasks run on the robot itself, while higher‑level interpretation, kinematic logic, and user interaction are handled externally. This keeps the embedded side predictable and responsive, while allowing the control logic to evolve rapidly without being constrained by microcontroller resources.&lt;/p&gt;
&lt;p&gt;At the center of the system is a wireless control link. Commands are sent to the robot over Wi‑Fi using UDP, carrying both drive and arm control data in a single, fixed‑size packet. On the robot, the microcontroller&amp;rsquo;s role is intentionally narrow: receive the packet, extract values, and generate PWM outputs via the PCA9685 for the servo motors and motor drivers. As Milos describes it, the board &amp;ldquo;just gets the data over UDP and sends the PWM values to the motors or the servo motors.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The packet itself is compact and structured to be easy to parse deterministically. It contains drive motor commands alongside pulse values for the arm servos, allowing the mobile base and arm to be controlled at the same time without additional synchronization logic:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-python"&gt;
# uint32 message ID
# int16 left drive motor
# int16 right drive motor
# uint16 servo_1 .. servo_6
# Total payload size: 20 bytes
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This approach avoids the overhead of text-based protocols and ensures consistent timing, which becomes especially important once the arm is moving while the platform is driving.&lt;/p&gt;
&lt;p&gt;For locomotion, the robot uses a differential drive model. Forward motion and turning are combined in software and translated into left and right motor commands. The mixing logic also normalizes the output so that neither side exceeds its allowed range:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-python"&gt;
def mix_diff_drive(forward, turn):
    left = forward + turn
    right = forward - turn
    max_mag = max(1.0, abs(left), abs(right))
    left /= max_mag
    right /= max_mag
    return int(left * 100), int(right * 100)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In practice, this gives the robot predictable handling: pushing the joystick forward drives all wheels forward, pushing it sideways causes the robot to rotate in place, and intermediate positions allow smooth combined motion. This becomes particularly noticeable during testing, where the platform&amp;rsquo;s high torque makes abrupt or poorly scaled commands immediately obvious.&lt;/p&gt;
&lt;p&gt;Arm control is handled very differently. Instead of commanding individual joints directly, the software operates in Cartesian space using kinematics. The intent is not to tell each servo where to go, but to tell the arm where the tool should be. As Milos puts it, &amp;ldquo;if we want the robot arm to reach a point in space, the question becomes which joint angles get us there.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;To support this, the physical structure of the arm is defined explicitly in software. Link lengths and base offsets are encoded so the mathematical model matches the real hardware:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-python"&gt;
LINK1 = 100.0  # shoulder to elbow (mm)
LINK2 = 100.0  # elbow to wrist (mm)
LINK3 = 100.0  # wrist to tool (mm)
BASE_HEIGHT = 64.52
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Joint limits are also defined for every axis, both in terms of angular range and the corresponding PWM values. This prevents the solver from generating solutions that the hardware cannot physically achieve and protects the servos from being driven into hard stops.&lt;/p&gt;
&lt;p&gt;A practical challenge with this kind of system is calibration. Servos must be mounted at known reference angles during assembly, and even small errors at this stage affect every kinematic calculation that follows. To account for this, the software supports per‑joint offset values that can be adjusted and stored after assembly. These offsets are applied automatically whenever kinematic solutions are converted into servo commands, allowing the arm to be aligned accurately without repeated mechanical rework.&lt;/p&gt;
&lt;p&gt;Before running movements on the real hardware, the same kinematic logic is also used in a visualization tool. This renders the arm&amp;rsquo;s motion on screen and makes it easier to spot unreachable targets, singularities, or jitter in the solution. Some uneven motion remains, particularly near the limits of reach, which Milos notes is expected without additional path planning. At this stage, the focus is on correctness and clarity rather than perfectly smooth trajectories.&lt;/p&gt;
&lt;p&gt;Taken together, the control software reflects a deliberate design philosophy. The robot executes commands simply and reliably, while the complexity lives where it is easier to debug, visualize, and extend. This structure not only makes the current platform easier to understand and reproduce, but also leaves a clear path toward future upgrades such as onboard computation, more advanced motion planning, or autonomous behaviours.&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1ar4"&gt;Practical Testing&lt;/h2&gt;
&lt;p&gt;With the electronics wired, software running, and mechanics assembled, the robot was finally tested as a complete system. Driving performance matched expectations: strong acceleration, the ability to turn on the spot, and enough torque to pull several kilograms, albeit with wheel slip.&lt;/p&gt;
&lt;p&gt;The arm and base can be controlled simultaneously, a key milestone that demonstrates the viability of the overall architecture. While movements can still be jittery&amp;mdash;particularly along the Z-axis&amp;mdash;the system behaves predictably once calibrated.&lt;/p&gt;
&lt;p&gt;To cap off testing, Milos put the robot to a practical, if slightly humorous, task: feeding his dog. The experiment proved that the robot can manipulate objects in the real world, even if the results were messy. The verdict was mixed, but the demonstration underscored the platform&amp;rsquo;s potential.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1ar5"&gt;Looking Ahead&lt;/h2&gt;
&lt;p&gt;This version of the robot is best described as a foundation. Future plans include replacing the wheels with mecanum wheels, adding sensors for mapping and navigation, and integrating an embedded computer such as a Raspberry Pi or NVIDIA Jetson. With that in place, running ROS or ROS 2 becomes a realistic next step.&lt;/p&gt;
&lt;p&gt;As Milos notes, once mobility, perception, and higher-level planning are combined, &amp;ldquo;we&amp;rsquo;re going to have a rather nice platform.&amp;rdquo; This project does not aim to be a finished product, but rather a flexible robotics playground, one that invites iteration, experimentation, and continual improvement.&lt;/p&gt;
&lt;h2 id="mcetoc_1jpl0u1ar6"&gt;Supporting Links and Files&lt;/h2&gt;
&lt;p&gt;-&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/m/files/151377"&gt;Episode 716 Resources - Designing a Mobile Robot Platform with Inverse Kinematics and Wireless Control&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/71909/making-a-stronger-affordable-diy-robot-arm-with-3d-printing-with-raspberry-pi-pico----episode-662"&gt;Making a Stronger Affordable DIY Robot Arm with 3D Printing with Raspberry Pi Pico -- Episode 662&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: e14presents_milosrasic, friday_release&lt;/div&gt;
</description></item><item><title>Designing a Mobile Robot Platform with Inverse Kinematics and Wireless Control</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72067/designing-a-mobile-robot-platform-with-inverse-kinematics-and-wireless-control/revision/1</link><pubDate>Wed, 27 May 2026 14:37:12 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:6e2682a7-8e1c-4db3-ad28-039762ae48c3</guid><dc:creator>cstanton</dc:creator><description>Revision 1 posted to Documents by cstanton on 5/27/2026 2:37:12 PM&lt;br /&gt;
&lt;p&gt;This project marks a natural but ambitious evolution of Milos&amp;rsquo;s earlier work on a desktop robotic arm. What began as an exploration of servo-driven motion, joint recording, and basic trajectory playback has now been transformed into a fully mobile robotic platform that combines mechanics, electronics, and software into a cohesive system.&lt;/p&gt;
&lt;p&gt;Rather than treating the robot arm and the base as separate challenges, Milos approached this build as a single platform problem: how to create a robot that can move through space, manipulate objects with intent, and serve as a foundation for far more advanced autonomy in the future.&lt;/p&gt;
&lt;h2&gt;Idea and Plan&lt;/h2&gt;
&lt;p&gt;The starting point for this build was a clear limitation of the previous project. While the arm could replay learned movements, it was fixed in place and constrained to joint-by-joint control. As Milos puts it, the earlier version worked, &amp;ldquo;but in the end it&amp;rsquo;s just a robot arm.&amp;rdquo; The next logical step was mobility.&lt;/p&gt;
&lt;p&gt;The core idea was to mount the arm onto a four-wheel-drive base and design everything around modularity. The arm would sit on top of a rigid chassis, with space below reserved for motors, power, and electronics. Two locomotion strategies were planned from the outset: a first version using skid-steer (tank-style) drive, and a second version that would later replace the wheels with mecanum wheels for true omnidirectional movement.&lt;/p&gt;
&lt;p&gt;Crucially, Milos also decided that control needed to move beyond jogging joints or replaying recorded angles. Inverse kinematics would become central to the project, allowing the arm to be commanded in Cartesian space rather than micromanaged servo by servo.&lt;/p&gt;
&lt;h2&gt;Electronics and Heart of the Project&lt;/h2&gt;
&lt;p&gt;At the heart of the electronics is an NXP FRDM-RW612 development board. The choice was deliberate: the board offers ample GPIO, built-in Wi-Fi, and enough processing power that Milos notes he is &amp;ldquo;only scratching the surface with what this can do.&amp;rdquo; For this stage of development, Wi-Fi connectivity and I&amp;sup2;C were the primary features in use.&lt;/p&gt;
&lt;p&gt;Wireless control is handled via a Bluetooth gamepad connected to a laptop. Commands are sent over UDP to the robot, leveraging the board&amp;rsquo;s Wi-Fi to avoid additional communication modules. As Milos explains, &amp;ldquo;I want to send commands over UDP, so over the internet to the board&amp;hellip; since the board already has built-in Wi-Fi, we&amp;rsquo;re going to utilize that.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Motor and servo control is centralized through a PCA9685 PWM driver. This single module generates PWM signals for both the five servo motors in the arm and the brushed DC motors driving the wheels. Two L298N motor driver modules handle the four geared DC motors, giving the robot full four-wheel drive and, as testing later shows, a surprising amount of torque.&lt;/p&gt;
&lt;p&gt;One subtle but important design decision involved PWM frequency. Servo motors and DC motor drivers prefer different operating ranges, but Milos settled on a compromise of around 300 Hz, noting that &amp;ldquo;at around 300 hertz everything will be happy, both the motor drivers and all of the servo motors.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Power is supplied by a 12 V drill battery mounted at the rear of the robot. A robust DC-DC buck converter steps this down to 5 V for the servos and logic, while the drive motors receive the full battery voltage. An emergency stop switch doubles as a main power switch, an essential safety feature given the platform&amp;rsquo;s weight and torque.&lt;/p&gt;
&lt;h2&gt;Core Mechanics&lt;/h2&gt;
&lt;p&gt;If there is one area where this project demanded the most effort, it was the mechanical design. Milos is candid about this, describing the mechanical side as &amp;ldquo;actually kind of complicated and a lot of work.&amp;rdquo; The challenge was to balance strength, accessibility, and flexibility.&lt;/p&gt;
&lt;p&gt;The main chassis is constructed from standard 20&amp;times;20 and 40&amp;times;20 T-slot aluminum extrusions. These are fastened with machine screws to form a stiff, rectangular frame that resists twisting while remaining easy to modify. This choice was intentional: aluminum extrusions are widely available, easy to cut, and ideal for iterative projects.&lt;/p&gt;
&lt;p&gt;Secondary structures, mounts, and brackets are 3D printed. PLA was used for this version, with the understanding that higher-performance materials such as PC or PA may replace it later, particularly for gears. This hybrid approach keeps the build approachable while still allowing custom geometry where needed.&lt;/p&gt;
&lt;p&gt;To protect the motors from excessive radial loads, each wheel is mounted on its own axle made from an M8 bolt, supported by dual bearings. This design ensures that the bearings, rather than the motor shafts, absorb the mechanical stress. It also makes maintenance easier, since bearings are inexpensive and simple to replace.&lt;/p&gt;
&lt;p&gt;The finished platform weighs around 7 kg, giving it a low center of gravity but also making power and traction critical considerations. Ground clearance is modest, and while the robot performs well on smooth surfaces, Milos observes that &amp;ldquo;it doesn&amp;rsquo;t like surfaces like the carpet because they are extremely grippy,&amp;rdquo; leading to wheel scrub and vibration.&lt;/p&gt;
&lt;h2&gt;Control and Software&lt;/h2&gt;
&lt;p&gt;On the software side, the project is split cleanly between the robot and the control computer. The microcontroller firmware focuses on receiving UDP packets, parsing a compact binary payload, and translating those values into PWM outputs. As Milos summarizes, &amp;ldquo;what the code for the MCU actually does is it just gets the data over UDP&amp;hellip; and sends the PWM values through the PCA module to the motors or the servo motors.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The more complex logic lives on the computer side, written in Python. Two main scripts handle this. One is responsible for reading the gamepad and managing UDP communication. The other implements the control logic that converts joystick inputs into meaningful robot commands.&lt;/p&gt;
&lt;p&gt;For driving, the robot uses a differential (tank) drive model. The left joystick maps directly to forward motion and turning, with the software mixing these inputs into left and right motor commands. This makes the platform intuitive to drive while remaining simple to implement.&lt;/p&gt;
&lt;p&gt;The arm control is where the project becomes significantly more advanced. Instead of commanding individual joints, the software implements both direct and inverse kinematics. Milos explains the motivation clearly: &amp;ldquo;If we want the robot arm to reach this point&amp;hellip; how do we actually even know where the end effector is located? That&amp;rsquo;s called kinematics in robotics.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Direct kinematics calculates the position of the tool center point (TCP) from known joint angles and link lengths. Inverse kinematics does the opposite, solving for joint angles that will place the TCP at a desired coordinate. Even for a simple planar arm, Milos demonstrates that inverse kinematics quickly becomes mathematically heavy, with multiple valid solutions such as elbow-up and elbow-down configurations.&lt;/p&gt;
&lt;p&gt;Rather than reinventing the wheel, the software uses established solving techniques and provides flexibility in how solutions are chosen. Link lengths, joint limits, and servo pulse ranges are explicitly defined in code, ensuring that the mathematical model matches the physical hardware. Calibration data is stored in a JSON file, allowing the arm to be zeroed accurately after assembly. As Milos emphasizes, improper calibration &amp;ldquo;will just add up and there is just a function to actually calibrate the arm so you tell it where the actual zero position is.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;To make development safer and more intuitive, a visualization script simulates the arm&amp;rsquo;s motion in real time. This allows kinematic behavior to be inspected before applying commands to the real hardware, and it highlights issues such as jitter and singularities that will eventually need path planning to resolve.&lt;/p&gt;
&lt;p&gt;The control system for the MR21 platform was designed around a clear separation of responsibilities. Low-level, time‑critical tasks run on the robot itself, while higher‑level interpretation, kinematic logic, and user interaction are handled externally. This keeps the embedded side predictable and responsive, while allowing the control logic to evolve rapidly without being constrained by microcontroller resources.&lt;/p&gt;
&lt;p&gt;At the center of the system is a wireless control link. Commands are sent to the robot over Wi‑Fi using UDP, carrying both drive and arm control data in a single, fixed‑size packet. On the robot, the microcontroller&amp;rsquo;s role is intentionally narrow: receive the packet, extract values, and generate PWM outputs via the PCA9685 for the servo motors and motor drivers. As Milos describes it, the board &amp;ldquo;just gets the data over UDP and sends the PWM values to the motors or the servo motors.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The packet itself is compact and structured to be easy to parse deterministically. It contains drive motor commands alongside pulse values for the arm servos, allowing the mobile base and arm to be controlled at the same time without additional synchronization logic:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-python"&gt;
# uint32 message ID
# int16 left drive motor
# int16 right drive motor
# uint16 servo_1 .. servo_6
# Total payload size: 20 bytes
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This approach avoids the overhead of text-based protocols and ensures consistent timing, which becomes especially important once the arm is moving while the platform is driving.&lt;/p&gt;
&lt;p&gt;For locomotion, the robot uses a differential drive model. Forward motion and turning are combined in software and translated into left and right motor commands. The mixing logic also normalizes the output so that neither side exceeds its allowed range:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-python"&gt;
def mix_diff_drive(forward, turn):
    left = forward + turn
    right = forward - turn
    max_mag = max(1.0, abs(left), abs(right))
    left /= max_mag
    right /= max_mag
    return int(left * 100), int(right * 100)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In practice, this gives the robot predictable handling: pushing the joystick forward drives all wheels forward, pushing it sideways causes the robot to rotate in place, and intermediate positions allow smooth combined motion. This becomes particularly noticeable during testing, where the platform&amp;rsquo;s high torque makes abrupt or poorly scaled commands immediately obvious.&lt;/p&gt;
&lt;p&gt;Arm control is handled very differently. Instead of commanding individual joints directly, the software operates in Cartesian space using kinematics. The intent is not to tell each servo where to go, but to tell the arm where the tool should be. As Milos puts it, &amp;ldquo;if we want the robot arm to reach a point in space, the question becomes which joint angles get us there.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;To support this, the physical structure of the arm is defined explicitly in software. Link lengths and base offsets are encoded so the mathematical model matches the real hardware:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-python"&gt;
LINK1 = 100.0  # shoulder to elbow (mm)
LINK2 = 100.0  # elbow to wrist (mm)
LINK3 = 100.0  # wrist to tool (mm)
BASE_HEIGHT = 64.52
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Joint limits are also defined for every axis, both in terms of angular range and the corresponding PWM values. This prevents the solver from generating solutions that the hardware cannot physically achieve and protects the servos from being driven into hard stops.&lt;/p&gt;
&lt;p&gt;A practical challenge with this kind of system is calibration. Servos must be mounted at known reference angles during assembly, and even small errors at this stage affect every kinematic calculation that follows. To account for this, the software supports per‑joint offset values that can be adjusted and stored after assembly. These offsets are applied automatically whenever kinematic solutions are converted into servo commands, allowing the arm to be aligned accurately without repeated mechanical rework.&lt;/p&gt;
&lt;p&gt;Before running movements on the real hardware, the same kinematic logic is also used in a visualization tool. This renders the arm&amp;rsquo;s motion on screen and makes it easier to spot unreachable targets, singularities, or jitter in the solution. Some uneven motion remains, particularly near the limits of reach, which Milos notes is expected without additional path planning. At this stage, the focus is on correctness and clarity rather than perfectly smooth trajectories.&lt;/p&gt;
&lt;p&gt;Taken together, the control software reflects a deliberate design philosophy. The robot executes commands simply and reliably, while the complexity lives where it is easier to debug, visualize, and extend. This structure not only makes the current platform easier to understand and reproduce, but also leaves a clear path toward future upgrades such as onboard computation, more advanced motion planning, or autonomous behaviours.&lt;/p&gt;
&lt;h2&gt;Practical Testing&lt;/h2&gt;
&lt;p&gt;With the electronics wired, software running, and mechanics assembled, the robot was finally tested as a complete system. Driving performance matched expectations: strong acceleration, the ability to turn on the spot, and enough torque to pull several kilograms, albeit with wheel slip.&lt;/p&gt;
&lt;p&gt;The arm and base can be controlled simultaneously, a key milestone that demonstrates the viability of the overall architecture. While movements can still be jittery&amp;mdash;particularly along the Z-axis&amp;mdash;the system behaves predictably once calibrated.&lt;/p&gt;
&lt;p&gt;To cap off testing, Milos put the robot to a practical, if slightly humorous, task: feeding his dog. The experiment proved that the robot can manipulate objects in the real world, even if the results were messy. The verdict was mixed, but the demonstration underscored the platform&amp;rsquo;s potential.&lt;/p&gt;
&lt;h2&gt;Looking Ahead&lt;/h2&gt;
&lt;p&gt;This version of the robot is best described as a foundation. Future plans include replacing the wheels with mecanum wheels, adding sensors for mapping and navigation, and integrating an embedded computer such as a Raspberry Pi or NVIDIA Jetson. With that in place, running ROS or ROS 2 becomes a realistic next step.&lt;/p&gt;
&lt;p&gt;As Milos notes, once mobility, perception, and higher-level planning are combined, &amp;ldquo;we&amp;rsquo;re going to have a rather nice platform.&amp;rdquo; This project does not aim to be a finished product, but rather a flexible robotics playground, one that invites iteration, experimentation, and continual improvement.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: e14presents_milosrasic, friday_release&lt;/div&gt;
</description></item></channel></rss>