ertuncozbay.dev/projects/multi-functional-controller.html

230 lines
13 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Multi-Functional RC Controller (MFC) — Projects — Ertunç Özbay</title>
<meta name="description" content="Engineering documentation for the ESP32-S3-N16R8 Multi-Functional RC Controller (MFC) by Ertunç Özbay: 2.4 GHz nRF24L01+ PA+LNA telemetry, K-Silver Hall-effect gimbals, ST7789 IPS TFT + MicroSD SPI2 bus, KiCad schematic, and Phase 1/2 hardware build.">
<link rel="icon" type="image/svg+xml" href="../assets/images/favicon.svg">
<link rel="stylesheet" href="../assets/css/style.css">
</head>
<body>
<a class="skip-link" href="#main-content">Skip to main content</a>
<header class="site-header">
<div class="container header-inner">
<a class="site-brand" href="../index.html">
<span class="brand-mark" aria-hidden="true">EÖ</span>
<span>
Ertunç Özbay
<span class="brand-subtitle">embedded // hardware // open-source</span>
</span>
</a>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span>
<span data-nav-label>Menu</span>
</button>
<nav id="primary-navigation" class="site-nav" data-site-nav aria-label="Main navigation">
<ul class="nav-list">
<li><a class="nav-link" href="../index.html">Home</a></li>
<li><a class="nav-link" href="../about.html">About</a></li>
<li><a class="nav-link" href="../projects/index.html" aria-current="page">Projects</a></li>
<li><a class="nav-link" href="../blog/index.html">Blog</a></li>
<li><a class="nav-link" href="../lab.html">Lab</a></li>
<li><a class="nav-link" href="../contact.html">Contact</a></li>
</ul>
</nav>
</div>
</header>
<main id="main-content">
<div class="container">
<nav class="breadcrumb" aria-label="Breadcrumb">
<a href="index.html">← Back to Projects</a>
</nav>
<article>
<header class="workshop-hero">
<div class="card-meta">
<span class="badge badge-progress">Status: Rev 0.1 Carrier Built → Phase 2 Console Expansion</span>
<span>Project 01 // ESP32-S3-N16R8 • 2.4 GHz RF • ESP-IDF C99</span>
</div>
<h1><span class="gradient-title">Multi-Functional RC Controller (MFC)</span></h1>
<p class="hero-lead">
A custom 2.4 GHz wireless transmitter and embedded control console powered by an <strong>ESP32-S3-N16R8</strong> (Dual-Core LX7 @ 240 MHz, 16 MB Flash, 8 MB Octal PSRAM) and an <strong>nRF24L01+ PA+LNA</strong> RF transceiver.
</p>
<p class="reading-width">
Designed to serve as a universal handheld and desktop transmitter for external robotic platforms (such as my <a href="rc-autonomous-vehicle.html">4WD RC &amp; Autonomous Vehicle</a>) while integrating dual K-Silver Hall-effect joysticks, a 1.3" ST7789 IPS TFT display, MicroSD storage, and MAX4466 audio capture.
</p>
<div class="button-row">
<a class="btn btn-primary" href="https://github.com/ertunc-ozbay/multi-functional-controller" rel="noopener noreferrer">💻 View GitHub Repository</a>
<a class="btn btn-youtube" href="#poc-video">🎬 Watch PoC Video Slot</a>
<a class="btn btn-secondary" href="index.html">All Projects</a>
</div>
</header>
<!-- YouTube Proof-of-Concept Video Placeholder -->
<section id="poc-video" class="poc-video-section" aria-labelledby="mfc-video-heading">
<div class="poc-video-card">
<span class="section-label">🎬 Proof of Concept // YouTube Video Showcase</span>
<h2 id="mfc-video-heading">YouTube Proof-of-Concept Demonstration</h2>
<!-- Ready-to-use YouTube Embed Placeholder: Replace src when uploaded -->
<div class="poc-video-screen" role="region" aria-label="YouTube Proof of Concept Video Placeholder">
<div class="poc-play-badge" aria-hidden="true">
<div class="poc-play-triangle"></div>
</div>
<span class="poc-status-pill">🎥 YouTube PoC Video — Recording / Coming Soon</span>
<div class="poc-video-title">ESP32-S3 Multi-Functional Controller — Hardware &amp; 2.4 GHz RF Telemetry Demo</div>
<p class="poc-video-desc">
Upcoming YouTube demonstration covering the Rev 0.1 perfboard carrier power-on test, 2.4 GHz nRF24L01+ packet transmission, Hall-effect gimbal ADC sampling, and ST7789 IPS TFT UI rendering.
</p>
</div>
</div>
</section>
<!-- Early Prototype Hardware Gallery -->
<section class="section-block" aria-labelledby="p1-gallery">
<span class="section-label">01 // Early Prototype Build (Rev 0.1 Perfboard Carrier)</span>
<h2 id="p1-gallery">Very Early Prototype Hardware Gallery</h2>
<p class="reading-width">
<em>Note:</em> The photos below show the <strong>very early Phase 1 (Rev 0.1) perfboard carrier build</strong> (click any image to zoom). Currently populated: female/male pin header sockets, 100 µF electrolytic bulk decoupling capacitor, ESP32-S3-N16R8 module, nRF24L01+ 2.4 GHz radio header, and 3.3V/5V/GND power distribution rails. These photos will be updated as the Phase 2 DT-100 desktop console modules are installed.
</p>
<div class="card-grid">
<figure class="card card-amber" style="margin:0;">
<img class="zoomable-img" src="../assets/images/TOP_VIEW.png" alt="Top view of the early Rev 0.1 Multi-Functional Controller perfboard carrier" style="width:100%; height:auto; border-radius:8px; margin-bottom:0.75rem;">
<figcaption>
<strong>Top View (Rev 0.1):</strong> Early perfboard carrier showing dual 22-pin female header sockets for the ESP32-S3, power rail pin headers, and the 100 µF bulk capacitor.
</figcaption>
</figure>
<figure class="card card-amber" style="margin:0;">
<img class="zoomable-img" src="../assets/images/SIDE_VIEW_WITH_ANTENNA.png" alt="Side view of the Multi-Functional Controller with 2.4 GHz nRF24L01+ SMA duck antenna" style="width:100%; height:auto; border-radius:8px; margin-bottom:0.75rem;">
<figcaption>
<strong>RF Transceiver Profile:</strong> Side profile with the nRF24L01+ PA+LNA 2.4 GHz module and external SMA whip antenna mounted on the carrier.
</figcaption>
</figure>
<figure class="card card-amber" style="margin:0;">
<img class="zoomable-img" src="../assets/images/BOTTOM_VIEW.png" alt="Bottom solder-side point-to-point wiring of the Rev 0.1 perfboard carrier" style="width:100%; height:auto; border-radius:8px; margin-bottom:0.75rem;">
<figcaption>
<strong>Bottom Solder Routing:</strong> Hand-soldered point-to-point bus and power distribution traces on the underside of the phenolic perfboard.
</figcaption>
</figure>
</div>
</section>
<!-- KiCad Schematic -->
<section class="section-block" aria-labelledby="p1-schematic">
<span class="section-label">02 // Hardware Schematic Capture</span>
<h2 id="p1-schematic">Early KiCad 9.0 Schematic (<code>mfc-1.svg</code>)</h2>
<figure class="schematic-frame">
<img class="zoomable-img" src="../assets/images/mfc-1.svg" alt="KiCad schematic diagram of the ESP32-S3 Multi-Functional Controller" style="background:#ffffff; border-radius:8px; padding:0.5rem;">
<figcaption class="schematic-caption">
Early prototype KiCad schematic (<code>mfc-1.kicad_sch</code>) — click to zoom full-screen.
</figcaption>
</figure>
</section>
<!-- Confirmed ESP32-S3 Pinout -->
<section class="section-block reading-width" aria-labelledby="p1-pinout">
<span class="section-label">03 // Verified ESP32-S3-N16R8 Pinout &amp; Bus Architecture</span>
<h2 id="p1-pinout">Master Node GPIO Allocation</h2>
<p>
Because the <strong>ESP32-S3-N16R8</strong> reserves <code>GPIO 35–37</code> internally for its 8 MB Octal PSRAM and 16 MB SPI Flash, all peripherals are mapped across safe ADC1, SPI2, and PCNT pins:
</p>
<table class="spec-table">
<thead>
<tr>
<th scope="col">Subsystem / Peripheral</th>
<th scope="col">ESP32-S3 GPIO</th>
<th scope="col">Interface &amp; Engineering Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Dual Hall-Effect Joysticks (4 Axes)</strong></td>
<td><code>GPIO 4, 5, 6, 7</code></td>
<td>12-bit SAR <code>ADC1</code> (<code>LX, LY, RX, RY</code>) — avoids ADC2 Wi-Fi/RF conflicts</td>
</tr>
<tr>
<td><strong>MAX4466 Electret Mic Preamp</strong></td>
<td><code>GPIO 1</code></td>
<td><code>ADC1_CH0</code> analog audio envelope &amp; FFT voice input</td>
</tr>
<tr>
<td><strong>Shared SPI2 Bus (MOSI / MISO / SCK)</strong></td>
<td><code>GPIO 11 / 13 / 12</code></td>
<td>High-speed SPI2 bus shared by nRF24L01+, ST7789 TFT, and MicroSD</td>
</tr>
<tr>
<td><strong>nRF24L01+ 2.4 GHz Radio</strong></td>
<td><code>CE: 9, CSN: 10</code></td>
<td>Dedicated 100 µF electrolytic + 100 nF ceramic decoupling on 3.3V rail</td>
</tr>
<tr>
<td><strong>1.3" ST7789 IPS TFT (240×240)</strong></td>
<td><code>CS: 40, DC: 41, RST: 42</code></td>
<td>Hardware Chip Select added so TFT shares SPI2 cleanly with nRF24 &amp; SD</td>
</tr>
<tr>
<td><strong>MicroSD Card Module</strong></td>
<td><code>CS: 39</code></td>
<td>Stores telemetry logs, profiles, and UI assets over SPI2</td>
</tr>
<tr>
<td><strong>Rotary Encoder (KY-040)</strong></td>
<td><code>CLK: 15, DT: 16, SW: 17</code></td>
<td>Hardware <code>PCNT</code> quadrature decoder with 1000 ns glitch filter</td>
</tr>
<tr>
<td><strong>2N2222A BJT Low-Side Switch</strong></td>
<td><code>GPIO 21</code> (via 1 kΩ base R)</td>
<td>Drives external loads with <code>1N4001</code> / <code>1N5817</code> flyback protection</td>
</tr>
</tbody>
</table>
</section>
<!-- Phase 1 vs Phase 2 BOM -->
<section class="section-block reading-width" aria-labelledby="p1-bom">
<span class="section-label">04 // Build Roadmap &amp; Phase 2 Console BOM</span>
<h2 id="p1-bom">From Rev 0.1 Carrier to the DT-100 Desktop Console</h2>
<div class="callout-box amber">
<span class="callout-title">Phase 2 Hardware Upgrade (Direnc.net Procurement List)</span>
<p>
The controller is transitioning from the bare Rev 0.1 perfboard carrier into a professional desktop console housing. Once the Phase 2 components below are mounted, the ESP-IDF firmware will be updated with drivers for each module:
</p>
<ul style="margin-bottom:0;">
<li><strong>Enclosure:</strong> DT-100 Desktop Instrument Case (Black ABS, <code>190 × 137 × 59 mm</code>)</li>
<li><strong>Joysticks:</strong> 2× K-Silver High-Precision Hall-Effect 2-Axis Gimbals</li>
<li><strong>Display &amp; Storage:</strong> 1.3" ST7789 IPS TFT LCD (240×240) + SPI MicroSD Card Module</li>
<li><strong>Audio Preamp:</strong> MAX4466 Electret Microphone Amplifier with Adjustable Gain</li>
<li><strong>Power &amp; Switching:</strong> MT3608 2A DC-DC Boost Converter, 12–24V White LED Waterproof Latching Switch, KTS303 3-Pin Toggle Switch, 180° Slide Switch</li>
<li><strong>Discrete Protection:</strong> 2N2222 NPN BJT Transistor, 1N5817 1A 20V Schottky Diode, 1N4001 1A 50V Rectifier Diode (DO-41)</li>
</ul>
</div>
</section>
</article>
</div>
</main>
<footer class="site-footer">
<div class="container footer-inner">
<div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertuncozbayh@gmail.com">ertuncozbayh@gmail.com</a>
</div>
<ul class="footer-links" aria-label="Footer links">
<li><a href="../projects/index.html">Projects</a></li>
<li><a href="../blog/index.html">Blog</a></li>
<li><a href="../lab.html">Lab</a></li>
<li><a href="../contact.html">Contact</a></li>
<li><a href="https://github.com/ertunc-ozbay" rel="noopener noreferrer">GitHub</a></li>
<li><a href="https://www.linkedin.com/in/ertunc-ozbay" rel="noopener noreferrer">LinkedIn</a></li>
</ul>
</div>
</footer>
<script src="../assets/js/main.js"></script>
</body>
</html>