<?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, 27 Aug 2026 14:07:32 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 8/27/2026 2:07:32 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/72105/building-a-customisable-handheld-arduino-thermal-imaging-camera" data-e14adj="t"&gt;Episode 729: Building a Customisable Handheld Arduino Thermal Imaging Camera&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/72104/building-a-diy-plc-with-pocketbeagle-2-finding-out-why-industrial-controllers-cost-so-much" data-e14adj="t"&gt;Episode 728: Building a DIY PLC with PocketBeagle 2: Finding Out Why Industrial Controllers Cost So Much&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/72102/designing-a-mobile-robot-platform-with-differential-drive-pid-control-and-wireless-mapping" data-e14adj="t"&gt;Episode 727: Designing a Mobile Robot Platform with Differential Drive, PID Control and Wireless Mapping&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/72089/clem-s-workbench-upgrade-to-automated-lab-with-programmable-instruments-and-python" data-e14adj="t"&gt;Episode 725: Clem&amp;#39;s Workbench Upgrade to Automated Lab with Programmable Instruments and Python&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/72087/building-and-programming-a-scara-industrial-robot-arm-an-introduction-to-robotics" data-e14adj="t"&gt;Episode 724: Building and Programming a SCARA Industrial Robot Arm &amp;ndash; An Introduction to Robotics&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/72081/building-a-privacy-first-workshop-security-camera-with-pocketbeagle-2" data-e14adj="t"&gt;Episode 723: Building a Privacy-First Workshop Security Camera with PocketBeagle 2&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/72077/pid-control-motion-profiles-and-ros-explained---an-introduction-to-robotics" data-e14adj="t"&gt;Episode 722: PID Control, Motion Profiles and ROS Explained - An Introduction to Robotics&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/72073/designing-a-smarter-workbench-inside-mark-s-8-channel-power-monitoring-system" data-e14adj="t"&gt;Episode 721: Designing a Smarter Workbench: Inside Mark&amp;rsquo;s 8-Channel Power Monitoring System&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/72071/building-the-foundations-of-your-first-robot---an-introduction-to-robotics" data-e14adj="t"&gt;Episode 720: Building the Foundations of Your First Robot - An Introduction to Robotics&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/72070/turning-a-broken-robot-vacuum-into-a-network-controlled-raspberry-pi-5-rover" data-e14adj="t"&gt;Episode 719: Turning a Broken Robot Vacuum into a Network-Controlled Raspberry Pi 5 Rover&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/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>Building a Customisable Handheld Arduino Thermal Imaging Camera</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72105/building-a-customisable-handheld-arduino-thermal-imaging-camera</link><pubDate>Wed, 26 Aug 2026 16:28:06 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:376b923c-702f-4159-a718-273f8073fa81</guid><dc:creator>e14sbhargav</dc:creator><description>Current Revision posted to Documents by e14sbhargav on 8/26/2026 4:28:06 PM&lt;br /&gt;
&lt;p&gt;Rather than wait weeks to borrow a thermal imaging camera, Katie Dumont set out to build one from scratch. Combining a Seeed Studio MLX90640 thermal array sensor with an Arduino UNO R4 Minima and a colour display, she produced a portable thermal camera that can highlight heat loss, reveal hidden hot spots and display temperature variations in real time. The project goes beyond simply wiring modules together, with a custom-designed 3D printed enclosure, rugged physical controls, configurable temperature scales and plenty of experimentation to get the best image from the sensor. It&amp;#39;s a practical build that demonstrates just how accessible thermal imaging has become for makers, engineers and anyone curious about what&amp;#39;s really going on beneath the surface.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hsq8add"&gt;Get Fired Up and Watch&amp;nbsp;Katie Build&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;a href="https://players.brightcove.net/1362235890001/default_default/index.html?videoId=6404065899112"&gt;players.brightcove.net/.../index.html&lt;/a&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Why wait to borrow a thermal imaging camera when the core technology is now available as a relatively affordable sensor module? Faced with long waiting lists for energy-efficiency thermal cameras, Katie Dumont decided to build one instead. The result is a handheld thermal imaging camera based around an Arduino UNO R4 Minima, combining a 32 &amp;times; 24 infrared sensor array with a colour touchscreen display, physical controls and a custom-designed enclosure.&lt;/p&gt;
&lt;p&gt;Rather than replicating the behaviour of a commercial thermal camera, the project explores how easily a thermal imaging system can be tailored to specific requirements. Temperature ranges can be adjusted, colour mappings can be customised and the hardware remains open to future upgrades.&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_000001-_2800_2_2900_.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr1"&gt;The Hardware Platform&lt;/h2&gt;
&lt;p&gt;At the heart of the build is the Seeed Studio MLX90640 infrared thermal imaging sensor. Unlike a conventional camera, the MLX90640 does not capture visible light. Instead, it measures infrared radiation across a grid of 768 sensing elements arranged in a 32 &amp;times; 24 array.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;s got an array of thermal sensors of 32 by 24 of them so should get a fairly decent image of the temperatures.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The sensor communicates over I&amp;sup2;C, making it straightforward to interface with modern microcontroller platforms. One of the aspects that immediately stood out during development was its quoted accuracy.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;s plus and minus 1.5 degrees C accuracy so I should be fairly confident with what I get out of this as an accurate representation of the temperature.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Supporting the sensor is the Arduino UNO R4 Minima, based on the Renesas RA4M1 microcontroller. With significantly more RAM and processing capability than earlier Uno generations, it is capable of handling the calculations required to process MLX90640 image data while simultaneously driving a display.&lt;/p&gt;
&lt;p&gt;Visual output is provided by a DFRobot Fermion capacitive touchscreen display module, creating a compact self-contained handheld instrument. Two Multicomp Pro pushbuttons provide range adjustment controls, while a custom 3D-printed enclosure holds everything together.&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/4442.frame_5F00_000101.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr2"&gt;Validating the Sensor and&amp;nbsp;Designing for Real-World Use&lt;/h2&gt;
&lt;p&gt;Before committing to the enclosure design and software architecture, the project began with a simple proof-of-concept test.&lt;/p&gt;
&lt;p&gt;The thermal sensor and display were wired together with the Arduino, and example software from the display and sensor libraries was adapted into a quick prototype. To verify operation, two everyday thermal references were selected: an ice cube and a container of near-boiling water.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve taken the example code for the library for the camera and the screen and just popped them together just to make a really simple test to check this is going to do what I want it to do.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The resulting thermal images immediately demonstrated that the system was operating correctly. Cold regions appeared deep blue, while high-temperature regions saturated towards red. Even subtle thermal effects became visible.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;m getting detail of the steam coming off the cup as that greeny, so not as hot but hotter than ambient temperature.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The testing phase also verified that temperature gradients around the cup could be observed clearly, with transitions through yellow and green before reaching ambient background temperatures. Many DIY thermal imaging projects stop at a bench-top prototype, but this build was intended to become a practical tool capable of being stored in a toolbox and used repeatedly.&lt;/p&gt;
&lt;p&gt;Although the display includes touch capability, a conscious decision was made not to use touchscreen controls for normal operation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I also want quite a rugged tool that I can keep in a toolkit.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Instead of relying on touch gestures, the design uses dedicated physical buttons to adjust display ranges. This approach allows a protective acrylic window to be fitted over the display, increasing durability while simplifying operation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;For just two buttons, two physical buttons are going to be much stronger in a work environment than having a touch screen.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It is a practical engineering compromise. While touchscreens provide flexibility, robustness frequently takes priority when creating equipment that may be transported regularly or used in harsher environments.&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_000098.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr4"&gt;Software Architecture&lt;/h2&gt;
&lt;p&gt;The firmware was developed using the Arduino IDE, combining display libraries from DFRobot with thermal imaging support from the Adafruit MLX90640 library.&lt;/p&gt;
&lt;p&gt;Rather than relying on a fixed colour scale, the software introduces configurable temperature limits and colour mappings. Arrays define selectable temperature bands and associated palette values, allowing the display range to be adapted to different inspection scenarios.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve made an array of temperatures that I think would be nice to choose between for the minimum and for the maximum.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A significant enhancement beyond the initial proof-of-concept was the addition of a graphical reference scale. Alongside the thermal image itself, the software generates a colour bar displaying the current temperature mapping and ambient reference point.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve made a little bar on the screen just so you&amp;#39;ve got something to reference.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is particularly useful when comparing thermal scenes because colours alone can sometimes be misleading without context. Showing the active scale ensures that temperature differences remain meaningful as users adjust ranges.&lt;/p&gt;
&lt;p&gt;The display rendering process converts each measured temperature into a colour lookup value and then expands the low-resolution thermal array into larger screen pixels.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Displaying each pixel as 13 by 13 square.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This scaling approach preserves the sensor&amp;#39;s underlying structure while making the image large enough to be useful on the handheld display.&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/3750.frame_5F00_000091.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr5"&gt;Custom Enclosure Development and&amp;nbsp;Performance and Practical Applications&lt;/h2&gt;
&lt;p&gt;To transform the electronics into a finished product, a dedicated enclosure was modelled and 3D printed.&lt;/p&gt;
&lt;p&gt;The housing was designed around the precise requirements of the hardware, including mounting locations for the Arduino, openings for the pushbuttons, accommodation for the acrylic display cover and a dedicated aperture for the thermal imaging sensor.&lt;/p&gt;
&lt;p&gt;The enclosure design was created in FreeCAD, allowing dimensions to be adjusted until everything aligned correctly. Once printed, the finished parts closely matched the original CAD model and provided the foundation for final assembly.&lt;/p&gt;
&lt;p&gt;The completed unit feels much closer to a commercial inspection tool than a development-board prototype, while still retaining all of the flexibility of an open-source design. The finished camera provides a useful way of visualising heat loss, identifying hot components and locating unexpected temperature variations. Like many MLX90640-based systems, it operates at relatively modest frame rates due to the amount of processing required to convert raw sensor data into temperatures and rendered images.&lt;/p&gt;
&lt;p&gt;Even so, the camera is perfectly capable of highlighting thermal differences across surfaces, electrical equipment and household environments.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;ll give me an idea of just what temperature something is with a visual graphic of where that is.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For energy-efficiency surveys, that means doors, windows, insulation gaps and draught-prone areas become immediately visible. For electronics work, it offers a way to identify unexpectedly hot components and thermal bottlenecks without specialised commercial equipment.&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/IMG_5F00_6108.JPG" /&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/Thermal_2D00_water.JPG" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr7"&gt;Future Enhancements and&amp;nbsp;Final Thoughts&lt;/h2&gt;
&lt;p&gt;One of the advantages of building a thermal camera rather than purchasing a finished product is that new capabilities can be added whenever the hardware allows.&lt;/p&gt;
&lt;p&gt;The most obvious next feature would be image capture.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The addition for actually capturing that picture and having it as an image file.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The display hardware already includes an SD card slot, opening up the possibility of storing thermal snapshots directly to removable media. However, implementing this feature requires careful consideration.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The only thing I&amp;#39;d worry about is in processing that it might make the whole camera image speed that it&amp;#39;s updating slower.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Another particularly interesting possibility would be combining visible-light imagery with thermal information, similar to the image-overlay functionality found on professional thermal cameras.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;To have an actual normal camera and be able to overlay the thermal imaging sensor data onto a real picture.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While technically achievable, this would likely demand considerably more processing power than is available within the current hardware configuration. The concept nevertheless demonstrates how extensible the design could become should a future revision migrate to a more powerful platform. This project demonstrates just how accessible thermal imaging technology has become. By combining an MLX90640 infrared sensor, an Arduino UNO R4 Minima, a colour display and a carefully considered enclosure design, Katie has produced a capable handheld thermal camera that can be customised far beyond the capabilities of many entry-level commercial units.&lt;/p&gt;
&lt;p&gt;What began as an attempt to avoid a lengthy borrowing queue evolved into a fully featured thermal inspection tool with configurable temperature ranges, physical controls, a rugged enclosure and a clear upgrade path. Whether used for identifying household heat loss, examining electronic assemblies or simply exploring temperature differences in the world around it, it is an excellent example of turning readily available maker hardware into a genuinely useful instrument.&lt;/p&gt;
&lt;h3 id="mcetoc_1k0hshvfr9"&gt;Key Hardware Used&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Arduino UNO R4 Minima Development Board&lt;/li&gt;
&lt;li&gt;Seeed Studio MLX90640 Thermal Imaging Sensor (32 &amp;times; 24 IR array)&lt;/li&gt;
&lt;li&gt;DFRobot Fermion TFT Capacitive Touch Display&lt;/li&gt;
&lt;li&gt;Multicomp Pro Pushbutton Switches&lt;/li&gt;
&lt;li&gt;3D-printed PLA enclosure&lt;/li&gt;
&lt;li&gt;3 mm acrylic display protection window&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Interested in building your own version or adapting the design?&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hsii2ba"&gt;Supporting Links, ECAD and Code&lt;/h2&gt;
&lt;p&gt;-&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hskartc"&gt;Parts Used and Buy Links&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-0bd5f" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4208543,3879659,4007883,,1634687~2,,4562980&amp;nsku=77AK2286,99AJ4472,74AK7829,,03P2471~2,,16AM8645&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('0bd5f'));" data-farnell="4208543,3879659,4007883,,1634687~2,,4562980" data-newark="77AK2286,99AJ4472,74AK7829,,03P2471~2,,16AM8645" 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;ABX00080 Development Board, UNO R4 Minima&lt;/td&gt;
&lt;td&gt;Arduino&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-782fc" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4208543&amp;nsku=77AK2286&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('782fc'));" data-farnell="4208543" data-newark="77AK2286" 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;DFROBOT Capacitive TouchScreen, Fermion, TFT LCD, Arduino Board&lt;/td&gt;
&lt;td&gt;DFROBOT&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-876ea" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3879659&amp;nsku=99AJ4472&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('876ea'));" data-farnell="3879659" data-newark="99AJ4472" 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;114020141 Thermal Imaging Camera/IR Array Board&lt;/td&gt;
&lt;td&gt;SEEED Studio&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-41d59" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4007883&amp;nsku=74AK7829&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('41d59'));" data-farnell="4007883" data-newark="74AK7829" 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;&lt;span&gt;R13-24A-05-BB&amp;nbsp;&lt;/span&gt;Pushbutton Switch, R13-24, 7.2 mm, SPST-NO&amp;quot;&lt;/td&gt;
&lt;td&gt;Multicomp Pro&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-85c31" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1634687~2&amp;nsku=03P2471~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('85c31'));" data-farnell="1634687~2" data-newark="03P2471~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;MP015138 3D Printer Filament, 1.75mm, Milk White, PLA&amp;quot;&lt;/td&gt;
&lt;td&gt;Multicomp Pro&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-a35c2" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4562980&amp;nsku=16AM8645&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('a35c2'));" data-farnell="4562980" data-newark="16AM8645" 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;3mm Clear Acrylic sheet&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;h3 id="mcetoc_1k0hsj0p3b"&gt;&lt;/h3&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: infrared imaging, thermal camera diy, arudino project, i2c sensor, maker electronics project, 3d printed enclosure, thermal mapping, handheld thermal camera, arduino uno R4, heat loss detection, electronics diagnostics, mlx90640, thermal sensor project, temperature visualisation, friday_release, thermal imaging camera&lt;/div&gt;
</description></item><item><title>Building a Customisable Handheld Arduino Thermal Imaging Camera</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72105/building-a-customisable-handheld-arduino-thermal-imaging-camera/revision/5</link><pubDate>Wed, 26 Aug 2026 16:28:06 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:376b923c-702f-4159-a718-273f8073fa81</guid><dc:creator>cstanton</dc:creator><description>Revision 5 posted to Documents by cstanton on 8/26/2026 4:28:06 PM&lt;br /&gt;
&lt;p&gt;Rather than wait weeks to borrow a thermal imaging camera, Katie Dumont set out to build one from scratch. Combining a Seeed Studio MLX90640 thermal array sensor with an Arduino UNO R4 Minima and a colour display, she produced a portable thermal camera that can highlight heat loss, reveal hidden hot spots and display temperature variations in real time. The project goes beyond simply wiring modules together, with a custom-designed 3D printed enclosure, rugged physical controls, configurable temperature scales and plenty of experimentation to get the best image from the sensor. It&amp;#39;s a practical build that demonstrates just how accessible thermal imaging has become for makers, engineers and anyone curious about what&amp;#39;s really going on beneath the surface.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hsq8add"&gt;Get Fired Up and Watch&amp;nbsp;Katie Build&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;a href="https://players.brightcove.net/1362235890001/default_default/index.html?videoId=6404065899112"&gt;players.brightcove.net/.../index.html&lt;/a&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Why wait to borrow a thermal imaging camera when the core technology is now available as a relatively affordable sensor module? Faced with long waiting lists for energy-efficiency thermal cameras, Katie Dumont decided to build one instead. The result is a handheld thermal imaging camera based around an Arduino UNO R4 Minima, combining a 32 &amp;times; 24 infrared sensor array with a colour touchscreen display, physical controls and a custom-designed enclosure.&lt;/p&gt;
&lt;p&gt;Rather than replicating the behaviour of a commercial thermal camera, the project explores how easily a thermal imaging system can be tailored to specific requirements. Temperature ranges can be adjusted, colour mappings can be customised and the hardware remains open to future upgrades.&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_000001-_2800_2_2900_.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr1"&gt;The Hardware Platform&lt;/h2&gt;
&lt;p&gt;At the heart of the build is the Seeed Studio MLX90640 infrared thermal imaging sensor. Unlike a conventional camera, the MLX90640 does not capture visible light. Instead, it measures infrared radiation across a grid of 768 sensing elements arranged in a 32 &amp;times; 24 array.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;s got an array of thermal sensors of 32 by 24 of them so should get a fairly decent image of the temperatures.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The sensor communicates over I&amp;sup2;C, making it straightforward to interface with modern microcontroller platforms. One of the aspects that immediately stood out during development was its quoted accuracy.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;s plus and minus 1.5 degrees C accuracy so I should be fairly confident with what I get out of this as an accurate representation of the temperature.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Supporting the sensor is the Arduino UNO R4 Minima, based on the Renesas RA4M1 microcontroller. With significantly more RAM and processing capability than earlier Uno generations, it is capable of handling the calculations required to process MLX90640 image data while simultaneously driving a display.&lt;/p&gt;
&lt;p&gt;Visual output is provided by a DFRobot Fermion capacitive touchscreen display module, creating a compact self-contained handheld instrument. Two Multicomp Pro pushbuttons provide range adjustment controls, while a custom 3D-printed enclosure holds everything together.&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/4442.frame_5F00_000101.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr2"&gt;Validating the Sensor and&amp;nbsp;Designing for Real-World Use&lt;/h2&gt;
&lt;p&gt;Before committing to the enclosure design and software architecture, the project began with a simple proof-of-concept test.&lt;/p&gt;
&lt;p&gt;The thermal sensor and display were wired together with the Arduino, and example software from the display and sensor libraries was adapted into a quick prototype. To verify operation, two everyday thermal references were selected: an ice cube and a container of near-boiling water.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve taken the example code for the library for the camera and the screen and just popped them together just to make a really simple test to check this is going to do what I want it to do.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The resulting thermal images immediately demonstrated that the system was operating correctly. Cold regions appeared deep blue, while high-temperature regions saturated towards red. Even subtle thermal effects became visible.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;m getting detail of the steam coming off the cup as that greeny, so not as hot but hotter than ambient temperature.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The testing phase also verified that temperature gradients around the cup could be observed clearly, with transitions through yellow and green before reaching ambient background temperatures. Many DIY thermal imaging projects stop at a bench-top prototype, but this build was intended to become a practical tool capable of being stored in a toolbox and used repeatedly.&lt;/p&gt;
&lt;p&gt;Although the display includes touch capability, a conscious decision was made not to use touchscreen controls for normal operation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I also want quite a rugged tool that I can keep in a toolkit.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Instead of relying on touch gestures, the design uses dedicated physical buttons to adjust display ranges. This approach allows a protective acrylic window to be fitted over the display, increasing durability while simplifying operation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;For just two buttons, two physical buttons are going to be much stronger in a work environment than having a touch screen.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It is a practical engineering compromise. While touchscreens provide flexibility, robustness frequently takes priority when creating equipment that may be transported regularly or used in harsher environments.&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_000098.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr4"&gt;Software Architecture&lt;/h2&gt;
&lt;p&gt;The firmware was developed using the Arduino IDE, combining display libraries from DFRobot with thermal imaging support from the Adafruit MLX90640 library.&lt;/p&gt;
&lt;p&gt;Rather than relying on a fixed colour scale, the software introduces configurable temperature limits and colour mappings. Arrays define selectable temperature bands and associated palette values, allowing the display range to be adapted to different inspection scenarios.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve made an array of temperatures that I think would be nice to choose between for the minimum and for the maximum.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A significant enhancement beyond the initial proof-of-concept was the addition of a graphical reference scale. Alongside the thermal image itself, the software generates a colour bar displaying the current temperature mapping and ambient reference point.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve made a little bar on the screen just so you&amp;#39;ve got something to reference.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is particularly useful when comparing thermal scenes because colours alone can sometimes be misleading without context. Showing the active scale ensures that temperature differences remain meaningful as users adjust ranges.&lt;/p&gt;
&lt;p&gt;The display rendering process converts each measured temperature into a colour lookup value and then expands the low-resolution thermal array into larger screen pixels.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Displaying each pixel as 13 by 13 square.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This scaling approach preserves the sensor&amp;#39;s underlying structure while making the image large enough to be useful on the handheld display.&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/3750.frame_5F00_000091.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr5"&gt;Custom Enclosure Development and&amp;nbsp;Performance and Practical Applications&lt;/h2&gt;
&lt;p&gt;To transform the electronics into a finished product, a dedicated enclosure was modelled and 3D printed.&lt;/p&gt;
&lt;p&gt;The housing was designed around the precise requirements of the hardware, including mounting locations for the Arduino, openings for the pushbuttons, accommodation for the acrylic display cover and a dedicated aperture for the thermal imaging sensor.&lt;/p&gt;
&lt;p&gt;The enclosure design was created in FreeCAD, allowing dimensions to be adjusted until everything aligned correctly. Once printed, the finished parts closely matched the original CAD model and provided the foundation for final assembly.&lt;/p&gt;
&lt;p&gt;The completed unit feels much closer to a commercial inspection tool than a development-board prototype, while still retaining all of the flexibility of an open-source design. The finished camera provides a useful way of visualising heat loss, identifying hot components and locating unexpected temperature variations. Like many MLX90640-based systems, it operates at relatively modest frame rates due to the amount of processing required to convert raw sensor data into temperatures and rendered images.&lt;/p&gt;
&lt;p&gt;Even so, the camera is perfectly capable of highlighting thermal differences across surfaces, electrical equipment and household environments.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;ll give me an idea of just what temperature something is with a visual graphic of where that is.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For energy-efficiency surveys, that means doors, windows, insulation gaps and draught-prone areas become immediately visible. For electronics work, it offers a way to identify unexpectedly hot components and thermal bottlenecks without specialised commercial equipment.&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/IMG_5F00_6108.JPG" /&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/Thermal_2D00_water.JPG" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr7"&gt;Future Enhancements and&amp;nbsp;Final Thoughts&lt;/h2&gt;
&lt;p&gt;One of the advantages of building a thermal camera rather than purchasing a finished product is that new capabilities can be added whenever the hardware allows.&lt;/p&gt;
&lt;p&gt;The most obvious next feature would be image capture.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The addition for actually capturing that picture and having it as an image file.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The display hardware already includes an SD card slot, opening up the possibility of storing thermal snapshots directly to removable media. However, implementing this feature requires careful consideration.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The only thing I&amp;#39;d worry about is in processing that it might make the whole camera image speed that it&amp;#39;s updating slower.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Another particularly interesting possibility would be combining visible-light imagery with thermal information, similar to the image-overlay functionality found on professional thermal cameras.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;To have an actual normal camera and be able to overlay the thermal imaging sensor data onto a real picture.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While technically achievable, this would likely demand considerably more processing power than is available within the current hardware configuration. The concept nevertheless demonstrates how extensible the design could become should a future revision migrate to a more powerful platform. This project demonstrates just how accessible thermal imaging technology has become. By combining an MLX90640 infrared sensor, an Arduino UNO R4 Minima, a colour display and a carefully considered enclosure design, Katie has produced a capable handheld thermal camera that can be customised far beyond the capabilities of many entry-level commercial units.&lt;/p&gt;
&lt;p&gt;What began as an attempt to avoid a lengthy borrowing queue evolved into a fully featured thermal inspection tool with configurable temperature ranges, physical controls, a rugged enclosure and a clear upgrade path. Whether used for identifying household heat loss, examining electronic assemblies or simply exploring temperature differences in the world around it, it is an excellent example of turning readily available maker hardware into a genuinely useful instrument.&lt;/p&gt;
&lt;h3 id="mcetoc_1k0hshvfr9"&gt;Key Hardware Used&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Arduino UNO R4 Minima Development Board&lt;/li&gt;
&lt;li&gt;Seeed Studio MLX90640 Thermal Imaging Sensor (32 &amp;times; 24 IR array)&lt;/li&gt;
&lt;li&gt;DFRobot Fermion TFT Capacitive Touch Display&lt;/li&gt;
&lt;li&gt;Multicomp Pro Pushbutton Switches&lt;/li&gt;
&lt;li&gt;3D-printed PLA enclosure&lt;/li&gt;
&lt;li&gt;3 mm acrylic display protection window&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Interested in building your own version or adapting the design?&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hsii2ba"&gt;Supporting Links, ECAD and Code&lt;/h2&gt;
&lt;p&gt;-&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hskartc"&gt;Parts Used and Buy Links&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-4ca50" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4208543,3879659,4007883,,1634687~2,,4562980&amp;nsku=77AK2286,99AJ4472,74AK7829,,03P2471~2,,16AM8645&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('4ca50'));" data-farnell="4208543,3879659,4007883,,1634687~2,,4562980" data-newark="77AK2286,99AJ4472,74AK7829,,03P2471~2,,16AM8645" 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;ABX00080 Development Board, UNO R4 Minima&lt;/td&gt;
&lt;td&gt;Arduino&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-c738b" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4208543&amp;nsku=77AK2286&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('c738b'));" data-farnell="4208543" data-newark="77AK2286" 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;DFROBOT Capacitive TouchScreen, Fermion, TFT LCD, Arduino Board&lt;/td&gt;
&lt;td&gt;DFROBOT&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-81d05" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3879659&amp;nsku=99AJ4472&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('81d05'));" data-farnell="3879659" data-newark="99AJ4472" 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;114020141 Thermal Imaging Camera/IR Array Board&lt;/td&gt;
&lt;td&gt;SEEED Studio&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-94958" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4007883&amp;nsku=74AK7829&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('94958'));" data-farnell="4007883" data-newark="74AK7829" 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;&lt;span&gt;R13-24A-05-BB&amp;nbsp;&lt;/span&gt;Pushbutton Switch, R13-24, 7.2 mm, SPST-NO&amp;quot;&lt;/td&gt;
&lt;td&gt;Multicomp Pro&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-637e3" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1634687~2&amp;nsku=03P2471~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('637e3'));" data-farnell="1634687~2" data-newark="03P2471~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;MP015138 3D Printer Filament, 1.75mm, Milk White, PLA&amp;quot;&lt;/td&gt;
&lt;td&gt;Multicomp Pro&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-352cb" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4562980&amp;nsku=16AM8645&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('352cb'));" data-farnell="4562980" data-newark="16AM8645" 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;3mm Clear Acrylic sheet&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;h3 id="mcetoc_1k0hsj0p3b"&gt;&lt;/h3&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: infrared imaging, thermal camera diy, arudino project, i2c sensor, maker electronics project, 3d printed enclosure, thermal mapping, handheld thermal camera, arduino uno R4, heat loss detection, electronics diagnostics, mlx90640, thermal sensor project, temperature visualisation, friday_release, thermal imaging camera&lt;/div&gt;
</description></item><item><title>Building a Customisable Handheld Arduino Thermal Imaging Camera</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72105/building-a-customisable-handheld-arduino-thermal-imaging-camera/revision/4</link><pubDate>Wed, 26 Aug 2026 09:59:28 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:376b923c-702f-4159-a718-273f8073fa81</guid><dc:creator>cstanton</dc:creator><description>Revision 4 posted to Documents by cstanton on 8/26/2026 9:59:28 AM&lt;br /&gt;
&lt;p&gt;Rather than wait weeks to borrow a thermal imaging camera, Katie Dumont set out to build one from scratch. Combining a Seeed Studio MLX90640 thermal array sensor with an Arduino UNO R4 Minima and a colour display, she produced a portable thermal camera that can highlight heat loss, reveal hidden hot spots and display temperature variations in real time. The project goes beyond simply wiring modules together, with a custom-designed 3D printed enclosure, rugged physical controls, configurable temperature scales and plenty of experimentation to get the best image from the sensor. It&amp;#39;s a practical build that demonstrates just how accessible thermal imaging has become for makers, engineers and anyone curious about what&amp;#39;s really going on beneath the surface.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hsq8add"&gt;Get Fired Up and Watch&amp;nbsp;Katie Build&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-04-35/Building-a-Customisable-Handheld-Arduino-Thermal-Imaging-Camera.mp4"&gt;community.element14.com/.../Building-a-Customisable-Handheld-Arduino-Thermal-Imaging-Camera.mp4&lt;/a&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Why wait to borrow a thermal imaging camera when the core technology is now available as a relatively affordable sensor module? Faced with long waiting lists for energy-efficiency thermal cameras, Katie Dumont decided to build one instead. The result is a handheld thermal imaging camera based around an Arduino UNO R4 Minima, combining a 32 &amp;times; 24 infrared sensor array with a colour touchscreen display, physical controls and a custom-designed enclosure.&lt;/p&gt;
&lt;p&gt;Rather than replicating the behaviour of a commercial thermal camera, the project explores how easily a thermal imaging system can be tailored to specific requirements. Temperature ranges can be adjusted, colour mappings can be customised and the hardware remains open to future upgrades.&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_000001-_2800_2_2900_.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr1"&gt;The Hardware Platform&lt;/h2&gt;
&lt;p&gt;At the heart of the build is the Seeed Studio MLX90640 infrared thermal imaging sensor. Unlike a conventional camera, the MLX90640 does not capture visible light. Instead, it measures infrared radiation across a grid of 768 sensing elements arranged in a 32 &amp;times; 24 array.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;s got an array of thermal sensors of 32 by 24 of them so should get a fairly decent image of the temperatures.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The sensor communicates over I&amp;sup2;C, making it straightforward to interface with modern microcontroller platforms. One of the aspects that immediately stood out during development was its quoted accuracy.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;s plus and minus 1.5 degrees C accuracy so I should be fairly confident with what I get out of this as an accurate representation of the temperature.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Supporting the sensor is the Arduino UNO R4 Minima, based on the Renesas RA4M1 microcontroller. With significantly more RAM and processing capability than earlier Uno generations, it is capable of handling the calculations required to process MLX90640 image data while simultaneously driving a display.&lt;/p&gt;
&lt;p&gt;Visual output is provided by a DFRobot Fermion capacitive touchscreen display module, creating a compact self-contained handheld instrument. Two Multicomp Pro pushbuttons provide range adjustment controls, while a custom 3D-printed enclosure holds everything together.&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/4442.frame_5F00_000101.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr2"&gt;Validating the Sensor and&amp;nbsp;Designing for Real-World Use&lt;/h2&gt;
&lt;p&gt;Before committing to the enclosure design and software architecture, the project began with a simple proof-of-concept test.&lt;/p&gt;
&lt;p&gt;The thermal sensor and display were wired together with the Arduino, and example software from the display and sensor libraries was adapted into a quick prototype. To verify operation, two everyday thermal references were selected: an ice cube and a container of near-boiling water.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve taken the example code for the library for the camera and the screen and just popped them together just to make a really simple test to check this is going to do what I want it to do.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The resulting thermal images immediately demonstrated that the system was operating correctly. Cold regions appeared deep blue, while high-temperature regions saturated towards red. Even subtle thermal effects became visible.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;m getting detail of the steam coming off the cup as that greeny, so not as hot but hotter than ambient temperature.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The testing phase also verified that temperature gradients around the cup could be observed clearly, with transitions through yellow and green before reaching ambient background temperatures. Many DIY thermal imaging projects stop at a bench-top prototype, but this build was intended to become a practical tool capable of being stored in a toolbox and used repeatedly.&lt;/p&gt;
&lt;p&gt;Although the display includes touch capability, a conscious decision was made not to use touchscreen controls for normal operation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I also want quite a rugged tool that I can keep in a toolkit.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Instead of relying on touch gestures, the design uses dedicated physical buttons to adjust display ranges. This approach allows a protective acrylic window to be fitted over the display, increasing durability while simplifying operation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;For just two buttons, two physical buttons are going to be much stronger in a work environment than having a touch screen.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It is a practical engineering compromise. While touchscreens provide flexibility, robustness frequently takes priority when creating equipment that may be transported regularly or used in harsher environments.&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_000098.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr4"&gt;Software Architecture&lt;/h2&gt;
&lt;p&gt;The firmware was developed using the Arduino IDE, combining display libraries from DFRobot with thermal imaging support from the Adafruit MLX90640 library.&lt;/p&gt;
&lt;p&gt;Rather than relying on a fixed colour scale, the software introduces configurable temperature limits and colour mappings. Arrays define selectable temperature bands and associated palette values, allowing the display range to be adapted to different inspection scenarios.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve made an array of temperatures that I think would be nice to choose between for the minimum and for the maximum.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A significant enhancement beyond the initial proof-of-concept was the addition of a graphical reference scale. Alongside the thermal image itself, the software generates a colour bar displaying the current temperature mapping and ambient reference point.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve made a little bar on the screen just so you&amp;#39;ve got something to reference.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is particularly useful when comparing thermal scenes because colours alone can sometimes be misleading without context. Showing the active scale ensures that temperature differences remain meaningful as users adjust ranges.&lt;/p&gt;
&lt;p&gt;The display rendering process converts each measured temperature into a colour lookup value and then expands the low-resolution thermal array into larger screen pixels.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Displaying each pixel as 13 by 13 square.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This scaling approach preserves the sensor&amp;#39;s underlying structure while making the image large enough to be useful on the handheld display.&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/3750.frame_5F00_000091.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr5"&gt;Custom Enclosure Development and&amp;nbsp;Performance and Practical Applications&lt;/h2&gt;
&lt;p&gt;To transform the electronics into a finished product, a dedicated enclosure was modelled and 3D printed.&lt;/p&gt;
&lt;p&gt;The housing was designed around the precise requirements of the hardware, including mounting locations for the Arduino, openings for the pushbuttons, accommodation for the acrylic display cover and a dedicated aperture for the thermal imaging sensor.&lt;/p&gt;
&lt;p&gt;The enclosure design was created in FreeCAD, allowing dimensions to be adjusted until everything aligned correctly. Once printed, the finished parts closely matched the original CAD model and provided the foundation for final assembly.&lt;/p&gt;
&lt;p&gt;The completed unit feels much closer to a commercial inspection tool than a development-board prototype, while still retaining all of the flexibility of an open-source design. The finished camera provides a useful way of visualising heat loss, identifying hot components and locating unexpected temperature variations. Like many MLX90640-based systems, it operates at relatively modest frame rates due to the amount of processing required to convert raw sensor data into temperatures and rendered images.&lt;/p&gt;
&lt;p&gt;Even so, the camera is perfectly capable of highlighting thermal differences across surfaces, electrical equipment and household environments.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;ll give me an idea of just what temperature something is with a visual graphic of where that is.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For energy-efficiency surveys, that means doors, windows, insulation gaps and draught-prone areas become immediately visible. For electronics work, it offers a way to identify unexpectedly hot components and thermal bottlenecks without specialised commercial equipment.&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/IMG_5F00_6108.JPG" /&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/Thermal_2D00_water.JPG" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr7"&gt;Future Enhancements and&amp;nbsp;Final Thoughts&lt;/h2&gt;
&lt;p&gt;One of the advantages of building a thermal camera rather than purchasing a finished product is that new capabilities can be added whenever the hardware allows.&lt;/p&gt;
&lt;p&gt;The most obvious next feature would be image capture.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The addition for actually capturing that picture and having it as an image file.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The display hardware already includes an SD card slot, opening up the possibility of storing thermal snapshots directly to removable media. However, implementing this feature requires careful consideration.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The only thing I&amp;#39;d worry about is in processing that it might make the whole camera image speed that it&amp;#39;s updating slower.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Another particularly interesting possibility would be combining visible-light imagery with thermal information, similar to the image-overlay functionality found on professional thermal cameras.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;To have an actual normal camera and be able to overlay the thermal imaging sensor data onto a real picture.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While technically achievable, this would likely demand considerably more processing power than is available within the current hardware configuration. The concept nevertheless demonstrates how extensible the design could become should a future revision migrate to a more powerful platform. This project demonstrates just how accessible thermal imaging technology has become. By combining an MLX90640 infrared sensor, an Arduino UNO R4 Minima, a colour display and a carefully considered enclosure design, Katie has produced a capable handheld thermal camera that can be customised far beyond the capabilities of many entry-level commercial units.&lt;/p&gt;
&lt;p&gt;What began as an attempt to avoid a lengthy borrowing queue evolved into a fully featured thermal inspection tool with configurable temperature ranges, physical controls, a rugged enclosure and a clear upgrade path. Whether used for identifying household heat loss, examining electronic assemblies or simply exploring temperature differences in the world around it, it is an excellent example of turning readily available maker hardware into a genuinely useful instrument.&lt;/p&gt;
&lt;h3 id="mcetoc_1k0hshvfr9"&gt;Key Hardware Used&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Arduino UNO R4 Minima Development Board&lt;/li&gt;
&lt;li&gt;Seeed Studio MLX90640 Thermal Imaging Sensor (32 &amp;times; 24 IR array)&lt;/li&gt;
&lt;li&gt;DFRobot Fermion TFT Capacitive Touch Display&lt;/li&gt;
&lt;li&gt;Multicomp Pro Pushbutton Switches&lt;/li&gt;
&lt;li&gt;3D-printed PLA enclosure&lt;/li&gt;
&lt;li&gt;3 mm acrylic display protection window&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Interested in building your own version or adapting the design?&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hsii2ba"&gt;Supporting Links, ECAD and Code&lt;/h2&gt;
&lt;p&gt;-&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hskartc"&gt;Parts Used and Buy Links&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-e3e06" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4208543,3879659,4007883,,1634687~2,,4562980&amp;nsku=77AK2286,99AJ4472,74AK7829,,03P2471~2,,16AM8645&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('e3e06'));" data-farnell="4208543,3879659,4007883,,1634687~2,,4562980" data-newark="77AK2286,99AJ4472,74AK7829,,03P2471~2,,16AM8645" 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;ABX00080 Development Board, UNO R4 Minima&lt;/td&gt;
&lt;td&gt;Arduino&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-e3911" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4208543&amp;nsku=77AK2286&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('e3911'));" data-farnell="4208543" data-newark="77AK2286" 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;DFROBOT Capacitive TouchScreen, Fermion, TFT LCD, Arduino Board&lt;/td&gt;
&lt;td&gt;DFROBOT&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-249d5" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3879659&amp;nsku=99AJ4472&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('249d5'));" data-farnell="3879659" data-newark="99AJ4472" 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;114020141 Thermal Imaging Camera/IR Array Board&lt;/td&gt;
&lt;td&gt;SEEED Studio&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-094f8" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4007883&amp;nsku=74AK7829&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('094f8'));" data-farnell="4007883" data-newark="74AK7829" 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;&lt;span&gt;R13-24A-05-BB&amp;nbsp;&lt;/span&gt;Pushbutton Switch, R13-24, 7.2 mm, SPST-NO&amp;quot;&lt;/td&gt;
&lt;td&gt;Multicomp Pro&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-afc4c" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1634687~2&amp;nsku=03P2471~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('afc4c'));" data-farnell="1634687~2" data-newark="03P2471~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;MP015138 3D Printer Filament, 1.75mm, Milk White, PLA&amp;quot;&lt;/td&gt;
&lt;td&gt;Multicomp Pro&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-031d8" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4562980&amp;nsku=16AM8645&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('031d8'));" data-farnell="4562980" data-newark="16AM8645" 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;3mm Clear Acrylic sheet&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;h3 id="mcetoc_1k0hsj0p3b"&gt;&lt;/h3&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: infrared imaging, thermal camera diy, arudino project, i2c sensor, maker electronics project, 3d printed enclosure, thermal mapping, handheld thermal camera, arduino uno R4, heat loss detection, electronics diagnostics, mlx90640, thermal sensor project, temperature visualisation, friday_release, thermal imaging camera&lt;/div&gt;
</description></item><item><title>Building a Customisable Handheld Arduino Thermal Imaging Camera</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72105/building-a-customisable-handheld-arduino-thermal-imaging-camera/revision/3</link><pubDate>Fri, 21 Aug 2026 10:34:29 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:376b923c-702f-4159-a718-273f8073fa81</guid><dc:creator>cstanton</dc:creator><description>Revision 3 posted to Documents by cstanton on 8/21/2026 10:34:29 AM&lt;br /&gt;
&lt;p&gt;Rather than wait weeks to borrow a thermal imaging camera, Katie Dumont set out to build one from scratch. Combining a Seeed Studio MLX90640 thermal array sensor with an Arduino UNO R4 Minima and a colour display, she produced a portable thermal camera that can highlight heat loss, reveal hidden hot spots and display temperature variations in real time. The project goes beyond simply wiring modules together, with a custom-designed 3D printed enclosure, rugged physical controls, configurable temperature scales and plenty of experimentation to get the best image from the sensor. It&amp;#39;s a practical build that demonstrates just how accessible thermal imaging has become for makers, engineers and anyone curious about what&amp;#39;s really going on beneath the surface.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hsq8add"&gt;Get Fired Up and Watch&amp;nbsp;Katie Build&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Embed Video&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Why wait to borrow a thermal imaging camera when the core technology is now available as a relatively affordable sensor module? Faced with long waiting lists for energy-efficiency thermal cameras, Katie Dumont decided to build one instead. The result is a handheld thermal imaging camera based around an Arduino UNO R4 Minima, combining a 32 &amp;times; 24 infrared sensor array with a colour touchscreen display, physical controls and a custom-designed enclosure.&lt;/p&gt;
&lt;p&gt;Rather than replicating the behaviour of a commercial thermal camera, the project explores how easily a thermal imaging system can be tailored to specific requirements. Temperature ranges can be adjusted, colour mappings can be customised and the hardware remains open to future upgrades.&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_000001-_2800_2_2900_.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr1"&gt;The Hardware Platform&lt;/h2&gt;
&lt;p&gt;At the heart of the build is the Seeed Studio MLX90640 infrared thermal imaging sensor. Unlike a conventional camera, the MLX90640 does not capture visible light. Instead, it measures infrared radiation across a grid of 768 sensing elements arranged in a 32 &amp;times; 24 array.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;s got an array of thermal sensors of 32 by 24 of them so should get a fairly decent image of the temperatures.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The sensor communicates over I&amp;sup2;C, making it straightforward to interface with modern microcontroller platforms. One of the aspects that immediately stood out during development was its quoted accuracy.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;s plus and minus 1.5 degrees C accuracy so I should be fairly confident with what I get out of this as an accurate representation of the temperature.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Supporting the sensor is the Arduino UNO R4 Minima, based on the Renesas RA4M1 microcontroller. With significantly more RAM and processing capability than earlier Uno generations, it is capable of handling the calculations required to process MLX90640 image data while simultaneously driving a display.&lt;/p&gt;
&lt;p&gt;Visual output is provided by a DFRobot Fermion capacitive touchscreen display module, creating a compact self-contained handheld instrument. Two Multicomp Pro pushbuttons provide range adjustment controls, while a custom 3D-printed enclosure holds everything together.&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/4442.frame_5F00_000101.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr2"&gt;Validating the Sensor and&amp;nbsp;Designing for Real-World Use&lt;/h2&gt;
&lt;p&gt;Before committing to the enclosure design and software architecture, the project began with a simple proof-of-concept test.&lt;/p&gt;
&lt;p&gt;The thermal sensor and display were wired together with the Arduino, and example software from the display and sensor libraries was adapted into a quick prototype. To verify operation, two everyday thermal references were selected: an ice cube and a container of near-boiling water.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve taken the example code for the library for the camera and the screen and just popped them together just to make a really simple test to check this is going to do what I want it to do.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The resulting thermal images immediately demonstrated that the system was operating correctly. Cold regions appeared deep blue, while high-temperature regions saturated towards red. Even subtle thermal effects became visible.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;m getting detail of the steam coming off the cup as that greeny, so not as hot but hotter than ambient temperature.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The testing phase also verified that temperature gradients around the cup could be observed clearly, with transitions through yellow and green before reaching ambient background temperatures. Many DIY thermal imaging projects stop at a bench-top prototype, but this build was intended to become a practical tool capable of being stored in a toolbox and used repeatedly.&lt;/p&gt;
&lt;p&gt;Although the display includes touch capability, a conscious decision was made not to use touchscreen controls for normal operation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I also want quite a rugged tool that I can keep in a toolkit.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Instead of relying on touch gestures, the design uses dedicated physical buttons to adjust display ranges. This approach allows a protective acrylic window to be fitted over the display, increasing durability while simplifying operation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;For just two buttons, two physical buttons are going to be much stronger in a work environment than having a touch screen.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It is a practical engineering compromise. While touchscreens provide flexibility, robustness frequently takes priority when creating equipment that may be transported regularly or used in harsher environments.&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_000098.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr4"&gt;Software Architecture&lt;/h2&gt;
&lt;p&gt;The firmware was developed using the Arduino IDE, combining display libraries from DFRobot with thermal imaging support from the Adafruit MLX90640 library.&lt;/p&gt;
&lt;p&gt;Rather than relying on a fixed colour scale, the software introduces configurable temperature limits and colour mappings. Arrays define selectable temperature bands and associated palette values, allowing the display range to be adapted to different inspection scenarios.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve made an array of temperatures that I think would be nice to choose between for the minimum and for the maximum.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A significant enhancement beyond the initial proof-of-concept was the addition of a graphical reference scale. Alongside the thermal image itself, the software generates a colour bar displaying the current temperature mapping and ambient reference point.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve made a little bar on the screen just so you&amp;#39;ve got something to reference.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is particularly useful when comparing thermal scenes because colours alone can sometimes be misleading without context. Showing the active scale ensures that temperature differences remain meaningful as users adjust ranges.&lt;/p&gt;
&lt;p&gt;The display rendering process converts each measured temperature into a colour lookup value and then expands the low-resolution thermal array into larger screen pixels.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Displaying each pixel as 13 by 13 square.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This scaling approach preserves the sensor&amp;#39;s underlying structure while making the image large enough to be useful on the handheld display.&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/3750.frame_5F00_000091.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr5"&gt;Custom Enclosure Development and&amp;nbsp;Performance and Practical Applications&lt;/h2&gt;
&lt;p&gt;To transform the electronics into a finished product, a dedicated enclosure was modelled and 3D printed.&lt;/p&gt;
&lt;p&gt;The housing was designed around the precise requirements of the hardware, including mounting locations for the Arduino, openings for the pushbuttons, accommodation for the acrylic display cover and a dedicated aperture for the thermal imaging sensor.&lt;/p&gt;
&lt;p&gt;The enclosure design was created in FreeCAD, allowing dimensions to be adjusted until everything aligned correctly. Once printed, the finished parts closely matched the original CAD model and provided the foundation for final assembly.&lt;/p&gt;
&lt;p&gt;The completed unit feels much closer to a commercial inspection tool than a development-board prototype, while still retaining all of the flexibility of an open-source design. The finished camera provides a useful way of visualising heat loss, identifying hot components and locating unexpected temperature variations. Like many MLX90640-based systems, it operates at relatively modest frame rates due to the amount of processing required to convert raw sensor data into temperatures and rendered images.&lt;/p&gt;
&lt;p&gt;Even so, the camera is perfectly capable of highlighting thermal differences across surfaces, electrical equipment and household environments.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;ll give me an idea of just what temperature something is with a visual graphic of where that is.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For energy-efficiency surveys, that means doors, windows, insulation gaps and draught-prone areas become immediately visible. For electronics work, it offers a way to identify unexpectedly hot components and thermal bottlenecks without specialised commercial equipment.&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/IMG_5F00_6108.JPG" /&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/Thermal_2D00_water.JPG" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr7"&gt;Future Enhancements and&amp;nbsp;Final Thoughts&lt;/h2&gt;
&lt;p&gt;One of the advantages of building a thermal camera rather than purchasing a finished product is that new capabilities can be added whenever the hardware allows.&lt;/p&gt;
&lt;p&gt;The most obvious next feature would be image capture.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The addition for actually capturing that picture and having it as an image file.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The display hardware already includes an SD card slot, opening up the possibility of storing thermal snapshots directly to removable media. However, implementing this feature requires careful consideration.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The only thing I&amp;#39;d worry about is in processing that it might make the whole camera image speed that it&amp;#39;s updating slower.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Another particularly interesting possibility would be combining visible-light imagery with thermal information, similar to the image-overlay functionality found on professional thermal cameras.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;To have an actual normal camera and be able to overlay the thermal imaging sensor data onto a real picture.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While technically achievable, this would likely demand considerably more processing power than is available within the current hardware configuration. The concept nevertheless demonstrates how extensible the design could become should a future revision migrate to a more powerful platform. This project demonstrates just how accessible thermal imaging technology has become. By combining an MLX90640 infrared sensor, an Arduino UNO R4 Minima, a colour display and a carefully considered enclosure design, Katie has produced a capable handheld thermal camera that can be customised far beyond the capabilities of many entry-level commercial units.&lt;/p&gt;
&lt;p&gt;What began as an attempt to avoid a lengthy borrowing queue evolved into a fully featured thermal inspection tool with configurable temperature ranges, physical controls, a rugged enclosure and a clear upgrade path. Whether used for identifying household heat loss, examining electronic assemblies or simply exploring temperature differences in the world around it, it is an excellent example of turning readily available maker hardware into a genuinely useful instrument.&lt;/p&gt;
&lt;h3 id="mcetoc_1k0hshvfr9"&gt;Key Hardware Used&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Arduino UNO R4 Minima Development Board&lt;/li&gt;
&lt;li&gt;Seeed Studio MLX90640 Thermal Imaging Sensor (32 &amp;times; 24 IR array)&lt;/li&gt;
&lt;li&gt;DFRobot Fermion TFT Capacitive Touch Display&lt;/li&gt;
&lt;li&gt;Multicomp Pro Pushbutton Switches&lt;/li&gt;
&lt;li&gt;3D-printed PLA enclosure&lt;/li&gt;
&lt;li&gt;3 mm acrylic display protection window&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Interested in building your own version or adapting the design?&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hsii2ba"&gt;Supporting Links, ECAD and Code&lt;/h2&gt;
&lt;p&gt;-&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hskartc"&gt;Parts Used and Buy Links&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-4fdfa" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4208543,3879659,4007883,,1634687~2,,4562980&amp;nsku=77AK2286,99AJ4472,74AK7829,,03P2471~2,,16AM8645&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('4fdfa'));" data-farnell="4208543,3879659,4007883,,1634687~2,,4562980" data-newark="77AK2286,99AJ4472,74AK7829,,03P2471~2,,16AM8645" 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;ABX00080 Development Board, UNO R4 Minima&lt;/td&gt;
&lt;td&gt;Arduino&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-66d31" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4208543&amp;nsku=77AK2286&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('66d31'));" data-farnell="4208543" data-newark="77AK2286" 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;DFROBOT Capacitive TouchScreen, Fermion, TFT LCD, Arduino Board&lt;/td&gt;
&lt;td&gt;DFROBOT&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-b7220" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3879659&amp;nsku=99AJ4472&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('b7220'));" data-farnell="3879659" data-newark="99AJ4472" 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;114020141 Thermal Imaging Camera/IR Array Board&lt;/td&gt;
&lt;td&gt;SEEED Studio&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-4c1aa" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4007883&amp;nsku=74AK7829&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('4c1aa'));" data-farnell="4007883" data-newark="74AK7829" 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;&lt;span&gt;R13-24A-05-BB&amp;nbsp;&lt;/span&gt;Pushbutton Switch, R13-24, 7.2 mm, SPST-NO&amp;quot;&lt;/td&gt;
&lt;td&gt;Multicomp Pro&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-d7ebd" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1634687~2&amp;nsku=03P2471~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('d7ebd'));" data-farnell="1634687~2" data-newark="03P2471~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;MP015138 3D Printer Filament, 1.75mm, Milk White, PLA&amp;quot;&lt;/td&gt;
&lt;td&gt;Multicomp Pro&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-fc605" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4562980&amp;nsku=16AM8645&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('fc605'));" data-farnell="4562980" data-newark="16AM8645" 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;3mm Clear Acrylic sheet&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;h3 id="mcetoc_1k0hsj0p3b"&gt;&lt;/h3&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: infrared imaging, thermal camera diy, arudino project, i2c sensor, maker electronics project, 3d printed enclosure, thermal mapping, handheld thermal camera, arduino uno R4, heat loss detection, electronics diagnostics, mlx90640, thermal sensor project, temperature visualisation, friday_release, thermal imaging camera&lt;/div&gt;
</description></item><item><title>Building a Customisable Handheld Arduino Thermal Imaging Camera</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72105/building-a-customisable-handheld-arduino-thermal-imaging-camera/revision/2</link><pubDate>Fri, 21 Aug 2026 10:31:36 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:376b923c-702f-4159-a718-273f8073fa81</guid><dc:creator>cstanton</dc:creator><description>Revision 2 posted to Documents by cstanton on 8/21/2026 10:31:36 AM&lt;br /&gt;
&lt;p&gt;Rather than wait weeks to borrow a thermal imaging camera, Katie Dumont set out to build one from scratch. Combining a Seeed Studio MLX90640 thermal array sensor with an Arduino UNO R4 Minima and a colour display, she produced a portable thermal camera that can highlight heat loss, reveal hidden hot spots and display temperature variations in real time. The project goes beyond simply wiring modules together, with a custom-designed 3D printed enclosure, rugged physical controls, configurable temperature scales and plenty of experimentation to get the best image from the sensor. It&amp;#39;s a practical build that demonstrates just how accessible thermal imaging has become for makers, engineers and anyone curious about what&amp;#39;s really going on beneath the surface.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hsq8add"&gt;Get Fired Up and Watch&amp;nbsp;Katie Build&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Embed Video&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Why wait to borrow a thermal imaging camera when the core technology is now available as a relatively affordable sensor module? Faced with long waiting lists for energy-efficiency thermal cameras, Katie Dumont decided to build one instead. The result is a handheld thermal imaging camera based around an Arduino UNO R4 Minima, combining a 32 &amp;times; 24 infrared sensor array with a colour touchscreen display, physical controls and a custom-designed enclosure.&lt;/p&gt;
&lt;p&gt;Rather than replicating the behaviour of a commercial thermal camera, the project explores how easily a thermal imaging system can be tailored to specific requirements. Temperature ranges can be adjusted, colour mappings can be customised and the hardware remains open to future upgrades.&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_000001-_2800_2_2900_.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr1"&gt;The Hardware Platform&lt;/h2&gt;
&lt;p&gt;At the heart of the build is the Seeed Studio MLX90640 infrared thermal imaging sensor. Unlike a conventional camera, the MLX90640 does not capture visible light. Instead, it measures infrared radiation across a grid of 768 sensing elements arranged in a 32 &amp;times; 24 array.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;s got an array of thermal sensors of 32 by 24 of them so should get a fairly decent image of the temperatures.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The sensor communicates over I&amp;sup2;C, making it straightforward to interface with modern microcontroller platforms. One of the aspects that immediately stood out during development was its quoted accuracy.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;s plus and minus 1.5 degrees C accuracy so I should be fairly confident with what I get out of this as an accurate representation of the temperature.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Supporting the sensor is the Arduino UNO R4 Minima, based on the Renesas RA4M1 microcontroller. With significantly more RAM and processing capability than earlier Uno generations, it is capable of handling the calculations required to process MLX90640 image data while simultaneously driving a display.&lt;/p&gt;
&lt;p&gt;Visual output is provided by a DFRobot Fermion capacitive touchscreen display module, creating a compact self-contained handheld instrument. Two Multicomp Pro pushbuttons provide range adjustment controls, while a custom 3D-printed enclosure holds everything together.&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/4442.frame_5F00_000101.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr2"&gt;Validating the Sensor and&amp;nbsp;Designing for Real-World Use&lt;/h2&gt;
&lt;p&gt;Before committing to the enclosure design and software architecture, the project began with a simple proof-of-concept test.&lt;/p&gt;
&lt;p&gt;The thermal sensor and display were wired together with the Arduino, and example software from the display and sensor libraries was adapted into a quick prototype. To verify operation, two everyday thermal references were selected: an ice cube and a container of near-boiling water.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve taken the example code for the library for the camera and the screen and just popped them together just to make a really simple test to check this is going to do what I want it to do.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The resulting thermal images immediately demonstrated that the system was operating correctly. Cold regions appeared deep blue, while high-temperature regions saturated towards red. Even subtle thermal effects became visible.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;m getting detail of the steam coming off the cup as that greeny, so not as hot but hotter than ambient temperature.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The testing phase also verified that temperature gradients around the cup could be observed clearly, with transitions through yellow and green before reaching ambient background temperatures. Many DIY thermal imaging projects stop at a bench-top prototype, but this build was intended to become a practical tool capable of being stored in a toolbox and used repeatedly.&lt;/p&gt;
&lt;p&gt;Although the display includes touch capability, a conscious decision was made not to use touchscreen controls for normal operation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I also want quite a rugged tool that I can keep in a toolkit.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Instead of relying on touch gestures, the design uses dedicated physical buttons to adjust display ranges. This approach allows a protective acrylic window to be fitted over the display, increasing durability while simplifying operation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;For just two buttons, two physical buttons are going to be much stronger in a work environment than having a touch screen.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It is a practical engineering compromise. While touchscreens provide flexibility, robustness frequently takes priority when creating equipment that may be transported regularly or used in harsher environments.&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_000098.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr4"&gt;Software Architecture&lt;/h2&gt;
&lt;p&gt;The firmware was developed using the Arduino IDE, combining display libraries from DFRobot with thermal imaging support from the Adafruit MLX90640 library.&lt;/p&gt;
&lt;p&gt;Rather than relying on a fixed colour scale, the software introduces configurable temperature limits and colour mappings. Arrays define selectable temperature bands and associated palette values, allowing the display range to be adapted to different inspection scenarios.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve made an array of temperatures that I think would be nice to choose between for the minimum and for the maximum.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A significant enhancement beyond the initial proof-of-concept was the addition of a graphical reference scale. Alongside the thermal image itself, the software generates a colour bar displaying the current temperature mapping and ambient reference point.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve made a little bar on the screen just so you&amp;#39;ve got something to reference.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is particularly useful when comparing thermal scenes because colours alone can sometimes be misleading without context. Showing the active scale ensures that temperature differences remain meaningful as users adjust ranges.&lt;/p&gt;
&lt;p&gt;The display rendering process converts each measured temperature into a colour lookup value and then expands the low-resolution thermal array into larger screen pixels.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Displaying each pixel as 13 by 13 square.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This scaling approach preserves the sensor&amp;#39;s underlying structure while making the image large enough to be useful on the handheld display.&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/3750.frame_5F00_000091.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr5"&gt;Custom Enclosure Development and&amp;nbsp;Performance and Practical Applications&lt;/h2&gt;
&lt;p&gt;To transform the electronics into a finished product, a dedicated enclosure was modelled and 3D printed.&lt;/p&gt;
&lt;p&gt;The housing was designed around the precise requirements of the hardware, including mounting locations for the Arduino, openings for the pushbuttons, accommodation for the acrylic display cover and a dedicated aperture for the thermal imaging sensor.&lt;/p&gt;
&lt;p&gt;The enclosure design was created in FreeCAD, allowing dimensions to be adjusted until everything aligned correctly. Once printed, the finished parts closely matched the original CAD model and provided the foundation for final assembly.&lt;/p&gt;
&lt;p&gt;The completed unit feels much closer to a commercial inspection tool than a development-board prototype, while still retaining all of the flexibility of an open-source design. The finished camera provides a useful way of visualising heat loss, identifying hot components and locating unexpected temperature variations. Like many MLX90640-based systems, it operates at relatively modest frame rates due to the amount of processing required to convert raw sensor data into temperatures and rendered images.&lt;/p&gt;
&lt;p&gt;Even so, the camera is perfectly capable of highlighting thermal differences across surfaces, electrical equipment and household environments.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;ll give me an idea of just what temperature something is with a visual graphic of where that is.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For energy-efficiency surveys, that means doors, windows, insulation gaps and draught-prone areas become immediately visible. For electronics work, it offers a way to identify unexpectedly hot components and thermal bottlenecks without specialised commercial equipment.&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/IMG_5F00_6108.JPG" /&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/Thermal_2D00_water.JPG" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr7"&gt;Future Enhancements and&amp;nbsp;Final Thoughts&lt;/h2&gt;
&lt;p&gt;One of the advantages of building a thermal camera rather than purchasing a finished product is that new capabilities can be added whenever the hardware allows.&lt;/p&gt;
&lt;p&gt;The most obvious next feature would be image capture.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The addition for actually capturing that picture and having it as an image file.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The display hardware already includes an SD card slot, opening up the possibility of storing thermal snapshots directly to removable media. However, implementing this feature requires careful consideration.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The only thing I&amp;#39;d worry about is in processing that it might make the whole camera image speed that it&amp;#39;s updating slower.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Another particularly interesting possibility would be combining visible-light imagery with thermal information, similar to the image-overlay functionality found on professional thermal cameras.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;To have an actual normal camera and be able to overlay the thermal imaging sensor data onto a real picture.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While technically achievable, this would likely demand considerably more processing power than is available within the current hardware configuration. The concept nevertheless demonstrates how extensible the design could become should a future revision migrate to a more powerful platform. This project demonstrates just how accessible thermal imaging technology has become. By combining an MLX90640 infrared sensor, an Arduino UNO R4 Minima, a colour display and a carefully considered enclosure design, Katie has produced a capable handheld thermal camera that can be customised far beyond the capabilities of many entry-level commercial units.&lt;/p&gt;
&lt;p&gt;What began as an attempt to avoid a lengthy borrowing queue evolved into a fully featured thermal inspection tool with configurable temperature ranges, physical controls, a rugged enclosure and a clear upgrade path. Whether used for identifying household heat loss, examining electronic assemblies or simply exploring temperature differences in the world around it, it is an excellent example of turning readily available maker hardware into a genuinely useful instrument.&lt;/p&gt;
&lt;h3 id="mcetoc_1k0hshvfr9"&gt;Key Hardware Used&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Arduino UNO R4 Minima Development Board&lt;/li&gt;
&lt;li&gt;Seeed Studio MLX90640 Thermal Imaging Sensor (32 &amp;times; 24 IR array)&lt;/li&gt;
&lt;li&gt;DFRobot Fermion TFT Capacitive Touch Display&lt;/li&gt;
&lt;li&gt;Multicomp Pro Pushbutton Switches&lt;/li&gt;
&lt;li&gt;3D-printed PLA enclosure&lt;/li&gt;
&lt;li&gt;3 mm acrylic display protection window&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Interested in building your own version or adapting the design?&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hsii2ba"&gt;Supporting Links, ECAD and Code&lt;/h2&gt;
&lt;p&gt;-&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hskartc"&gt;Parts Used and Buy Links&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-d4228" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4208543,3879659,4007883,,1634687~2,,4562980&amp;nsku=77AK2286,99AJ4472,74AK7829,,03P2471~2,,16AM8645&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('d4228'));" data-farnell="4208543,3879659,4007883,,1634687~2,,4562980" data-newark="77AK2286,99AJ4472,74AK7829,,03P2471~2,,16AM8645" 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;ABX00080 Development Board, UNO R4 Minima&lt;/td&gt;
&lt;td&gt;Arduino&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-200b1" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4208543&amp;nsku=77AK2286&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('200b1'));" data-farnell="4208543" data-newark="77AK2286" 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;DFROBOT Capacitive TouchScreen, Fermion, TFT LCD, Arduino Board&lt;/td&gt;
&lt;td&gt;DFROBOT&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-4bf3e" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3879659&amp;nsku=99AJ4472&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('4bf3e'));" data-farnell="3879659" data-newark="99AJ4472" 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;114020141 Thermal Imaging Camera/IR Array Board&lt;/td&gt;
&lt;td&gt;SEEED Studio&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-5e863" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4007883&amp;nsku=74AK7829&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('5e863'));" data-farnell="4007883" data-newark="74AK7829" 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;&amp;quot;R13-24A-05-BB&lt;/td&gt;
&lt;td&gt;undefined&lt;/td&gt;
&lt;td&gt;undefined&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-06d60" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=undefined&amp;nsku=undefined&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('06d60'));" data-farnell="undefined" data-newark="undefined" 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;Pushbutton Switch, R13-24, 7.2 mm, SPST-NO&amp;quot;&lt;/td&gt;
&lt;td&gt;Multicomp Pro&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-e3915" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1634687~2&amp;nsku=03P2471~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('e3915'));" data-farnell="1634687~2" data-newark="03P2471~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;&amp;quot;MP015138&lt;/td&gt;
&lt;td&gt;undefined&lt;/td&gt;
&lt;td&gt;undefined&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-d181e" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=undefined&amp;nsku=undefined&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('d181e'));" data-farnell="undefined" data-newark="undefined" 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;3D Printer Filament, 1.75mm, Milk White, PLA&amp;quot;&lt;/td&gt;
&lt;td&gt;Multicomp Pro&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-1fd29" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4562980&amp;nsku=16AM8645&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('1fd29'));" data-farnell="4562980" data-newark="16AM8645" 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;3mm Clear Acrylic sheet&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;h3 id="mcetoc_1k0hsj0p3b"&gt;&lt;/h3&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: infrared imaging, thermal camera diy, arudino project, i2c sensor, maker electronics project, 3d printed enclosure, thermal mapping, handheld thermal camera, arduino uno R4, heat loss detection, electronics diagnostics, mlx90640, thermal sensor project, temperature visualisation, friday_release, thermal imaging camera&lt;/div&gt;
</description></item><item><title>Building a Customisable Handheld Arduino Thermal Imaging Camera</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72105/building-a-customisable-handheld-arduino-thermal-imaging-camera/revision/1</link><pubDate>Fri, 21 Aug 2026 10:14:46 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:376b923c-702f-4159-a718-273f8073fa81</guid><dc:creator>cstanton</dc:creator><description>Revision 1 posted to Documents by cstanton on 8/21/2026 10:14:46 AM&lt;br /&gt;
&lt;p&gt;Rather than wait weeks to borrow a thermal imaging camera, Katie Dumont set out to build one from scratch. Combining a Seeed Studio MLX90640 thermal array sensor with an Arduino UNO R4 Minima and a colour display, she produced a portable thermal camera that can highlight heat loss, reveal hidden hot spots and display temperature variations in real time. The project goes beyond simply wiring modules together, with a custom-designed 3D printed enclosure, rugged physical controls, configurable temperature scales and plenty of experimentation to get the best image from the sensor. It&amp;#39;s a practical build that demonstrates just how accessible thermal imaging has become for makers, engineers and anyone curious about what&amp;#39;s really going on beneath the surface.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hsq8add"&gt;Get Fired Up and Watch&amp;nbsp;Katie Build&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Embed Video&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Why wait to borrow a thermal imaging camera when the core technology is now available as a relatively affordable sensor module? Faced with long waiting lists for energy-efficiency thermal cameras, Katie Dumont decided to build one instead. The result is a handheld thermal imaging camera based around an Arduino UNO R4 Minima, combining a 32 &amp;times; 24 infrared sensor array with a colour touchscreen display, physical controls and a custom-designed enclosure.&lt;/p&gt;
&lt;p&gt;Rather than replicating the behaviour of a commercial thermal camera, the project explores how easily a thermal imaging system can be tailored to specific requirements. Temperature ranges can be adjusted, colour mappings can be customised and the hardware remains open to future upgrades.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr1"&gt;The Hardware Platform&lt;/h2&gt;
&lt;p&gt;At the heart of the build is the Seeed Studio MLX90640 infrared thermal imaging sensor. Unlike a conventional camera, the MLX90640 does not capture visible light. Instead, it measures infrared radiation across a grid of 768 sensing elements arranged in a 32 &amp;times; 24 array.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;s got an array of thermal sensors of 32 by 24 of them so should get a fairly decent image of the temperatures.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The sensor communicates over I&amp;sup2;C, making it straightforward to interface with modern microcontroller platforms. One of the aspects that immediately stood out during development was its quoted accuracy.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;s plus and minus 1.5 degrees C accuracy so I should be fairly confident with what I get out of this as an accurate representation of the temperature.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Supporting the sensor is the Arduino UNO R4 Minima, based on the Renesas RA4M1 microcontroller. With significantly more RAM and processing capability than earlier Uno generations, it is capable of handling the calculations required to process MLX90640 image data while simultaneously driving a display.&lt;/p&gt;
&lt;p&gt;Visual output is provided by a DFRobot Fermion capacitive touchscreen display module, creating a compact self-contained handheld instrument. Two Multicomp Pro pushbuttons provide range adjustment controls, while a custom 3D-printed enclosure holds everything together.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr2"&gt;Validating the Sensor&lt;/h2&gt;
&lt;p&gt;Before committing to the enclosure design and software architecture, the project began with a simple proof-of-concept test.&lt;/p&gt;
&lt;p&gt;The thermal sensor and display were wired together with the Arduino, and example software from the display and sensor libraries was adapted into a quick prototype. To verify operation, two everyday thermal references were selected: an ice cube and a container of near-boiling water.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve taken the example code for the library for the camera and the screen and just popped them together just to make a really simple test to check this is going to do what I want it to do.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The resulting thermal images immediately demonstrated that the system was operating correctly. Cold regions appeared deep blue, while high-temperature regions saturated towards red. Even subtle thermal effects became visible.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;m getting detail of the steam coming off the cup as that greeny, so not as hot but hotter than ambient temperature.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The testing phase also verified that temperature gradients around the cup could be observed clearly, with transitions through yellow and green before reaching ambient background temperatures.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr3"&gt;Designing for Real-World Use&lt;/h2&gt;
&lt;p&gt;Many DIY thermal imaging projects stop at a bench-top prototype, but this build was intended to become a practical tool capable of being stored in a toolbox and used repeatedly.&lt;/p&gt;
&lt;p&gt;Although the display includes touch capability, a conscious decision was made not to use touchscreen controls for normal operation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I also want quite a rugged tool that I can keep in a toolkit.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Instead of relying on touch gestures, the design uses dedicated physical buttons to adjust display ranges. This approach allows a protective acrylic window to be fitted over the display, increasing durability while simplifying operation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;For just two buttons, two physical buttons are going to be much stronger in a work environment than having a touch screen.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It is a practical engineering compromise. While touchscreens provide flexibility, robustness frequently takes priority when creating equipment that may be transported regularly or used in harsher environments.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr4"&gt;Software Architecture&lt;/h2&gt;
&lt;p&gt;The firmware was developed using the Arduino IDE, combining display libraries from DFRobot with thermal imaging support from the Adafruit MLX90640 library.&lt;/p&gt;
&lt;p&gt;Rather than relying on a fixed colour scale, the software introduces configurable temperature limits and colour mappings. Arrays define selectable temperature bands and associated palette values, allowing the display range to be adapted to different inspection scenarios.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve made an array of temperatures that I think would be nice to choose between for the minimum and for the maximum.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A significant enhancement beyond the initial proof-of-concept was the addition of a graphical reference scale. Alongside the thermal image itself, the software generates a colour bar displaying the current temperature mapping and ambient reference point.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve made a little bar on the screen just so you&amp;#39;ve got something to reference.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is particularly useful when comparing thermal scenes because colours alone can sometimes be misleading without context. Showing the active scale ensures that temperature differences remain meaningful as users adjust ranges.&lt;/p&gt;
&lt;p&gt;The display rendering process converts each measured temperature into a colour lookup value and then expands the low-resolution thermal array into larger screen pixels.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Displaying each pixel as 13 by 13 square.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This scaling approach preserves the sensor&amp;#39;s underlying structure while making the image large enough to be useful on the handheld display.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr5"&gt;Custom Enclosure Development&lt;/h2&gt;
&lt;p&gt;To transform the electronics into a finished product, a dedicated enclosure was modelled and 3D printed.&lt;/p&gt;
&lt;p&gt;The housing was designed around the precise requirements of the hardware, including mounting locations for the Arduino, openings for the pushbuttons, accommodation for the acrylic display cover and a dedicated aperture for the thermal imaging sensor.&lt;/p&gt;
&lt;p&gt;The enclosure design was created in FreeCAD, allowing dimensions to be adjusted until everything aligned correctly. Once printed, the finished parts closely matched the original CAD model and provided the foundation for final assembly.&lt;/p&gt;
&lt;p&gt;The completed unit feels much closer to a commercial inspection tool than a development-board prototype, while still retaining all of the flexibility of an open-source design.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr6"&gt;Performance and Practical Applications&lt;/h2&gt;
&lt;p&gt;The finished camera provides a useful way of visualising heat loss, identifying hot components and locating unexpected temperature variations. Like many MLX90640-based systems, it operates at relatively modest frame rates due to the amount of processing required to convert raw sensor data into temperatures and rendered images.&lt;/p&gt;
&lt;p&gt;Even so, the camera is perfectly capable of highlighting thermal differences across surfaces, electrical equipment and household environments.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;ll give me an idea of just what temperature something is with a visual graphic of where that is.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For energy-efficiency surveys, that means doors, windows, insulation gaps and draught-prone areas become immediately visible. For electronics work, it offers a way to identify unexpectedly hot components and thermal bottlenecks without specialised commercial equipment.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr7"&gt;Future Enhancements&lt;/h2&gt;
&lt;p&gt;One of the advantages of building a thermal camera rather than purchasing a finished product is that new capabilities can be added whenever the hardware allows.&lt;/p&gt;
&lt;p&gt;The most obvious next feature would be image capture.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The addition for actually capturing that picture and having it as an image file.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The display hardware already includes an SD card slot, opening up the possibility of storing thermal snapshots directly to removable media. However, implementing this feature requires careful consideration.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The only thing I&amp;#39;d worry about is in processing that it might make the whole camera image speed that it&amp;#39;s updating slower.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Another particularly interesting possibility would be combining visible-light imagery with thermal information, similar to the image-overlay functionality found on professional thermal cameras.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;To have an actual normal camera and be able to overlay the thermal imaging sensor data onto a real picture.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While technically achievable, this would likely demand considerably more processing power than is available within the current hardware configuration. The concept nevertheless demonstrates how extensible the design could become should a future revision migrate to a more powerful platform.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hshvfr8"&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;This project demonstrates just how accessible thermal imaging technology has become. By combining an MLX90640 infrared sensor, an Arduino UNO R4 Minima, a colour display and a carefully considered enclosure design, Katie has produced a capable handheld thermal camera that can be customised far beyond the capabilities of many entry-level commercial units.&lt;/p&gt;
&lt;p&gt;What began as an attempt to avoid a lengthy borrowing queue evolved into a fully featured thermal inspection tool with configurable temperature ranges, physical controls, a rugged enclosure and a clear upgrade path. Whether used for identifying household heat loss, examining electronic assemblies or simply exploring temperature differences in the world around it, it is an excellent example of turning readily available maker hardware into a genuinely useful instrument.&lt;/p&gt;
&lt;h3 id="mcetoc_1k0hshvfr9"&gt;Key Hardware Used&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Arduino UNO R4 Minima Development Board&lt;/li&gt;
&lt;li&gt;Seeed Studio MLX90640 Thermal Imaging Sensor (32 &amp;times; 24 IR array)&lt;/li&gt;
&lt;li&gt;DFRobot Fermion TFT Capacitive Touch Display&lt;/li&gt;
&lt;li&gt;Multicomp Pro Pushbutton Switches&lt;/li&gt;
&lt;li&gt;3D-printed PLA enclosure&lt;/li&gt;
&lt;li&gt;3 mm acrylic display protection window&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Interested in building your own version or adapting the design?&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hsii2ba"&gt;Supporting Links, ECAD and Code&lt;/h2&gt;
&lt;p&gt;-&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0hskartc"&gt;Parts Used and Buy Links&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-c6b5e" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4208543,3879659,4007883,,1634687~2,,4562980&amp;nsku=77AK2286,99AJ4472,74AK7829,,03P2471~2,,16AM8645&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('c6b5e'));" data-farnell="4208543,3879659,4007883,,1634687~2,,4562980" data-newark="77AK2286,99AJ4472,74AK7829,,03P2471~2,,16AM8645" 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;ABX00080 Development Board, UNO R4 Minima&lt;/td&gt;
&lt;td&gt;Arduino&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-0fa2d" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4208543&amp;nsku=77AK2286&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('0fa2d'));" data-farnell="4208543" data-newark="77AK2286" 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;DFROBOT Capacitive TouchScreen, Fermion, TFT LCD, Arduino Board&lt;/td&gt;
&lt;td&gt;DFROBOT&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-3cf39" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3879659&amp;nsku=99AJ4472&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('3cf39'));" data-farnell="3879659" data-newark="99AJ4472" 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;114020141 Thermal Imaging Camera/IR Array Board&lt;/td&gt;
&lt;td&gt;SEEED Studio&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-11690" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4007883&amp;nsku=74AK7829&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('11690'));" data-farnell="4007883" data-newark="74AK7829" 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;&amp;quot;R13-24A-05-BB&lt;/td&gt;
&lt;td&gt;undefined&lt;/td&gt;
&lt;td&gt;undefined&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-4e259" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=undefined&amp;nsku=undefined&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('4e259'));" data-farnell="undefined" data-newark="undefined" 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;Pushbutton Switch, R13-24, 7.2 mm, SPST-NO&amp;quot;&lt;/td&gt;
&lt;td&gt;Multicomp Pro&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-ef5fb" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1634687~2&amp;nsku=03P2471~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('ef5fb'));" data-farnell="1634687~2" data-newark="03P2471~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;&amp;quot;MP015138&lt;/td&gt;
&lt;td&gt;undefined&lt;/td&gt;
&lt;td&gt;undefined&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-e7827" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=undefined&amp;nsku=undefined&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('e7827'));" data-farnell="undefined" data-newark="undefined" 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;3D Printer Filament, 1.75mm, Milk White, PLA&amp;quot;&lt;/td&gt;
&lt;td&gt;Multicomp Pro&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-49b8b" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4562980&amp;nsku=16AM8645&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('49b8b'));" data-farnell="4562980" data-newark="16AM8645" 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;3mm Clear Acrylic sheet&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;h3 id="mcetoc_1k0hsj0p3b"&gt;&lt;/h3&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: friday_release&lt;/div&gt;
</description></item><item><title>Building a DIY PLC with PocketBeagle 2: Finding Out Why Industrial Controllers Cost So Much</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72104/building-a-diy-plc-with-pocketbeagle-2-finding-out-why-industrial-controllers-cost-so-much</link><pubDate>Thu, 20 Aug 2026 16:28:42 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:c606295d-a31f-4adb-b481-3b8ae8d4d706</guid><dc:creator>e14phil</dc:creator><description>Current Revision posted to Documents by e14phil on 8/20/2026 4:28:42 PM&lt;br /&gt;
&lt;div&gt;Can you really build your own industrial PLC, or are commercial controllers expensive for a reason? In this project, Clem sets out to answer that question by designing and building a PocketBeagle 2 based PLC from scratch, starting with a simple maker-friendly prototype before tackling the realities of industrial design, including electrical isolation, ESD protection, USB compliance, analogue signal integrity and realtime control. Along the way he explores the AM6254&amp;#39;s Linux and PRU architecture, wrestles with device tree overlays, exposes the board&amp;#39;s onboard 12-bit ADC, and finishes with a live colour-detection demo that combines analogue inputs, USB vision and network streaming. Most importantly, the project reveals where the real engineering effort in industrial hardware lives, and why a reliable PLC is far more than just a computer in a DIN rail enclosure&lt;/div&gt;
&lt;h2 id="mcetoc_1k0f7fqfq0"&gt;Watch Clem Pocket the Industrialisation&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://players.brightcove.net/1362235890001/default_default/index.html?videoId=6403719824112"&gt;players.brightcove.net/.../index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Clem has always had a healthy suspicion of expensive industrial hardware. Looking at the price of programmable logic controllers (PLCs), his initial reaction was much the same as many makers staring at a catalogue of industrial equipment: surely there cannot be that much inside a PLC to justify the cost.&lt;/p&gt;
&lt;p&gt;Rather than speculate, he decided to build one.&lt;/p&gt;
&lt;p&gt;The result is a PocketBeagle 2 based PLC project that starts out as a straightforward maker build and gradually evolves into something much closer to a genuine industrial controller. Along the way, it becomes a lesson in electrical isolation, PCB layout, device tree configuration, realtime processing and the countless small decisions that separate a prototype from a product.&lt;/p&gt;
&lt;p&gt;As Clem puts it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Sometimes they are actually just an Arduino in a fancy box and some relays... but there are also legacy systems with big brand names and high price tags and these are built for reliability.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;His goal was not to reproduce an industrial PLC exactly, but to understand where all that engineering effort goes.&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_000140.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat30"&gt;Starting with an Open PLC Platform&lt;/h2&gt;
&lt;p&gt;Commercial PLCs often come with proprietary software ecosystems, vendor lock-in and long-term support guarantees. Clem wanted to approach the problem from a different direction.&lt;/p&gt;
&lt;p&gt;Instead of using a dedicated PLC platform, he based his design around the &lt;a href="https://docs.beagleboard.org/boards/pocketbeagle-2/index.html" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;PocketBeagle 2&lt;/a&gt;, a compact Linux-capable development board built around Texas Instruments&amp;#39; AM6254 Sitara processor.&lt;/p&gt;
&lt;p&gt;What attracted him was the combination of high-level Linux functionality and low-level deterministic control.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I wanted it to have serious capabilities. It should have realtime Linux support and it also should have a deterministic way of controlling the inputs and outputs.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Unlike many maker boards, the PocketBeagle 2 includes two Programmable Realtime Units (PRUs), effectively dedicated microcontroller-class cores integrated into the processor.&lt;/p&gt;
&lt;p&gt;These can operate independently from Linux and are designed specifically for tasks that require predictable timing.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;We have the Linux controls around USB devices, high-level stuff like AI models and communication with networks and other devices, and then the PRUs can control all the inputs and outputs.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The AM6254 architecture immediately begins to resemble the split architecture found in many industrial systems. Linux handles networking, storage and complex applications while dedicated realtime processors handle machine control.&lt;/p&gt;
&lt;p&gt;Clem even points out that the second PRU could act as a watchdog, redundancy controller or cross-checking processor, similar to techniques found in safety-oriented industrial equipment.&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/5430.frame_5F00_000090.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat31"&gt;Version One: The Maker Approach&lt;/h2&gt;
&lt;p&gt;The first PLC design intentionally follows the path many hobbyists would take.&lt;/p&gt;
&lt;p&gt;A Hammond DIN rail enclosure serves as the mechanical foundation, while a relatively simple two-layer PCB carries the electronics. The board includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PocketBeagle 2 controller&lt;/li&gt;
&lt;li&gt;Microchip USB2514 USB 2.0 hub controller&lt;/li&gt;
&lt;li&gt;Four analogue input channels&lt;/li&gt;
&lt;li&gt;Four relay outputs&lt;/li&gt;
&lt;li&gt;ULN2003 Darlington relay driver&lt;/li&gt;
&lt;li&gt;Dual USB host ports&lt;/li&gt;
&lt;li&gt;DIN rail mounting format&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The PCB itself was designed quickly.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I eyeballed the position of all the connectors and I tried to put as many features in here as possible.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rather than spending days optimising every mechanical detail, the focus was on getting something functional into the enclosure as quickly as possible.&lt;/p&gt;
&lt;p&gt;One feature Clem was especially keen to exploit was the PocketBeagle 2&amp;#39;s integrated twelve-bit ADC. Unlike a typical Raspberry Pi, analogue inputs can be connected directly to the processor without requiring additional converter hardware.&lt;/p&gt;
&lt;p&gt;The analogue channels are exposed through simple screw terminals, providing an easy way to interact with sensors and control inputs. The USB subsystem was another area where the project deliberately pushed the platform. By integrating the USB2514 hub controller, the PLC gains multiple USB ports for cameras, storage devices and peripherals.&lt;/p&gt;
&lt;p&gt;On paper, it looked remarkably capable. Unfortunately, industrial design concerns do not appear on a schematic until something goes wrong.&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_000317.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat32"&gt;When &amp;quot;Works&amp;quot; Isn&amp;#39;t Good Enough&lt;/h2&gt;
&lt;p&gt;The first design functions. For many projects, that would be a success.&lt;/p&gt;
&lt;p&gt;For a PLC, however, functionality is only the starting point.&lt;/p&gt;
&lt;p&gt;Clem soon began identifying weaknesses that would become serious problems in an industrial environment.&lt;/p&gt;
&lt;p&gt;The first issue was electrical safety.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;There is no real isolation in the original design. In case something goes wrong there could potentially be 230 volts everywhere in the system.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The relay outputs are capable of switching mains-voltage loads, yet the control electronics existed dangerously close to circuitry carrying higher voltages.&lt;/p&gt;
&lt;p&gt;Industrial equipment depends heavily on segregation between control electronics and power electronics. Without that separation, failures can have consequences far beyond a damaged PCB.&lt;/p&gt;
&lt;p&gt;The USB implementation also lacked many of the protections expected in a commercial design.&lt;/p&gt;
&lt;p&gt;The original version provided only the minimum necessary circuitry to make the USB hub operate.&lt;/p&gt;
&lt;p&gt;There was:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No ESD protection&lt;/li&gt;
&lt;li&gt;No overcurrent protection&lt;/li&gt;
&lt;li&gt;No controlled fault response&lt;/li&gt;
&lt;li&gt;No dedicated USB power monitoring&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These omissions are common in maker projects because they are often invisible during normal operation. Industrial equipment, by contrast, must survive repeated abuse from the outside world.&lt;/p&gt;
&lt;p&gt;Analogue routing presented another problem.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve routed my analogue ports right next to the relays. That will not work very good because they will couple into it.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Relay switching generates electrical noise. Placing sensitive ADC signals next to relay circuits creates opportunities for incorrect readings, instability and potentially damage.&lt;/p&gt;
&lt;p&gt;These are exactly the sort of layout considerations that are easy to overlook when the first goal is simply getting a board manufactured.&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_000280.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat33"&gt;Building a More Professional Controller&lt;/h2&gt;
&lt;p&gt;The second board revision demonstrates how quickly extra engineering effort accumulates.&lt;/p&gt;
&lt;p&gt;Clem moved to a four-layer PCB, improved component selection, reworked the enclosure integration and fundamentally redesigned the relay section.&lt;/p&gt;
&lt;p&gt;More importantly, he stopped trying to maximise feature count and instead prioritised reliability.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I preferred having good layout instead of more features on there because that is what the professional world considers the most important bit. Safe and reliable operation.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The revised USB implementation became significantly more sophisticated.&lt;/p&gt;
&lt;p&gt;Dedicated current-limiting circuitry and fault detection were added to protect both connected peripherals and the PLC itself.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;These have current control chips specifically ordered and they have to detect if something goes wrong so your device that you plug into these USB ports can&amp;#39;t destroy the overall thing.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This redesign required additional board area, forcing the reduction from four easily accessible USB ports down to two.&lt;/p&gt;
&lt;p&gt;That trade-off between capability and robustness appears repeatedly throughout industrial 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/0045.frame_5F00_000303.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat34"&gt;Isolation the Right Way&lt;/h2&gt;
&lt;p&gt;The most dramatic change involved the relay outputs. The revised PCB treats the relay circuitry and logic circuitry almost as completely separate systems. A dedicated isolation boundary divides the board into two sections. The only intentional signal path crossing that boundary is an optocoupler.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;An optocoupler is a way of galvanic isolation meaning there is no actual direct connection between these two halves. It is just and only a connection by light.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The relay control signals pass through an optocoupler before driving the ULN2003 relay driver.&lt;/p&gt;
&lt;p&gt;This ensures that electrical disturbances from the relay side cannot directly propagate into the processor circuitry.&lt;/p&gt;
&lt;p&gt;Even power supplies were separated.&lt;/p&gt;
&lt;p&gt;Two isolated DIN rail power supplies were used: one dedicated to logic electronics and another for relay operation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;We&amp;#39;re truly isolated.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The resulting architecture begins to resemble industrial control hardware far more closely than the original all-in-one 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_000318.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat35"&gt;The Device Tree Learning Curve&lt;/h2&gt;
&lt;p&gt;One of the most educational aspects of the project came from the software side.&lt;/p&gt;
&lt;p&gt;Developers accustomed to Arduino or Raspberry Pi ecosystems often expect GPIO pins to work immediately.&lt;/p&gt;
&lt;p&gt;The PocketBeagle 2 takes a more embedded Linux approach.&lt;/p&gt;
&lt;p&gt;GPIO functionality must first be defined through device tree overlays.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The apparently simple job of making a GPIO output starts involving device trees, pin multiplexing and the details of the underlying SoC.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Because the AM6254 allows pins to serve multiple functions, Linux must be explicitly told how they are being used.&lt;/p&gt;
&lt;p&gt;Clem candidly describes the experience:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Device tree overlays are very intimidating and complicated and I don&amp;#39;t even halfway know what I actually did there.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Once configured correctly, however, the flexibility becomes apparent. Linux gains direct access to GPIO, ADC resources and other processor features while still allowing PRU-based realtime control.&lt;/p&gt;
&lt;p&gt;That flexibility is one of the PocketBeagle 2&amp;#39;s greatest strengths, but it comes with a significantly steeper learning curve than many maker platforms.&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/6825.frame_5F00_000395.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat36"&gt;Working with the Onboard ADC&lt;/h2&gt;
&lt;p&gt;The analogue subsystem proved much more straightforward.&lt;/p&gt;
&lt;p&gt;Clem exposed four ADC channels and demonstrated how Linux can read them directly through the Industrial I/O framework.&lt;/p&gt;
&lt;p&gt;The Python implementation is refreshingly simple.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ADC_PATH = &amp;quot;/sys/bus/iio/devices/iio:device0&amp;quot;
VREF = 1.8
ADC_MAX = 4095

return (raw / ADC_MAX) * VREF
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Raw readings are collected from Linux system files and converted into voltages using the 12-bit ADC range. The implementation continuously reads all four channels and reports both raw counts and calculated voltages.&lt;/p&gt;
&lt;p&gt;This direct ADC access became a key part of the final demonstration.&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_000448.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat37"&gt;A Useful Failure&lt;/h2&gt;
&lt;p&gt;Unfortunately, not everything worked perfectly.&lt;/p&gt;
&lt;p&gt;One of the relay isolation circuits exposed a design mistake.&lt;/p&gt;
&lt;p&gt;The optocouplers were treated like standard logic devices rather than LED-driven isolation components.&lt;/p&gt;
&lt;p&gt;Current-limiting resistors had been omitted.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;With a 3.3 volt logic level I should have used a 330 ohm resistor.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The result was that the optocoupler LEDs never switched fully off once activated.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Once the LED activates for the first time it sits there drawing current at about two volts and never deactivates again.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The relays therefore refused to operate correctly during the final demonstration.&lt;/p&gt;
&lt;p&gt;Rather than hide the mistake, Clem used it to illustrate a reality of professional hardware development: unfamiliar parts frequently behave differently from assumptions made during schematic capture.&lt;/p&gt;
&lt;p&gt;Testing, redesign and verification are fundamental parts of the engineering process.&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_000558.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat38"&gt;Live Colour Detection Demo&lt;/h2&gt;
&lt;p&gt;For the final demonstration, the PLC uses its analogue inputs, USB subsystem, Linux environment and networking stack simultaneously.&lt;/p&gt;
&lt;p&gt;A USB webcam streams video into OpenCV while two analogue channels control detection parameters.&lt;/p&gt;
&lt;p&gt;One analogue input selects the target hue while another sets the intensity threshold.&lt;/p&gt;
&lt;p&gt;The software converts ADC values into colour detection parameters in realtime.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;application_hue = int(
    (raw / ADC_MAX) * 255
)

opencv_hue = int(
    (application_hue / 255) * 179
)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A value of 150 corresponds approximately to blue, allowing trim potentiometers wired to the PLC to tune colour detection while the system is operating.&lt;/p&gt;
&lt;p&gt;The software analyses webcam imagery, performs HSV filtering, calculates contour sizes and overlays detection results on the live image.&lt;/p&gt;
&lt;p&gt;Results are then streamed over the network using a built-in web server.&lt;/p&gt;
&lt;p&gt;During testing, Clem adjusted the analogue inputs live while watching colour detection track the blue colour of his shirt.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;We can set the hue and the saturation with these analogue potentiometers on the fly and observe the stream over the network.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The demonstration neatly combines nearly every subsystem available on the PLC.&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_000551.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat39"&gt;So Why Are PLCs So Expensive?&lt;/h2&gt;
&lt;p&gt;By the end of the project, Clem&amp;#39;s original question had evolved considerably. The first board genuinely supports the argument that many PLCs appear to be little more than a processor, some I/O and a box.&lt;/p&gt;
&lt;p&gt;The second board reveals the hidden engineering. Isolation barriers. ESD protection. Current limiting. Optocouplers. Power integrity. Analogue layout. Device tree configuration. Mechanical integration. Realtime processing. Redundancy. Testing. Verification.&lt;/p&gt;
&lt;p&gt;None of these individually seem particularly dramatic. Together they account for a substantial amount of engineering effort.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Now that we know how incredibly difficult it is to make a real PLC, a system that has redundancy, safety, watchdogs and all these constructive features to make the relays safe and all the connections and inputs reliable, I think we can appreciate that sometimes they just have to cost more.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That does not mean every industrial PLC automatically represents good value. It does demonstrate that the real complexity often lies in the details that nobody notices until they are missing. Clem set out to build a PLC to understand where the money goes. What he discovered is that making something look like a PLC is relatively easy.&lt;/p&gt;
&lt;p&gt;Building something that begins to behave like a professional industrial controller is a completely different challenge.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0f7hcdb8"&gt;Supporting Files and Links&lt;/h2&gt;
&lt;p&gt;- &lt;a href="https://docs.beagleboard.org/boards/pocketbeagle-2/index.html" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;PocketBeagle 2 Documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href="https://github.com/mayermakes/pocketbeagle2-dtso" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;Device Tree Tutorial by Grippy98&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/m/files/151635"&gt;Episode 728 Resources - Building a DIY PLC with PocketBeagle 2: Finding Out Why Industrial Controllers Cost So Much&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0f7gf5s4"&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-1c014" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1683370,2112372~2,3767921~9,3518261,2847240~2,4825131,3498606,2628016,2325631~4,2815640,4668770,2292604,4162736,2292873,1825866~4&amp;nsku=05R6483,14N8153~2,47AK4343~9,82AH2552,51AC3055~2,59AM5501,78AH1768,97Y9704,96W3092~4,44AC5205,25AM9241,66W2137,83AK6230,19C7295,79R6955~4&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('1c014'));" data-farnell="1683370,2112372~2,3767921~9,3518261,2847240~2,4825131,3498606,2628016,2325631~4,2815640,4668770,2292604,4162736,2292873,1825866~4" data-newark="05R6483,14N8153~2,47AK4343~9,82AH2552,51AC3055~2,59AM5501,78AH1768,97Y9704,96W3092~4,44AC5205,25AM9241,66W2137,83AK6230,19C7295,79R6955~4" data-comoverride="" data-cmpoverride="" data-cpc=",undefined~2,undefined~9,,undefined~2,,,,undefined~4,,,,,,undefined~4" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Optocoupler, Darlington Output, 4 Channel, DIP, 16 Pins, 50 mA, 5.3 kV, 500 %&lt;/td&gt;
&lt;td&gt;ISOCOM&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-f9e4e" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1683370&amp;nsku=05R6483&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('f9e4e'));" data-farnell="1683370" data-newark="05R6483" 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;USB Connector, USB Type A, USB 2.0, Receptacle, 4 Ways, Through Hole Mount, Vertical&lt;/td&gt;
&lt;td&gt;multicomp&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-29987" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2112372~2&amp;nsku=14N8153~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('29987'));" data-farnell="2112372~2" data-newark="14N8153~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;Wire-To-Board Terminal Block, 5.08 mm, 3 Ways, 30 AWG, 12 AWG, 3.31 mm&amp;sup2;, Screw&lt;/td&gt;
&lt;td&gt;w&amp;uuml;rth&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-dcf43" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3767921~9&amp;nsku=47AK4343~9&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('dcf43'));" data-farnell="3767921~9" data-newark="47AK4343~9" data-comoverride="" data-cmpoverride="" data-cpc="undefined~9" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plastic Enclosure, DIN Rail, Polycarbonate, 90 mm, 105 mm, 58 mm, IP20&lt;/td&gt;
&lt;td&gt;Hammond&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-5ba97" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3518261&amp;nsku=82AH2552&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('5ba97'));" data-farnell="3518261" data-newark="82AH2552" 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;Pin Header, Board-to-Board, 2.54 mm, 2 Rows, 40 Contacts, Surface Mount&lt;/td&gt;
&lt;td&gt;Multicomp pro&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-4116a" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2847240~2&amp;nsku=51AC3055~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('4116a'));" data-farnell="2847240~2" data-newark="51AC3055~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;Development Kit, PocketBeagle 2, AM6254, ARM Cortex-A53 / Cortex-M4F&lt;/td&gt;
&lt;td&gt;beagleboard&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-9f36a" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4825131&amp;nsku=59AM5501&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('9f36a'));" data-farnell="4825131" data-newark="59AM5501" 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;Flash Memory Card, MicroSDHC Card, 16 GB, Class 10, UHS-I U1, A1&lt;/td&gt;
&lt;td&gt;integral&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-32254" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3498606&amp;nsku=78AH1768&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('32254'));" data-farnell="3498606" data-newark="78AH1768" 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;DARLINGTON TRANSISTOR ARRAY, SOIC-16&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-678ea" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2628016&amp;nsku=97Y9704&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('678ea'));" data-farnell="2628016" data-newark="97Y9704" 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;General Purpose Relay, ORWH Series, Power, Non Latching, SPDT, 5 VDC, 10 A&lt;/td&gt;
&lt;td&gt;TE&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-28b52" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2325631~4&amp;nsku=96W3092~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('28b52'));" data-farnell="2325631~4" data-newark="96W3092~4" data-comoverride="" data-cmpoverride="" data-cpc="undefined~4" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AC/DC DIN Rail Power Supply (PSU), ITE, 1 Output, 15 W, 5 VDC, 3 A&lt;/td&gt;
&lt;td&gt;meanwell&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-0b7b3" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2815640&amp;nsku=44AC5205&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('0b7b3'));" data-farnell="2815640" data-newark="44AC5205" 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;AC/DC DIN Rail Power Supply (PSU), ITE, Industrial &amp;amp; Household, 1 Output, 15 W, 5 VDC, 3 A&lt;/td&gt;
&lt;td&gt;multicomp pro&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-96853" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4668770&amp;nsku=25AM9241&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('96853'));" data-farnell="4668770" data-newark="25AM9241" 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;USB Interface, USB Hub Controller, USB 2.0, 3 V, 3.6 V, QFN, 36 Pins&lt;/td&gt;
&lt;td&gt;microchip&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-a6bae" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2292604&amp;nsku=66W2137&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('a6bae'));" data-farnell="2292604" data-newark="66W2137" 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;ETHERNET ADAPTER, USB3.0 GIGABIT WHI&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-ace8f" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4162736&amp;nsku=83AK6230&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('ace8f'));" data-farnell="4162736" data-newark="83AK6230" 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;DIN Mounting Rail, DIN Mounting Rail, Racks &amp;amp; Cabinets, 1 m, 7.5 mm, 35 mm, Steel&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-9056d" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2292873&amp;nsku=19C7295&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('9056d'));" data-farnell="2292873" data-newark="19C7295" 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;TVS Diode, WE-TVS, Unidirectional, 5 V, 6.8 V, SOT-23, 6 Pins&lt;/td&gt;
&lt;td&gt;w&amp;uuml;rth&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-21c2a" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1825866~4&amp;nsku=79R6955~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('21c2a'));" data-farnell="1825866~4" data-newark="79R6955~4" data-comoverride="" data-cmpoverride="" data-cpc="undefined~4" 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;span&gt;MIC2025&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Microchip&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-02384" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="javascript:void(0)" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('02384'));" data-farnell="2509894" data-newark="" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;MIC2025 &lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0f7gf5s5"&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;Crystal and caps for the usb2514&amp;rarr; 24MHz&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;usb current control ICs + mosfets&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_1k0f7gf5s6"&gt;&lt;/h3&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: plc, kicad pcb design, pocketbeagle 2, embedded linux, am6254, e14presents_mayermakes, analogue inputs, optocoupler, USB2514, industrial automation, diy plc, industrial control systems, programmable logic controller, ti sitara, friday_release, galvanic isolation, realtime linux&lt;/div&gt;
</description></item><item><title>Trinamic Open Source Ventilator (TOSV) Teardown: An Open Hardware Approach to Medical Ventilation -- Episode 460</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/4985/trinamic-open-source-ventilator-tosv-teardown-an-open-hardware-approach-to-medical-ventilation----episode-460</link><pubDate>Thu, 20 Aug 2026 16:13:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:24bfa529-539e-471e-a1cc-fdb11b3d93ea</guid><dc:creator>cstanton</dc:creator><description>Current Revision posted to Documents by cstanton on 8/20/2026 4:13:00 PM&lt;br /&gt;
&lt;p&gt;Rather than presenting a typical maker build, Clem&amp;#39;s examination of the Trinamic Open Source Ventilator (TOSV) focuses on a project created during a period when hospitals worldwide were facing unprecedented demand for respiratory support equipment. The TOSV initiative was conceived as a fully open-source reference design that could be manufactured locally and developed collaboratively, while still pursuing the level of engineering discipline expected of medical equipment. The project combines a Raspberry Pi 4, Trinamic motion-control technology, precision pressure sensing, and an openly available hardware and software stack.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0fuo7k00"&gt;Breathe Deep and Dive In&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;&lt;a href="https://www.youtube.com/watch?v=VC3_LLReH_Y"&gt;www.youtube.com/watch&lt;/a&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0fuo7k01"&gt;Why an Open-Source Ventilator?&lt;/h2&gt;
&lt;p&gt;From the outset, Clem is careful to distinguish this project from the many emergency breathing-assistance concepts that appeared during the COVID-19 pandemic. He highlights a concern that runs throughout the entire teardown: a ventilator is not merely a motor pushing air through a tube.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Ventilation is a very complicated topic. It&amp;#39;s not trivial at all.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He explains that many people associate artificial respiration with emergency first aid, but a ventilator intended for patients suffering from lung damage operates on an entirely different level. Pressure, airflow, oxygen mixing, timing, lung response, and patient safety must all be carefully managed.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;If you ventilate or respire a patient that has damaged lungs even in the slightest wrong way, you will possibly kill him or her or at least damage the lungs further.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This perspective informs every design decision within the TOSV project. Rather than producing a quickly assembled emergency device, Trinamic&amp;#39;s goal was to create an open-source platform capable of moving towards medical certification while remaining accessible to manufacturers around the world.&amp;nbsp;&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/chunk000_5F00_000048.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0fuo7k02"&gt;Motion Control Meets Medical Engineering&lt;/h2&gt;
&lt;p&gt;Trinamic built its reputation around precision motor control, particularly through the TMC family of motion-control devices widely used in industrial equipment and 3D printers. Clem points out that a ventilator is fundamentally a motion-control problem: a motor must react continuously to changing sensor inputs while maintaining strict operating limits.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;They are specialists in motion control and motion control is what these ventilators are doing.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rather than driving a motor at a constant speed, the system processes live pressure data and dynamically adjusts airflow. Incoming air pressure, oxygen injection, patient breathing characteristics, and exhaust pressure are continually monitored.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The device reacts dynamically to all these sensory data.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;According to Trinamic&amp;#39;s published material, the design uses the TMC4671-LA servo controller together with the TMC6100 gate driver to control the blower assembly, forming the heart of the ventilator&amp;#39;s closed-loop control system.&amp;nbsp;&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/chunk002_5F00_000007.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0fuo7k03"&gt;Hardware Architecture&lt;/h2&gt;
&lt;p&gt;The teardown reveals a design that balances accessibility with functionality. The main enclosure consists of 3D-printed components combined with laser-cut acrylic panels, allowing the internals to remain visible during development and demonstration.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The main body is 3D printed and it has acrylic laser cut panels so you can see the inside.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;At the centre of the system sits a Raspberry Pi 4, responsible for user interaction and higher-level control. Attached to the Pi is a 7-inch Raspberry Pi touchscreen alongside Trinamic&amp;#39;s custom controller board.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The main brains of the project is a Raspberry Pi 4.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mounted above the motion-control hardware is a pressure-sensing subsystem which, at the time of filming, still relied on hand-assembled sensor hardware. Trinamic was already preparing production-ready versions of the sensor board so manufacturers could reproduce the complete design using the released design files.&lt;/p&gt;
&lt;p&gt;The project&amp;#39;s openness extends beyond the firmware. Mechanical CAD, PCB layouts, software, and supporting documentation are all intended to be freely available for local manufacture and adaptation.&amp;nbsp;&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/chunk003_5F00_000034.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0fuo7k04"&gt;Precision Sensors Over Improvisation&lt;/h2&gt;
&lt;p&gt;One of the most important observations in the teardown concerns the pressure sensors. Rather than relying on improvised sensing arrangements, the system uses medical-grade, high-accuracy sensors that represent a substantial proportion of the overall cost.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;These are the most expensive items in the BOM.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;They are high precision and they are suitable for these medical applications.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Clem repeatedly stresses that the project avoids estimated behaviour and unverified assumptions. Pressure targets, volume targets, and safety parameters can all be measured and controlled directly by qualified operators.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;There is no guesswork involved. It&amp;#39;s science and doctors can at any time control the whole process.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This commitment to measured feedback is reflected throughout the firmware architecture. Configuration structures include dedicated parameters for pressure regulation, volume regulation, PEEP management, inhalation and exhalation timing, and multiple PID control loops. For example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;uint16_t pidPressure_P_param;
uint16_t pidPressure_I_param;

uint16_t pidVolume_P_param;
uint16_t pidVolume_I_param;

uint32_t pPEEP;
uint32_t volumeMax;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The firmware also exposes functions dedicated to pressure management:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;bool bldc_setTargetPressure(uint8_t motor, int32_t pressure);
int32 bldc_getActualPressure(uint8_t motor);
int32_t bldc_getPressureErrorSum(uint8_t motor);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;These interfaces illustrate that pressure regulation was treated as a primary control objective rather than a secondary measurement, aligning closely with Clem&amp;#39;s emphasis on accuracy and repeatable operation.&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_000103.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0fuo7k05"&gt;A Proper Ventilator, Not a Bag-Squeezer&lt;/h2&gt;
&lt;p&gt;During the teardown, Clem contrasts the TOSV with a common category of pandemic-era projects built around mechanically compressing manual resuscitation bags. While useful for emergency concepts, those approaches face significant limitations when precise respiratory control is required.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;s not just any blower fan or these bags that you see often in ventilation projects where you just squeeze the bags.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Instead, the TOSV employs a blower-based system similar in concept to respiratory devices used in clinical and assisted-breathing applications. The fan is controlled through closed-loop motor control, allowing pressure and airflow characteristics to be adjusted continuously rather than mechanically approximated.&lt;/p&gt;
&lt;p&gt;The wider open-hardware ecosystem surrounding the project also produced alternative mechanical implementations, including turbine-based enclosure concepts developed by the community around the TOSV electronics platform.&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_000131.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0fuo7k06"&gt;Intelligent Patient Interaction and&amp;nbsp;User Interface and Safety Systems&lt;/h2&gt;
&lt;p&gt;One of the most revealing sections of the teardown occurs when Clem briefly experiences the machine himself. Rather than forcing airflow at a fixed rate, he notices how the device responds to breathing effort and gradually influences the user&amp;#39;s respiratory rhythm.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It doesn&amp;#39;t force the air into my lungs.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;s a very intelligent device that dynamically adapts to the person that is breathing with it.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This observation highlights a design aspect that is easy to miss when looking only at schematics: the ventilator is intended to cooperate with the patient rather than simply overpower the respiratory system. Achieving that behaviour requires the interplay of sensors, control algorithms, motor regulation, and carefully tuned operating parameters.&lt;/p&gt;
&lt;p&gt;The touchscreen interface provides immediate access to operating data as well as clinician configuration settings. Clem notes that the software presents critical information clearly while also incorporating safeguards against accidental misuse.&lt;/p&gt;
&lt;p&gt;A particularly interesting example is the shutdown procedure. Stopping the machine requires intentionally pressing and holding the command rather than tapping a button accidentally.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I have to tap on there and leave it there for a set amount of time before I can switch it off so you don&amp;#39;t switch off a patient by accident.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Alarm handling and calibration reminders are also built into the design.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The unit also complains about any anomalies and alarms the user.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It also complains that it hasn&amp;#39;t been calibrated for a set period of time.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The system additionally supports Ethernet connectivity, enabling remote monitoring capabilities and allowing clinical staff to review device status without being directly beside the machine.&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/8738.frame_5F00_000280.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0fuo7k08"&gt;Availability Over Exclusivity and&amp;nbsp;Future Development Considerations&lt;/h2&gt;
&lt;p&gt;The primary objective of the project was never to outperform commercial ventilators. Clem repeatedly returns to a simpler goal: availability.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The point with this device is not to be better than a currently available ventilator.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Instead, the design provides a path for manufacturers to build proven hardware locally when supply chains become constrained. As shown during the teardown, Trinamic released the CAD files, PCB files, firmware, software, and supporting documentation specifically to encourage broader adoption.&lt;/p&gt;
&lt;p&gt;At the time the unit was examined, certification had not yet been completed, although development had been informed through consultation with doctors and respiratory specialists.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Trinamic was in contact with a lot of doctors and specialists, especially for lung treatment.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Several future directions emerge from the discussion. Production-ready pressure sensor boards were still being finalised, alternative pressure sensors could potentially be supported to improve availability, and certification efforts would ultimately need to be pursued on a country-by-country basis.&lt;/p&gt;
&lt;p&gt;Clem also identifies a broader ambition extending beyond ventilators alone:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;One day we should have an open source alternative for every crucial medical device.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rather than viewing TOSV as a finished endpoint, he presents it as part of a larger movement towards openly documented, locally manufacturable medical technology that can be mobilised rapidly during future emergencies.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;When this project first went live, it was the early years of what became a several year pandemic the likes of the generation had never seen.&amp;nbsp;Trinamic released this hardware and its files in the hope that it supported those that needed it, and over time, the resources available to reproduce this were pulled.&lt;/p&gt;
&lt;p&gt;The element14 Community has retrieved the files and repositories to allow you to be able to rebuild this project should you need to explore, experiment and invent. Understanding that this project does not hold as a validated, certified medical device.&lt;/p&gt;
&lt;p&gt;But open source should be open, right?&lt;/p&gt;
&lt;h2 id="mcetoc_1k0fuo7k0b"&gt;&lt;span style="color:#3334ca;"&gt;Supporting Files and Links:&lt;/span&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="color:#3334ca;"&gt;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/m/files/151636"&gt;Episode 460 Resource Files - Trinamic Open Source Ventilator (TOSV) Teardown&lt;/a&gt;&amp;nbsp;&amp;nbsp;- Contains files for the Reference Design Board and archive of github repositories&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/w/documents/4995/bonus-content-trinamic-open-source-ventilator-tosv" data-e14adj="t"&gt;Bonus Content: Trinamic Open Source Ventilator (TOSV)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/w/documents/4996/bonus-content-trinamic-open-source-ventilator-project" data-e14adj="t"&gt;Bonus Content: Trinamic Open Source Ventilator Project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="jive-link-external-small" href="https://www.trinamic.com/solutions/medical/tosv/" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;Trinamic Open Source Ventilator&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;table class="jiveBorder" style="border:1px solid #c6c6c6;height:126px;width:984px;" border="1" height="135"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="background-color:#f2f2f2;border:1px solid #c6c6c6;color:#505050;padding:6px;text-align:left;" valign="middle"&gt;&lt;strong&gt;Product Name&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#f2f2f2;border:1px solid #c6c6c6;color:#505050;padding:6px;text-align:left;" valign="middle"&gt;&lt;span style="color:#505050;"&gt;&lt;strong&gt;Manufacturer&lt;/strong&gt;&lt;/span&gt;&lt;/th&gt;
&lt;th style="background-color:#f2f2f2;border:1px solid #c6c6c6;color:#505050;padding:6px;text-align:left;" valign="middle"&gt;&lt;span style="color:#505050;"&gt;&lt;strong&gt;Quantity&lt;/strong&gt;&lt;/span&gt;&lt;/th&gt;
&lt;th style="background-color:#f2f2f2;border:1px solid #c6c6c6;color:#505050;padding:6px;text-align:left;" valign="middle"&gt;&lt;strong&gt;Buy Now&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Reference Design Board, TMC4671/TMC6100, Ventilators / Respirator System&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Trinamic&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;1&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;RASPBERRY PI 4 MODEL B, CORTEX-A72, 8GB&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Raspberry Pi&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;1&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-01027" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=3369503&amp;nsku=64AH2041&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-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('01027'));" data-farnell="3369503" data-newark="64AH2041" data-comoverride="" data-cmpoverride="" data-cpc="SC15613" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Daughter Board, Raspberry Pi 7&amp;quot; Touch Screen Display, 10 Finger Capacitive Touch&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Raspberry Pi&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;1&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;MOTOR DRIVER, -40 TO 125DEG C (TMC4671-LA)&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Trinamic&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;1&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-0b9cd" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=3438306&amp;nsku=71AH5974&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-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('0b9cd'));" data-farnell="3438306" data-newark="71AH5974" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;MOTOR DRIVER, -40 TO 125DEG C (TMC6100-LA)&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Trinamic&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;1&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-c3fa7" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=3358370&amp;nsku=54AH1603&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-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('c3fa7'));" data-farnell="3358370" data-newark="54AH1603" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;PRESSURE SENSOR ADD-ON BOARD&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Trianmic&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;1&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-8d395" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=3566065&amp;nsku=88AH1530&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-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('8d395'));" data-farnell="3566065" data-newark="88AH1530" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style="background:#ffffff;border: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-e14adj="t"&gt;&lt;img loading="lazy" alt="element14 presents" 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;Trinamic Open Source Ventilator (TOSV) Teardown&lt;/span&gt;
&lt;p style="margin:0;"&gt;&lt;span&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/challengesprojects/element14-presents/" data-e14adj="t"&gt;element14 Presents&lt;/a&gt;&lt;/span&gt;&amp;nbsp; &lt;strong&gt;|&lt;/strong&gt;&amp;nbsp; &lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/vcp-program/w/documents/3692/vcp-biography-clem" data-e14adj="t"&gt;About Clem&lt;/a&gt;&amp;nbsp; &lt;strong&gt;|&lt;/strong&gt;&amp;nbsp; &lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/challengesprojects/element14-presents/project-videos/" data-e14adj="t"&gt;Project Videos&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: medical equipment, open-source, open-source software, respirator, healthcare, pressure sensor, clem, engineer, raspi, trinamic motion control, beatmungsgerät, trinamic, motor control, medical ventilator, e14presents_mayermakes, tmc4671, open source ventilator, beademing, raspberry pi 4, raspberry pi, covid-19, motion control, Raspberry Pi Touchscreen, engineering, tmc6100, medical, beatmung, diy ventilator, diy medical ventilator, motor driver, medical engineering, coronavirus, covid19, friday_release, sensor, Open-source Hardware, mayermakes, e14p_CMM&lt;/div&gt;
</description></item><item><title>Trinamic Open Source Ventilator (TOSV) Teardown: An Open Hardware Approach to Medical Ventilation -- Episode 460</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/4985/trinamic-open-source-ventilator-tosv-teardown-an-open-hardware-approach-to-medical-ventilation----episode-460/revision/8</link><pubDate>Thu, 20 Aug 2026 16:05:37 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:24bfa529-539e-471e-a1cc-fdb11b3d93ea</guid><dc:creator>cstanton</dc:creator><description>Revision 8 posted to Documents by cstanton on 8/20/2026 4:05:37 PM&lt;br /&gt;
&lt;p&gt;Rather than presenting a typical maker build, Clem&amp;#39;s examination of the Trinamic Open Source Ventilator (TOSV) focuses on a project created during a period when hospitals worldwide were facing unprecedented demand for respiratory support equipment. The TOSV initiative was conceived as a fully open-source reference design that could be manufactured locally and developed collaboratively, while still pursuing the level of engineering discipline expected of medical equipment. The project combines a Raspberry Pi 4, Trinamic motion-control technology, precision pressure sensing, and an openly available hardware and software stack.&lt;/p&gt;
&lt;h2&gt;Breathe Deep and Dive In&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;&lt;a href="https://www.youtube.com/watch?v=VC3_LLReH_Y"&gt;www.youtube.com/watch&lt;/a&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Why an Open-Source Ventilator?&lt;/h2&gt;
&lt;p&gt;From the outset, Clem is careful to distinguish this project from the many emergency breathing-assistance concepts that appeared during the COVID-19 pandemic. He highlights a concern that runs throughout the entire teardown: a ventilator is not merely a motor pushing air through a tube.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Ventilation is a very complicated topic. It&amp;#39;s not trivial at all.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He explains that many people associate artificial respiration with emergency first aid, but a ventilator intended for patients suffering from lung damage operates on an entirely different level. Pressure, airflow, oxygen mixing, timing, lung response, and patient safety must all be carefully managed.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;If you ventilate or respire a patient that has damaged lungs even in the slightest wrong way, you will possibly kill him or her or at least damage the lungs further.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This perspective informs every design decision within the TOSV project. Rather than producing a quickly assembled emergency device, Trinamic&amp;#39;s goal was to create an open-source platform capable of moving towards medical certification while remaining accessible to manufacturers around the world.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Motion Control Meets Medical Engineering&lt;/h2&gt;
&lt;p&gt;Trinamic built its reputation around precision motor control, particularly through the TMC family of motion-control devices widely used in industrial equipment and 3D printers. Clem points out that a ventilator is fundamentally a motion-control problem: a motor must react continuously to changing sensor inputs while maintaining strict operating limits.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;They are specialists in motion control and motion control is what these ventilators are doing.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rather than driving a motor at a constant speed, the system processes live pressure data and dynamically adjusts airflow. Incoming air pressure, oxygen injection, patient breathing characteristics, and exhaust pressure are continually monitored.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The device reacts dynamically to all these sensory data.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;According to Trinamic&amp;#39;s published material, the design uses the TMC4671-LA servo controller together with the TMC6100 gate driver to control the blower assembly, forming the heart of the ventilator&amp;#39;s closed-loop control system.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Hardware Architecture&lt;/h2&gt;
&lt;p&gt;The teardown reveals a design that balances accessibility with functionality. The main enclosure consists of 3D-printed components combined with laser-cut acrylic panels, allowing the internals to remain visible during development and demonstration.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The main body is 3D printed and it has acrylic laser cut panels so you can see the inside.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;At the centre of the system sits a Raspberry Pi 4, responsible for user interaction and higher-level control. Attached to the Pi is a 7-inch Raspberry Pi touchscreen alongside Trinamic&amp;#39;s custom controller board.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The main brains of the project is a Raspberry Pi 4.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mounted above the motion-control hardware is a pressure-sensing subsystem which, at the time of filming, still relied on hand-assembled sensor hardware. Trinamic was already preparing production-ready versions of the sensor board so manufacturers could reproduce the complete design using the released design files.&lt;/p&gt;
&lt;p&gt;The project&amp;#39;s openness extends beyond the firmware. Mechanical CAD, PCB layouts, software, and supporting documentation are all intended to be freely available for local manufacture and adaptation.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Precision Sensors Over Improvisation&lt;/h2&gt;
&lt;p&gt;One of the most important observations in the teardown concerns the pressure sensors. Rather than relying on improvised sensing arrangements, the system uses medical-grade, high-accuracy sensors that represent a substantial proportion of the overall cost.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;These are the most expensive items in the BOM.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;They are high precision and they are suitable for these medical applications.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Clem repeatedly stresses that the project avoids estimated behaviour and unverified assumptions. Pressure targets, volume targets, and safety parameters can all be measured and controlled directly by qualified operators.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;There is no guesswork involved. It&amp;#39;s science and doctors can at any time control the whole process.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This commitment to measured feedback is reflected throughout the firmware architecture. Configuration structures include dedicated parameters for pressure regulation, volume regulation, PEEP management, inhalation and exhalation timing, and multiple PID control loops. For example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;uint16_t pidPressure_P_param;
uint16_t pidPressure_I_param;

uint16_t pidVolume_P_param;
uint16_t pidVolume_I_param;

uint32_t pPEEP;
uint32_t volumeMax;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The firmware also exposes functions dedicated to pressure management:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;bool bldc_setTargetPressure(uint8_t motor, int32_t pressure);
int32 bldc_getActualPressure(uint8_t motor);
int32_t bldc_getPressureErrorSum(uint8_t motor);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;These interfaces illustrate that pressure regulation was treated as a primary control objective rather than a secondary measurement, aligning closely with Clem&amp;#39;s emphasis on accuracy and repeatable operation.&lt;/p&gt;
&lt;h2&gt;A Proper Ventilator, Not a Bag-Squeezer&lt;/h2&gt;
&lt;p&gt;During the teardown, Clem contrasts the TOSV with a common category of pandemic-era projects built around mechanically compressing manual resuscitation bags. While useful for emergency concepts, those approaches face significant limitations when precise respiratory control is required.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;s not just any blower fan or these bags that you see often in ventilation projects where you just squeeze the bags.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Instead, the TOSV employs a blower-based system similar in concept to respiratory devices used in clinical and assisted-breathing applications. The fan is controlled through closed-loop motor control, allowing pressure and airflow characteristics to be adjusted continuously rather than mechanically approximated.&lt;/p&gt;
&lt;p&gt;The wider open-hardware ecosystem surrounding the project also produced alternative mechanical implementations, including turbine-based enclosure concepts developed by the community around the TOSV electronics platform.&lt;/p&gt;
&lt;h2&gt;Intelligent Patient Interaction&lt;/h2&gt;
&lt;p&gt;One of the most revealing sections of the teardown occurs when Clem briefly experiences the machine himself. Rather than forcing airflow at a fixed rate, he notices how the device responds to breathing effort and gradually influences the user&amp;#39;s respiratory rhythm.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It doesn&amp;#39;t force the air into my lungs.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;s a very intelligent device that dynamically adapts to the person that is breathing with it.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This observation highlights a design aspect that is easy to miss when looking only at schematics: the ventilator is intended to cooperate with the patient rather than simply overpower the respiratory system. Achieving that behaviour requires the interplay of sensors, control algorithms, motor regulation, and carefully tuned operating parameters.&lt;/p&gt;
&lt;h2&gt;User Interface and Safety Systems&lt;/h2&gt;
&lt;p&gt;The touchscreen interface provides immediate access to operating data as well as clinician configuration settings. Clem notes that the software presents critical information clearly while also incorporating safeguards against accidental misuse.&lt;/p&gt;
&lt;p&gt;A particularly interesting example is the shutdown procedure. Stopping the machine requires intentionally pressing and holding the command rather than tapping a button accidentally.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I have to tap on there and leave it there for a set amount of time before I can switch it off so you don&amp;#39;t switch off a patient by accident.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Alarm handling and calibration reminders are also built into the design.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The unit also complains about any anomalies and alarms the user.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It also complains that it hasn&amp;#39;t been calibrated for a set period of time.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The system additionally supports Ethernet connectivity, enabling remote monitoring capabilities and allowing clinical staff to review device status without being directly beside the machine.&lt;/p&gt;
&lt;h2&gt;Availability Over Exclusivity&lt;/h2&gt;
&lt;p&gt;The primary objective of the project was never to outperform commercial ventilators. Clem repeatedly returns to a simpler goal: availability.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The point with this device is not to be better than a currently available ventilator.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Instead, the design provides a path for manufacturers to build proven hardware locally when supply chains become constrained. As shown during the teardown, Trinamic released the CAD files, PCB files, firmware, software, and supporting documentation specifically to encourage broader adoption.&lt;/p&gt;
&lt;p&gt;At the time the unit was examined, certification had not yet been completed, although development had been informed through consultation with doctors and respiratory specialists.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Trinamic was in contact with a lot of doctors and specialists, especially for lung treatment.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Future Development Considerations&lt;/h2&gt;
&lt;p&gt;Several future directions emerge from the discussion. Production-ready pressure sensor boards were still being finalised, alternative pressure sensors could potentially be supported to improve availability, and certification efforts would ultimately need to be pursued on a country-by-country basis.&lt;/p&gt;
&lt;p&gt;Clem also identifies a broader ambition extending beyond ventilators alone:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;One day we should have an open source alternative for every crucial medical device.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rather than viewing TOSV as a finished endpoint, he presents it as part of a larger movement towards openly documented, locally manufacturable medical technology that can be mobilised rapidly during future emergencies.&lt;/p&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;When this project first went live, it was the early years of what became a several year pandemic the likes of the generation had never seen.&amp;nbsp;Trinamic released this hardware and its files in the hope that it supported those that needed it, and over time, the resources available to reproduce this were pulled.&lt;/p&gt;
&lt;p&gt;The element14 Community has retrieved the files and repositories to allow you to be able to rebuild this project should you need to explore, experiment and invent. Understanding that this project does not hold as a validated, certified medical device.&lt;/p&gt;
&lt;p&gt;But open source should be open, right?&lt;/p&gt;
&lt;h2&gt;&lt;span style="color:#3334ca;"&gt;Supporting Files and Links:&lt;/span&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="color:#3334ca;"&gt;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/m/files/151636"&gt;Episode 460 Resource Files - Trinamic Open Source Ventilator (TOSV) Teardown&lt;/a&gt;&amp;nbsp;&amp;nbsp;- Contains files for the Reference Design Board and archive of github repositories&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/w/documents/4995/bonus-content-trinamic-open-source-ventilator-tosv" data-e14adj="t"&gt;Bonus Content: Trinamic Open Source Ventilator (TOSV)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/w/documents/4996/bonus-content-trinamic-open-source-ventilator-project" data-e14adj="t"&gt;Bonus Content: Trinamic Open Source Ventilator Project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="jive-link-external-small" href="https://www.trinamic.com/solutions/medical/tosv/" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;Trinamic Open Source Ventilator&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;table class="jiveBorder" style="border:1px solid #c6c6c6;height:126px;width:984px;" border="1" height="135"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="background-color:#f2f2f2;border:1px solid #c6c6c6;color:#505050;padding:6px;text-align:left;" valign="middle"&gt;&lt;strong&gt;Product Name&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#f2f2f2;border:1px solid #c6c6c6;color:#505050;padding:6px;text-align:left;" valign="middle"&gt;&lt;span style="color:#505050;"&gt;&lt;strong&gt;Manufacturer&lt;/strong&gt;&lt;/span&gt;&lt;/th&gt;
&lt;th style="background-color:#f2f2f2;border:1px solid #c6c6c6;color:#505050;padding:6px;text-align:left;" valign="middle"&gt;&lt;span style="color:#505050;"&gt;&lt;strong&gt;Quantity&lt;/strong&gt;&lt;/span&gt;&lt;/th&gt;
&lt;th style="background-color:#f2f2f2;border:1px solid #c6c6c6;color:#505050;padding:6px;text-align:left;" valign="middle"&gt;&lt;strong&gt;Buy Now&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Reference Design Board, TMC4671/TMC6100, Ventilators / Respirator System&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Trinamic&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;1&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;RASPBERRY PI 4 MODEL B, CORTEX-A72, 8GB&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Raspberry Pi&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;1&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-a969c" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=3369503&amp;nsku=64AH2041&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-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('a969c'));" data-farnell="3369503" data-newark="64AH2041" data-comoverride="" data-cmpoverride="" data-cpc="SC15613" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Daughter Board, Raspberry Pi 7&amp;quot; Touch Screen Display, 10 Finger Capacitive Touch&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Raspberry Pi&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;1&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;MOTOR DRIVER, -40 TO 125DEG C (TMC4671-LA)&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Trinamic&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;1&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-23bd7" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=3438306&amp;nsku=71AH5974&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-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('23bd7'));" data-farnell="3438306" data-newark="71AH5974" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;MOTOR DRIVER, -40 TO 125DEG C (TMC6100-LA)&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Trinamic&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;1&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-f2369" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=3358370&amp;nsku=54AH1603&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-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('f2369'));" data-farnell="3358370" data-newark="54AH1603" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;PRESSURE SENSOR ADD-ON BOARD&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Trianmic&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;1&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-4f8b0" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=3566065&amp;nsku=88AH1530&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-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('4f8b0'));" data-farnell="3566065" data-newark="88AH1530" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style="background:#ffffff;border: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-e14adj="t"&gt;&lt;img alt="element14 presents" 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;Trinamic Open Source Ventilator (TOSV) Teardown&lt;/span&gt;
&lt;p style="margin:0;"&gt;&lt;span&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/challengesprojects/element14-presents/" data-e14adj="t"&gt;element14 Presents&lt;/a&gt;&lt;/span&gt;&amp;nbsp; &lt;strong&gt;|&lt;/strong&gt;&amp;nbsp; &lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/vcp-program/w/documents/3692/vcp-biography-clem" data-e14adj="t"&gt;About Clem&lt;/a&gt;&amp;nbsp; &lt;strong&gt;|&lt;/strong&gt;&amp;nbsp; &lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/challengesprojects/element14-presents/project-videos/" data-e14adj="t"&gt;Project Videos&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: medical equipment, open-source, open-source software, respirator, healthcare, pressure sensor, clem, engineer, raspi, trinamic motion control, beatmungsgerät, trinamic, motor control, medical ventilator, e14presents_mayermakes, tmc4671, open source ventilator, beademing, raspberry pi 4, raspberry pi, covid-19, motion control, Raspberry Pi Touchscreen, engineering, tmc6100, medical, beatmung, diy ventilator, diy medical ventilator, motor driver, medical engineering, coronavirus, covid19, friday_release, sensor, Open-source Hardware, mayermakes, e14p_CMM&lt;/div&gt;
</description></item><item><title>Trinamic Open Source Ventilator (TOSV) Teardown: An Open Hardware Approach to Medical Ventilation -- Episode 460</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/4985/trinamic-open-source-ventilator-tosv-teardown-an-open-hardware-approach-to-medical-ventilation----episode-460/revision/7</link><pubDate>Thu, 20 Aug 2026 16:04:56 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:24bfa529-539e-471e-a1cc-fdb11b3d93ea</guid><dc:creator>cstanton</dc:creator><description>Revision 7 posted to Documents by cstanton on 8/20/2026 4:04:56 PM&lt;br /&gt;
&lt;p&gt;Rather than presenting a typical maker build, Clem&amp;#39;s examination of the Trinamic Open Source Ventilator (TOSV) focuses on a project created during a period when hospitals worldwide were facing unprecedented demand for respiratory support equipment. The TOSV initiative was conceived as a fully open-source reference design that could be manufactured locally and developed collaboratively, while still pursuing the level of engineering discipline expected of medical equipment. The project combines a Raspberry Pi 4, Trinamic motion-control technology, precision pressure sensing, and an openly available hardware and software stack.&lt;/p&gt;
&lt;h2&gt;Breathe Deep and Dive In&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;&lt;a href="https://www.youtube.com/watch?v=VC3_LLReH_Y"&gt;www.youtube.com/watch&lt;/a&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Why an Open-Source Ventilator?&lt;/h2&gt;
&lt;p&gt;From the outset, Clem is careful to distinguish this project from the many emergency breathing-assistance concepts that appeared during the COVID-19 pandemic. He highlights a concern that runs throughout the entire teardown: a ventilator is not merely a motor pushing air through a tube.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Ventilation is a very complicated topic. It&amp;#39;s not trivial at all.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He explains that many people associate artificial respiration with emergency first aid, but a ventilator intended for patients suffering from lung damage operates on an entirely different level. Pressure, airflow, oxygen mixing, timing, lung response, and patient safety must all be carefully managed.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;If you ventilate or respire a patient that has damaged lungs even in the slightest wrong way, you will possibly kill him or her or at least damage the lungs further.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This perspective informs every design decision within the TOSV project. Rather than producing a quickly assembled emergency device, Trinamic&amp;#39;s goal was to create an open-source platform capable of moving towards medical certification while remaining accessible to manufacturers around the world.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Motion Control Meets Medical Engineering&lt;/h2&gt;
&lt;p&gt;Trinamic built its reputation around precision motor control, particularly through the TMC family of motion-control devices widely used in industrial equipment and 3D printers. Clem points out that a ventilator is fundamentally a motion-control problem: a motor must react continuously to changing sensor inputs while maintaining strict operating limits.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;They are specialists in motion control and motion control is what these ventilators are doing.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rather than driving a motor at a constant speed, the system processes live pressure data and dynamically adjusts airflow. Incoming air pressure, oxygen injection, patient breathing characteristics, and exhaust pressure are continually monitored.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The device reacts dynamically to all these sensory data.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;According to Trinamic&amp;#39;s published material, the design uses the TMC4671-LA servo controller together with the TMC6100 gate driver to control the blower assembly, forming the heart of the ventilator&amp;#39;s closed-loop control system.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Hardware Architecture&lt;/h2&gt;
&lt;p&gt;The teardown reveals a design that balances accessibility with functionality. The main enclosure consists of 3D-printed components combined with laser-cut acrylic panels, allowing the internals to remain visible during development and demonstration.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The main body is 3D printed and it has acrylic laser cut panels so you can see the inside.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;At the centre of the system sits a Raspberry Pi 4, responsible for user interaction and higher-level control. Attached to the Pi is a 7-inch Raspberry Pi touchscreen alongside Trinamic&amp;#39;s custom controller board.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The main brains of the project is a Raspberry Pi 4.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mounted above the motion-control hardware is a pressure-sensing subsystem which, at the time of filming, still relied on hand-assembled sensor hardware. Trinamic was already preparing production-ready versions of the sensor board so manufacturers could reproduce the complete design using the released design files.&lt;/p&gt;
&lt;p&gt;The project&amp;#39;s openness extends beyond the firmware. Mechanical CAD, PCB layouts, software, and supporting documentation are all intended to be freely available for local manufacture and adaptation. 【4-e1d7a7】【5-b5e330】&lt;/p&gt;
&lt;h2&gt;Precision Sensors Over Improvisation&lt;/h2&gt;
&lt;p&gt;One of the most important observations in the teardown concerns the pressure sensors. Rather than relying on improvised sensing arrangements, the system uses medical-grade, high-accuracy sensors that represent a substantial proportion of the overall cost.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;These are the most expensive items in the BOM.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;They are high precision and they are suitable for these medical applications.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Clem repeatedly stresses that the project avoids estimated behaviour and unverified assumptions. Pressure targets, volume targets, and safety parameters can all be measured and controlled directly by qualified operators.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;There is no guesswork involved. It&amp;#39;s science and doctors can at any time control the whole process.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This commitment to measured feedback is reflected throughout the firmware architecture. Configuration structures include dedicated parameters for pressure regulation, volume regulation, PEEP management, inhalation and exhalation timing, and multiple PID control loops. For example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;uint16_t pidPressure_P_param;
uint16_t pidPressure_I_param;

uint16_t pidVolume_P_param;
uint16_t pidVolume_I_param;

uint32_t pPEEP;
uint32_t volumeMax;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The firmware also exposes functions dedicated to pressure management:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;bool bldc_setTargetPressure(uint8_t motor, int32_t pressure);
int32 bldc_getActualPressure(uint8_t motor);
int32_t bldc_getPressureErrorSum(uint8_t motor);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;These interfaces illustrate that pressure regulation was treated as a primary control objective rather than a secondary measurement, aligning closely with Clem&amp;#39;s emphasis on accuracy and repeatable operation.&lt;/p&gt;
&lt;h2&gt;A Proper Ventilator, Not a Bag-Squeezer&lt;/h2&gt;
&lt;p&gt;During the teardown, Clem contrasts the TOSV with a common category of pandemic-era projects built around mechanically compressing manual resuscitation bags. While useful for emergency concepts, those approaches face significant limitations when precise respiratory control is required.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;s not just any blower fan or these bags that you see often in ventilation projects where you just squeeze the bags.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Instead, the TOSV employs a blower-based system similar in concept to respiratory devices used in clinical and assisted-breathing applications. The fan is controlled through closed-loop motor control, allowing pressure and airflow characteristics to be adjusted continuously rather than mechanically approximated.&lt;/p&gt;
&lt;p&gt;The wider open-hardware ecosystem surrounding the project also produced alternative mechanical implementations, including turbine-based enclosure concepts developed by the community around the TOSV electronics platform.&lt;/p&gt;
&lt;h2&gt;Intelligent Patient Interaction&lt;/h2&gt;
&lt;p&gt;One of the most revealing sections of the teardown occurs when Clem briefly experiences the machine himself. Rather than forcing airflow at a fixed rate, he notices how the device responds to breathing effort and gradually influences the user&amp;#39;s respiratory rhythm.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It doesn&amp;#39;t force the air into my lungs.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It&amp;#39;s a very intelligent device that dynamically adapts to the person that is breathing with it.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This observation highlights a design aspect that is easy to miss when looking only at schematics: the ventilator is intended to cooperate with the patient rather than simply overpower the respiratory system. Achieving that behaviour requires the interplay of sensors, control algorithms, motor regulation, and carefully tuned operating parameters.&lt;/p&gt;
&lt;h2&gt;User Interface and Safety Systems&lt;/h2&gt;
&lt;p&gt;The touchscreen interface provides immediate access to operating data as well as clinician configuration settings. Clem notes that the software presents critical information clearly while also incorporating safeguards against accidental misuse.&lt;/p&gt;
&lt;p&gt;A particularly interesting example is the shutdown procedure. Stopping the machine requires intentionally pressing and holding the command rather than tapping a button accidentally.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I have to tap on there and leave it there for a set amount of time before I can switch it off so you don&amp;#39;t switch off a patient by accident.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Alarm handling and calibration reminders are also built into the design.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The unit also complains about any anomalies and alarms the user.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;It also complains that it hasn&amp;#39;t been calibrated for a set period of time.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The system additionally supports Ethernet connectivity, enabling remote monitoring capabilities and allowing clinical staff to review device status without being directly beside the machine.&lt;/p&gt;
&lt;h2&gt;Availability Over Exclusivity&lt;/h2&gt;
&lt;p&gt;The primary objective of the project was never to outperform commercial ventilators. Clem repeatedly returns to a simpler goal: availability.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The point with this device is not to be better than a currently available ventilator.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Instead, the design provides a path for manufacturers to build proven hardware locally when supply chains become constrained. As shown during the teardown, Trinamic released the CAD files, PCB files, firmware, software, and supporting documentation specifically to encourage broader adoption.&lt;/p&gt;
&lt;p&gt;At the time the unit was examined, certification had not yet been completed, although development had been informed through consultation with doctors and respiratory specialists.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Trinamic was in contact with a lot of doctors and specialists, especially for lung treatment.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Future Development Considerations&lt;/h2&gt;
&lt;p&gt;Several future directions emerge from the discussion. Production-ready pressure sensor boards were still being finalised, alternative pressure sensors could potentially be supported to improve availability, and certification efforts would ultimately need to be pursued on a country-by-country basis.&lt;/p&gt;
&lt;p&gt;Clem also identifies a broader ambition extending beyond ventilators alone:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;One day we should have an open source alternative for every crucial medical device.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rather than viewing TOSV as a finished endpoint, he presents it as part of a larger movement towards openly documented, locally manufacturable medical technology that can be mobilised rapidly during future emergencies.&lt;/p&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;When this project first went live, it was the early years of what became a several year pandemic the likes of the generation had never seen.&amp;nbsp;Trinamic released this hardware and its files in the hope that it supported those that needed it, and over time, the resources available to reproduce this were pulled.&lt;/p&gt;
&lt;p&gt;The element14 Community has retrieved the files and repositories to allow you to be able to rebuild this project should you need to explore, experiment and invent. Understanding that this project does not hold as a validated, certified medical device.&lt;/p&gt;
&lt;p&gt;But open source should be open, right?&lt;/p&gt;
&lt;h2&gt;&lt;span style="color:#3334ca;"&gt;Supporting Files and Links:&lt;/span&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="color:#3334ca;"&gt;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/m/files/151636"&gt;Episode 460 Resource Files - Trinamic Open Source Ventilator (TOSV) Teardown&lt;/a&gt;&amp;nbsp;&amp;nbsp;- Contains files for the Reference Design Board and archive of github repositories&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/w/documents/4995/bonus-content-trinamic-open-source-ventilator-tosv" data-e14adj="t"&gt;Bonus Content: Trinamic Open Source Ventilator (TOSV)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/w/documents/4996/bonus-content-trinamic-open-source-ventilator-project" data-e14adj="t"&gt;Bonus Content: Trinamic Open Source Ventilator Project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="jive-link-external-small" href="https://www.trinamic.com/solutions/medical/tosv/" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;Trinamic Open Source Ventilator&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;table class="jiveBorder" style="border:1px solid #c6c6c6;height:126px;width:984px;" border="1" height="135"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="background-color:#f2f2f2;border:1px solid #c6c6c6;color:#505050;padding:6px;text-align:left;" valign="middle"&gt;&lt;strong&gt;Product Name&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#f2f2f2;border:1px solid #c6c6c6;color:#505050;padding:6px;text-align:left;" valign="middle"&gt;&lt;span style="color:#505050;"&gt;&lt;strong&gt;Manufacturer&lt;/strong&gt;&lt;/span&gt;&lt;/th&gt;
&lt;th style="background-color:#f2f2f2;border:1px solid #c6c6c6;color:#505050;padding:6px;text-align:left;" valign="middle"&gt;&lt;span style="color:#505050;"&gt;&lt;strong&gt;Quantity&lt;/strong&gt;&lt;/span&gt;&lt;/th&gt;
&lt;th style="background-color:#f2f2f2;border:1px solid #c6c6c6;color:#505050;padding:6px;text-align:left;" valign="middle"&gt;&lt;strong&gt;Buy Now&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Reference Design Board, TMC4671/TMC6100, Ventilators / Respirator System&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Trinamic&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;1&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;RASPBERRY PI 4 MODEL B, CORTEX-A72, 8GB&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Raspberry Pi&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;1&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-75747" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=3369503&amp;nsku=64AH2041&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-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('75747'));" data-farnell="3369503" data-newark="64AH2041" data-comoverride="" data-cmpoverride="" data-cpc="SC15613" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Daughter Board, Raspberry Pi 7&amp;quot; Touch Screen Display, 10 Finger Capacitive Touch&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Raspberry Pi&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;1&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;MOTOR DRIVER, -40 TO 125DEG C (TMC4671-LA)&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Trinamic&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;1&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-e7443" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=3438306&amp;nsku=71AH5974&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-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('e7443'));" data-farnell="3438306" data-newark="71AH5974" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;MOTOR DRIVER, -40 TO 125DEG C (TMC6100-LA)&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Trinamic&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;1&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-37257" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=3358370&amp;nsku=54AH1603&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-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('37257'));" data-farnell="3358370" data-newark="54AH1603" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;PRESSURE SENSOR ADD-ON BOARD&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;Trianmic&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;1&lt;/td&gt;
&lt;td style="border:1px solid #c6c6c6;padding:6px;"&gt;&lt;span&gt;&lt;a id="e14-product-link-eaa32" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="link" href="https://referral.element14.com/OrderCodeView?fsku=3566065&amp;nsku=88AH1530&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-link" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('eaa32'));" data-farnell="3566065" data-newark="88AH1530" data-comoverride="" data-cmpoverride="" data-cpc="" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style="background:#ffffff;border: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-e14adj="t"&gt;&lt;img alt="element14 presents" 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;Trinamic Open Source Ventilator (TOSV) Teardown&lt;/span&gt;
&lt;p style="margin:0;"&gt;&lt;span&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/challengesprojects/element14-presents/" data-e14adj="t"&gt;element14 Presents&lt;/a&gt;&lt;/span&gt;&amp;nbsp; &lt;strong&gt;|&lt;/strong&gt;&amp;nbsp; &lt;a class="jive-link-wiki-small" href="/challenges-projects/element14-presents/vcp-program/w/documents/3692/vcp-biography-clem" data-e14adj="t"&gt;About Clem&lt;/a&gt;&amp;nbsp; &lt;strong&gt;|&lt;/strong&gt;&amp;nbsp; &lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/challengesprojects/element14-presents/project-videos/" data-e14adj="t"&gt;Project Videos&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: medical equipment, open-source, open-source software, respirator, healthcare, pressure sensor, clem, engineer, raspi, trinamic motion control, beatmungsgerät, trinamic, motor control, medical ventilator, e14presents_mayermakes, tmc4671, open source ventilator, beademing, raspberry pi 4, raspberry pi, covid-19, motion control, Raspberry Pi Touchscreen, engineering, tmc6100, medical, beatmung, diy ventilator, diy medical ventilator, motor driver, medical engineering, coronavirus, covid19, friday_release, sensor, Open-source Hardware, mayermakes, e14p_CMM&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/225</link><pubDate>Thu, 20 Aug 2026 14:05:17 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:59ab0abe-b32d-47f9-b00c-4b73b01f3bd8</guid><dc:creator>e14sbhargav</dc:creator><description>Revision 225 posted to Documents by e14sbhargav on 8/20/2026 2:05:17 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/72104/building-a-diy-plc-with-pocketbeagle-2-finding-out-why-industrial-controllers-cost-so-much" data-e14adj="t"&gt;Episode 728: Building a DIY PLC with PocketBeagle 2: Finding Out Why Industrial Controllers Cost So Much&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/72102/designing-a-mobile-robot-platform-with-differential-drive-pid-control-and-wireless-mapping" data-e14adj="t"&gt;Episode 727: Designing a Mobile Robot Platform with Differential Drive, PID Control and Wireless Mapping&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/72089/clem-s-workbench-upgrade-to-automated-lab-with-programmable-instruments-and-python" data-e14adj="t"&gt;Episode 725: Clem&amp;#39;s Workbench Upgrade to Automated Lab with Programmable Instruments and Python&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/72087/building-and-programming-a-scara-industrial-robot-arm-an-introduction-to-robotics" data-e14adj="t"&gt;Episode 724: Building and Programming a SCARA Industrial Robot Arm &amp;ndash; An Introduction to Robotics&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/72081/building-a-privacy-first-workshop-security-camera-with-pocketbeagle-2" data-e14adj="t"&gt;Episode 723: Building a Privacy-First Workshop Security Camera with PocketBeagle 2&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/72077/pid-control-motion-profiles-and-ros-explained---an-introduction-to-robotics" data-e14adj="t"&gt;Episode 722: PID Control, Motion Profiles and ROS Explained - An Introduction to Robotics&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/72073/designing-a-smarter-workbench-inside-mark-s-8-channel-power-monitoring-system" data-e14adj="t"&gt;Episode 721: Designing a Smarter Workbench: Inside Mark&amp;rsquo;s 8-Channel Power Monitoring System&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/72071/building-the-foundations-of-your-first-robot---an-introduction-to-robotics" data-e14adj="t"&gt;Episode 720: Building the Foundations of Your First Robot - An Introduction to Robotics&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/72070/turning-a-broken-robot-vacuum-into-a-network-controlled-raspberry-pi-5-rover" data-e14adj="t"&gt;Episode 719: Turning a Broken Robot Vacuum into a Network-Controlled Raspberry Pi 5 Rover&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/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>Building a DIY PLC with PocketBeagle 2: Finding Out Why Industrial Controllers Cost So Much</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72104/building-a-diy-plc-with-pocketbeagle-2-finding-out-why-industrial-controllers-cost-so-much/revision/3</link><pubDate>Thu, 20 Aug 2026 09:35:47 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:c606295d-a31f-4adb-b481-3b8ae8d4d706</guid><dc:creator>cstanton</dc:creator><description>Revision 3 posted to Documents by cstanton on 8/20/2026 9:35:47 AM&lt;br /&gt;
&lt;div&gt;Can you really build your own industrial PLC, or are commercial controllers expensive for a reason? In this project, Clem sets out to answer that question by designing and building a PocketBeagle 2 based PLC from scratch, starting with a simple maker-friendly prototype before tackling the realities of industrial design, including electrical isolation, ESD protection, USB compliance, analogue signal integrity and realtime control. Along the way he explores the AM6254&amp;#39;s Linux and PRU architecture, wrestles with device tree overlays, exposes the board&amp;#39;s onboard 12-bit ADC, and finishes with a live colour-detection demo that combines analogue inputs, USB vision and network streaming. Most importantly, the project reveals where the real engineering effort in industrial hardware lives, and why a reliable PLC is far more than just a computer in a DIN rail enclosure&lt;/div&gt;
&lt;h2 id="mcetoc_1k0f7fqfq0"&gt;Watch Clem Pocket the Industrialisation&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://players.brightcove.net/1362235890001/default_default/index.html?videoId=6403719824112"&gt;players.brightcove.net/.../index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Clem has always had a healthy suspicion of expensive industrial hardware. Looking at the price of programmable logic controllers (PLCs), his initial reaction was much the same as many makers staring at a catalogue of industrial equipment: surely there cannot be that much inside a PLC to justify the cost.&lt;/p&gt;
&lt;p&gt;Rather than speculate, he decided to build one.&lt;/p&gt;
&lt;p&gt;The result is a PocketBeagle 2 based PLC project that starts out as a straightforward maker build and gradually evolves into something much closer to a genuine industrial controller. Along the way, it becomes a lesson in electrical isolation, PCB layout, device tree configuration, realtime processing and the countless small decisions that separate a prototype from a product.&lt;/p&gt;
&lt;p&gt;As Clem puts it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Sometimes they are actually just an Arduino in a fancy box and some relays... but there are also legacy systems with big brand names and high price tags and these are built for reliability.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;His goal was not to reproduce an industrial PLC exactly, but to understand where all that engineering effort goes.&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_000140.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat30"&gt;Starting with an Open PLC Platform&lt;/h2&gt;
&lt;p&gt;Commercial PLCs often come with proprietary software ecosystems, vendor lock-in and long-term support guarantees. Clem wanted to approach the problem from a different direction.&lt;/p&gt;
&lt;p&gt;Instead of using a dedicated PLC platform, he based his design around the &lt;a href="https://docs.beagleboard.org/boards/pocketbeagle-2/index.html" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;PocketBeagle 2&lt;/a&gt;, a compact Linux-capable development board built around Texas Instruments&amp;#39; AM6254 Sitara processor.&lt;/p&gt;
&lt;p&gt;What attracted him was the combination of high-level Linux functionality and low-level deterministic control.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I wanted it to have serious capabilities. It should have realtime Linux support and it also should have a deterministic way of controlling the inputs and outputs.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Unlike many maker boards, the PocketBeagle 2 includes two Programmable Realtime Units (PRUs), effectively dedicated microcontroller-class cores integrated into the processor.&lt;/p&gt;
&lt;p&gt;These can operate independently from Linux and are designed specifically for tasks that require predictable timing.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;We have the Linux controls around USB devices, high-level stuff like AI models and communication with networks and other devices, and then the PRUs can control all the inputs and outputs.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The AM6254 architecture immediately begins to resemble the split architecture found in many industrial systems. Linux handles networking, storage and complex applications while dedicated realtime processors handle machine control.&lt;/p&gt;
&lt;p&gt;Clem even points out that the second PRU could act as a watchdog, redundancy controller or cross-checking processor, similar to techniques found in safety-oriented industrial equipment.&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/5430.frame_5F00_000090.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat31"&gt;Version One: The Maker Approach&lt;/h2&gt;
&lt;p&gt;The first PLC design intentionally follows the path many hobbyists would take.&lt;/p&gt;
&lt;p&gt;A Hammond DIN rail enclosure serves as the mechanical foundation, while a relatively simple two-layer PCB carries the electronics. The board includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PocketBeagle 2 controller&lt;/li&gt;
&lt;li&gt;Microchip USB2514 USB 2.0 hub controller&lt;/li&gt;
&lt;li&gt;Four analogue input channels&lt;/li&gt;
&lt;li&gt;Four relay outputs&lt;/li&gt;
&lt;li&gt;ULN2003 Darlington relay driver&lt;/li&gt;
&lt;li&gt;Dual USB host ports&lt;/li&gt;
&lt;li&gt;DIN rail mounting format&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The PCB itself was designed quickly.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I eyeballed the position of all the connectors and I tried to put as many features in here as possible.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rather than spending days optimising every mechanical detail, the focus was on getting something functional into the enclosure as quickly as possible.&lt;/p&gt;
&lt;p&gt;One feature Clem was especially keen to exploit was the PocketBeagle 2&amp;#39;s integrated twelve-bit ADC. Unlike a typical Raspberry Pi, analogue inputs can be connected directly to the processor without requiring additional converter hardware.&lt;/p&gt;
&lt;p&gt;The analogue channels are exposed through simple screw terminals, providing an easy way to interact with sensors and control inputs. The USB subsystem was another area where the project deliberately pushed the platform. By integrating the USB2514 hub controller, the PLC gains multiple USB ports for cameras, storage devices and peripherals.&lt;/p&gt;
&lt;p&gt;On paper, it looked remarkably capable. Unfortunately, industrial design concerns do not appear on a schematic until something goes wrong.&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_000317.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat32"&gt;When &amp;quot;Works&amp;quot; Isn&amp;#39;t Good Enough&lt;/h2&gt;
&lt;p&gt;The first design functions. For many projects, that would be a success.&lt;/p&gt;
&lt;p&gt;For a PLC, however, functionality is only the starting point.&lt;/p&gt;
&lt;p&gt;Clem soon began identifying weaknesses that would become serious problems in an industrial environment.&lt;/p&gt;
&lt;p&gt;The first issue was electrical safety.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;There is no real isolation in the original design. In case something goes wrong there could potentially be 230 volts everywhere in the system.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The relay outputs are capable of switching mains-voltage loads, yet the control electronics existed dangerously close to circuitry carrying higher voltages.&lt;/p&gt;
&lt;p&gt;Industrial equipment depends heavily on segregation between control electronics and power electronics. Without that separation, failures can have consequences far beyond a damaged PCB.&lt;/p&gt;
&lt;p&gt;The USB implementation also lacked many of the protections expected in a commercial design.&lt;/p&gt;
&lt;p&gt;The original version provided only the minimum necessary circuitry to make the USB hub operate.&lt;/p&gt;
&lt;p&gt;There was:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No ESD protection&lt;/li&gt;
&lt;li&gt;No overcurrent protection&lt;/li&gt;
&lt;li&gt;No controlled fault response&lt;/li&gt;
&lt;li&gt;No dedicated USB power monitoring&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These omissions are common in maker projects because they are often invisible during normal operation. Industrial equipment, by contrast, must survive repeated abuse from the outside world.&lt;/p&gt;
&lt;p&gt;Analogue routing presented another problem.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve routed my analogue ports right next to the relays. That will not work very good because they will couple into it.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Relay switching generates electrical noise. Placing sensitive ADC signals next to relay circuits creates opportunities for incorrect readings, instability and potentially damage.&lt;/p&gt;
&lt;p&gt;These are exactly the sort of layout considerations that are easy to overlook when the first goal is simply getting a board manufactured.&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_000280.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat33"&gt;Building a More Professional Controller&lt;/h2&gt;
&lt;p&gt;The second board revision demonstrates how quickly extra engineering effort accumulates.&lt;/p&gt;
&lt;p&gt;Clem moved to a four-layer PCB, improved component selection, reworked the enclosure integration and fundamentally redesigned the relay section.&lt;/p&gt;
&lt;p&gt;More importantly, he stopped trying to maximise feature count and instead prioritised reliability.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I preferred having good layout instead of more features on there because that is what the professional world considers the most important bit. Safe and reliable operation.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The revised USB implementation became significantly more sophisticated.&lt;/p&gt;
&lt;p&gt;Dedicated current-limiting circuitry and fault detection were added to protect both connected peripherals and the PLC itself.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;These have current control chips specifically ordered and they have to detect if something goes wrong so your device that you plug into these USB ports can&amp;#39;t destroy the overall thing.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This redesign required additional board area, forcing the reduction from four easily accessible USB ports down to two.&lt;/p&gt;
&lt;p&gt;That trade-off between capability and robustness appears repeatedly throughout industrial 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/0045.frame_5F00_000303.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat34"&gt;Isolation the Right Way&lt;/h2&gt;
&lt;p&gt;The most dramatic change involved the relay outputs. The revised PCB treats the relay circuitry and logic circuitry almost as completely separate systems. A dedicated isolation boundary divides the board into two sections. The only intentional signal path crossing that boundary is an optocoupler.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;An optocoupler is a way of galvanic isolation meaning there is no actual direct connection between these two halves. It is just and only a connection by light.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The relay control signals pass through an optocoupler before driving the ULN2003 relay driver.&lt;/p&gt;
&lt;p&gt;This ensures that electrical disturbances from the relay side cannot directly propagate into the processor circuitry.&lt;/p&gt;
&lt;p&gt;Even power supplies were separated.&lt;/p&gt;
&lt;p&gt;Two isolated DIN rail power supplies were used: one dedicated to logic electronics and another for relay operation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;We&amp;#39;re truly isolated.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The resulting architecture begins to resemble industrial control hardware far more closely than the original all-in-one 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_000318.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat35"&gt;The Device Tree Learning Curve&lt;/h2&gt;
&lt;p&gt;One of the most educational aspects of the project came from the software side.&lt;/p&gt;
&lt;p&gt;Developers accustomed to Arduino or Raspberry Pi ecosystems often expect GPIO pins to work immediately.&lt;/p&gt;
&lt;p&gt;The PocketBeagle 2 takes a more embedded Linux approach.&lt;/p&gt;
&lt;p&gt;GPIO functionality must first be defined through device tree overlays.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The apparently simple job of making a GPIO output starts involving device trees, pin multiplexing and the details of the underlying SoC.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Because the AM6254 allows pins to serve multiple functions, Linux must be explicitly told how they are being used.&lt;/p&gt;
&lt;p&gt;Clem candidly describes the experience:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Device tree overlays are very intimidating and complicated and I don&amp;#39;t even halfway know what I actually did there.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Once configured correctly, however, the flexibility becomes apparent. Linux gains direct access to GPIO, ADC resources and other processor features while still allowing PRU-based realtime control.&lt;/p&gt;
&lt;p&gt;That flexibility is one of the PocketBeagle 2&amp;#39;s greatest strengths, but it comes with a significantly steeper learning curve than many maker platforms.&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/6825.frame_5F00_000395.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat36"&gt;Working with the Onboard ADC&lt;/h2&gt;
&lt;p&gt;The analogue subsystem proved much more straightforward.&lt;/p&gt;
&lt;p&gt;Clem exposed four ADC channels and demonstrated how Linux can read them directly through the Industrial I/O framework.&lt;/p&gt;
&lt;p&gt;The Python implementation is refreshingly simple.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ADC_PATH = &amp;quot;/sys/bus/iio/devices/iio:device0&amp;quot;
VREF = 1.8
ADC_MAX = 4095

return (raw / ADC_MAX) * VREF
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Raw readings are collected from Linux system files and converted into voltages using the 12-bit ADC range. The implementation continuously reads all four channels and reports both raw counts and calculated voltages.&lt;/p&gt;
&lt;p&gt;This direct ADC access became a key part of the final demonstration.&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_000448.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat37"&gt;A Useful Failure&lt;/h2&gt;
&lt;p&gt;Unfortunately, not everything worked perfectly.&lt;/p&gt;
&lt;p&gt;One of the relay isolation circuits exposed a design mistake.&lt;/p&gt;
&lt;p&gt;The optocouplers were treated like standard logic devices rather than LED-driven isolation components.&lt;/p&gt;
&lt;p&gt;Current-limiting resistors had been omitted.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;With a 3.3 volt logic level I should have used a 330 ohm resistor.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The result was that the optocoupler LEDs never switched fully off once activated.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Once the LED activates for the first time it sits there drawing current at about two volts and never deactivates again.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The relays therefore refused to operate correctly during the final demonstration.&lt;/p&gt;
&lt;p&gt;Rather than hide the mistake, Clem used it to illustrate a reality of professional hardware development: unfamiliar parts frequently behave differently from assumptions made during schematic capture.&lt;/p&gt;
&lt;p&gt;Testing, redesign and verification are fundamental parts of the engineering process.&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_000558.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat38"&gt;Live Colour Detection Demo&lt;/h2&gt;
&lt;p&gt;For the final demonstration, the PLC uses its analogue inputs, USB subsystem, Linux environment and networking stack simultaneously.&lt;/p&gt;
&lt;p&gt;A USB webcam streams video into OpenCV while two analogue channels control detection parameters.&lt;/p&gt;
&lt;p&gt;One analogue input selects the target hue while another sets the intensity threshold.&lt;/p&gt;
&lt;p&gt;The software converts ADC values into colour detection parameters in realtime.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;application_hue = int(
    (raw / ADC_MAX) * 255
)

opencv_hue = int(
    (application_hue / 255) * 179
)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A value of 150 corresponds approximately to blue, allowing trim potentiometers wired to the PLC to tune colour detection while the system is operating.&lt;/p&gt;
&lt;p&gt;The software analyses webcam imagery, performs HSV filtering, calculates contour sizes and overlays detection results on the live image.&lt;/p&gt;
&lt;p&gt;Results are then streamed over the network using a built-in web server.&lt;/p&gt;
&lt;p&gt;During testing, Clem adjusted the analogue inputs live while watching colour detection track the blue colour of his shirt.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;We can set the hue and the saturation with these analogue potentiometers on the fly and observe the stream over the network.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The demonstration neatly combines nearly every subsystem available on the PLC.&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_000551.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat39"&gt;So Why Are PLCs So Expensive?&lt;/h2&gt;
&lt;p&gt;By the end of the project, Clem&amp;#39;s original question had evolved considerably. The first board genuinely supports the argument that many PLCs appear to be little more than a processor, some I/O and a box.&lt;/p&gt;
&lt;p&gt;The second board reveals the hidden engineering. Isolation barriers. ESD protection. Current limiting. Optocouplers. Power integrity. Analogue layout. Device tree configuration. Mechanical integration. Realtime processing. Redundancy. Testing. Verification.&lt;/p&gt;
&lt;p&gt;None of these individually seem particularly dramatic. Together they account for a substantial amount of engineering effort.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Now that we know how incredibly difficult it is to make a real PLC, a system that has redundancy, safety, watchdogs and all these constructive features to make the relays safe and all the connections and inputs reliable, I think we can appreciate that sometimes they just have to cost more.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That does not mean every industrial PLC automatically represents good value. It does demonstrate that the real complexity often lies in the details that nobody notices until they are missing. Clem set out to build a PLC to understand where the money goes. What he discovered is that making something look like a PLC is relatively easy.&lt;/p&gt;
&lt;p&gt;Building something that begins to behave like a professional industrial controller is a completely different challenge.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0f7hcdb8"&gt;Supporting Files and Links&lt;/h2&gt;
&lt;p&gt;- &lt;a href="https://docs.beagleboard.org/boards/pocketbeagle-2/index.html" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;PocketBeagle 2 Documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href="https://github.com/mayermakes/pocketbeagle2-dtso" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;Device Tree Tutorial by Grippy98&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/m/files/151635"&gt;Episode 728 Resources - Building a DIY PLC with PocketBeagle 2: Finding Out Why Industrial Controllers Cost So Much&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0f7gf5s4"&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-dfc88" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1683370,2112372~2,3767921~9,3518261,2847240~2,4825131,3498606,2628016,2325631~4,2815640,4668770,2292604,4162736,2292873,1825866~4&amp;nsku=05R6483,14N8153~2,47AK4343~9,82AH2552,51AC3055~2,59AM5501,78AH1768,97Y9704,96W3092~4,44AC5205,25AM9241,66W2137,83AK6230,19C7295,79R6955~4&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('dfc88'));" data-farnell="1683370,2112372~2,3767921~9,3518261,2847240~2,4825131,3498606,2628016,2325631~4,2815640,4668770,2292604,4162736,2292873,1825866~4" data-newark="05R6483,14N8153~2,47AK4343~9,82AH2552,51AC3055~2,59AM5501,78AH1768,97Y9704,96W3092~4,44AC5205,25AM9241,66W2137,83AK6230,19C7295,79R6955~4" data-comoverride="" data-cmpoverride="" data-cpc=",undefined~2,undefined~9,,undefined~2,,,,undefined~4,,,,,,undefined~4" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Optocoupler, Darlington Output, 4 Channel, DIP, 16 Pins, 50 mA, 5.3 kV, 500 %&lt;/td&gt;
&lt;td&gt;ISOCOM&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-76cb5" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1683370&amp;nsku=05R6483&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('76cb5'));" data-farnell="1683370" data-newark="05R6483" 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;USB Connector, USB Type A, USB 2.0, Receptacle, 4 Ways, Through Hole Mount, Vertical&lt;/td&gt;
&lt;td&gt;multicomp&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-b523c" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2112372~2&amp;nsku=14N8153~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('b523c'));" data-farnell="2112372~2" data-newark="14N8153~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;Wire-To-Board Terminal Block, 5.08 mm, 3 Ways, 30 AWG, 12 AWG, 3.31 mm&amp;sup2;, Screw&lt;/td&gt;
&lt;td&gt;w&amp;uuml;rth&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-25c64" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3767921~9&amp;nsku=47AK4343~9&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('25c64'));" data-farnell="3767921~9" data-newark="47AK4343~9" data-comoverride="" data-cmpoverride="" data-cpc="undefined~9" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plastic Enclosure, DIN Rail, Polycarbonate, 90 mm, 105 mm, 58 mm, IP20&lt;/td&gt;
&lt;td&gt;hammond Mit freundlichen Gr&amp;uuml;&amp;szlig;en&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-4ce5e" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3518261&amp;nsku=82AH2552&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('4ce5e'));" data-farnell="3518261" data-newark="82AH2552" 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;Pin Header, Board-to-Board, 2.54 mm, 2 Rows, 40 Contacts, Surface Mount&lt;/td&gt;
&lt;td&gt;multicomp pro&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-86641" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2847240~2&amp;nsku=51AC3055~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('86641'));" data-farnell="2847240~2" data-newark="51AC3055~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;Development Kit, PocketBeagle 2, AM6254, ARM Cortex-A53 / Cortex-M4F&lt;/td&gt;
&lt;td&gt;beagleboard&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-f5706" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4825131&amp;nsku=59AM5501&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('f5706'));" data-farnell="4825131" data-newark="59AM5501" 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;Flash Memory Card, MicroSDHC Card, 16 GB, Class 10, UHS-I U1, A1&lt;/td&gt;
&lt;td&gt;integral&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-f49cb" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3498606&amp;nsku=78AH1768&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('f49cb'));" data-farnell="3498606" data-newark="78AH1768" 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;DARLINGTON TRANSISTOR ARRAY, SOIC-16&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-c722a" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2628016&amp;nsku=97Y9704&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('c722a'));" data-farnell="2628016" data-newark="97Y9704" 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;General Purpose Relay, ORWH Series, Power, Non Latching, SPDT, 5 VDC, 10 A&lt;/td&gt;
&lt;td&gt;TE&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-80215" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2325631~4&amp;nsku=96W3092~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('80215'));" data-farnell="2325631~4" data-newark="96W3092~4" data-comoverride="" data-cmpoverride="" data-cpc="undefined~4" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AC/DC DIN Rail Power Supply (PSU), ITE, 1 Output, 15 W, 5 VDC, 3 A&lt;/td&gt;
&lt;td&gt;meanwell&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-6212e" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2815640&amp;nsku=44AC5205&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('6212e'));" data-farnell="2815640" data-newark="44AC5205" 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;AC/DC DIN Rail Power Supply (PSU), ITE, Industrial &amp;amp; Household, 1 Output, 15 W, 5 VDC, 3 A&lt;/td&gt;
&lt;td&gt;multicomp pro&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-59047" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4668770&amp;nsku=25AM9241&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('59047'));" data-farnell="4668770" data-newark="25AM9241" 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;USB Interface, USB Hub Controller, USB 2.0, 3 V, 3.6 V, QFN, 36 Pins&lt;/td&gt;
&lt;td&gt;microchip&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-d9810" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2292604&amp;nsku=66W2137&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('d9810'));" data-farnell="2292604" data-newark="66W2137" 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;ETHERNET ADAPTER, USB3.0 GIGABIT WHI&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-b2d35" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4162736&amp;nsku=83AK6230&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('b2d35'));" data-farnell="4162736" data-newark="83AK6230" 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;DIN Mounting Rail, DIN Mounting Rail, Racks &amp;amp; Cabinets, 1 m, 7.5 mm, 35 mm, Steel&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-94563" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2292873&amp;nsku=19C7295&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('94563'));" data-farnell="2292873" data-newark="19C7295" 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;TVS Diode, WE-TVS, Unidirectional, 5 V, 6.8 V, SOT-23, 6 Pins&lt;/td&gt;
&lt;td&gt;w&amp;uuml;rth&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-ce535" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1825866~4&amp;nsku=79R6955~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('ce535'));" data-farnell="1825866~4" data-newark="79R6955~4" data-comoverride="" data-cmpoverride="" data-cpc="undefined~4" 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_1k0f7gf5s5"&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;Crystal and caps for the usb2514&amp;rarr; 24MHz&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;usb current control ICs + mosfets&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_1k0f7gf5s6"&gt;&lt;/h3&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: plc, kicad pcb design, pocketbeagle 2, embedded linux, am6254, e14presents_mayermakes, analogue inputs, optocoupler, USB2514, industrial automation, diy plc, industrial control systems, programmable logic controller, ti sitara, friday_release, galvanic isolation, realtime linux&lt;/div&gt;
</description></item><item><title>Building a DIY PLC with PocketBeagle 2: Finding Out Why Industrial Controllers Cost So Much</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72104/building-a-diy-plc-with-pocketbeagle-2-finding-out-why-industrial-controllers-cost-so-much/revision/4</link><pubDate>Thu, 20 Aug 2026 09:35:47 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:c606295d-a31f-4adb-b481-3b8ae8d4d706</guid><dc:creator>e14sbhargav</dc:creator><description>Revision 4 posted to Documents by e14sbhargav on 8/20/2026 9:35:47 AM&lt;br /&gt;
&lt;div&gt;Can you really build your own industrial PLC, or are commercial controllers expensive for a reason? In this project, Clem sets out to answer that question by designing and building a PocketBeagle 2 based PLC from scratch, starting with a simple maker-friendly prototype before tackling the realities of industrial design, including electrical isolation, ESD protection, USB compliance, analogue signal integrity and realtime control. Along the way he explores the AM6254&amp;#39;s Linux and PRU architecture, wrestles with device tree overlays, exposes the board&amp;#39;s onboard 12-bit ADC, and finishes with a live colour-detection demo that combines analogue inputs, USB vision and network streaming. Most importantly, the project reveals where the real engineering effort in industrial hardware lives, and why a reliable PLC is far more than just a computer in a DIN rail enclosure&lt;/div&gt;
&lt;h2 id="mcetoc_1k0f7fqfq0"&gt;Watch Clem Pocket the Industrialisation&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://players.brightcove.net/1362235890001/default_default/index.html?videoId=6403719824112"&gt;players.brightcove.net/.../index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Clem has always had a healthy suspicion of expensive industrial hardware. Looking at the price of programmable logic controllers (PLCs), his initial reaction was much the same as many makers staring at a catalogue of industrial equipment: surely there cannot be that much inside a PLC to justify the cost.&lt;/p&gt;
&lt;p&gt;Rather than speculate, he decided to build one.&lt;/p&gt;
&lt;p&gt;The result is a PocketBeagle 2 based PLC project that starts out as a straightforward maker build and gradually evolves into something much closer to a genuine industrial controller. Along the way, it becomes a lesson in electrical isolation, PCB layout, device tree configuration, realtime processing and the countless small decisions that separate a prototype from a product.&lt;/p&gt;
&lt;p&gt;As Clem puts it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Sometimes they are actually just an Arduino in a fancy box and some relays... but there are also legacy systems with big brand names and high price tags and these are built for reliability.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;His goal was not to reproduce an industrial PLC exactly, but to understand where all that engineering effort goes.&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_000140.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat30"&gt;Starting with an Open PLC Platform&lt;/h2&gt;
&lt;p&gt;Commercial PLCs often come with proprietary software ecosystems, vendor lock-in and long-term support guarantees. Clem wanted to approach the problem from a different direction.&lt;/p&gt;
&lt;p&gt;Instead of using a dedicated PLC platform, he based his design around the &lt;a href="https://docs.beagleboard.org/boards/pocketbeagle-2/index.html" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;PocketBeagle 2&lt;/a&gt;, a compact Linux-capable development board built around Texas Instruments&amp;#39; AM6254 Sitara processor.&lt;/p&gt;
&lt;p&gt;What attracted him was the combination of high-level Linux functionality and low-level deterministic control.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I wanted it to have serious capabilities. It should have realtime Linux support and it also should have a deterministic way of controlling the inputs and outputs.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Unlike many maker boards, the PocketBeagle 2 includes two Programmable Realtime Units (PRUs), effectively dedicated microcontroller-class cores integrated into the processor.&lt;/p&gt;
&lt;p&gt;These can operate independently from Linux and are designed specifically for tasks that require predictable timing.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;We have the Linux controls around USB devices, high-level stuff like AI models and communication with networks and other devices, and then the PRUs can control all the inputs and outputs.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The AM6254 architecture immediately begins to resemble the split architecture found in many industrial systems. Linux handles networking, storage and complex applications while dedicated realtime processors handle machine control.&lt;/p&gt;
&lt;p&gt;Clem even points out that the second PRU could act as a watchdog, redundancy controller or cross-checking processor, similar to techniques found in safety-oriented industrial equipment.&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/5430.frame_5F00_000090.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat31"&gt;Version One: The Maker Approach&lt;/h2&gt;
&lt;p&gt;The first PLC design intentionally follows the path many hobbyists would take.&lt;/p&gt;
&lt;p&gt;A Hammond DIN rail enclosure serves as the mechanical foundation, while a relatively simple two-layer PCB carries the electronics. The board includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PocketBeagle 2 controller&lt;/li&gt;
&lt;li&gt;Microchip USB2514 USB 2.0 hub controller&lt;/li&gt;
&lt;li&gt;Four analogue input channels&lt;/li&gt;
&lt;li&gt;Four relay outputs&lt;/li&gt;
&lt;li&gt;ULN2003 Darlington relay driver&lt;/li&gt;
&lt;li&gt;Dual USB host ports&lt;/li&gt;
&lt;li&gt;DIN rail mounting format&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The PCB itself was designed quickly.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I eyeballed the position of all the connectors and I tried to put as many features in here as possible.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rather than spending days optimising every mechanical detail, the focus was on getting something functional into the enclosure as quickly as possible.&lt;/p&gt;
&lt;p&gt;One feature Clem was especially keen to exploit was the PocketBeagle 2&amp;#39;s integrated twelve-bit ADC. Unlike a typical Raspberry Pi, analogue inputs can be connected directly to the processor without requiring additional converter hardware.&lt;/p&gt;
&lt;p&gt;The analogue channels are exposed through simple screw terminals, providing an easy way to interact with sensors and control inputs. The USB subsystem was another area where the project deliberately pushed the platform. By integrating the USB2514 hub controller, the PLC gains multiple USB ports for cameras, storage devices and peripherals.&lt;/p&gt;
&lt;p&gt;On paper, it looked remarkably capable. Unfortunately, industrial design concerns do not appear on a schematic until something goes wrong.&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_000317.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat32"&gt;When &amp;quot;Works&amp;quot; Isn&amp;#39;t Good Enough&lt;/h2&gt;
&lt;p&gt;The first design functions. For many projects, that would be a success.&lt;/p&gt;
&lt;p&gt;For a PLC, however, functionality is only the starting point.&lt;/p&gt;
&lt;p&gt;Clem soon began identifying weaknesses that would become serious problems in an industrial environment.&lt;/p&gt;
&lt;p&gt;The first issue was electrical safety.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;There is no real isolation in the original design. In case something goes wrong there could potentially be 230 volts everywhere in the system.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The relay outputs are capable of switching mains-voltage loads, yet the control electronics existed dangerously close to circuitry carrying higher voltages.&lt;/p&gt;
&lt;p&gt;Industrial equipment depends heavily on segregation between control electronics and power electronics. Without that separation, failures can have consequences far beyond a damaged PCB.&lt;/p&gt;
&lt;p&gt;The USB implementation also lacked many of the protections expected in a commercial design.&lt;/p&gt;
&lt;p&gt;The original version provided only the minimum necessary circuitry to make the USB hub operate.&lt;/p&gt;
&lt;p&gt;There was:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No ESD protection&lt;/li&gt;
&lt;li&gt;No overcurrent protection&lt;/li&gt;
&lt;li&gt;No controlled fault response&lt;/li&gt;
&lt;li&gt;No dedicated USB power monitoring&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These omissions are common in maker projects because they are often invisible during normal operation. Industrial equipment, by contrast, must survive repeated abuse from the outside world.&lt;/p&gt;
&lt;p&gt;Analogue routing presented another problem.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve routed my analogue ports right next to the relays. That will not work very good because they will couple into it.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Relay switching generates electrical noise. Placing sensitive ADC signals next to relay circuits creates opportunities for incorrect readings, instability and potentially damage.&lt;/p&gt;
&lt;p&gt;These are exactly the sort of layout considerations that are easy to overlook when the first goal is simply getting a board manufactured.&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_000280.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat33"&gt;Building a More Professional Controller&lt;/h2&gt;
&lt;p&gt;The second board revision demonstrates how quickly extra engineering effort accumulates.&lt;/p&gt;
&lt;p&gt;Clem moved to a four-layer PCB, improved component selection, reworked the enclosure integration and fundamentally redesigned the relay section.&lt;/p&gt;
&lt;p&gt;More importantly, he stopped trying to maximise feature count and instead prioritised reliability.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I preferred having good layout instead of more features on there because that is what the professional world considers the most important bit. Safe and reliable operation.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The revised USB implementation became significantly more sophisticated.&lt;/p&gt;
&lt;p&gt;Dedicated current-limiting circuitry and fault detection were added to protect both connected peripherals and the PLC itself.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;These have current control chips specifically ordered and they have to detect if something goes wrong so your device that you plug into these USB ports can&amp;#39;t destroy the overall thing.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This redesign required additional board area, forcing the reduction from four easily accessible USB ports down to two.&lt;/p&gt;
&lt;p&gt;That trade-off between capability and robustness appears repeatedly throughout industrial 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/0045.frame_5F00_000303.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat34"&gt;Isolation the Right Way&lt;/h2&gt;
&lt;p&gt;The most dramatic change involved the relay outputs. The revised PCB treats the relay circuitry and logic circuitry almost as completely separate systems. A dedicated isolation boundary divides the board into two sections. The only intentional signal path crossing that boundary is an optocoupler.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;An optocoupler is a way of galvanic isolation meaning there is no actual direct connection between these two halves. It is just and only a connection by light.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The relay control signals pass through an optocoupler before driving the ULN2003 relay driver.&lt;/p&gt;
&lt;p&gt;This ensures that electrical disturbances from the relay side cannot directly propagate into the processor circuitry.&lt;/p&gt;
&lt;p&gt;Even power supplies were separated.&lt;/p&gt;
&lt;p&gt;Two isolated DIN rail power supplies were used: one dedicated to logic electronics and another for relay operation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;We&amp;#39;re truly isolated.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The resulting architecture begins to resemble industrial control hardware far more closely than the original all-in-one 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_000318.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat35"&gt;The Device Tree Learning Curve&lt;/h2&gt;
&lt;p&gt;One of the most educational aspects of the project came from the software side.&lt;/p&gt;
&lt;p&gt;Developers accustomed to Arduino or Raspberry Pi ecosystems often expect GPIO pins to work immediately.&lt;/p&gt;
&lt;p&gt;The PocketBeagle 2 takes a more embedded Linux approach.&lt;/p&gt;
&lt;p&gt;GPIO functionality must first be defined through device tree overlays.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The apparently simple job of making a GPIO output starts involving device trees, pin multiplexing and the details of the underlying SoC.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Because the AM6254 allows pins to serve multiple functions, Linux must be explicitly told how they are being used.&lt;/p&gt;
&lt;p&gt;Clem candidly describes the experience:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Device tree overlays are very intimidating and complicated and I don&amp;#39;t even halfway know what I actually did there.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Once configured correctly, however, the flexibility becomes apparent. Linux gains direct access to GPIO, ADC resources and other processor features while still allowing PRU-based realtime control.&lt;/p&gt;
&lt;p&gt;That flexibility is one of the PocketBeagle 2&amp;#39;s greatest strengths, but it comes with a significantly steeper learning curve than many maker platforms.&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/6825.frame_5F00_000395.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat36"&gt;Working with the Onboard ADC&lt;/h2&gt;
&lt;p&gt;The analogue subsystem proved much more straightforward.&lt;/p&gt;
&lt;p&gt;Clem exposed four ADC channels and demonstrated how Linux can read them directly through the Industrial I/O framework.&lt;/p&gt;
&lt;p&gt;The Python implementation is refreshingly simple.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ADC_PATH = &amp;quot;/sys/bus/iio/devices/iio:device0&amp;quot;
VREF = 1.8
ADC_MAX = 4095

return (raw / ADC_MAX) * VREF
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Raw readings are collected from Linux system files and converted into voltages using the 12-bit ADC range. The implementation continuously reads all four channels and reports both raw counts and calculated voltages.&lt;/p&gt;
&lt;p&gt;This direct ADC access became a key part of the final demonstration.&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_000448.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat37"&gt;A Useful Failure&lt;/h2&gt;
&lt;p&gt;Unfortunately, not everything worked perfectly.&lt;/p&gt;
&lt;p&gt;One of the relay isolation circuits exposed a design mistake.&lt;/p&gt;
&lt;p&gt;The optocouplers were treated like standard logic devices rather than LED-driven isolation components.&lt;/p&gt;
&lt;p&gt;Current-limiting resistors had been omitted.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;With a 3.3 volt logic level I should have used a 330 ohm resistor.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The result was that the optocoupler LEDs never switched fully off once activated.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Once the LED activates for the first time it sits there drawing current at about two volts and never deactivates again.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The relays therefore refused to operate correctly during the final demonstration.&lt;/p&gt;
&lt;p&gt;Rather than hide the mistake, Clem used it to illustrate a reality of professional hardware development: unfamiliar parts frequently behave differently from assumptions made during schematic capture.&lt;/p&gt;
&lt;p&gt;Testing, redesign and verification are fundamental parts of the engineering process.&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_000558.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat38"&gt;Live Colour Detection Demo&lt;/h2&gt;
&lt;p&gt;For the final demonstration, the PLC uses its analogue inputs, USB subsystem, Linux environment and networking stack simultaneously.&lt;/p&gt;
&lt;p&gt;A USB webcam streams video into OpenCV while two analogue channels control detection parameters.&lt;/p&gt;
&lt;p&gt;One analogue input selects the target hue while another sets the intensity threshold.&lt;/p&gt;
&lt;p&gt;The software converts ADC values into colour detection parameters in realtime.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;application_hue = int(
    (raw / ADC_MAX) * 255
)

opencv_hue = int(
    (application_hue / 255) * 179
)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A value of 150 corresponds approximately to blue, allowing trim potentiometers wired to the PLC to tune colour detection while the system is operating.&lt;/p&gt;
&lt;p&gt;The software analyses webcam imagery, performs HSV filtering, calculates contour sizes and overlays detection results on the live image.&lt;/p&gt;
&lt;p&gt;Results are then streamed over the network using a built-in web server.&lt;/p&gt;
&lt;p&gt;During testing, Clem adjusted the analogue inputs live while watching colour detection track the blue colour of his shirt.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;We can set the hue and the saturation with these analogue potentiometers on the fly and observe the stream over the network.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The demonstration neatly combines nearly every subsystem available on the PLC.&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_000551.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat39"&gt;So Why Are PLCs So Expensive?&lt;/h2&gt;
&lt;p&gt;By the end of the project, Clem&amp;#39;s original question had evolved considerably. The first board genuinely supports the argument that many PLCs appear to be little more than a processor, some I/O and a box.&lt;/p&gt;
&lt;p&gt;The second board reveals the hidden engineering. Isolation barriers. ESD protection. Current limiting. Optocouplers. Power integrity. Analogue layout. Device tree configuration. Mechanical integration. Realtime processing. Redundancy. Testing. Verification.&lt;/p&gt;
&lt;p&gt;None of these individually seem particularly dramatic. Together they account for a substantial amount of engineering effort.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Now that we know how incredibly difficult it is to make a real PLC, a system that has redundancy, safety, watchdogs and all these constructive features to make the relays safe and all the connections and inputs reliable, I think we can appreciate that sometimes they just have to cost more.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That does not mean every industrial PLC automatically represents good value. It does demonstrate that the real complexity often lies in the details that nobody notices until they are missing. Clem set out to build a PLC to understand where the money goes. What he discovered is that making something look like a PLC is relatively easy.&lt;/p&gt;
&lt;p&gt;Building something that begins to behave like a professional industrial controller is a completely different challenge.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0f7hcdb8"&gt;Supporting Files and Links&lt;/h2&gt;
&lt;p&gt;- &lt;a href="https://docs.beagleboard.org/boards/pocketbeagle-2/index.html" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;PocketBeagle 2 Documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href="https://github.com/mayermakes/pocketbeagle2-dtso" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;Device Tree Tutorial by Grippy98&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/m/files/151635"&gt;Episode 728 Resources - Building a DIY PLC with PocketBeagle 2: Finding Out Why Industrial Controllers Cost So Much&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0f7gf5s4"&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-3b3da" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1683370,2112372~2,3767921~9,3518261,2847240~2,4825131,3498606,2628016,2325631~4,2815640,4668770,2292604,4162736,2292873,1825866~4&amp;nsku=05R6483,14N8153~2,47AK4343~9,82AH2552,51AC3055~2,59AM5501,78AH1768,97Y9704,96W3092~4,44AC5205,25AM9241,66W2137,83AK6230,19C7295,79R6955~4&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('3b3da'));" data-farnell="1683370,2112372~2,3767921~9,3518261,2847240~2,4825131,3498606,2628016,2325631~4,2815640,4668770,2292604,4162736,2292873,1825866~4" data-newark="05R6483,14N8153~2,47AK4343~9,82AH2552,51AC3055~2,59AM5501,78AH1768,97Y9704,96W3092~4,44AC5205,25AM9241,66W2137,83AK6230,19C7295,79R6955~4" data-comoverride="" data-cmpoverride="" data-cpc=",undefined~2,undefined~9,,undefined~2,,,,undefined~4,,,,,,undefined~4" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Optocoupler, Darlington Output, 4 Channel, DIP, 16 Pins, 50 mA, 5.3 kV, 500 %&lt;/td&gt;
&lt;td&gt;ISOCOM&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-12d27" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1683370&amp;nsku=05R6483&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('12d27'));" data-farnell="1683370" data-newark="05R6483" 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;USB Connector, USB Type A, USB 2.0, Receptacle, 4 Ways, Through Hole Mount, Vertical&lt;/td&gt;
&lt;td&gt;multicomp&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-8ce6d" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2112372~2&amp;nsku=14N8153~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('8ce6d'));" data-farnell="2112372~2" data-newark="14N8153~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;Wire-To-Board Terminal Block, 5.08 mm, 3 Ways, 30 AWG, 12 AWG, 3.31 mm&amp;sup2;, Screw&lt;/td&gt;
&lt;td&gt;w&amp;uuml;rth&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-3900d" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3767921~9&amp;nsku=47AK4343~9&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('3900d'));" data-farnell="3767921~9" data-newark="47AK4343~9" data-comoverride="" data-cmpoverride="" data-cpc="undefined~9" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plastic Enclosure, DIN Rail, Polycarbonate, 90 mm, 105 mm, 58 mm, IP20&lt;/td&gt;
&lt;td&gt;hammond Mit freundlichen Gr&amp;uuml;&amp;szlig;en&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-60eba" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3518261&amp;nsku=82AH2552&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('60eba'));" data-farnell="3518261" data-newark="82AH2552" 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;Pin Header, Board-to-Board, 2.54 mm, 2 Rows, 40 Contacts, Surface Mount&lt;/td&gt;
&lt;td&gt;multicomp pro&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-7e83c" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2847240~2&amp;nsku=51AC3055~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('7e83c'));" data-farnell="2847240~2" data-newark="51AC3055~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;Development Kit, PocketBeagle 2, AM6254, ARM Cortex-A53 / Cortex-M4F&lt;/td&gt;
&lt;td&gt;beagleboard&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-76c2f" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4825131&amp;nsku=59AM5501&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('76c2f'));" data-farnell="4825131" data-newark="59AM5501" 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;Flash Memory Card, MicroSDHC Card, 16 GB, Class 10, UHS-I U1, A1&lt;/td&gt;
&lt;td&gt;integral&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-6235e" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3498606&amp;nsku=78AH1768&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('6235e'));" data-farnell="3498606" data-newark="78AH1768" 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;DARLINGTON TRANSISTOR ARRAY, SOIC-16&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-2baad" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2628016&amp;nsku=97Y9704&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('2baad'));" data-farnell="2628016" data-newark="97Y9704" 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;General Purpose Relay, ORWH Series, Power, Non Latching, SPDT, 5 VDC, 10 A&lt;/td&gt;
&lt;td&gt;TE&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-a2509" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2325631~4&amp;nsku=96W3092~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('a2509'));" data-farnell="2325631~4" data-newark="96W3092~4" data-comoverride="" data-cmpoverride="" data-cpc="undefined~4" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AC/DC DIN Rail Power Supply (PSU), ITE, 1 Output, 15 W, 5 VDC, 3 A&lt;/td&gt;
&lt;td&gt;meanwell&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-638c0" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2815640&amp;nsku=44AC5205&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('638c0'));" data-farnell="2815640" data-newark="44AC5205" 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;AC/DC DIN Rail Power Supply (PSU), ITE, Industrial &amp;amp; Household, 1 Output, 15 W, 5 VDC, 3 A&lt;/td&gt;
&lt;td&gt;multicomp pro&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-b4d8c" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4668770&amp;nsku=25AM9241&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('b4d8c'));" data-farnell="4668770" data-newark="25AM9241" 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;USB Interface, USB Hub Controller, USB 2.0, 3 V, 3.6 V, QFN, 36 Pins&lt;/td&gt;
&lt;td&gt;microchip&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-08913" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2292604&amp;nsku=66W2137&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('08913'));" data-farnell="2292604" data-newark="66W2137" 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;ETHERNET ADAPTER, USB3.0 GIGABIT WHI&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-25edd" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4162736&amp;nsku=83AK6230&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('25edd'));" data-farnell="4162736" data-newark="83AK6230" 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;DIN Mounting Rail, DIN Mounting Rail, Racks &amp;amp; Cabinets, 1 m, 7.5 mm, 35 mm, Steel&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-6bfb6" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2292873&amp;nsku=19C7295&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('6bfb6'));" data-farnell="2292873" data-newark="19C7295" 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;TVS Diode, WE-TVS, Unidirectional, 5 V, 6.8 V, SOT-23, 6 Pins&lt;/td&gt;
&lt;td&gt;w&amp;uuml;rth&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-f1fa1" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1825866~4&amp;nsku=79R6955~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('f1fa1'));" data-farnell="1825866~4" data-newark="79R6955~4" data-comoverride="" data-cmpoverride="" data-cpc="undefined~4" 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_1k0f7gf5s5"&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;Crystal and caps for the usb2514&amp;rarr; 24MHz&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;usb current control ICs + mosfets&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_1k0f7gf5s6"&gt;&lt;/h3&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: plc, kicad pcb design, pocketbeagle 2, embedded linux, am6254, e14presents_mayermakes, analogue inputs, optocoupler, USB2514, industrial automation, diy plc, industrial control systems, programmable logic controller, ti sitara, friday_release, galvanic isolation, realtime linux&lt;/div&gt;
</description></item><item><title>Building a DIY PLC with PocketBeagle 2: Finding Out Why Industrial Controllers Cost So Much</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72104/building-a-diy-plc-with-pocketbeagle-2-finding-out-why-industrial-controllers-cost-so-much/revision/2</link><pubDate>Thu, 20 Aug 2026 09:21:28 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:c606295d-a31f-4adb-b481-3b8ae8d4d706</guid><dc:creator>cstanton</dc:creator><description>Revision 2 posted to Documents by cstanton on 8/20/2026 9:21:28 AM&lt;br /&gt;
&lt;div&gt;Can you really build your own industrial PLC, or are commercial controllers expensive for a reason? In this project, Clem sets out to answer that question by designing and building a PocketBeagle 2 based PLC from scratch, starting with a simple maker-friendly prototype before tackling the realities of industrial design, including electrical isolation, ESD protection, USB compliance, analogue signal integrity and realtime control. Along the way he explores the AM6254&amp;#39;s Linux and PRU architecture, wrestles with device tree overlays, exposes the board&amp;#39;s onboard 12-bit ADC, and finishes with a live colour-detection demo that combines analogue inputs, USB vision and network streaming. Most importantly, the project reveals where the real engineering effort in industrial hardware lives, and why a reliable PLC is far more than just a computer in a DIN rail enclosure&lt;/div&gt;
&lt;h2 id="mcetoc_1k0f7fqfq0"&gt;Watch Clem Pocket the Industrialisation&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-04-35/The-Industrial-PocketBeagle-PLC.mp4"&gt;community.element14.com/.../The-Industrial-PocketBeagle-PLC.mp4&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Clem has always had a healthy suspicion of expensive industrial hardware. Looking at the price of programmable logic controllers (PLCs), his initial reaction was much the same as many makers staring at a catalogue of industrial equipment: surely there cannot be that much inside a PLC to justify the cost.&lt;/p&gt;
&lt;p&gt;Rather than speculate, he decided to build one.&lt;/p&gt;
&lt;p&gt;The result is a PocketBeagle 2 based PLC project that starts out as a straightforward maker build and gradually evolves into something much closer to a genuine industrial controller. Along the way, it becomes a lesson in electrical isolation, PCB layout, device tree configuration, realtime processing and the countless small decisions that separate a prototype from a product.&lt;/p&gt;
&lt;p&gt;As Clem puts it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Sometimes they are actually just an Arduino in a fancy box and some relays... but there are also legacy systems with big brand names and high price tags and these are built for reliability.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;His goal was not to reproduce an industrial PLC exactly, but to understand where all that engineering effort goes.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat30"&gt;Starting with an Open PLC Platform&lt;/h2&gt;
&lt;p&gt;Commercial PLCs often come with proprietary software ecosystems, vendor lock-in and long-term support guarantees. Clem wanted to approach the problem from a different direction.&lt;/p&gt;
&lt;p&gt;Instead of using a dedicated PLC platform, he based his design around the &lt;a href="https://docs.beagleboard.org/boards/pocketbeagle-2/index.html" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;PocketBeagle 2&lt;/a&gt;, a compact Linux-capable development board built around Texas Instruments&amp;#39; AM6254 Sitara processor.&lt;/p&gt;
&lt;p&gt;What attracted him was the combination of high-level Linux functionality and low-level deterministic control.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I wanted it to have serious capabilities. It should have realtime Linux support and it also should have a deterministic way of controlling the inputs and outputs.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Unlike many maker boards, the PocketBeagle 2 includes two Programmable Realtime Units (PRUs), effectively dedicated microcontroller-class cores integrated into the processor.&lt;/p&gt;
&lt;p&gt;These can operate independently from Linux and are designed specifically for tasks that require predictable timing.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;We have the Linux controls around USB devices, high-level stuff like AI models and communication with networks and other devices, and then the PRUs can control all the inputs and outputs.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The AM6254 architecture immediately begins to resemble the split architecture found in many industrial systems. Linux handles networking, storage and complex applications while dedicated realtime processors handle machine control.&lt;/p&gt;
&lt;p&gt;Clem even points out that the second PRU could act as a watchdog, redundancy controller or cross-checking processor, similar to techniques found in safety-oriented industrial equipment.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat31"&gt;Version One: The Maker Approach&lt;/h2&gt;
&lt;p&gt;The first PLC design intentionally follows the path many hobbyists would take.&lt;/p&gt;
&lt;p&gt;A Hammond DIN rail enclosure serves as the mechanical foundation, while a relatively simple two-layer PCB carries the electronics. The board includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PocketBeagle 2 controller&lt;/li&gt;
&lt;li&gt;Microchip USB2514 USB 2.0 hub controller&lt;/li&gt;
&lt;li&gt;Four analogue input channels&lt;/li&gt;
&lt;li&gt;Four relay outputs&lt;/li&gt;
&lt;li&gt;ULN2003 Darlington relay driver&lt;/li&gt;
&lt;li&gt;Dual USB host ports&lt;/li&gt;
&lt;li&gt;DIN rail mounting format&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The PCB itself was designed quickly.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I eyeballed the position of all the connectors and I tried to put as many features in here as possible.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rather than spending days optimising every mechanical detail, the focus was on getting something functional into the enclosure as quickly as possible.&lt;/p&gt;
&lt;p&gt;One feature Clem was especially keen to exploit was the PocketBeagle 2&amp;#39;s integrated twelve-bit ADC. Unlike a typical Raspberry Pi, analogue inputs can be connected directly to the processor without requiring additional converter hardware.&lt;/p&gt;
&lt;p&gt;The analogue channels are exposed through simple screw terminals, providing an easy way to interact with sensors and control inputs. The USB subsystem was another area where the project deliberately pushed the platform. By integrating the USB2514 hub controller, the PLC gains multiple USB ports for cameras, storage devices and peripherals.&lt;/p&gt;
&lt;p&gt;On paper, it looked remarkably capable. Unfortunately, industrial design concerns do not appear on a schematic until something goes wrong.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat32"&gt;When &amp;quot;Works&amp;quot; Isn&amp;#39;t Good Enough&lt;/h2&gt;
&lt;p&gt;The first design functions. For many projects, that would be a success.&lt;/p&gt;
&lt;p&gt;For a PLC, however, functionality is only the starting point.&lt;/p&gt;
&lt;p&gt;Clem soon began identifying weaknesses that would become serious problems in an industrial environment.&lt;/p&gt;
&lt;p&gt;The first issue was electrical safety.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;There is no real isolation in the original design. In case something goes wrong there could potentially be 230 volts everywhere in the system.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The relay outputs are capable of switching mains-voltage loads, yet the control electronics existed dangerously close to circuitry carrying higher voltages.&lt;/p&gt;
&lt;p&gt;Industrial equipment depends heavily on segregation between control electronics and power electronics. Without that separation, failures can have consequences far beyond a damaged PCB.&lt;/p&gt;
&lt;p&gt;The USB implementation also lacked many of the protections expected in a commercial design.&lt;/p&gt;
&lt;p&gt;The original version provided only the minimum necessary circuitry to make the USB hub operate.&lt;/p&gt;
&lt;p&gt;There was:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No ESD protection&lt;/li&gt;
&lt;li&gt;No overcurrent protection&lt;/li&gt;
&lt;li&gt;No controlled fault response&lt;/li&gt;
&lt;li&gt;No dedicated USB power monitoring&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These omissions are common in maker projects because they are often invisible during normal operation. Industrial equipment, by contrast, must survive repeated abuse from the outside world.&lt;/p&gt;
&lt;p&gt;Analogue routing presented another problem.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve routed my analogue ports right next to the relays. That will not work very good because they will couple into it.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Relay switching generates electrical noise. Placing sensitive ADC signals next to relay circuits creates opportunities for incorrect readings, instability and potentially damage.&lt;/p&gt;
&lt;p&gt;These are exactly the sort of layout considerations that are easy to overlook when the first goal is simply getting a board manufactured.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat33"&gt;Building a More Professional Controller&lt;/h2&gt;
&lt;p&gt;The second board revision demonstrates how quickly extra engineering effort accumulates.&lt;/p&gt;
&lt;p&gt;Clem moved to a four-layer PCB, improved component selection, reworked the enclosure integration and fundamentally redesigned the relay section.&lt;/p&gt;
&lt;p&gt;More importantly, he stopped trying to maximise feature count and instead prioritised reliability.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I preferred having good layout instead of more features on there because that is what the professional world considers the most important bit. Safe and reliable operation.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The revised USB implementation became significantly more sophisticated.&lt;/p&gt;
&lt;p&gt;Dedicated current-limiting circuitry and fault detection were added to protect both connected peripherals and the PLC itself.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;These have current control chips specifically ordered and they have to detect if something goes wrong so your device that you plug into these USB ports can&amp;#39;t destroy the overall thing.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This redesign required additional board area, forcing the reduction from four easily accessible USB ports down to two.&lt;/p&gt;
&lt;p&gt;That trade-off between capability and robustness appears repeatedly throughout industrial design.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat34"&gt;Isolation the Right Way&lt;/h2&gt;
&lt;p&gt;The most dramatic change involved the relay outputs.&lt;/p&gt;
&lt;p&gt;The revised PCB treats the relay circuitry and logic circuitry almost as completely separate systems.&lt;/p&gt;
&lt;p&gt;A dedicated isolation boundary divides the board into two sections.&lt;/p&gt;
&lt;p&gt;The only intentional signal path crossing that boundary is an optocoupler.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;An optocoupler is a way of galvanic isolation meaning there is no actual direct connection between these two halves. It is just and only a connection by light.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The relay control signals pass through an optocoupler before driving the ULN2003 relay driver.&lt;/p&gt;
&lt;p&gt;This ensures that electrical disturbances from the relay side cannot directly propagate into the processor circuitry.&lt;/p&gt;
&lt;p&gt;Even power supplies were separated.&lt;/p&gt;
&lt;p&gt;Two isolated DIN rail power supplies were used: one dedicated to logic electronics and another for relay operation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;We&amp;#39;re truly isolated.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The resulting architecture begins to resemble industrial control hardware far more closely than the original all-in-one design.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat35"&gt;The Device Tree Learning Curve&lt;/h2&gt;
&lt;p&gt;One of the most educational aspects of the project came from the software side.&lt;/p&gt;
&lt;p&gt;Developers accustomed to Arduino or Raspberry Pi ecosystems often expect GPIO pins to work immediately.&lt;/p&gt;
&lt;p&gt;The PocketBeagle 2 takes a more embedded Linux approach.&lt;/p&gt;
&lt;p&gt;GPIO functionality must first be defined through device tree overlays.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The apparently simple job of making a GPIO output starts involving device trees, pin multiplexing and the details of the underlying SoC.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Because the AM6254 allows pins to serve multiple functions, Linux must be explicitly told how they are being used.&lt;/p&gt;
&lt;p&gt;Clem candidly describes the experience:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Device tree overlays are very intimidating and complicated and I don&amp;#39;t even halfway know what I actually did there.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Once configured correctly, however, the flexibility becomes apparent. Linux gains direct access to GPIO, ADC resources and other processor features while still allowing PRU-based realtime control.&lt;/p&gt;
&lt;p&gt;That flexibility is one of the PocketBeagle 2&amp;#39;s greatest strengths, but it comes with a significantly steeper learning curve than many maker platforms.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat36"&gt;Working with the Onboard ADC&lt;/h2&gt;
&lt;p&gt;The analogue subsystem proved much more straightforward.&lt;/p&gt;
&lt;p&gt;Clem exposed four ADC channels and demonstrated how Linux can read them directly through the Industrial I/O framework.&lt;/p&gt;
&lt;p&gt;The Python implementation is refreshingly simple.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ADC_PATH = &amp;quot;/sys/bus/iio/devices/iio:device0&amp;quot;
VREF = 1.8
ADC_MAX = 4095

return (raw / ADC_MAX) * VREF
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Raw readings are collected from Linux system files and converted into voltages using the 12-bit ADC range. The implementation continuously reads all four channels and reports both raw counts and calculated voltages.&lt;/p&gt;
&lt;p&gt;This direct ADC access became a key part of the final demonstration.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat37"&gt;A Useful Failure&lt;/h2&gt;
&lt;p&gt;Unfortunately, not everything worked perfectly.&lt;/p&gt;
&lt;p&gt;One of the relay isolation circuits exposed a design mistake.&lt;/p&gt;
&lt;p&gt;The optocouplers were treated like standard logic devices rather than LED-driven isolation components.&lt;/p&gt;
&lt;p&gt;Current-limiting resistors had been omitted.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;With a 3.3 volt logic level I should have used a 330 ohm resistor.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The result was that the optocoupler LEDs never switched fully off once activated.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Once the LED activates for the first time it sits there drawing current at about two volts and never deactivates again.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The relays therefore refused to operate correctly during the final demonstration.&lt;/p&gt;
&lt;p&gt;Rather than hide the mistake, Clem used it to illustrate a reality of professional hardware development: unfamiliar parts frequently behave differently from assumptions made during schematic capture.&lt;/p&gt;
&lt;p&gt;Testing, redesign and verification are fundamental parts of the engineering process.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat38"&gt;Live Colour Detection Demo&lt;/h2&gt;
&lt;p&gt;For the final demonstration, the PLC uses its analogue inputs, USB subsystem, Linux environment and networking stack simultaneously.&lt;/p&gt;
&lt;p&gt;A USB webcam streams video into OpenCV while two analogue channels control detection parameters.&lt;/p&gt;
&lt;p&gt;One analogue input selects the target hue while another sets the intensity threshold.&lt;/p&gt;
&lt;p&gt;The software converts ADC values into colour detection parameters in realtime.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;application_hue = int(
    (raw / ADC_MAX) * 255
)

opencv_hue = int(
    (application_hue / 255) * 179
)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A value of 150 corresponds approximately to blue, allowing trim potentiometers wired to the PLC to tune colour detection while the system is operating.&lt;/p&gt;
&lt;p&gt;The software analyses webcam imagery, performs HSV filtering, calculates contour sizes and overlays detection results on the live image.&lt;/p&gt;
&lt;p&gt;Results are then streamed over the network using a built-in web server.&lt;/p&gt;
&lt;p&gt;During testing, Clem adjusted the analogue inputs live while watching colour detection track the blue colour of his shirt.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;We can set the hue and the saturation with these analogue potentiometers on the fly and observe the stream over the network.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The demonstration neatly combines nearly every subsystem available on the PLC.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat39"&gt;So Why Are PLCs So Expensive?&lt;/h2&gt;
&lt;p&gt;By the end of the project, Clem&amp;#39;s original question had evolved considerably. The first board genuinely supports the argument that many PLCs appear to be little more than a processor, some I/O and a box.&lt;/p&gt;
&lt;p&gt;The second board reveals the hidden engineering. Isolation barriers. ESD protection. Current limiting. Optocouplers. Power integrity. Analogue layout. Device tree configuration. Mechanical integration. Realtime processing. Redundancy. Testing. Verification.&lt;/p&gt;
&lt;p&gt;None of these individually seem particularly dramatic. Together they account for a substantial amount of engineering effort.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Now that we know how incredibly difficult it is to make a real PLC, a system that has redundancy, safety, watchdogs and all these constructive features to make the relays safe and all the connections and inputs reliable, I think we can appreciate that sometimes they just have to cost more.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That does not mean every industrial PLC automatically represents good value. It does demonstrate that the real complexity often lies in the details that nobody notices until they are missing. Clem set out to build a PLC to understand where the money goes. What he discovered is that making something look like a PLC is relatively easy.&lt;/p&gt;
&lt;p&gt;Building something that begins to behave like a professional industrial controller is a completely different challenge.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0f7hcdb8"&gt;Supporting Files and Links&lt;/h2&gt;
&lt;p&gt;- &lt;a href="https://docs.beagleboard.org/boards/pocketbeagle-2/index.html" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;PocketBeagle 2 Documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href="https://github.com/mayermakes/pocketbeagle2-dtso" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;Device Tree Tutorial by Grippy98&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1k0f7gf5s4"&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-9170f" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1683370,2112372~2,3767921~9,3518261,2847240~2,4825131,3498606,2628016,2325631~4,2815640,4668770,2292604,4162736,2292873,1825866~4&amp;nsku=05R6483,14N8153~2,47AK4343~9,82AH2552,51AC3055~2,59AM5501,78AH1768,97Y9704,96W3092~4,44AC5205,25AM9241,66W2137,83AK6230,19C7295,79R6955~4&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('9170f'));" data-farnell="1683370,2112372~2,3767921~9,3518261,2847240~2,4825131,3498606,2628016,2325631~4,2815640,4668770,2292604,4162736,2292873,1825866~4" data-newark="05R6483,14N8153~2,47AK4343~9,82AH2552,51AC3055~2,59AM5501,78AH1768,97Y9704,96W3092~4,44AC5205,25AM9241,66W2137,83AK6230,19C7295,79R6955~4" data-comoverride="" data-cmpoverride="" data-cpc=",undefined~2,undefined~9,,undefined~2,,,,undefined~4,,,,,,undefined~4" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Optocoupler, Darlington Output, 4 Channel, DIP, 16 Pins, 50 mA, 5.3 kV, 500 %&lt;/td&gt;
&lt;td&gt;ISOCOM&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-9c726" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1683370&amp;nsku=05R6483&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('9c726'));" data-farnell="1683370" data-newark="05R6483" 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;USB Connector, USB Type A, USB 2.0, Receptacle, 4 Ways, Through Hole Mount, Vertical&lt;/td&gt;
&lt;td&gt;multicomp&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-f2064" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2112372~2&amp;nsku=14N8153~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('f2064'));" data-farnell="2112372~2" data-newark="14N8153~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;Wire-To-Board Terminal Block, 5.08 mm, 3 Ways, 30 AWG, 12 AWG, 3.31 mm&amp;sup2;, Screw&lt;/td&gt;
&lt;td&gt;w&amp;uuml;rth&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-c3131" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3767921~9&amp;nsku=47AK4343~9&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('c3131'));" data-farnell="3767921~9" data-newark="47AK4343~9" data-comoverride="" data-cmpoverride="" data-cpc="undefined~9" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plastic Enclosure, DIN Rail, Polycarbonate, 90 mm, 105 mm, 58 mm, IP20&lt;/td&gt;
&lt;td&gt;hammond Mit freundlichen Gr&amp;uuml;&amp;szlig;en&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-10009" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3518261&amp;nsku=82AH2552&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('10009'));" data-farnell="3518261" data-newark="82AH2552" 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;Pin Header, Board-to-Board, 2.54 mm, 2 Rows, 40 Contacts, Surface Mount&lt;/td&gt;
&lt;td&gt;multicomp pro&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-87511" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2847240~2&amp;nsku=51AC3055~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('87511'));" data-farnell="2847240~2" data-newark="51AC3055~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;Development Kit, PocketBeagle 2, AM6254, ARM Cortex-A53 / Cortex-M4F&lt;/td&gt;
&lt;td&gt;beagleboard&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-3f85a" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4825131&amp;nsku=59AM5501&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('3f85a'));" data-farnell="4825131" data-newark="59AM5501" 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;Flash Memory Card, MicroSDHC Card, 16 GB, Class 10, UHS-I U1, A1&lt;/td&gt;
&lt;td&gt;integral&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-db300" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3498606&amp;nsku=78AH1768&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('db300'));" data-farnell="3498606" data-newark="78AH1768" 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;DARLINGTON TRANSISTOR ARRAY, SOIC-16&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-6d200" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2628016&amp;nsku=97Y9704&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('6d200'));" data-farnell="2628016" data-newark="97Y9704" 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;General Purpose Relay, ORWH Series, Power, Non Latching, SPDT, 5 VDC, 10 A&lt;/td&gt;
&lt;td&gt;TE&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-877dd" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2325631~4&amp;nsku=96W3092~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('877dd'));" data-farnell="2325631~4" data-newark="96W3092~4" data-comoverride="" data-cmpoverride="" data-cpc="undefined~4" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AC/DC DIN Rail Power Supply (PSU), ITE, 1 Output, 15 W, 5 VDC, 3 A&lt;/td&gt;
&lt;td&gt;meanwell&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-18e99" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2815640&amp;nsku=44AC5205&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('18e99'));" data-farnell="2815640" data-newark="44AC5205" 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;AC/DC DIN Rail Power Supply (PSU), ITE, Industrial &amp;amp; Household, 1 Output, 15 W, 5 VDC, 3 A&lt;/td&gt;
&lt;td&gt;multicomp pro&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-d6a06" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4668770&amp;nsku=25AM9241&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('d6a06'));" data-farnell="4668770" data-newark="25AM9241" 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;USB Interface, USB Hub Controller, USB 2.0, 3 V, 3.6 V, QFN, 36 Pins&lt;/td&gt;
&lt;td&gt;microchip&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-51c26" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2292604&amp;nsku=66W2137&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('51c26'));" data-farnell="2292604" data-newark="66W2137" 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;ETHERNET ADAPTER, USB3.0 GIGABIT WHI&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-1836d" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4162736&amp;nsku=83AK6230&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('1836d'));" data-farnell="4162736" data-newark="83AK6230" 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;DIN Mounting Rail, DIN Mounting Rail, Racks &amp;amp; Cabinets, 1 m, 7.5 mm, 35 mm, Steel&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-aa4ed" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2292873&amp;nsku=19C7295&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('aa4ed'));" data-farnell="2292873" data-newark="19C7295" 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;TVS Diode, WE-TVS, Unidirectional, 5 V, 6.8 V, SOT-23, 6 Pins&lt;/td&gt;
&lt;td&gt;w&amp;uuml;rth&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-51600" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1825866~4&amp;nsku=79R6955~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('51600'));" data-farnell="1825866~4" data-newark="79R6955~4" data-comoverride="" data-cmpoverride="" data-cpc="undefined~4" 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_1k0f7gf5s5"&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;Crystal and caps for the usb2514&amp;rarr; 24MHz&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;usb current control ICs + mosfets&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_1k0f7gf5s6"&gt;&lt;/h3&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Building a DIY PLC with PocketBeagle 2: Finding Out Why Industrial Controllers Cost So Much</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72104/building-a-diy-plc-with-pocketbeagle-2-finding-out-why-industrial-controllers-cost-so-much/revision/1</link><pubDate>Wed, 19 Aug 2026 17:15:25 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:c606295d-a31f-4adb-b481-3b8ae8d4d706</guid><dc:creator>cstanton</dc:creator><description>Revision 1 posted to Documents by cstanton on 8/19/2026 5:15:25 PM&lt;br /&gt;

&lt;div&gt;Can you really build your own industrial PLC, or are commercial controllers expensive for a reason? In this project, Clem sets out to answer that question by designing and building a PocketBeagle 2 based PLC from scratch, starting with a simple maker-friendly prototype before tackling the realities of industrial design, including electrical isolation, ESD protection, USB compliance, analogue signal integrity and realtime control. Along the way he explores the AM6254&amp;#39;s Linux and PRU architecture, wrestles with device tree overlays, exposes the board&amp;#39;s onboard 12-bit ADC, and finishes with a live colour-detection demo that combines analogue inputs, USB vision and network streaming. Most importantly, the project reveals where the real engineering effort in industrial hardware lives, and why a reliable PLC is far more than just a computer in a DIN rail enclosure&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Watch Clem Pocket the Industrialisation&lt;/p&gt;
&lt;p&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-04-35/The-Industrial-PocketBeagle-PLC.mp4"&gt;community.element14.com/.../The-Industrial-PocketBeagle-PLC.mp4&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Clem has always had a healthy suspicion of expensive industrial hardware. Looking at the price of programmable logic controllers (PLCs), his initial reaction was much the same as many makers staring at a catalogue of industrial equipment: surely there cannot be that much inside a PLC to justify the cost.&lt;/p&gt;
&lt;p&gt;Rather than speculate, he decided to build one.&lt;/p&gt;
&lt;p&gt;The result is a PocketBeagle 2 based PLC project that starts out as a straightforward maker build and gradually evolves into something much closer to a genuine industrial controller. Along the way, it becomes a lesson in electrical isolation, PCB layout, device tree configuration, realtime processing and the countless small decisions that separate a prototype from a product.&lt;/p&gt;
&lt;p&gt;As Clem puts it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Sometimes they are actually just an Arduino in a fancy box and some relays... but there are also legacy systems with big brand names and high price tags and these are built for reliability.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;His goal was not to reproduce an industrial PLC exactly, but to understand where all that engineering effort goes.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat30"&gt;Starting with an Open PLC Platform&lt;/h2&gt;
&lt;p&gt;Commercial PLCs often come with proprietary software ecosystems, vendor lock-in and long-term support guarantees. Clem wanted to approach the problem from a different direction.&lt;/p&gt;
&lt;p&gt;Instead of using a dedicated PLC platform, he based his design around the &lt;a href="https://docs.beagleboard.org/boards/pocketbeagle-2/index.html" rel="noopener noreferrer nofollow" target="_blank" data-e14adj="t"&gt;PocketBeagle 2&lt;/a&gt;, a compact Linux-capable development board built around Texas Instruments&amp;#39; AM6254 Sitara processor.&lt;/p&gt;
&lt;p&gt;What attracted him was the combination of high-level Linux functionality and low-level deterministic control.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I wanted it to have serious capabilities. It should have realtime Linux support and it also should have a deterministic way of controlling the inputs and outputs.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Unlike many maker boards, the PocketBeagle 2 includes two Programmable Realtime Units (PRUs), effectively dedicated microcontroller-class cores integrated into the processor.&lt;/p&gt;
&lt;p&gt;These can operate independently from Linux and are designed specifically for tasks that require predictable timing.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;We have the Linux controls around USB devices, high-level stuff like AI models and communication with networks and other devices, and then the PRUs can control all the inputs and outputs.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The AM6254 architecture immediately begins to resemble the split architecture found in many industrial systems. Linux handles networking, storage and complex applications while dedicated realtime processors handle machine control.&lt;/p&gt;
&lt;p&gt;Clem even points out that the second PRU could act as a watchdog, redundancy controller or cross-checking processor, similar to techniques found in safety-oriented industrial equipment.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat31"&gt;Version One: The Maker Approach&lt;/h2&gt;
&lt;p&gt;The first PLC design intentionally follows the path many hobbyists would take.&lt;/p&gt;
&lt;p&gt;A Hammond DIN rail enclosure serves as the mechanical foundation, while a relatively simple two-layer PCB carries the electronics. The board includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PocketBeagle 2 controller&lt;/li&gt;
&lt;li&gt;Microchip USB2514 USB 2.0 hub controller&lt;/li&gt;
&lt;li&gt;Four analogue input channels&lt;/li&gt;
&lt;li&gt;Four relay outputs&lt;/li&gt;
&lt;li&gt;ULN2003 Darlington relay driver&lt;/li&gt;
&lt;li&gt;Dual USB host ports&lt;/li&gt;
&lt;li&gt;DIN rail mounting format&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The PCB itself was designed quickly.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I eyeballed the position of all the connectors and I tried to put as many features in here as possible.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rather than spending days optimising every mechanical detail, the focus was on getting something functional into the enclosure as quickly as possible.&lt;/p&gt;
&lt;p&gt;One feature Clem was especially keen to exploit was the PocketBeagle 2&amp;#39;s integrated twelve-bit ADC. Unlike a typical Raspberry Pi, analogue inputs can be connected directly to the processor without requiring additional converter hardware.&lt;/p&gt;
&lt;p&gt;The analogue channels are exposed through simple screw terminals, providing an easy way to interact with sensors and control inputs.&lt;/p&gt;
&lt;p&gt;The USB subsystem was another area where the project deliberately pushed the platform. By integrating the USB2514 hub controller, the PLC gains multiple USB ports for cameras, storage devices and peripherals.&lt;/p&gt;
&lt;p&gt;On paper, it looked remarkably capable.&lt;/p&gt;
&lt;p&gt;Unfortunately, industrial design concerns do not appear on a schematic until something goes wrong.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat32"&gt;When &amp;quot;Works&amp;quot; Isn&amp;#39;t Good Enough&lt;/h2&gt;
&lt;p&gt;The first design functions. For many projects, that would be a success.&lt;/p&gt;
&lt;p&gt;For a PLC, however, functionality is only the starting point.&lt;/p&gt;
&lt;p&gt;Clem soon began identifying weaknesses that would become serious problems in an industrial environment.&lt;/p&gt;
&lt;p&gt;The first issue was electrical safety.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;There is no real isolation in the original design. In case something goes wrong there could potentially be 230 volts everywhere in the system.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The relay outputs are capable of switching mains-voltage loads, yet the control electronics existed dangerously close to circuitry carrying higher voltages.&lt;/p&gt;
&lt;p&gt;Industrial equipment depends heavily on segregation between control electronics and power electronics. Without that separation, failures can have consequences far beyond a damaged PCB.&lt;/p&gt;
&lt;p&gt;The USB implementation also lacked many of the protections expected in a commercial design.&lt;/p&gt;
&lt;p&gt;The original version provided only the minimum necessary circuitry to make the USB hub operate.&lt;/p&gt;
&lt;p&gt;There was:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No ESD protection&lt;/li&gt;
&lt;li&gt;No overcurrent protection&lt;/li&gt;
&lt;li&gt;No controlled fault response&lt;/li&gt;
&lt;li&gt;No dedicated USB power monitoring&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These omissions are common in maker projects because they are often invisible during normal operation. Industrial equipment, by contrast, must survive repeated abuse from the outside world.&lt;/p&gt;
&lt;p&gt;Analogue routing presented another problem.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve routed my analogue ports right next to the relays. That will not work very good because they will couple into it.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Relay switching generates electrical noise. Placing sensitive ADC signals next to relay circuits creates opportunities for incorrect readings, instability and potentially damage.&lt;/p&gt;
&lt;p&gt;These are exactly the sort of layout considerations that are easy to overlook when the first goal is simply getting a board manufactured.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat33"&gt;Building a More Professional Controller&lt;/h2&gt;
&lt;p&gt;The second board revision demonstrates how quickly extra engineering effort accumulates.&lt;/p&gt;
&lt;p&gt;Clem moved to a four-layer PCB, improved component selection, reworked the enclosure integration and fundamentally redesigned the relay section.&lt;/p&gt;
&lt;p&gt;More importantly, he stopped trying to maximise feature count and instead prioritised reliability.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I preferred having good layout instead of more features on there because that is what the professional world considers the most important bit. Safe and reliable operation.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The revised USB implementation became significantly more sophisticated.&lt;/p&gt;
&lt;p&gt;Dedicated current-limiting circuitry and fault detection were added to protect both connected peripherals and the PLC itself.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;These have current control chips specifically ordered and they have to detect if something goes wrong so your device that you plug into these USB ports can&amp;#39;t destroy the overall thing.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This redesign required additional board area, forcing the reduction from four easily accessible USB ports down to two.&lt;/p&gt;
&lt;p&gt;That trade-off between capability and robustness appears repeatedly throughout industrial design.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat34"&gt;Isolation the Right Way&lt;/h2&gt;
&lt;p&gt;The most dramatic change involved the relay outputs.&lt;/p&gt;
&lt;p&gt;The revised PCB treats the relay circuitry and logic circuitry almost as completely separate systems.&lt;/p&gt;
&lt;p&gt;A dedicated isolation boundary divides the board into two sections.&lt;/p&gt;
&lt;p&gt;The only intentional signal path crossing that boundary is an optocoupler.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;An optocoupler is a way of galvanic isolation meaning there is no actual direct connection between these two halves. It is just and only a connection by light.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The relay control signals pass through an optocoupler before driving the ULN2003 relay driver.&lt;/p&gt;
&lt;p&gt;This ensures that electrical disturbances from the relay side cannot directly propagate into the processor circuitry.&lt;/p&gt;
&lt;p&gt;Even power supplies were separated.&lt;/p&gt;
&lt;p&gt;Two isolated DIN rail power supplies were used: one dedicated to logic electronics and another for relay operation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;We&amp;#39;re truly isolated.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The resulting architecture begins to resemble industrial control hardware far more closely than the original all-in-one design.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat35"&gt;The Device Tree Learning Curve&lt;/h2&gt;
&lt;p&gt;One of the most educational aspects of the project came from the software side.&lt;/p&gt;
&lt;p&gt;Developers accustomed to Arduino or Raspberry Pi ecosystems often expect GPIO pins to work immediately.&lt;/p&gt;
&lt;p&gt;The PocketBeagle 2 takes a more embedded Linux approach.&lt;/p&gt;
&lt;p&gt;GPIO functionality must first be defined through device tree overlays.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The apparently simple job of making a GPIO output starts involving device trees, pin multiplexing and the details of the underlying SoC.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Because the AM6254 allows pins to serve multiple functions, Linux must be explicitly told how they are being used.&lt;/p&gt;
&lt;p&gt;Clem candidly describes the experience:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Device tree overlays are very intimidating and complicated and I don&amp;#39;t even halfway know what I actually did there.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Once configured correctly, however, the flexibility becomes apparent. Linux gains direct access to GPIO, ADC resources and other processor features while still allowing PRU-based realtime control.&lt;/p&gt;
&lt;p&gt;That flexibility is one of the PocketBeagle 2&amp;#39;s greatest strengths, but it comes with a significantly steeper learning curve than many maker platforms.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat36"&gt;Working with the Onboard ADC&lt;/h2&gt;
&lt;p&gt;The analogue subsystem proved much more straightforward.&lt;/p&gt;
&lt;p&gt;Clem exposed four ADC channels and demonstrated how Linux can read them directly through the Industrial I/O framework.&lt;/p&gt;
&lt;p&gt;The Python implementation is refreshingly simple.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ADC_PATH = &amp;quot;/sys/bus/iio/devices/iio:device0&amp;quot;
VREF = 1.8
ADC_MAX = 4095

return (raw / ADC_MAX) * VREF
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Raw readings are collected from Linux system files and converted into voltages using the 12-bit ADC range.&lt;/p&gt;
&lt;p&gt;The implementation continuously reads all four channels and reports both raw counts and calculated voltages.&lt;/p&gt;
&lt;p&gt;This direct ADC access became a key part of the final demonstration.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat37"&gt;A Useful Failure&lt;/h2&gt;
&lt;p&gt;Unfortunately, not everything worked perfectly.&lt;/p&gt;
&lt;p&gt;One of the relay isolation circuits exposed a design mistake.&lt;/p&gt;
&lt;p&gt;The optocouplers were treated like standard logic devices rather than LED-driven isolation components.&lt;/p&gt;
&lt;p&gt;Current-limiting resistors had been omitted.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;With a 3.3 volt logic level I should have used a 330 ohm resistor.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The result was that the optocoupler LEDs never switched fully off once activated.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Once the LED activates for the first time it sits there drawing current at about two volts and never deactivates again.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The relays therefore refused to operate correctly during the final demonstration.&lt;/p&gt;
&lt;p&gt;Rather than hide the mistake, Clem used it to illustrate a reality of professional hardware development: unfamiliar parts frequently behave differently from assumptions made during schematic capture.&lt;/p&gt;
&lt;p&gt;Testing, redesign and verification are fundamental parts of the engineering process.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat38"&gt;Live Colour Detection Demo&lt;/h2&gt;
&lt;p&gt;For the final demonstration, the PLC uses its analogue inputs, USB subsystem, Linux environment and networking stack simultaneously.&lt;/p&gt;
&lt;p&gt;A USB webcam streams video into OpenCV while two analogue channels control detection parameters.&lt;/p&gt;
&lt;p&gt;One analogue input selects the target hue while another sets the intensity threshold.&lt;/p&gt;
&lt;p&gt;The software converts ADC values into colour detection parameters in realtime.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;application_hue = int(
    (raw / ADC_MAX) * 255
)

opencv_hue = int(
    (application_hue / 255) * 179
)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A value of 150 corresponds approximately to blue, allowing trim potentiometers wired to the PLC to tune colour detection while the system is operating.&lt;/p&gt;
&lt;p&gt;The software analyses webcam imagery, performs HSV filtering, calculates contour sizes and overlays detection results on the live image.&lt;/p&gt;
&lt;p&gt;Results are then streamed over the network using a built-in web server.&lt;/p&gt;
&lt;p&gt;During testing, Clem adjusted the analogue inputs live while watching colour detection track the blue colour of his shirt.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;We can set the hue and the saturation with these analogue potentiometers on the fly and observe the stream over the network.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The demonstration neatly combines nearly every subsystem available on the PLC.&lt;/p&gt;
&lt;h2 id="mcetoc_1k0dfrat39"&gt;So Why Are PLCs So Expensive?&lt;/h2&gt;
&lt;p&gt;By the end of the project, Clem&amp;#39;s original question had evolved considerably. The first board genuinely supports the argument that many PLCs appear to be little more than a processor, some I/O and a box.&lt;/p&gt;
&lt;p&gt;The second board reveals the hidden engineering. Isolation barriers. ESD protection. Current limiting. Optocouplers. Power integrity. Analogue layout. Device tree configuration. Mechanical integration. Realtime processing. Redundancy. Testing. Verification.&lt;/p&gt;
&lt;p&gt;None of these individually seem particularly dramatic. Together they account for a substantial amount of engineering effort.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Now that we know how incredibly difficult it is to make a real PLC, a system that has redundancy, safety, watchdogs and all these constructive features to make the relays safe and all the connections and inputs reliable, I think we can appreciate that sometimes they just have to cost more.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That does not mean every industrial PLC automatically represents good value. It does demonstrate that the real complexity often lies in the details that nobody notices until they are missing. Clem set out to build a PLC to understand where the money goes. What he discovered is that making something look like a PLC is relatively easy.&lt;/p&gt;
&lt;p&gt;Building something that begins to behave like a professional industrial controller is a completely different challenge.&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/224</link><pubDate>Thu, 13 Aug 2026 14:05:44 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:59ab0abe-b32d-47f9-b00c-4b73b01f3bd8</guid><dc:creator>e14sbhargav</dc:creator><description>Revision 224 posted to Documents by e14sbhargav on 8/13/2026 2:05:44 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/72102/designing-a-mobile-robot-platform-with-differential-drive-pid-control-and-wireless-mapping" data-e14adj="t"&gt;Episode 727: Designing a Mobile Robot Platform with Differential Drive, PID Control and Wireless Mapping&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/72089/clem-s-workbench-upgrade-to-automated-lab-with-programmable-instruments-and-python" data-e14adj="t"&gt;Episode 725: Clem&amp;#39;s Workbench Upgrade to Automated Lab with Programmable Instruments and Python&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/72087/building-and-programming-a-scara-industrial-robot-arm-an-introduction-to-robotics" data-e14adj="t"&gt;Episode 724: Building and Programming a SCARA Industrial Robot Arm &amp;ndash; An Introduction to Robotics&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/72081/building-a-privacy-first-workshop-security-camera-with-pocketbeagle-2" data-e14adj="t"&gt;Episode 723: Building a Privacy-First Workshop Security Camera with PocketBeagle 2&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/72077/pid-control-motion-profiles-and-ros-explained---an-introduction-to-robotics" data-e14adj="t"&gt;Episode 722: PID Control, Motion Profiles and ROS Explained - An Introduction to Robotics&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/72073/designing-a-smarter-workbench-inside-mark-s-8-channel-power-monitoring-system" data-e14adj="t"&gt;Episode 721: Designing a Smarter Workbench: Inside Mark&amp;rsquo;s 8-Channel Power Monitoring System&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/72071/building-the-foundations-of-your-first-robot---an-introduction-to-robotics" data-e14adj="t"&gt;Episode 720: Building the Foundations of Your First Robot - An Introduction to Robotics&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/72070/turning-a-broken-robot-vacuum-into-a-network-controlled-raspberry-pi-5-rover" data-e14adj="t"&gt;Episode 719: Turning a Broken Robot Vacuum into a Network-Controlled Raspberry Pi 5 Rover&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/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>Designing a Mobile Robot Platform with Differential Drive, PID Control and Wireless Mapping</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72102/designing-a-mobile-robot-platform-with-differential-drive-pid-control-and-wireless-mapping/revision/7</link><pubDate>Thu, 13 Aug 2026 12:18:18 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:511eee92-0d1e-4e7c-a0e2-304683ea54ea</guid><dc:creator>cstanton</dc:creator><description>Revision 7 posted to Documents by cstanton on 8/13/2026 12:18:18 PM&lt;br /&gt;
&lt;div&gt;
&lt;div class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;Join Milo&amp;scaron; Ra&amp;scaron;ić as he builds a differential-drive mobile robot and explores the fundamentals of mobile robotics. In this instalment of the Introduction to Robotics series, he brings together electronics, mechanical design, motor control, encoder feedback, PID tuning, wireless communications and sensor-driven behaviours to create a robot capable of navigating a surface and mapping its edges. Along the way, Milo&amp;scaron; demonstrates how wheel encoders enable speed control and odometry, how infrared sensors can be used as cliff detectors, and how a simple mapping algorithm can turn sensor data into useful environmental information. The project also highlights practical challenges including battery brownouts, logic-level compatibility, controller tuning and real-world testing. Whether you&amp;#39;re building your first robot or looking to understand how mobile robotics systems are put together, this project provides a hands-on introduction to the concepts that underpin larger autonomous platforms, and you can find the supporting files&amp;nbsp;below&lt;/div&gt;
&lt;div class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;&lt;/div&gt;
&lt;h2 id="mcetoc_1jvt6eeoid" class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;Time to Build a Robot!&lt;/h2&gt;
&lt;div class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;&lt;a href="https://players.brightcove.net/1362235890001/default_default/index.html?videoId=6403322675112"&gt;players.brightcove.net/.../index.html&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Throughout this Introduction to Robotics series, Milo&amp;scaron; Ra&amp;scaron;ić has gradually built the knowledge needed to design, build and control robotic systems. It began with the fundamentals of electronics, sensors, actuators, CAD and mechanical design in &lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72071/building-the-foundations-of-your-first-robot---an-introduction-to-robotics" data-e14adj="t"&gt;Building the Foundations of Your First Robot&lt;/a&gt;, before moving into closed-loop control, motion profiles and robotic software concepts in &lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72077/pid-control-motion-profiles-and-ros-explained---an-introduction-to-robotics" data-e14adj="t"&gt;PID Control, Motion Profiles and ROS Explained&lt;/a&gt;. The previous instalment then applied many of those concepts to a complete robot arm in &lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72087/building-and-programming-a-scara-industrial-robot-arm-an-introduction-to-robotics" data-e14adj="t"&gt;Building and Programming a SCARA Industrial Robot Arm&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For the fourth part of the series, the focus shifts to one of the most recognisable categories of robotics: the mobile robot.&lt;/p&gt;
&lt;p&gt;Unlike a robot arm that operates from a fixed base, a mobile robot must move through its environment, react to what it senses, maintain control of its motion and attempt to understand where it is. Even the simplest mobile robot quickly introduces concepts such as locomotion, wheel odometry, sensor-driven behaviours and environmental mapping.&lt;/p&gt;
&lt;p&gt;The platform Milo&amp;scaron; develops combines many of the ideas explored throughout the series into a compact differential-drive robot built around a Raspberry Pi Pico 2 W, geared motors with integrated encoders, infrared cliff sensors, wireless communications and a custom firmware and GUI stack.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;This was for people that were making their first robot and just wanted to see something move.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rather than introducing advanced SLAM systems, sensor fusion stacks or computer vision pipelines, the project focuses on the core building blocks that underpin mobile robotics. The result is a platform that remains approachable while still exposing many of the same challenges encountered in larger autonomous systems.&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_000003.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf70"&gt;Bringing the Previous Parts Together&lt;/h2&gt;
&lt;p&gt;This project is the fourth instalment of the series where every subsystem relies on concepts already introduced.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72071/building-the-foundations-of-your-first-robot---an-introduction-to-robotics"&gt;Building the Foundations of Your First Robot - An Introduction to Robotics&lt;/a&gt;&amp;nbsp;&lt;/strong&gt;introduced the core hardware elements such as sensors, motors, microcontrollers, CAD design and manufacturing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72077/pid-control-motion-profiles-and-ros-explained---an-introduction-to-robotics"&gt;PID Control, Motion Profiles and ROS Explained - An Introduction to Robotics&lt;/a&gt;&amp;nbsp;&lt;/strong&gt;explored feedback systems, control loops and software structures used to regulate motion.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72087/building-and-programming-a-scara-industrial-robot-arm-an-introduction-to-robotics"&gt;Building and Programming a SCARA Industrial Robot Arm – An Introduction to Robotics&lt;/a&gt;&amp;nbsp;&lt;/strong&gt;demonstrated how those ideas could be combined into a complete robotic system with embedded firmware and a graphical user interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this mobile robot platform, all of those concepts return. Motors require drivers, sensors require interpretation, encoder feedback must be processed, software needs to communicate with hardware, and control loops keep the system stable. The key difference is that the robot is no longer bolted to a workbench. It must move through the world while attempting to keep track of its own position.&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/0777.Drawing1.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf71"&gt;Locomotion: How Do Mobile Robots Move?&lt;/h2&gt;
&lt;p&gt;Milo&amp;scaron; begins by introducing locomotion, the ability of a robot to move from one place to another.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Locomotion is the ability of moving from one place to another. So in robotics it&amp;rsquo;s how does the robot move?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Robots can move in many different ways. Wheeled robots, walking robots, tracked vehicles and bio-inspired machines all fall under the broad category of locomotion. Since the objective of this project is to introduce the fundamentals of mobile robotics without adding unnecessary complexity, Milo&amp;scaron; focuses on wheeled robots.&lt;/p&gt;
&lt;p&gt;Even then, there are multiple approaches. A car changes direction by altering the angle of its steering wheels. Some robots use tracks while others employ more specialised wheel arrangements such as mecanum wheels. For this platform, the chosen solution is differential drive.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;In this case the wheels are fixed, we can just play with their speed and direction.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A differential-drive robot uses two powered drive wheels and a third passive support wheel, normally a caster. Steering is achieved entirely through the relative speed of the left and right wheels.&lt;/p&gt;
&lt;p&gt;If both wheels rotate at the same speed, the robot travels in a straight line. If one wheel turns faster than the other, the robot follows a curve. If the wheels rotate in opposite directions, the robot can rotate on the spot.&lt;/p&gt;
&lt;p&gt;The design keeps moving parts to a minimum while still demonstrating many important mobile robotics concepts.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;The vacuum robot is the prime example of a differential drive robot.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That comparison is particularly fitting because robot vacuum cleaners use many of the same underlying principles explored in this project: differential drive, wheel feedback, environmental sensing and autonomous movement.&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf72"&gt;Selecting the Hardware&lt;/h2&gt;
&lt;p&gt;With the robot architecture decided, the next step was selecting the hardware.&lt;/p&gt;
&lt;p&gt;The drive system is built around two DFROBOT geared DC motors with integrated encoders. The gearbox reduces the motor speed to something useful for driving a robot, while the encoder provides rotational feedback.&lt;/p&gt;
&lt;p&gt;These encoders are important because they allow the robot to measure wheel speed and estimate wheel position. Without them, the firmware could only command a motor and hope it behaved as expected. With encoder feedback, movement can be measured, controlled and visualised.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;This here is an encoder.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For anyone unfamiliar with encoders and feedback systems, the element14 Learning Center article &lt;a href="/learn/learning-center/essentials/w/documents/23151/magnetic-encoders" data-e14adj="t"&gt;Magnetic Encoders&lt;/a&gt; provides useful background on how rotational position and velocity can be measured electronically.&lt;/p&gt;
&lt;p&gt;The motors are controlled through a DFROBOT dual motor driver. The microcontroller generates a direction signal and a PWM signal for each motor, while the motor driver handles the current required by the motors themselves.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Wiring to the DRI0044 (TB6612FNG) breakout:
//      PICO           DRI0044
//      PIN_M?_PWM --&amp;gt; PWM1 / PWM2   (speed,     0..100% duty)
//      PIN_M?_DIR --&amp;gt; DIR1 / DIR2   (direction, LOW/HIGH)
//      3V3        --&amp;gt; VCC           (logic supply)
//      battery    --&amp;gt; VM            (motor supply)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;While deceptively simple, this arrangement introduces readers to one of the most common motor-control structures used throughout robotics.&lt;/p&gt;
&lt;p&gt;Those wanting a deeper understanding of motor drive electronics can explore &lt;a href="/learn/learning-center/essentials/w/documents/3508/motor-control-motor-drive-control-for-makers" data-e14adj="t"&gt;Motor Control: Motor Drive Control for Makers&lt;/a&gt;, which covers PWM, motor drivers and motor control fundamentals in more detail.&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_000049.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf73"&gt;The Raspberry Pi Pico 2 W and Power System&lt;/h2&gt;
&lt;p&gt;To coordinate the robot&amp;#39;s sensors, motors and communications, Milo&amp;scaron; selected a Raspberry Pi Pico 2 W.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Why? Because it&amp;rsquo;s a really cheap and rather powerful microcontroller and it also has Wi-Fi and Bluetooth so we can easily control it wirelessly.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The Pico handles the embedded side of the project. It reads sensor data, processes encoder counts, executes the PID control loops, communicates with the GUI and generates motor commands.&lt;/p&gt;
&lt;p&gt;This is another point where concepts from earlier parts of the series return. The microcontroller acts as the bridge between the electronic hardware and the software logic driving the robot&amp;#39;s behaviour.&lt;/p&gt;
&lt;p&gt;An interesting challenge emerged from the encoder hardware. The motor encoders operate using 5 V logic, while the Pico uses 3.3 V logic.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;The encoders on these motors are 5V logic and our microcontroller here is 3.3V logic so we also need a level translator.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A simple level-shifting circuit is therefore required between the encoder outputs and the microcontroller inputs. This kind of practical electrical consideration appears frequently in real robotics projects and is often overlooked when looking only at block diagrams.&lt;/p&gt;
&lt;p&gt;The robot itself is powered from a four-cell AA battery pack, supplying approximately 6 V for the motors and supporting circuitry. A regulator generates the required logic voltage for the Pico and sensors.&lt;/p&gt;
&lt;p&gt;Milo&amp;scaron; jokingly highlights another very real robotics issue: battery quality.&lt;/p&gt;
&lt;p&gt;If the supply voltage drops too far under load, motors may continue turning while the microcontroller resets unexpectedly, producing brownouts and unpredictable behaviour.&lt;/p&gt;
&lt;p&gt;Power distribution often receives less attention than software or mechanics, but it has a huge influence on reliability. Readers interested in that topic may find &lt;a href="/learn/learning-center/essentials/w/documents/3194/power-essentials-for-makers" data-e14adj="t"&gt;Power Essentials for Makers&lt;/a&gt; useful supplementary reading.&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/Drawing3.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf74"&gt;Cliff Detection Instead of Obstacle Detection&lt;/h2&gt;
&lt;p&gt;Many consumer robots rely on bump sensors, cameras or LiDAR to detect obstacles. Rather than attempting to build a complete navigation system, Milo&amp;scaron; deliberately simplifies the sensing challenge.&lt;/p&gt;
&lt;p&gt;The robot uses five downward-facing infrared sensors as cliff detectors.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Instead of detecting walls we will detect cliffs.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This changes the problem from obstacle avoidance to edge detection. Rather than navigating around furniture, the robot explores a raised surface and attempts to identify where the surface ends.&lt;/p&gt;
&lt;p&gt;The approach is particularly useful for demonstrating how sensor information can directly drive robotic behaviour without requiring complex perception systems.&lt;/p&gt;
&lt;p&gt;The firmware includes logic specifically designed around this sensor arrangement.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// On a downward-facing cliff sensor a set bit means
// &amp;quot;this sensor SEES THE FLOOR&amp;quot;.
// Danger is the absence of floor.

#define IR_CLIFFS(mask) ((uint8_t)((~(mask)) &amp;amp; IR_ALL_BITS))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The accompanying comment in the firmware highlights a surprisingly common mistake.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Getting that backwards is not a cosmetic bug:
// it produces a robot that refuses to move on solid
// ground and drives happily over a cliff.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It is exactly the kind of observation that comes from testing on physical hardware rather than simulation.&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/Drawing2.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf75"&gt;Designing the Chassis&lt;/h2&gt;
&lt;p&gt;With the electronics established, attention shifted towards the mechanical design.&lt;/p&gt;
&lt;p&gt;Milo&amp;scaron; created the platform in Fusion 360 and structured it around a simple differential-drive layout consisting of two powered wheels and a caster.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;We&amp;rsquo;re going to drop into Fusion 360, do some CAD design.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The project is intentionally straightforward so that readers can recreate it even if they do not have access to the exact same fabrication tools.&lt;/p&gt;
&lt;p&gt;While the published design uses 3D-printed components, the robot could be built from much simpler materials. The important requirement is maintaining alignment between the drive wheels.&lt;/p&gt;
&lt;p&gt;If the wheels are not parallel, the robot will naturally drift and produce misleading results during testing.&lt;/p&gt;
&lt;p&gt;That lesson mirrors many industrial robotics projects: elegant software cannot compensate indefinitely for poor mechanical fundamentals.&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_000206.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf76"&gt;Firmware, Communications and Software Architecture&lt;/h2&gt;
&lt;p&gt;The software is split into two major pieces. The first is embedded firmware running on the Pico. The second is a desktop GUI used for control, monitoring and tuning.&lt;/p&gt;
&lt;p&gt;Readers who followed the SCARA robot arm build will recognise a very similar development workflow. Once again, Milo&amp;scaron; combines embedded software and a graphical control environment into a single ecosystem.&lt;/p&gt;
&lt;p&gt;The firmware is deliberately modular.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Everything the host can ask for goes through here,
// so Serial and WiFi are guaranteed to behave identically.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This ensures that commands behave the same whether they are sent through USB Serial or over Wi-Fi.&lt;/p&gt;
&lt;p&gt;The firmware also uses movement concepts familiar to anyone who has worked with CNC machines or 3D printers.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Modal state (G90/G91, the last F,
// the programmed wheel target) lives here
// rather than in the controller.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The resulting system is flexible enough for interactive testing while remaining structured enough for more advanced automation later on.&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/lowkp_5F00_2.5.1.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf77"&gt;Applying PID Control to a Real Robot&lt;/h2&gt;
&lt;p&gt;The theory behind PID control was explored previously in &lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72077/pid-control-motion-profiles-and-ros-explained---an-introduction-to-robotics" data-e14adj="t"&gt;PID Control, Motion Profiles and ROS Explained&lt;/a&gt;. Rather than revisiting the mathematics, this project demonstrates how those concepts are applied to a mobile robot.&lt;/p&gt;
&lt;p&gt;Each wheel uses encoder feedback to regulate speed through a closed-loop controller.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// SPEED loop (inner): error in mm/s -&amp;gt; output in duty

#define SPD_KP 0.0015f
#define SPD_KI 0.0080f
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The GUI exposes tuning controls, making it possible to observe how the robot responds as controller values change.&lt;/p&gt;
&lt;p&gt;Milo&amp;scaron; demonstrates the practical tuning process by examining how quickly the wheel reaches its target speed. A response that is too slow typically indicates insufficient proportional gain. Increasing Kp improves responsiveness, but pushing it too far can create oscillation and instability.&lt;/p&gt;
&lt;p&gt;Those behaviours become immediately visible when real motors, gearboxes, batteries and sensors enter the equation. The project therefore serves as a practical continuation of the PID concepts introduced earlier in the series, showing what they look like when attached to a physical robot rather than a simplified example. One of the biggest conceptual differences between this project and the earlier SCARA robot arm is localisation. A robot arm operates from a known position. Its joints move relative to a fixed base and its location in the world remains constant.&lt;/p&gt;
&lt;p&gt;A mobile robot is different. Once it begins moving, it has to estimate where it is. This project deliberately avoids advanced localisation systems such as visual SLAM or sensor fusion. Instead, the platform introduces a simpler concept: wheel odometry.&lt;/p&gt;
&lt;p&gt;By measuring wheel rotation using encoders, the robot can estimate how far it has travelled and build a rough picture of its movement.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;We are only here calculating where it is based on the encoder positions.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While not perfectly accurate, odometry provides a powerful introduction to localisation and forms the basis of countless robotics systems.&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf79"&gt;Creating a Simple Mapping Behaviour&lt;/h2&gt;
&lt;p&gt;Once the platform could drive reliably and the sensors were functioning correctly, it was time to make the robot perform a task.&lt;/p&gt;
&lt;p&gt;The chosen exercise was mapping the edge of a raised surface.&lt;/p&gt;
&lt;p&gt;The mapping algorithm intentionally remains simple. Whenever a cliff sensor detects an edge, the robot reverses and changes direction. If the centre sensor detects a head-on edge, the robot performs a more substantial manoeuvre before continuing.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;As we detect a certain edge we&amp;rsquo;re gonna go back, turn around, something similar that your robot vacuum is doing.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This behaviour is significant because it combines every major subsystem.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The mechanical design determines how the robot moves.&lt;/li&gt;
&lt;li&gt;The motors execute the movement.&lt;/li&gt;
&lt;li&gt;The encoders provide feedback.&lt;/li&gt;
&lt;li&gt;The PID loops regulate motion.&lt;/li&gt;
&lt;li&gt;The sensors detect the environment.&lt;/li&gt;
&lt;li&gt;The algorithm determines how the robot reacts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The GUI then visualises the results.&lt;/p&gt;
&lt;p&gt;As the robot continues exploring, the triggered cliff detections begin forming a representation of the table edge.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;It&amp;rsquo;s forming a rather nice point cloud around the edges of the table.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The robot is not creating a complete map in the modern SLAM sense, but it does demonstrate how movement and sensing can be combined to generate useful environmental information.&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf8a"&gt;What Beginners Should Focus On and&amp;nbsp;Further Learning on element14 Community&lt;/h2&gt;
&lt;p&gt;One of the most useful aspects of this project is that it intentionally avoids overwhelming complexity.&lt;/p&gt;
&lt;p&gt;Rather than introducing every possible robotics concept at once, Milo&amp;scaron; focuses on a small number of ideas and demonstrates how they fit together.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Differential-drive locomotion.&lt;/li&gt;
&lt;li&gt;Motor control and motor drivers.&lt;/li&gt;
&lt;li&gt;Wheel encoders.&lt;/li&gt;
&lt;li&gt;PID speed regulation.&lt;/li&gt;
&lt;li&gt;Microcontroller-based firmware.&lt;/li&gt;
&lt;li&gt;Infrared sensing.&lt;/li&gt;
&lt;li&gt;Wireless communications.&lt;/li&gt;
&lt;li&gt;Simple mapping behaviour.&lt;/li&gt;
&lt;li&gt;Basic odometry.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Along the way, readers also see the less glamorous aspects of robot development: wiring issues, logic-level compatibility, battery behaviour, sensor interpretation, wheel alignment and controller tuning. Those are often the challenges that consume the most development time on real projects. Readers wanting to explore the wider Introduction to Robotics series and related topics can continue with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72071/building-the-foundations-of-your-first-robot---an-introduction-to-robotics" data-e14adj="t"&gt;Building the Foundations of Your First Robot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72077/pid-control-motion-profiles-and-ros-explained---an-introduction-to-robotics" data-e14adj="t"&gt;PID Control, Motion Profiles and ROS Explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72087/building-and-programming-a-scara-industrial-robot-arm-an-introduction-to-robotics" data-e14adj="t"&gt;Building and Programming a SCARA Industrial Robot Arm&lt;/a&gt;&lt;/li&gt;
&lt;li&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;Designing a Mobile Robot Platform with Inverse Kinematics and Wireless Control&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/learn/learning-center/" data-e14adj="t"&gt;element14 Learning Center&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/learn/learning-center/essentials/w/documents/3194/power-essentials-for-makers" data-e14adj="t"&gt;Power Essentials for Makers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/learn/learning-center/essentials/w/documents/3508/motor-control-motor-drive-control-for-makers" data-e14adj="t"&gt;Motor Control: Motor Drive Control for Makers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/learn/learning-center/essentials/w/documents/27574/the-basics-of-microcontrollers" data-e14adj="t"&gt;The Basics of Microcontrollers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/learn/learning-center/essentials/w/documents/23151/magnetic-encoders" data-e14adj="t"&gt;Magnetic Encoders&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/learn/learning-center/essentials/w/documents/28063/an-introduction-to-programming-with-python" data-e14adj="t"&gt;An Introduction to Programming with Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/learn/learning-center/essentials/w/documents/29543/essentials-of-robot-operating-system-2" data-e14adj="t"&gt;Essentials of Robot Operating System 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/products/arduino/arduino-tutorials/b/blog/posts/jeremy-blum-arduino-tutorials" data-e14adj="t"&gt;Jeremy Blum Arduino Tutorials&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jvtgqs7p7"&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/IMG_5F00_3404.JPG" /&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_000349.png" /&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1jvt5umf8c"&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;As the fourth instalment of the Introduction to Robotics series, this project acts as a bridge between foundational robotics theory and the challenges of mobile robotics.&lt;/p&gt;
&lt;p&gt;The robot combines electronics, mechanical design, feedback control, embedded software and environmental sensing into a platform that is simple enough to understand yet capable enough to demonstrate genuine robotics concepts.&lt;/p&gt;
&lt;p&gt;By the end of the project, the robot can drive, regulate its wheel speed, detect table edges, estimate its movement, visualise sensor data and build a rough representation of its surroundings.&lt;/p&gt;
&lt;p&gt;Those capabilities may appear straightforward, but together they form the basis of a huge number of robotic systems.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;I would love to explore more complex robotics projects with you.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Whether the next step is odometry improvements, more advanced mapping, ROS integration, navigation algorithms, sensor fusion or entirely new robot architectures, this platform provides a practical foundation on which those future topics can be built.&lt;/p&gt;
&lt;h2 id="mcetoc_1jvtg2v5b0"&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/151576"&gt;Episode 727 Resource Files - Designing a Mobile Robot Platform with Differential Drive, PID Control and Wireless Mapping&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvtg5dmh4"&gt;Bill of Materials / Parts 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-b14ce" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3769977~2,3974106,4568690,4007697~5,3879700~2&amp;nsku=52AJ5083~2,33AK3153,20AM4425,42AK5670~5,07AK0287~2&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('b14ce'));" data-farnell="3769977~2,3974106,4568690,4007697~5,3879700~2" data-newark="52AJ5083~2,33AK3153,20AM4425,42AK5670~5,07AK0287~2" data-comoverride="" data-cmpoverride="" data-cpc="undefined~2,,,undefined~5,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;DFROBOT Motor&lt;/td&gt;
&lt;td&gt;DFROBOT&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-22a79" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3769977~2&amp;nsku=52AJ5083~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('22a79'));" data-farnell="3769977~2" data-newark="52AJ5083~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;DFROBOT Motor Driver&lt;/td&gt;
&lt;td&gt;DFROBOT&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-f2a54" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3974106&amp;nsku=33AK3153&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('f2a54'));" data-farnell="3974106" data-newark="33AK3153" 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 Pico 2W&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-02f2e" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4568690&amp;nsku=20AM4425&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('02f2e'));" data-farnell="4568690" data-newark="20AM4425" 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;IR Sensor&lt;/td&gt;
&lt;td&gt;SEEED STUDIO&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-14a8f" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4007697~5&amp;nsku=42AK5670~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('14a8f'));" data-farnell="4007697~5" data-newark="42AK5670~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;&amp;nbsp;Wheel&lt;/td&gt;
&lt;td&gt;DFROBOT&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-73704" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3879700~2&amp;nsku=07AK0287~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('73704'));" data-farnell="3879700~2" data-newark="07AK0287~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 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;h2 id="mcetoc_1jvtg5dmh5"&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;AA battery holder&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;M3 machine 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;Small caster wheel&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AA batteries&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Perfboard and wires&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_1jvtg5dmh6"&gt;&lt;/h3&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: embedded robotics programming, autonomous robot project, infrared cliff sensors, introduction to robotics, robotics for beginners, raspberry pi pico 2 w robot, robot wheel encoders, robot motor driver, wheel odometry, mobile robot platform, pid motor control, mobile robot mapping, e14presents_milosrasic, wireless robot control, friday_release, differential drive robot, diy robot build&lt;/div&gt;
</description></item><item><title>Designing a Mobile Robot Platform with Differential Drive, PID Control and Wireless Mapping</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72102/designing-a-mobile-robot-platform-with-differential-drive-pid-control-and-wireless-mapping</link><pubDate>Thu, 13 Aug 2026 12:18:18 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:511eee92-0d1e-4e7c-a0e2-304683ea54ea</guid><dc:creator>e14sbhargav</dc:creator><description>Current Revision posted to Documents by e14sbhargav on 8/13/2026 12:18:18 PM&lt;br /&gt;
&lt;div&gt;
&lt;div class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;Join Milo&amp;scaron; Ra&amp;scaron;ić as he builds a differential-drive mobile robot and explores the fundamentals of mobile robotics. In this instalment of the Introduction to Robotics series, he brings together electronics, mechanical design, motor control, encoder feedback, PID tuning, wireless communications and sensor-driven behaviours to create a robot capable of navigating a surface and mapping its edges. Along the way, Milo&amp;scaron; demonstrates how wheel encoders enable speed control and odometry, how infrared sensors can be used as cliff detectors, and how a simple mapping algorithm can turn sensor data into useful environmental information. The project also highlights practical challenges including battery brownouts, logic-level compatibility, controller tuning and real-world testing. Whether you&amp;#39;re building your first robot or looking to understand how mobile robotics systems are put together, this project provides a hands-on introduction to the concepts that underpin larger autonomous platforms, and you can find the supporting files&amp;nbsp;below&lt;/div&gt;
&lt;div class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;&lt;/div&gt;
&lt;h2 id="mcetoc_1jvt6eeoid" class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;Time to Build a Robot!&lt;/h2&gt;
&lt;div class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;&lt;a href="https://players.brightcove.net/1362235890001/default_default/index.html?videoId=6403322675112"&gt;players.brightcove.net/.../index.html&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Throughout this Introduction to Robotics series, Milo&amp;scaron; Ra&amp;scaron;ić has gradually built the knowledge needed to design, build and control robotic systems. It began with the fundamentals of electronics, sensors, actuators, CAD and mechanical design in &lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72071/building-the-foundations-of-your-first-robot---an-introduction-to-robotics" data-e14adj="t"&gt;Building the Foundations of Your First Robot&lt;/a&gt;, before moving into closed-loop control, motion profiles and robotic software concepts in &lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72077/pid-control-motion-profiles-and-ros-explained---an-introduction-to-robotics" data-e14adj="t"&gt;PID Control, Motion Profiles and ROS Explained&lt;/a&gt;. The previous instalment then applied many of those concepts to a complete robot arm in &lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72087/building-and-programming-a-scara-industrial-robot-arm-an-introduction-to-robotics" data-e14adj="t"&gt;Building and Programming a SCARA Industrial Robot Arm&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For the fourth part of the series, the focus shifts to one of the most recognisable categories of robotics: the mobile robot.&lt;/p&gt;
&lt;p&gt;Unlike a robot arm that operates from a fixed base, a mobile robot must move through its environment, react to what it senses, maintain control of its motion and attempt to understand where it is. Even the simplest mobile robot quickly introduces concepts such as locomotion, wheel odometry, sensor-driven behaviours and environmental mapping.&lt;/p&gt;
&lt;p&gt;The platform Milo&amp;scaron; develops combines many of the ideas explored throughout the series into a compact differential-drive robot built around a Raspberry Pi Pico 2 W, geared motors with integrated encoders, infrared cliff sensors, wireless communications and a custom firmware and GUI stack.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;This was for people that were making their first robot and just wanted to see something move.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rather than introducing advanced SLAM systems, sensor fusion stacks or computer vision pipelines, the project focuses on the core building blocks that underpin mobile robotics. The result is a platform that remains approachable while still exposing many of the same challenges encountered in larger autonomous systems.&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_000003.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf70"&gt;Bringing the Previous Parts Together&lt;/h2&gt;
&lt;p&gt;This project is the fourth instalment of the series where every subsystem relies on concepts already introduced.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72071/building-the-foundations-of-your-first-robot---an-introduction-to-robotics"&gt;Building the Foundations of Your First Robot - An Introduction to Robotics&lt;/a&gt;&amp;nbsp;&lt;/strong&gt;introduced the core hardware elements such as sensors, motors, microcontrollers, CAD design and manufacturing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72077/pid-control-motion-profiles-and-ros-explained---an-introduction-to-robotics"&gt;PID Control, Motion Profiles and ROS Explained - An Introduction to Robotics&lt;/a&gt;&amp;nbsp;&lt;/strong&gt;explored feedback systems, control loops and software structures used to regulate motion.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72087/building-and-programming-a-scara-industrial-robot-arm-an-introduction-to-robotics"&gt;Building and Programming a SCARA Industrial Robot Arm – An Introduction to Robotics&lt;/a&gt;&amp;nbsp;&lt;/strong&gt;demonstrated how those ideas could be combined into a complete robotic system with embedded firmware and a graphical user interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this mobile robot platform, all of those concepts return. Motors require drivers, sensors require interpretation, encoder feedback must be processed, software needs to communicate with hardware, and control loops keep the system stable. The key difference is that the robot is no longer bolted to a workbench. It must move through the world while attempting to keep track of its own position.&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/0777.Drawing1.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf71"&gt;Locomotion: How Do Mobile Robots Move?&lt;/h2&gt;
&lt;p&gt;Milo&amp;scaron; begins by introducing locomotion, the ability of a robot to move from one place to another.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Locomotion is the ability of moving from one place to another. So in robotics it&amp;rsquo;s how does the robot move?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Robots can move in many different ways. Wheeled robots, walking robots, tracked vehicles and bio-inspired machines all fall under the broad category of locomotion. Since the objective of this project is to introduce the fundamentals of mobile robotics without adding unnecessary complexity, Milo&amp;scaron; focuses on wheeled robots.&lt;/p&gt;
&lt;p&gt;Even then, there are multiple approaches. A car changes direction by altering the angle of its steering wheels. Some robots use tracks while others employ more specialised wheel arrangements such as mecanum wheels. For this platform, the chosen solution is differential drive.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;In this case the wheels are fixed, we can just play with their speed and direction.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A differential-drive robot uses two powered drive wheels and a third passive support wheel, normally a caster. Steering is achieved entirely through the relative speed of the left and right wheels.&lt;/p&gt;
&lt;p&gt;If both wheels rotate at the same speed, the robot travels in a straight line. If one wheel turns faster than the other, the robot follows a curve. If the wheels rotate in opposite directions, the robot can rotate on the spot.&lt;/p&gt;
&lt;p&gt;The design keeps moving parts to a minimum while still demonstrating many important mobile robotics concepts.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;The vacuum robot is the prime example of a differential drive robot.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That comparison is particularly fitting because robot vacuum cleaners use many of the same underlying principles explored in this project: differential drive, wheel feedback, environmental sensing and autonomous movement.&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf72"&gt;Selecting the Hardware&lt;/h2&gt;
&lt;p&gt;With the robot architecture decided, the next step was selecting the hardware.&lt;/p&gt;
&lt;p&gt;The drive system is built around two DFROBOT geared DC motors with integrated encoders. The gearbox reduces the motor speed to something useful for driving a robot, while the encoder provides rotational feedback.&lt;/p&gt;
&lt;p&gt;These encoders are important because they allow the robot to measure wheel speed and estimate wheel position. Without them, the firmware could only command a motor and hope it behaved as expected. With encoder feedback, movement can be measured, controlled and visualised.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;This here is an encoder.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For anyone unfamiliar with encoders and feedback systems, the element14 Learning Center article &lt;a href="/learn/learning-center/essentials/w/documents/23151/magnetic-encoders" data-e14adj="t"&gt;Magnetic Encoders&lt;/a&gt; provides useful background on how rotational position and velocity can be measured electronically.&lt;/p&gt;
&lt;p&gt;The motors are controlled through a DFROBOT dual motor driver. The microcontroller generates a direction signal and a PWM signal for each motor, while the motor driver handles the current required by the motors themselves.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Wiring to the DRI0044 (TB6612FNG) breakout:
//      PICO           DRI0044
//      PIN_M?_PWM --&amp;gt; PWM1 / PWM2   (speed,     0..100% duty)
//      PIN_M?_DIR --&amp;gt; DIR1 / DIR2   (direction, LOW/HIGH)
//      3V3        --&amp;gt; VCC           (logic supply)
//      battery    --&amp;gt; VM            (motor supply)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;While deceptively simple, this arrangement introduces readers to one of the most common motor-control structures used throughout robotics.&lt;/p&gt;
&lt;p&gt;Those wanting a deeper understanding of motor drive electronics can explore &lt;a href="/learn/learning-center/essentials/w/documents/3508/motor-control-motor-drive-control-for-makers" data-e14adj="t"&gt;Motor Control: Motor Drive Control for Makers&lt;/a&gt;, which covers PWM, motor drivers and motor control fundamentals in more detail.&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_000049.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf73"&gt;The Raspberry Pi Pico 2 W and Power System&lt;/h2&gt;
&lt;p&gt;To coordinate the robot&amp;#39;s sensors, motors and communications, Milo&amp;scaron; selected a Raspberry Pi Pico 2 W.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Why? Because it&amp;rsquo;s a really cheap and rather powerful microcontroller and it also has Wi-Fi and Bluetooth so we can easily control it wirelessly.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The Pico handles the embedded side of the project. It reads sensor data, processes encoder counts, executes the PID control loops, communicates with the GUI and generates motor commands.&lt;/p&gt;
&lt;p&gt;This is another point where concepts from earlier parts of the series return. The microcontroller acts as the bridge between the electronic hardware and the software logic driving the robot&amp;#39;s behaviour.&lt;/p&gt;
&lt;p&gt;An interesting challenge emerged from the encoder hardware. The motor encoders operate using 5 V logic, while the Pico uses 3.3 V logic.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;The encoders on these motors are 5V logic and our microcontroller here is 3.3V logic so we also need a level translator.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A simple level-shifting circuit is therefore required between the encoder outputs and the microcontroller inputs. This kind of practical electrical consideration appears frequently in real robotics projects and is often overlooked when looking only at block diagrams.&lt;/p&gt;
&lt;p&gt;The robot itself is powered from a four-cell AA battery pack, supplying approximately 6 V for the motors and supporting circuitry. A regulator generates the required logic voltage for the Pico and sensors.&lt;/p&gt;
&lt;p&gt;Milo&amp;scaron; jokingly highlights another very real robotics issue: battery quality.&lt;/p&gt;
&lt;p&gt;If the supply voltage drops too far under load, motors may continue turning while the microcontroller resets unexpectedly, producing brownouts and unpredictable behaviour.&lt;/p&gt;
&lt;p&gt;Power distribution often receives less attention than software or mechanics, but it has a huge influence on reliability. Readers interested in that topic may find &lt;a href="/learn/learning-center/essentials/w/documents/3194/power-essentials-for-makers" data-e14adj="t"&gt;Power Essentials for Makers&lt;/a&gt; useful supplementary reading.&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/Drawing3.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf74"&gt;Cliff Detection Instead of Obstacle Detection&lt;/h2&gt;
&lt;p&gt;Many consumer robots rely on bump sensors, cameras or LiDAR to detect obstacles. Rather than attempting to build a complete navigation system, Milo&amp;scaron; deliberately simplifies the sensing challenge.&lt;/p&gt;
&lt;p&gt;The robot uses five downward-facing infrared sensors as cliff detectors.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Instead of detecting walls we will detect cliffs.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This changes the problem from obstacle avoidance to edge detection. Rather than navigating around furniture, the robot explores a raised surface and attempts to identify where the surface ends.&lt;/p&gt;
&lt;p&gt;The approach is particularly useful for demonstrating how sensor information can directly drive robotic behaviour without requiring complex perception systems.&lt;/p&gt;
&lt;p&gt;The firmware includes logic specifically designed around this sensor arrangement.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// On a downward-facing cliff sensor a set bit means
// &amp;quot;this sensor SEES THE FLOOR&amp;quot;.
// Danger is the absence of floor.

#define IR_CLIFFS(mask) ((uint8_t)((~(mask)) &amp;amp; IR_ALL_BITS))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The accompanying comment in the firmware highlights a surprisingly common mistake.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Getting that backwards is not a cosmetic bug:
// it produces a robot that refuses to move on solid
// ground and drives happily over a cliff.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It is exactly the kind of observation that comes from testing on physical hardware rather than simulation.&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/Drawing2.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf75"&gt;Designing the Chassis&lt;/h2&gt;
&lt;p&gt;With the electronics established, attention shifted towards the mechanical design.&lt;/p&gt;
&lt;p&gt;Milo&amp;scaron; created the platform in Fusion 360 and structured it around a simple differential-drive layout consisting of two powered wheels and a caster.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;We&amp;rsquo;re going to drop into Fusion 360, do some CAD design.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The project is intentionally straightforward so that readers can recreate it even if they do not have access to the exact same fabrication tools.&lt;/p&gt;
&lt;p&gt;While the published design uses 3D-printed components, the robot could be built from much simpler materials. The important requirement is maintaining alignment between the drive wheels.&lt;/p&gt;
&lt;p&gt;If the wheels are not parallel, the robot will naturally drift and produce misleading results during testing.&lt;/p&gt;
&lt;p&gt;That lesson mirrors many industrial robotics projects: elegant software cannot compensate indefinitely for poor mechanical fundamentals.&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_000206.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf76"&gt;Firmware, Communications and Software Architecture&lt;/h2&gt;
&lt;p&gt;The software is split into two major pieces. The first is embedded firmware running on the Pico. The second is a desktop GUI used for control, monitoring and tuning.&lt;/p&gt;
&lt;p&gt;Readers who followed the SCARA robot arm build will recognise a very similar development workflow. Once again, Milo&amp;scaron; combines embedded software and a graphical control environment into a single ecosystem.&lt;/p&gt;
&lt;p&gt;The firmware is deliberately modular.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Everything the host can ask for goes through here,
// so Serial and WiFi are guaranteed to behave identically.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This ensures that commands behave the same whether they are sent through USB Serial or over Wi-Fi.&lt;/p&gt;
&lt;p&gt;The firmware also uses movement concepts familiar to anyone who has worked with CNC machines or 3D printers.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Modal state (G90/G91, the last F,
// the programmed wheel target) lives here
// rather than in the controller.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The resulting system is flexible enough for interactive testing while remaining structured enough for more advanced automation later on.&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/lowkp_5F00_2.5.1.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf77"&gt;Applying PID Control to a Real Robot&lt;/h2&gt;
&lt;p&gt;The theory behind PID control was explored previously in &lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72077/pid-control-motion-profiles-and-ros-explained---an-introduction-to-robotics" data-e14adj="t"&gt;PID Control, Motion Profiles and ROS Explained&lt;/a&gt;. Rather than revisiting the mathematics, this project demonstrates how those concepts are applied to a mobile robot.&lt;/p&gt;
&lt;p&gt;Each wheel uses encoder feedback to regulate speed through a closed-loop controller.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// SPEED loop (inner): error in mm/s -&amp;gt; output in duty

#define SPD_KP 0.0015f
#define SPD_KI 0.0080f
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The GUI exposes tuning controls, making it possible to observe how the robot responds as controller values change.&lt;/p&gt;
&lt;p&gt;Milo&amp;scaron; demonstrates the practical tuning process by examining how quickly the wheel reaches its target speed. A response that is too slow typically indicates insufficient proportional gain. Increasing Kp improves responsiveness, but pushing it too far can create oscillation and instability.&lt;/p&gt;
&lt;p&gt;Those behaviours become immediately visible when real motors, gearboxes, batteries and sensors enter the equation. The project therefore serves as a practical continuation of the PID concepts introduced earlier in the series, showing what they look like when attached to a physical robot rather than a simplified example. One of the biggest conceptual differences between this project and the earlier SCARA robot arm is localisation. A robot arm operates from a known position. Its joints move relative to a fixed base and its location in the world remains constant.&lt;/p&gt;
&lt;p&gt;A mobile robot is different. Once it begins moving, it has to estimate where it is. This project deliberately avoids advanced localisation systems such as visual SLAM or sensor fusion. Instead, the platform introduces a simpler concept: wheel odometry.&lt;/p&gt;
&lt;p&gt;By measuring wheel rotation using encoders, the robot can estimate how far it has travelled and build a rough picture of its movement.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;We are only here calculating where it is based on the encoder positions.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While not perfectly accurate, odometry provides a powerful introduction to localisation and forms the basis of countless robotics systems.&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf79"&gt;Creating a Simple Mapping Behaviour&lt;/h2&gt;
&lt;p&gt;Once the platform could drive reliably and the sensors were functioning correctly, it was time to make the robot perform a task.&lt;/p&gt;
&lt;p&gt;The chosen exercise was mapping the edge of a raised surface.&lt;/p&gt;
&lt;p&gt;The mapping algorithm intentionally remains simple. Whenever a cliff sensor detects an edge, the robot reverses and changes direction. If the centre sensor detects a head-on edge, the robot performs a more substantial manoeuvre before continuing.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;As we detect a certain edge we&amp;rsquo;re gonna go back, turn around, something similar that your robot vacuum is doing.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This behaviour is significant because it combines every major subsystem.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The mechanical design determines how the robot moves.&lt;/li&gt;
&lt;li&gt;The motors execute the movement.&lt;/li&gt;
&lt;li&gt;The encoders provide feedback.&lt;/li&gt;
&lt;li&gt;The PID loops regulate motion.&lt;/li&gt;
&lt;li&gt;The sensors detect the environment.&lt;/li&gt;
&lt;li&gt;The algorithm determines how the robot reacts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The GUI then visualises the results.&lt;/p&gt;
&lt;p&gt;As the robot continues exploring, the triggered cliff detections begin forming a representation of the table edge.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;It&amp;rsquo;s forming a rather nice point cloud around the edges of the table.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The robot is not creating a complete map in the modern SLAM sense, but it does demonstrate how movement and sensing can be combined to generate useful environmental information.&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf8a"&gt;What Beginners Should Focus On and&amp;nbsp;Further Learning on element14 Community&lt;/h2&gt;
&lt;p&gt;One of the most useful aspects of this project is that it intentionally avoids overwhelming complexity.&lt;/p&gt;
&lt;p&gt;Rather than introducing every possible robotics concept at once, Milo&amp;scaron; focuses on a small number of ideas and demonstrates how they fit together.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Differential-drive locomotion.&lt;/li&gt;
&lt;li&gt;Motor control and motor drivers.&lt;/li&gt;
&lt;li&gt;Wheel encoders.&lt;/li&gt;
&lt;li&gt;PID speed regulation.&lt;/li&gt;
&lt;li&gt;Microcontroller-based firmware.&lt;/li&gt;
&lt;li&gt;Infrared sensing.&lt;/li&gt;
&lt;li&gt;Wireless communications.&lt;/li&gt;
&lt;li&gt;Simple mapping behaviour.&lt;/li&gt;
&lt;li&gt;Basic odometry.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Along the way, readers also see the less glamorous aspects of robot development: wiring issues, logic-level compatibility, battery behaviour, sensor interpretation, wheel alignment and controller tuning. Those are often the challenges that consume the most development time on real projects. Readers wanting to explore the wider Introduction to Robotics series and related topics can continue with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72071/building-the-foundations-of-your-first-robot---an-introduction-to-robotics" data-e14adj="t"&gt;Building the Foundations of Your First Robot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72077/pid-control-motion-profiles-and-ros-explained---an-introduction-to-robotics" data-e14adj="t"&gt;PID Control, Motion Profiles and ROS Explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72087/building-and-programming-a-scara-industrial-robot-arm-an-introduction-to-robotics" data-e14adj="t"&gt;Building and Programming a SCARA Industrial Robot Arm&lt;/a&gt;&lt;/li&gt;
&lt;li&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;Designing a Mobile Robot Platform with Inverse Kinematics and Wireless Control&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/learn/learning-center/" data-e14adj="t"&gt;element14 Learning Center&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/learn/learning-center/essentials/w/documents/3194/power-essentials-for-makers" data-e14adj="t"&gt;Power Essentials for Makers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/learn/learning-center/essentials/w/documents/3508/motor-control-motor-drive-control-for-makers" data-e14adj="t"&gt;Motor Control: Motor Drive Control for Makers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/learn/learning-center/essentials/w/documents/27574/the-basics-of-microcontrollers" data-e14adj="t"&gt;The Basics of Microcontrollers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/learn/learning-center/essentials/w/documents/23151/magnetic-encoders" data-e14adj="t"&gt;Magnetic Encoders&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/learn/learning-center/essentials/w/documents/28063/an-introduction-to-programming-with-python" data-e14adj="t"&gt;An Introduction to Programming with Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/learn/learning-center/essentials/w/documents/29543/essentials-of-robot-operating-system-2" data-e14adj="t"&gt;Essentials of Robot Operating System 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/products/arduino/arduino-tutorials/b/blog/posts/jeremy-blum-arduino-tutorials" data-e14adj="t"&gt;Jeremy Blum Arduino Tutorials&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jvtgqs7p7"&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/IMG_5F00_3404.JPG" /&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_000349.png" /&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1jvt5umf8c"&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;As the fourth instalment of the Introduction to Robotics series, this project acts as a bridge between foundational robotics theory and the challenges of mobile robotics.&lt;/p&gt;
&lt;p&gt;The robot combines electronics, mechanical design, feedback control, embedded software and environmental sensing into a platform that is simple enough to understand yet capable enough to demonstrate genuine robotics concepts.&lt;/p&gt;
&lt;p&gt;By the end of the project, the robot can drive, regulate its wheel speed, detect table edges, estimate its movement, visualise sensor data and build a rough representation of its surroundings.&lt;/p&gt;
&lt;p&gt;Those capabilities may appear straightforward, but together they form the basis of a huge number of robotic systems.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;I would love to explore more complex robotics projects with you.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Whether the next step is odometry improvements, more advanced mapping, ROS integration, navigation algorithms, sensor fusion or entirely new robot architectures, this platform provides a practical foundation on which those future topics can be built.&lt;/p&gt;
&lt;h2 id="mcetoc_1jvtg2v5b0"&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/151576"&gt;Episode 727 Resource Files - Designing a Mobile Robot Platform with Differential Drive, PID Control and Wireless Mapping&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvtg5dmh4"&gt;Bill of Materials / Parts 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-a5946" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3769977~2,3974106,4568690,4007697~5,3879700~2&amp;nsku=52AJ5083~2,33AK3153,20AM4425,42AK5670~5,07AK0287~2&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('a5946'));" data-farnell="3769977~2,3974106,4568690,4007697~5,3879700~2" data-newark="52AJ5083~2,33AK3153,20AM4425,42AK5670~5,07AK0287~2" data-comoverride="" data-cmpoverride="" data-cpc="undefined~2,,,undefined~5,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;DFROBOT Motor&lt;/td&gt;
&lt;td&gt;DFROBOT&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-7a4f6" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3769977~2&amp;nsku=52AJ5083~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('7a4f6'));" data-farnell="3769977~2" data-newark="52AJ5083~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;DFROBOT Motor Driver&lt;/td&gt;
&lt;td&gt;DFROBOT&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-84617" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3974106&amp;nsku=33AK3153&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('84617'));" data-farnell="3974106" data-newark="33AK3153" 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 Pico 2W&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-17d73" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4568690&amp;nsku=20AM4425&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('17d73'));" data-farnell="4568690" data-newark="20AM4425" 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;IR Sensor&lt;/td&gt;
&lt;td&gt;SEEED STUDIO&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-97e3a" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4007697~5&amp;nsku=42AK5670~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('97e3a'));" data-farnell="4007697~5" data-newark="42AK5670~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;&amp;nbsp;Wheel&lt;/td&gt;
&lt;td&gt;DFROBOT&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-f5d2a" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3879700~2&amp;nsku=07AK0287~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('f5d2a'));" data-farnell="3879700~2" data-newark="07AK0287~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 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;h2 id="mcetoc_1jvtg5dmh5"&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;AA battery holder&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;M3 machine 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;Small caster wheel&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AA batteries&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Perfboard and wires&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_1jvtg5dmh6"&gt;&lt;/h3&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: embedded robotics programming, autonomous robot project, infrared cliff sensors, introduction to robotics, robotics for beginners, raspberry pi pico 2 w robot, robot wheel encoders, robot motor driver, wheel odometry, mobile robot platform, pid motor control, mobile robot mapping, e14presents_milosrasic, wireless robot control, friday_release, differential drive robot, diy robot build&lt;/div&gt;
</description></item><item><title>Designing a Mobile Robot Platform with Differential Drive, PID Control and Wireless Mapping</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72102/designing-a-mobile-robot-platform-with-differential-drive-pid-control-and-wireless-mapping/revision/6</link><pubDate>Thu, 13 Aug 2026 12:17:31 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:511eee92-0d1e-4e7c-a0e2-304683ea54ea</guid><dc:creator>cstanton</dc:creator><description>Revision 6 posted to Documents by cstanton on 8/13/2026 12:17:31 PM&lt;br /&gt;
&lt;div&gt;
&lt;div class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;Join Milo&amp;scaron; Ra&amp;scaron;ić as he builds a differential-drive mobile robot and explores the fundamentals of mobile robotics. In this instalment of the Introduction to Robotics series, he brings together electronics, mechanical design, motor control, encoder feedback, PID tuning, wireless communications and sensor-driven behaviours to create a robot capable of navigating a surface and mapping its edges. Along the way, Milo&amp;scaron; demonstrates how wheel encoders enable speed control and odometry, how infrared sensors can be used as cliff detectors, and how a simple mapping algorithm can turn sensor data into useful environmental information. The project also highlights practical challenges including battery brownouts, logic-level compatibility, controller tuning and real-world testing. Whether you&amp;#39;re building your first robot or looking to understand how mobile robotics systems are put together, this project provides a hands-on introduction to the concepts that underpin larger autonomous platforms, and you can find the supporting files&amp;nbsp;below&lt;/div&gt;
&lt;div class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;&lt;/div&gt;
&lt;h2 id="mcetoc_1jvt6eeoid" class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;Time to Build a Robot!&lt;/h2&gt;
&lt;div class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;&lt;a href="https://players.brightcove.net/1362235890001/default_default/index.html?videoId=6403322675112"&gt;players.brightcove.net/.../index.html&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Throughout this Introduction to Robotics series, Milo&amp;scaron; Ra&amp;scaron;ić has gradually built the knowledge needed to design, build and control robotic systems. It began with the fundamentals of electronics, sensors, actuators, CAD and mechanical design in &lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72071/building-the-foundations-of-your-first-robot---an-introduction-to-robotics" data-e14adj="t"&gt;Building the Foundations of Your First Robot&lt;/a&gt;, before moving into closed-loop control, motion profiles and robotic software concepts in &lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72077/pid-control-motion-profiles-and-ros-explained---an-introduction-to-robotics" data-e14adj="t"&gt;PID Control, Motion Profiles and ROS Explained&lt;/a&gt;. The previous instalment then applied many of those concepts to a complete robot arm in &lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72087/building-and-programming-a-scara-industrial-robot-arm-an-introduction-to-robotics" data-e14adj="t"&gt;Building and Programming a SCARA Industrial Robot Arm&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For the fourth part of the series, the focus shifts to one of the most recognisable categories of robotics: the mobile robot.&lt;/p&gt;
&lt;p&gt;Unlike a robot arm that operates from a fixed base, a mobile robot must move through its environment, react to what it senses, maintain control of its motion and attempt to understand where it is. Even the simplest mobile robot quickly introduces concepts such as locomotion, wheel odometry, sensor-driven behaviours and environmental mapping.&lt;/p&gt;
&lt;p&gt;The platform Milo&amp;scaron; develops combines many of the ideas explored throughout the series into a compact differential-drive robot built around a Raspberry Pi Pico 2 W, geared motors with integrated encoders, infrared cliff sensors, wireless communications and a custom firmware and GUI stack.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;This was for people that were making their first robot and just wanted to see something move.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rather than introducing advanced SLAM systems, sensor fusion stacks or computer vision pipelines, the project focuses on the core building blocks that underpin mobile robotics. The result is a platform that remains approachable while still exposing many of the same challenges encountered in larger autonomous systems.&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_000003.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf70"&gt;Bringing the Previous Parts Together&lt;/h2&gt;
&lt;p&gt;This project is the fourth instalment of the series where every subsystem relies on concepts already introduced.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72071/building-the-foundations-of-your-first-robot---an-introduction-to-robotics"&gt;Building the Foundations of Your First Robot - An Introduction to Robotics&lt;/a&gt;&amp;nbsp;&lt;/strong&gt;introduced the core hardware elements such as sensors, motors, microcontrollers, CAD design and manufacturing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72077/pid-control-motion-profiles-and-ros-explained---an-introduction-to-robotics"&gt;PID Control, Motion Profiles and ROS Explained - An Introduction to Robotics&lt;/a&gt;&amp;nbsp;&lt;/strong&gt;explored feedback systems, control loops and software structures used to regulate motion.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72087/building-and-programming-a-scara-industrial-robot-arm-an-introduction-to-robotics"&gt;Building and Programming a SCARA Industrial Robot Arm – An Introduction to Robotics&lt;/a&gt;&amp;nbsp;&lt;/strong&gt;demonstrated how those ideas could be combined into a complete robotic system with embedded firmware and a graphical user interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this mobile robot platform, all of those concepts return. Motors require drivers, sensors require interpretation, encoder feedback must be processed, software needs to communicate with hardware, and control loops keep the system stable. The key difference is that the robot is no longer bolted to a workbench. It must move through the world while attempting to keep track of its own position.&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/0777.Drawing1.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf71"&gt;Locomotion: How Do Mobile Robots Move?&lt;/h2&gt;
&lt;p&gt;Milo&amp;scaron; begins by introducing locomotion, the ability of a robot to move from one place to another.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Locomotion is the ability of moving from one place to another. So in robotics it&amp;rsquo;s how does the robot move?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Robots can move in many different ways. Wheeled robots, walking robots, tracked vehicles and bio-inspired machines all fall under the broad category of locomotion. Since the objective of this project is to introduce the fundamentals of mobile robotics without adding unnecessary complexity, Milo&amp;scaron; focuses on wheeled robots.&lt;/p&gt;
&lt;p&gt;Even then, there are multiple approaches. A car changes direction by altering the angle of its steering wheels. Some robots use tracks while others employ more specialised wheel arrangements such as mecanum wheels. For this platform, the chosen solution is differential drive.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;In this case the wheels are fixed, we can just play with their speed and direction.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A differential-drive robot uses two powered drive wheels and a third passive support wheel, normally a caster. Steering is achieved entirely through the relative speed of the left and right wheels.&lt;/p&gt;
&lt;p&gt;If both wheels rotate at the same speed, the robot travels in a straight line. If one wheel turns faster than the other, the robot follows a curve. If the wheels rotate in opposite directions, the robot can rotate on the spot.&lt;/p&gt;
&lt;p&gt;The design keeps moving parts to a minimum while still demonstrating many important mobile robotics concepts.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;The vacuum robot is the prime example of a differential drive robot.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That comparison is particularly fitting because robot vacuum cleaners use many of the same underlying principles explored in this project: differential drive, wheel feedback, environmental sensing and autonomous movement.&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf72"&gt;Selecting the Hardware&lt;/h2&gt;
&lt;p&gt;With the robot architecture decided, the next step was selecting the hardware.&lt;/p&gt;
&lt;p&gt;The drive system is built around two DFROBOT geared DC motors with integrated encoders. The gearbox reduces the motor speed to something useful for driving a robot, while the encoder provides rotational feedback.&lt;/p&gt;
&lt;p&gt;These encoders are important because they allow the robot to measure wheel speed and estimate wheel position. Without them, the firmware could only command a motor and hope it behaved as expected. With encoder feedback, movement can be measured, controlled and visualised.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;This here is an encoder.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For anyone unfamiliar with encoders and feedback systems, the element14 Learning Center article &lt;a href="/learn/learning-center/essentials/w/documents/23151/magnetic-encoders" data-e14adj="t"&gt;Magnetic Encoders&lt;/a&gt; provides useful background on how rotational position and velocity can be measured electronically.&lt;/p&gt;
&lt;p&gt;The motors are controlled through a DFROBOT dual motor driver. The microcontroller generates a direction signal and a PWM signal for each motor, while the motor driver handles the current required by the motors themselves.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Wiring to the DRI0044 (TB6612FNG) breakout:
//      PICO           DRI0044
//      PIN_M?_PWM --&amp;gt; PWM1 / PWM2   (speed,     0..100% duty)
//      PIN_M?_DIR --&amp;gt; DIR1 / DIR2   (direction, LOW/HIGH)
//      3V3        --&amp;gt; VCC           (logic supply)
//      battery    --&amp;gt; VM            (motor supply)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;While deceptively simple, this arrangement introduces readers to one of the most common motor-control structures used throughout robotics.&lt;/p&gt;
&lt;p&gt;Those wanting a deeper understanding of motor drive electronics can explore &lt;a href="/learn/learning-center/essentials/w/documents/3508/motor-control-motor-drive-control-for-makers" data-e14adj="t"&gt;Motor Control: Motor Drive Control for Makers&lt;/a&gt;, which covers PWM, motor drivers and motor control fundamentals in more detail.&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_000049.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf73"&gt;The Raspberry Pi Pico 2 W and Power System&lt;/h2&gt;
&lt;p&gt;To coordinate the robot&amp;#39;s sensors, motors and communications, Milo&amp;scaron; selected a Raspberry Pi Pico 2 W.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Why? Because it&amp;rsquo;s a really cheap and rather powerful microcontroller and it also has Wi-Fi and Bluetooth so we can easily control it wirelessly.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The Pico handles the embedded side of the project. It reads sensor data, processes encoder counts, executes the PID control loops, communicates with the GUI and generates motor commands.&lt;/p&gt;
&lt;p&gt;This is another point where concepts from earlier parts of the series return. The microcontroller acts as the bridge between the electronic hardware and the software logic driving the robot&amp;#39;s behaviour.&lt;/p&gt;
&lt;p&gt;An interesting challenge emerged from the encoder hardware. The motor encoders operate using 5 V logic, while the Pico uses 3.3 V logic.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;The encoders on these motors are 5V logic and our microcontroller here is 3.3V logic so we also need a level translator.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A simple level-shifting circuit is therefore required between the encoder outputs and the microcontroller inputs. This kind of practical electrical consideration appears frequently in real robotics projects and is often overlooked when looking only at block diagrams.&lt;/p&gt;
&lt;p&gt;The robot itself is powered from a four-cell AA battery pack, supplying approximately 6 V for the motors and supporting circuitry. A regulator generates the required logic voltage for the Pico and sensors.&lt;/p&gt;
&lt;p&gt;Milo&amp;scaron; jokingly highlights another very real robotics issue: battery quality.&lt;/p&gt;
&lt;p&gt;If the supply voltage drops too far under load, motors may continue turning while the microcontroller resets unexpectedly, producing brownouts and unpredictable behaviour.&lt;/p&gt;
&lt;p&gt;Power distribution often receives less attention than software or mechanics, but it has a huge influence on reliability. Readers interested in that topic may find &lt;a href="/learn/learning-center/essentials/w/documents/3194/power-essentials-for-makers" data-e14adj="t"&gt;Power Essentials for Makers&lt;/a&gt; useful supplementary reading.&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/Drawing3.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf74"&gt;Cliff Detection Instead of Obstacle Detection&lt;/h2&gt;
&lt;p&gt;Many consumer robots rely on bump sensors, cameras or LiDAR to detect obstacles. Rather than attempting to build a complete navigation system, Milo&amp;scaron; deliberately simplifies the sensing challenge.&lt;/p&gt;
&lt;p&gt;The robot uses five downward-facing infrared sensors as cliff detectors.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Instead of detecting walls we will detect cliffs.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This changes the problem from obstacle avoidance to edge detection. Rather than navigating around furniture, the robot explores a raised surface and attempts to identify where the surface ends.&lt;/p&gt;
&lt;p&gt;The approach is particularly useful for demonstrating how sensor information can directly drive robotic behaviour without requiring complex perception systems.&lt;/p&gt;
&lt;p&gt;The firmware includes logic specifically designed around this sensor arrangement.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// On a downward-facing cliff sensor a set bit means
// &amp;quot;this sensor SEES THE FLOOR&amp;quot;.
// Danger is the absence of floor.

#define IR_CLIFFS(mask) ((uint8_t)((~(mask)) &amp;amp; IR_ALL_BITS))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The accompanying comment in the firmware highlights a surprisingly common mistake.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Getting that backwards is not a cosmetic bug:
// it produces a robot that refuses to move on solid
// ground and drives happily over a cliff.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It is exactly the kind of observation that comes from testing on physical hardware rather than simulation.&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/Drawing2.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf75"&gt;Designing the Chassis&lt;/h2&gt;
&lt;p&gt;With the electronics established, attention shifted towards the mechanical design.&lt;/p&gt;
&lt;p&gt;Milo&amp;scaron; created the platform in Fusion 360 and structured it around a simple differential-drive layout consisting of two powered wheels and a caster.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;We&amp;rsquo;re going to drop into Fusion 360, do some CAD design.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The project is intentionally straightforward so that readers can recreate it even if they do not have access to the exact same fabrication tools.&lt;/p&gt;
&lt;p&gt;While the published design uses 3D-printed components, the robot could be built from much simpler materials. The important requirement is maintaining alignment between the drive wheels.&lt;/p&gt;
&lt;p&gt;If the wheels are not parallel, the robot will naturally drift and produce misleading results during testing.&lt;/p&gt;
&lt;p&gt;That lesson mirrors many industrial robotics projects: elegant software cannot compensate indefinitely for poor mechanical fundamentals.&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_000206.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf76"&gt;Firmware, Communications and Software Architecture&lt;/h2&gt;
&lt;p&gt;The software is split into two major pieces. The first is embedded firmware running on the Pico. The second is a desktop GUI used for control, monitoring and tuning.&lt;/p&gt;
&lt;p&gt;Readers who followed the SCARA robot arm build will recognise a very similar development workflow. Once again, Milo&amp;scaron; combines embedded software and a graphical control environment into a single ecosystem.&lt;/p&gt;
&lt;p&gt;The firmware is deliberately modular.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Everything the host can ask for goes through here,
// so Serial and WiFi are guaranteed to behave identically.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This ensures that commands behave the same whether they are sent through USB Serial or over Wi-Fi.&lt;/p&gt;
&lt;p&gt;The firmware also uses movement concepts familiar to anyone who has worked with CNC machines or 3D printers.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Modal state (G90/G91, the last F,
// the programmed wheel target) lives here
// rather than in the controller.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The resulting system is flexible enough for interactive testing while remaining structured enough for more advanced automation later on.&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/lowkp_5F00_2.5.1.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf77"&gt;Applying PID Control to a Real Robot&lt;/h2&gt;
&lt;p&gt;The theory behind PID control was explored previously in &lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72077/pid-control-motion-profiles-and-ros-explained---an-introduction-to-robotics" data-e14adj="t"&gt;PID Control, Motion Profiles and ROS Explained&lt;/a&gt;. Rather than revisiting the mathematics, this project demonstrates how those concepts are applied to a mobile robot.&lt;/p&gt;
&lt;p&gt;Each wheel uses encoder feedback to regulate speed through a closed-loop controller.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// SPEED loop (inner): error in mm/s -&amp;gt; output in duty

#define SPD_KP 0.0015f
#define SPD_KI 0.0080f
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The GUI exposes tuning controls, making it possible to observe how the robot responds as controller values change.&lt;/p&gt;
&lt;p&gt;Milo&amp;scaron; demonstrates the practical tuning process by examining how quickly the wheel reaches its target speed. A response that is too slow typically indicates insufficient proportional gain. Increasing Kp improves responsiveness, but pushing it too far can create oscillation and instability.&lt;/p&gt;
&lt;p&gt;Those behaviours become immediately visible when real motors, gearboxes, batteries and sensors enter the equation. The project therefore serves as a practical continuation of the PID concepts introduced earlier in the series, showing what they look like when attached to a physical robot rather than a simplified example. One of the biggest conceptual differences between this project and the earlier SCARA robot arm is localisation. A robot arm operates from a known position. Its joints move relative to a fixed base and its location in the world remains constant.&lt;/p&gt;
&lt;p&gt;A mobile robot is different. Once it begins moving, it has to estimate where it is. This project deliberately avoids advanced localisation systems such as visual SLAM or sensor fusion. Instead, the platform introduces a simpler concept: wheel odometry.&lt;/p&gt;
&lt;p&gt;By measuring wheel rotation using encoders, the robot can estimate how far it has travelled and build a rough picture of its movement.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;We are only here calculating where it is based on the encoder positions.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While not perfectly accurate, odometry provides a powerful introduction to localisation and forms the basis of countless robotics systems.&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf79"&gt;Creating a Simple Mapping Behaviour&lt;/h2&gt;
&lt;p&gt;Once the platform could drive reliably and the sensors were functioning correctly, it was time to make the robot perform a task.&lt;/p&gt;
&lt;p&gt;The chosen exercise was mapping the edge of a raised surface.&lt;/p&gt;
&lt;p&gt;The mapping algorithm intentionally remains simple. Whenever a cliff sensor detects an edge, the robot reverses and changes direction. If the centre sensor detects a head-on edge, the robot performs a more substantial manoeuvre before continuing.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;As we detect a certain edge we&amp;rsquo;re gonna go back, turn around, something similar that your robot vacuum is doing.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This behaviour is significant because it combines every major subsystem.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The mechanical design determines how the robot moves.&lt;/li&gt;
&lt;li&gt;The motors execute the movement.&lt;/li&gt;
&lt;li&gt;The encoders provide feedback.&lt;/li&gt;
&lt;li&gt;The PID loops regulate motion.&lt;/li&gt;
&lt;li&gt;The sensors detect the environment.&lt;/li&gt;
&lt;li&gt;The algorithm determines how the robot reacts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The GUI then visualises the results.&lt;/p&gt;
&lt;p&gt;As the robot continues exploring, the triggered cliff detections begin forming a representation of the table edge.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;It&amp;rsquo;s forming a rather nice point cloud around the edges of the table.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The robot is not creating a complete map in the modern SLAM sense, but it does demonstrate how movement and sensing can be combined to generate useful environmental information.&lt;/p&gt;
&lt;h2 id="mcetoc_1jvt5umf8a"&gt;What Beginners Should Focus On and&amp;nbsp;Further Learning on element14 Community&lt;/h2&gt;
&lt;p&gt;One of the most useful aspects of this project is that it intentionally avoids overwhelming complexity.&lt;/p&gt;
&lt;p&gt;Rather than introducing every possible robotics concept at once, Milo&amp;scaron; focuses on a small number of ideas and demonstrates how they fit together.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Differential-drive locomotion.&lt;/li&gt;
&lt;li&gt;Motor control and motor drivers.&lt;/li&gt;
&lt;li&gt;Wheel encoders.&lt;/li&gt;
&lt;li&gt;PID speed regulation.&lt;/li&gt;
&lt;li&gt;Microcontroller-based firmware.&lt;/li&gt;
&lt;li&gt;Infrared sensing.&lt;/li&gt;
&lt;li&gt;Wireless communications.&lt;/li&gt;
&lt;li&gt;Simple mapping behaviour.&lt;/li&gt;
&lt;li&gt;Basic odometry.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Along the way, readers also see the less glamorous aspects of robot development: wiring issues, logic-level compatibility, battery behaviour, sensor interpretation, wheel alignment and controller tuning. Those are often the challenges that consume the most development time on real projects. Readers wanting to explore the wider Introduction to Robotics series and related topics can continue with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72071/building-the-foundations-of-your-first-robot---an-introduction-to-robotics" data-e14adj="t"&gt;Building the Foundations of Your First Robot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72077/pid-control-motion-profiles-and-ros-explained---an-introduction-to-robotics" data-e14adj="t"&gt;PID Control, Motion Profiles and ROS Explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/challenges-projects/element14-presents/project-videos/w/documents/72087/building-and-programming-a-scara-industrial-robot-arm-an-introduction-to-robotics" data-e14adj="t"&gt;Building and Programming a SCARA Industrial Robot Arm&lt;/a&gt;&lt;/li&gt;
&lt;li&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;Designing a Mobile Robot Platform with Inverse Kinematics and Wireless Control&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/learn/learning-center/" data-e14adj="t"&gt;element14 Learning Center&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/learn/learning-center/essentials/w/documents/3194/power-essentials-for-makers" data-e14adj="t"&gt;Power Essentials for Makers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/learn/learning-center/essentials/w/documents/3508/motor-control-motor-drive-control-for-makers" data-e14adj="t"&gt;Motor Control: Motor Drive Control for Makers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/learn/learning-center/essentials/w/documents/27574/the-basics-of-microcontrollers" data-e14adj="t"&gt;The Basics of Microcontrollers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/learn/learning-center/essentials/w/documents/23151/magnetic-encoders" data-e14adj="t"&gt;Magnetic Encoders&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/learn/learning-center/essentials/w/documents/28063/an-introduction-to-programming-with-python" data-e14adj="t"&gt;An Introduction to Programming with Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/learn/learning-center/essentials/w/documents/29543/essentials-of-robot-operating-system-2" data-e14adj="t"&gt;Essentials of Robot Operating System 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/products/arduino/arduino-tutorials/b/blog/posts/jeremy-blum-arduino-tutorials" data-e14adj="t"&gt;Jeremy Blum Arduino Tutorials&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jvtgqs7p7"&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/IMG_5F00_3404.JPG" /&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_000349.png" /&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1jvt5umf8c"&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;As the fourth instalment of the Introduction to Robotics series, this project acts as a bridge between foundational robotics theory and the challenges of mobile robotics.&lt;/p&gt;
&lt;p&gt;The robot combines electronics, mechanical design, feedback control, embedded software and environmental sensing into a platform that is simple enough to understand yet capable enough to demonstrate genuine robotics concepts.&lt;/p&gt;
&lt;p&gt;By the end of the project, the robot can drive, regulate its wheel speed, detect table edges, estimate its movement, visualise sensor data and build a rough representation of its surroundings.&lt;/p&gt;
&lt;p&gt;Those capabilities may appear straightforward, but together they form the basis of a huge number of robotic systems.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;I would love to explore more complex robotics projects with you.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Whether the next step is odometry improvements, more advanced mapping, ROS integration, navigation algorithms, sensor fusion or entirely new robot architectures, this platform provides a practical foundation on which those future topics can be built.&lt;/p&gt;
&lt;h2 id="mcetoc_1jvtg2v5b0"&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/151576"&gt;Episode 727 Resource Files - Designing a Mobile Robot Platform with Differential Drive, PID Control and Wireless Mapping&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1jvtg5dmh4"&gt;Bill of Materials / Parts 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-525c0" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3769977~2,3974106,4568690,4007697~5,3879700~2&amp;nsku=52AJ5083~2,33AK3153,20AM4425,42AK5670~5,07AK0287~2&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('525c0'));" data-farnell="3769977~2,3974106,4568690,4007697~5,3879700~2" data-newark="52AJ5083~2,33AK3153,20AM4425,42AK5670~5,07AK0287~2" data-comoverride="" data-cmpoverride="" data-cpc="undefined~2,,,undefined~5,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;DFROBOT Motor&lt;/td&gt;
&lt;td&gt;DFROBOT&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-d46b6" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3769977~2&amp;nsku=52AJ5083~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('d46b6'));" data-farnell="3769977~2" data-newark="52AJ5083~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;DFROBOT Motor Driver&lt;/td&gt;
&lt;td&gt;DFROBOT&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-3266e" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3974106&amp;nsku=33AK3153&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('3266e'));" data-farnell="3974106" data-newark="33AK3153" 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 Pico 2W&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-fefde" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4568690&amp;nsku=20AM4425&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('fefde'));" data-farnell="4568690" data-newark="20AM4425" 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;NOT THE SAME FORMFACTOR - IR Sensor&lt;/td&gt;
&lt;td&gt;SEEED STUDIO&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-3565f" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=4007697~5&amp;nsku=42AK5670~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('3565f'));" data-farnell="4007697~5" data-newark="42AK5670~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;NOT USED IN VIDEO - Wheel&lt;/td&gt;
&lt;td&gt;DFROBOT&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-ebc67" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3879700~2&amp;nsku=07AK0287~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('ebc67'));" data-farnell="3879700~2" data-newark="07AK0287~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 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;h2 id="mcetoc_1jvtg5dmh5"&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;AA battery holder&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;M3 machine 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;Small caster wheel&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AA batteries&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Perfboard and wires&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_1jvtg5dmh6"&gt;&lt;/h3&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: embedded robotics programming, autonomous robot project, infrared cliff sensors, introduction to robotics, robotics for beginners, raspberry pi pico 2 w robot, robot wheel encoders, robot motor driver, wheel odometry, mobile robot platform, pid motor control, mobile robot mapping, e14presents_milosrasic, wireless robot control, friday_release, differential drive robot, diy robot build&lt;/div&gt;
</description></item></channel></rss>