Skip to the content
PCBKitNew board
2 layers37.8 × 33.2 mmIr controller, the printed circuit board in 3D

This project is a compact, SMD-based gesture-controlled infrared (IR) transmitter, powered by the RP2040 microcontroller and the APDS-9960 gesture sensor.

Size
37.8 × 33.2 mm
Copper layers
2
Thickness
1.6 mm
Parts
19
Nets
55
Pads
117
Tracks, vias
209, 20
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
21 May 2025
Updated
21 May 2025

Overview

Ir controller is an open-source printed circuit board by akmalbnazir, from the akmalbnazir/gesture_ir_controller repository on GitHub. It is a 2-layer board of 37.8 × 33.2 mm with 19 parts on 55 nets, routed with 209 tracks and 20 vias.

It is built around the RP2040, APDS-9960 and AMS1117-3.3. Its parts include 9 resistors, 3 ICs, 2 capacitors, 2 diodes and 2 switches. It belongs with the RP2040 boards of this library.

Main components

3

README

README.md

✋ Gesture-Based IR Controller

This project is a compact, SMD-based gesture-controlled infrared (IR) transmitter, powered by the RP2040 microcontroller and the APDS-9960 gesture sensor. It enables hands-free control of IR-enabled devices like TVs, LED strips, or home automation receivers, all without needing Bluetooth, Wi-Fi, or pairing.


📦 Features

  • 🔌 Powered via USB-C (Power-only 6P connector)
  • 🧠 Built on the RP2040 dual-core microcontroller
  • 👋 Integrated APDS-9960 gesture/proximity sensor
  • 📤 High-speed IR LED transmission using PWM (38kHz)
  • 🔘 Manual Bootsel and Reset buttons for development
  • 🌈 Optional status LED for gesture response indication
  • 🔧 Fully SMD design, suitable for hand or reflow soldering

🔧 Hardware Overview

🧠 Core MCU

  • RP2040 with external QSPI Flash (if required)
  • Powered via onboard AMS1117-3.3 LDO

👋 Gesture Input

  • APDS-9960 optical sensor (I2C)
  • INT pin routed to GPIO for real-time gesture notifications
  • Pull-up resistors (10kΩ) on SDA and SCL
  • Decoupling capacitor (0.1uF) for power stability

📤 Infrared Output

  • High-efficiency IR LED
  • Current-limiting resistor (100Ω)
  • Driven directly from a GPIO at 38kHz using PWM

🧪 Debug / Control

  • SW1: Bootsel button → GPIO0 (active-low)
  • SW2: Reset button → RP2040 RUN pin (active-low)
  • D1: Optional status LED (330Ω resistor)

🔋 Power Regulation

  • USB-C (Power Only) input
  • AMS1117-3.3 LDO regulator
  • 10uF output capacitor (C2)
  • Pull-downs (5.1kΩ) on CC1 and CC2 for proper USB-C sink negotiation

📐 GPIO Assignments

FunctionGPIO Pin
I2C SDAGPIO20
I2C SCLGPIO21
Gesture INTGPIO22
Status LEDGPIO23
IR Output (PWM)GPIO19
Bootsel (SW1)GPIO0
Reset (SW2)RUN pin

🛠️ Component Footprints (SMD)

ComponentFootprint
RP2040MCU_RaspberryPi:RP2040
APDS-9960Sensor_Optical:APDS-9960
IR LEDLED_SMD:LED_0805_2012Metric
SW1/SW2Button_Switch_SMD:SW_SPST_SKQG
AMS1117-3.3Regulator_Linear:AMS1117-3.3
USB-CConnector_USB:USB_C_Receptacle_GCT_USB4125-6P_TopMount_Horizontal
ResistorsResistor_SMD:R_0603_1608Metric
CapacitorsCapacitor_SMD:C_0603_1608Metric

🧠 Logic Flow

c
// Pseudocode overview
setup() {
    configure_i2c();
    configure_pwm(38kHz);  // for IR LED
    attach_interrupt(GESTURE_INT);
}

loop() {
    if (gesture == RIGHT_SWIPE) {
        send_ir_code(POWER);
    }
    else if (gesture == UP_SWIPE) {
        send_ir_code(VOLUME_UP);
    }
    // etc.
}

📝 Bill of Materials (Simplified)

QuantityComponentValue
1xRP2040–
1xAPDS-9960–
1xIR LED–
1xStatus LED–
1xAMS1117-3.3–
1xUSB-C Connector6P
2xTactile Switch–
2x10kΩ ResistorPull-up
2x5.1kΩ ResistorUSB-C CC
1x330Ω ResistorLED
1x100Ω ResistorIR LED
1x0.1uF Capacitor–
1x10uF Capacitor–

📁 Folder Structure

text
/Gesture-IR-Controller/
├── schematic.kicad_sch
├── pcb.kicad_pcb
├── symbols/
├── footprints/
├── firmware/  (optional)
└── README.md

Preview

image


📜 License

This project is released under the MIT License.
Use it freely, improve it, deploy it — just give credit where it’s due.


Built with love by Akmal Nazir

Parts

19
QtyValueFootprintReferences
410kΩResistor_SMD:R_0603_1608MetricR1, R2, R4, R5
25.1kΩResistor_SMD:R_0603_1608MetricR6, R7
2DDiode_SMD:D_0603_1608MetricD1, D2
2SW_PushButton_Switch_SMD:SW_SPST_SKQG_WithStemSW1, SW2
10.1uFCapacitor_SMD:C_0603_1608MetricC1
10ΩResistor_SMD:R_0603_1608MetricR8
1100ΩResistor_SMD:R_0603_1608MetricR9
110uFCapacitor_SMD:C_0603_1608MetricC2
1330ΩResistor_SMD:R_0603_1608MetricR3
1AMS1117-3.3Package_TO_SOT_SMD:SOT-223-3_TabPin2U3
1APDS-9960Sensor:Avago_APDS-9960U2
1RP2040Package_DFN_QFN:QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mmU1
1USB_C_Receptacle_PowerOnly_6PConnector_USB:USB_C_Receptacle_GCT_USB4125-xx-x-0190_6P_TopMnt_HorizontalJ1

Questions

How big is the Ir controller PCB?

It measures 37.8 × 33.2 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Ir controller use?

19 parts, built around the RP2040, APDS-9960 and AMS1117-3.3. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Ir controller KiCad files?

From the akmalbnazir/gesture_ir_controller repository on GitHub, at the commit this page was made from: the board is ir_controller.kicad_pcb and its schematic ir_controller.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Ir controller design in my own project?

Its repository states no licence, so its author keeps all rights: ask akmalbnazir before reusing the design.

Similar boards

  • 2 layers116.8 × 116.8 mmBentoboard, the printed circuit board in 3D

    Bentoboard

    torbers/bentoboard

    as many ready-to-use electronics as i could fit on a 4"x4" PCB.

    381 parts
  • 2 layers57.9 × 42.9 mmProj cbmc lab, the printed circuit board in 3D

    Proj cbmc lab

    navyathangalapally-rgb/APDS9960-color-sensor-PCB

    A KiCad-based PCB design for an APDS-9960 RGB, Proximity, and Gesture sensor module, developed for the CBMC Laboratory project.

    31 partsMIT
  • 2 layers67.5 × 82.5 mmARDUNIO ADV, the printed circuit board in 3D

    ARDUNIO ADV

    MAATHES-THILAK-K/Arduino-SMD

    Arduino SMD version with In-Built Bluetooth and Gesture sensor

    62 parts2MIT
  • 8 layers120 × 60 mmDFTBoard, the printed circuit board in 3D

    DFTBoard

    juliancoy/zynqPCB

    An 8-layer board in Kicad built upon Xilinx Zynq Chip. Includes sound output, HDMI, DDR3, and Arduino Uno style header for screen connection

    299 parts75MIT
  • 2 layers43 × 43 mmBadge, the printed circuit board in 3D

    Badge

    oshwabadge2020/Badge-PCB

    Open Hardware Summit 2020 wrist-watch badge

    78 parts19
  • 4 layers50.8 × 22.9 mmBald Sense Wing v3, the printed circuit board in 3D

    Bald Sense Wing v3

    baldengineer/BaldSENSE_Sensor_Feather_Wing

    A temperature, humidity, light, and sound sensor wing

    63 parts9MIT
  • 2 layers85 × 70 mmPRTGN v1, the printed circuit board in 3D

    PRTGN v1

    bismarx-v1/PRTGN

    OwO whats this (This repo contains electronics, mechanical and software data for a protogen visor)

    69 parts6
  • 2 layers134 × 38.5 mmLED Clock, the printed circuit board in 3D

    LED Clock

    bitbank2/LED_Clock

    A low cost PCB project (w/firmware) for a dark-room-friendly digital clock

    97 parts6Apache-2.0