Every electronics hobbyist reaches a point where the Arduino Uno feels too large, too expensive, or just too off-the-shelf for their project. That is the moment to design your own custom Arduino PCB — a minimal board built specifically for your application, with only the components you need, at a fraction of the cost of buying individual modules.
A custom Arduino board based on the ATmega328P can cost under ₹150 per unit when manufactured in quantity, compared to ₹500–800 for a bare Arduino Nano. Beyond cost, you gain complete control over size, connector placement, power supply, and peripherals. You can design a board that plugs directly into your product enclosure, runs on a LiPo battery, or fits on a PCB the size of a postage stamp.
This guide takes you through the complete process: schematic capture, PCB layout, design rule checks, component selection, ordering, and bootloader flashing — everything you need to go from an idea to a working custom Arduino board.
Why Design a Custom Arduino Board?
The most common reasons makers design their own Arduino-compatible PCBs are:
- Form factor: Your enclosure is not the shape of an Arduino Uno. A custom board can be circular, L-shaped, or designed to mount on a specific screw pattern.
- Integration: Instead of stacking shields, integrate the display, relay driver, power supply, and microcontroller onto one PCB. This reduces wiring, assembly time, and failure points.
- Cost reduction at scale: For production runs of 50+ units, a custom board eliminates module markup. The BOM (bill of materials) for a bare ATmega328P board is under ₹150 in components.
- Power optimisation: Remove the USB-Serial chip, LED indicators, and linear regulator that waste power. Run the ATmega328P at 3.3V/8 MHz for battery projects lasting months on two AA cells.
- Cleanliness: A dedicated PCB looks professional and is far more reliable than point-to-point wiring on a perfboard.
Tools and Software You Need
You do not need expensive software to design a custom PCB. The full workflow can be completed with free tools:
KiCad (Recommended)
KiCad is the industry-standard open-source EDA (electronic design automation) suite. It handles schematic capture, PCB layout, 3D preview, and Gerber export. Version 7 and later have an excellent library of standard components including ATmega ICs. Download free from kicad.org.
EasyEDA (Beginner-Friendly Alternative)
EasyEDA is browser-based and integrates directly with the LCSC component library and JLCPCB manufacturing. If you plan to order from JLCPCB or PCBWay, EasyEDA makes the transition seamless. Slightly less powerful than KiCad but much easier to learn.
Components You Need to Procure
- ATmega328P-PU (DIP) or ATmega328P-AU (TQFP-32 SMD)
- 16 MHz crystal (or 8 MHz for 3.3V operation)
- 2× 22 pF ceramic capacitors (crystal load caps)
- 100 nF decoupling capacitors (one per VCC pin)
- 10 µF electrolytic capacitor (bulk power decoupling)
- 10 kΩ resistor (RESET pull-up)
- AMS1117-5.0 or MIC5205 LDO regulator (if not running from 5V directly)
- 6-pin ISP header for bootloader flashing
- Optional: FTDI or CH340 USB-Serial chip for in-circuit programming
The Minimal Arduino Schematic
The absolute minimum circuit to get an ATmega328P running as an Arduino consists of:
Power Supply
Connect VCC (pins 7, 20) and AVCC (pin 20) to 5V. Connect GND (pins 8, 22) to ground. Add a 100 nF decoupling capacitor between each VCC pin and GND, placed as close to the IC as possible. Add a 10 µF capacitor from power entry to GND.
Crystal Oscillator
Connect a 16 MHz crystal between XTAL1 (pin 9) and XTAL2 (pin 10). Add a 22 pF capacitor from each crystal pin to GND. These load capacitors resonate with the crystal — without them, the oscillator may not start reliably.
Reset Circuit
Connect a 10 kΩ resistor from RESET (pin 1) to VCC. Add a 100 nF capacitor from RESET to GND for noise filtering. Optionally add a pushbutton between RESET and GND for manual reset. The auto-reset for programming is achieved by the USB-Serial chip’s DTR line through a 100 nF capacitor to RESET.
ISP Programming Header
A standard 6-pin ISP (In-System Programming) header exposes MOSI, MISO, SCK, RESET, VCC, and GND. This allows you to flash the bootloader and program the chip before (or instead of) using USB-Serial. Pin mapping:
- Pin 1: MISO (PB4, Arduino D12)
- Pin 2: VCC
- Pin 3: SCK (PB5, Arduino D13)
- Pin 4: MOSI (PB3, Arduino D11)
- Pin 5: RESET
- Pin 6: GND
Optional USB-Serial (CH340G)
To program via USB without a separate programmer, add a CH340G USB-Serial converter. Connect CH340G TXD → ATmega RXD (PD0), CH340G RXD → ATmega TXD (PD1). Add a 100 nF capacitor from CH340G DTR → ATmega RESET for auto-reset during upload. Include a USB Micro-B or USB-C connector.
PCB Layout Best Practices
A clean PCB layout is critical for reliable operation. These rules apply to any Arduino-class microcontroller board:
Decoupling Capacitor Placement
Every decoupling capacitor must be placed as close as possible to its corresponding VCC pin. In KiCad, route the capacitor directly from the pin before routing to the power plane. A decoupling capacitor 5 cm away from the IC provides almost no benefit.
Crystal Placement
Place the crystal and its load capacitors physically close to XTAL1 and XTAL2 pins. Route the crystal traces short and direct. Do not run other signal traces under or near the crystal — high-frequency oscillator lines are sensitive to capacitive coupling.
Ground Plane
Use a solid copper ground plane on the bottom layer (or internal layer on a 4-layer board). A ground plane reduces EMI, provides a low-impedance return path, and simplifies routing. In KiCad, add a filled zone on the bottom copper layer assigned to the GND net, then run DRC to make sure all GND pads connect to it.
Trace Widths
For signal traces carrying only a few milliamps, 0.25 mm (10 mil) minimum is fine. For power traces carrying 500 mA or more, use at least 0.8 mm. The USB VBUS line should be at least 1 mm if it carries the board’s full power. Calculate trace width for your current using the IPC-2221 standard or an online trace width calculator.
Component Placement Strategy
Start by placing the MCU in the centre of the board. Group supporting components (crystal, decoupling caps, reset circuit) near the MCU. Then place connectors at the board edges. Route power first, then the high-speed signals (crystal, SPI), then the remaining IO lines.
Design Rule Check and Gerber Export
Before ordering, always run the Design Rule Check (DRC) in KiCad. Set minimum rules according to your PCB manufacturer’s capabilities. Typical hobby-grade manufacturer specs:
- Minimum trace width: 0.15 mm (6 mil)
- Minimum clearance: 0.15 mm
- Minimum drill hole: 0.3 mm (finished hole)
- Minimum annular ring: 0.15 mm
- Board outline tolerance: ±0.2 mm
Fix all DRC errors before proceeding. Common errors include acid traps (trace-to-pad acute angles), insufficient clearance near connector pins, and missing courtyard overlaps.
To export Gerbers in KiCad 7:
- File → Plot → Select Gerber format
- Enable: F.Cu, B.Cu, F.SilkS, B.SilkS, F.Mask, B.Mask, Edge.Cuts
- Click Plot
- Then click Generate Drill Files → Generate Drill File
- Zip all generated files into a single archive
Ordering Your PCB
Several manufacturers accept Gerber files and ship to India:
- JLCPCB: 5 boards for ~$2 USD (₹170) plus shipping. Fastest turnaround (24–48 hours production), delivers to India in 1–2 weeks via DHL Express. Most popular choice for first-time orders.
- PCBWay: Similar pricing to JLCPCB, excellent quality, wider range of special options (gold plating, thick boards, flexible PCBs).
- Seeed Fusion PCB: Good quality, competitive pricing for small quantities.
- Local (India): PCBPower.in offers PCB manufacturing within India for faster domestic delivery, though slightly more expensive than Chinese services.
For a typical 2-layer Arduino-size board (50mm × 50mm), the total cost including shipping to India is usually ₹800–1500 for 5 boards — ₹160–300 per board. After soldering components (~₹150 BOM), your custom Arduino costs under ₹450 per unit.
Flashing the Arduino Bootloader
A fresh ATmega328P chip has no bootloader. To use it with the Arduino IDE (uploading sketches via USB-Serial), you need to burn the bootloader first using an ISP programmer.
Method 1: Arduino as ISP
The simplest approach uses an existing Arduino Uno as the programmer:
- Upload the ArduinoISP sketch to the Uno (File → Examples → 11.ArduinoISP)
- Connect the Uno to your custom board’s ISP header: D13→SCK, D12→MISO, D11→MOSI, D10→RESET, 5V→VCC, GND→GND
- In the Arduino IDE, go to Tools → Board → select “Arduino Uno”
- Tools → Programmer → select “Arduino as ISP”
- Tools → Burn Bootloader
Method 2: USBasp Programmer
A dedicated USBasp ISP programmer is faster and more reliable. Connect to the ISP header and select “USBasp” in the Arduino IDE programmer menu before burning.
Setting the Correct Fuse Bits
The Arduino IDE’s Burn Bootloader command automatically sets the correct fuse bits for the selected clock source. If you are using an external 16 MHz crystal (vs the internal oscillator), make sure you select the correct board definition. Incorrect fuse bits can render the chip unable to communicate with the programmer — a common beginner mistake.
Board Variations and Optimisations
Ultra-Low-Power 3.3V / 8 MHz Variant
Replace the 16 MHz crystal with 8 MHz. Use the MIC5205-3.3 LDO regulator. Run the MCU at 3.3V — current draw drops significantly. In sleep mode with the watchdog timer active, the board draws under 10 µA. A pair of AA batteries can last over a year in sensor applications that wake up, measure, transmit, and sleep.
Integrated Li-Ion Charger
Add an MCP73831 single-cell Li-Ion charging IC and a TP4056 module footprint. This creates a self-contained board with USB charging capability — ideal for handheld devices and field instruments.
On-Board Sensors
Integrate common sensors directly on the PCB. A DHT11 or BME280 footprint on the board eliminates a sensor module and its connectors. For a weather station PCB, the BME280 can measure temperature, humidity, and pressure from a single IC.
LoRa Integration
Add an SX1278 or RFM95W LoRa radio module footprint to create a long-range IoT node in a single compact PCB. This is especially useful for agricultural monitoring, asset tracking, and smart meter applications across India where Wi-Fi coverage is limited.
Frequently Asked Questions
Do I need expensive PCB design software to make an Arduino PCB?
No. KiCad is completely free and used by professional engineers and companies worldwide. EasyEDA is also free and browser-based. Both support all the features you need: schematic capture, multi-layer PCB layout, 3D preview, Gerber export, and design rule checks. The paid tools (Altium, OrCAD) offer team collaboration features and advanced simulation but are not needed for single-engineer projects.
Can I make an SMD (surface-mount) Arduino board as a beginner?
Yes, but start with larger SMD packages (0805 resistors/capacitors, SOIC or TQFP ICs) rather than tiny 0402 or QFN packages. An TQFP-32 ATmega328P-AU can be hand-soldered with a fine-tip soldering iron and flux, or reflowed with a hot air station. SMD boards are smaller and cheaper to manufacture than through-hole designs.
How do I program my custom board without a USB-Serial chip?
Use the ISP header. You can program sketches directly via ICSP using a programmer (Arduino as ISP, USBasp, or AVRDude with any supported programmer). You do not need a bootloader at all if you program via ISP — the sketch uploads directly to flash memory without going through the serial bootloader. This is actually the professional production approach.
What is the minimum number of PCBs I must order?
Most manufacturers (JLCPCB, PCBWay) have a minimum order of 5 boards. The pricing is nearly identical for 5 vs 10 at hobby scale. Order 5 for your first run — you will likely need to make small corrections before finalising the design.
My bootloader burned successfully but I cannot upload sketches via USB — why?
Check these in order: (1) Is the correct COM port selected in the IDE? (2) Is the USB-Serial chip (CH340G, FT232, CP2102) recognised by Windows/Linux? Install the driver if needed. (3) Is the auto-reset circuit working? Check the 100 nF capacitor between DTR and RESET. (4) Are RXD and TXD crossed correctly (CH340G TX → ATmega RX, not the same direction)? (5) Is the baud rate correct for the bootloader? Optiboot uses 115200 baud, older bootloaders use 57600.
Start Building Your Custom Arduino Board Today
Designing a custom Arduino PCB is one of the most rewarding skills in electronics — it transforms you from a user of development boards into a product designer. With free tools like KiCad, inexpensive manufacturing from JLCPCB, and the wealth of ATmega328P documentation available, there has never been a better time to go from breadboard prototype to custom PCB.
Get the Arduino boards, modules, and components you need to prototype and reference from Zbotic.in — Arduino & Microcontrollers, delivered across India.
Add comment