Contact Sales & After-Sales Service

Contact & Quotation

  • Inquire: Call 0086-755-23203480, or reach out via the form below/your sales contact to discuss our design, manufacturing, and assembly capabilities.
  • Quote: Email your PCB files to Sales@pcbsync.com (Preferred for large files) or submit online. We will contact you promptly. Please ensure your email is correct.
Drag & Drop Files, Choose Files to Upload You can upload up to 3 files.

Notes:
For PCB fabrication, we require PCB design file in Gerber RS-274X format (most preferred), *.PCB/DDB (Protel, inform your program version) format or *.BRD (Eagle) format. For PCB assembly, we require PCB design file in above mentioned format, drilling file and BOM. Click to download BOM template To avoid file missing, please include all files into one folder and compress it into .zip or .rar format.

Arduino Quadcopter: Flight Controller Basics

Building a quadcopter from scratch represents one of the most rewarding challenges in electronics and robotics. At the heart of every stable, responsive drone sits the flight controller—the brain that processes sensor data and controls motor speeds to keep your aircraft airborne. For makers and PCB engineers looking to understand how these systems work, an Arduino-based approach offers unmatched transparency and learning opportunities.

Unlike commercial flight controllers that hide their complexity behind closed-source firmware, an Arduino quadcopter lets you see every line of code, tweak every parameter, and truly understand what makes multirotors fly. This hands-on knowledge proves invaluable whether you’re designing commercial drones, troubleshooting flight issues, or simply satisfying your curiosity about autonomous systems.

Understanding Flight Controller Fundamentals

A flight controller serves as the central processing unit for any quadcopter. It continuously reads orientation data from sensors, compares it against pilot commands, and adjusts motor speeds hundreds of times per second to maintain stable flight. Think of it as an incredibly fast-reacting autopilot that never gets tired.

The basic workflow happens in microseconds. When you push the throttle stick forward, the flight controller doesn’t simply speed up the front motors. Instead, it calculates the exact thrust needed on all four motors to pitch the aircraft forward while maintaining altitude and preventing unwanted roll or yaw movements. This multi-dimensional control happens through a sophisticated algorithm called PID control.

For an Arduino quadcopter, this means your microcontroller must handle sensor communication, control calculations, and motor command generation—all within a tight loop that typically runs at 250-500 Hz. Most builders start with an Arduino Nano or Uno, though the processing demands often push advanced projects toward faster boards like the Arduino Due or even ESP32-based alternatives.

Essential Hardware Components

Core Electronics Selection

ComponentRecommended ModelPurposeTypical Cost
MicrocontrollerArduino Nano/UnoMain processing unit$3-25
IMU SensorMPU6050Motion sensing$2-5
ESCs30A BLHeliMotor speed control$10-15 each
Motors2212 920KV BrushlessThrust generation$12-20 each
Propellers10×4.5Lift creation$2-5 set
FrameF450 or customStructure$15-50
Battery3S 2200mAh LiPoPower source$20-40
RC Receiver6+ channel PPM/CPPMControl input$15-30

When selecting components for your Arduino quadcopter, compatibility matters more than individual specs. Your ESCs must match your motor current draw, your battery voltage should align with motor ratings, and your frame must provide enough space for proper component mounting.

The MPU6050 sensor deserves special attention. This six-axis inertial measurement unit combines a three-axis gyroscope with a three-axis accelerometer in a single chip. The gyroscope measures rotation rates around the roll, pitch, and yaw axes, while the accelerometer detects linear acceleration and helps determine orientation relative to gravity. Together, they provide the essential data your flight controller needs for stabilization.

Power Distribution Considerations

Flight controllers need clean, stable power to function reliably. Most Arduino boards operate at 5V, but your motors run on battery voltage (typically 11.1V for a 3S LiPo). You’ll need to separate these power domains carefully.

A basic power distribution approach routes battery voltage directly to your ESCs, which then convert it to the appropriate three-phase AC for the brushless motors. Meanwhile, you can either use the BEC (Battery Elimination Circuit) built into most ESCs to power the Arduino, or implement a dedicated voltage regulator. For stability, I recommend a separate 5V regulator—many ESCs introduce electrical noise that can interfere with sensitive sensor readings.

The MPU6050 Sensor Integration

Hardware Connection

Connecting the MPU6050 to your Arduino requires just four wires thanks to the I2C communication protocol. This serial interface lets multiple devices share two data lines, making it perfect for sensor-heavy applications.

MPU6050 PinArduino PinFunction
VCC5V or 3.3VPower supply
GNDGNDGround reference
SCLA5 (Uno/Nano)I2C Clock
SDAA4 (Uno/Nano)I2C Data

The MPU6050 includes an onboard voltage regulator, so it accepts either 3.3V or 5V safely. For Arduino Uno and Nano, the I2C pins are fixed at A4 (SDA) and A5 (SCL). Other boards use different pins—check your specific board’s pinout diagram.

One critical detail: mount your MPU6050 precisely centered on the quadcopter frame with the sensor axes aligned to your aircraft axes. The X-axis should point toward the front, Y-axis to the right, and Z-axis pointing up. Misalignment here creates control coupling that makes tuning nearly impossible.

Reading and Processing Sensor Data

The MPU6050 stores measurement data in internal registers that you access via I2C commands. Raw gyroscope readings come in units of degrees per second, while accelerometer data represents acceleration in multiples of Earth’s gravity (g).

From a PCB engineering perspective, understanding these registers matters for debugging. Register 0x3B starts the accelerometer data (six bytes for X, Y, Z), while register 0x43 begins gyroscope data (another six bytes). Temperature data sits at register 0x41 if you need thermal compensation.

The critical processing step combines accelerometer and gyroscope data through sensor fusion. Gyroscopes provide accurate short-term rotation rates but drift over time. Accelerometers give stable long-term orientation but suffer from vibration noise. A complementary filter merges both sources, typically weighting the gyroscope at 98-99% for quick response while using the accelerometer to correct long-term drift.

Here’s the basic math behind the complementary filter:

angle = 0.98 * (angle + gyro_rate * dt) + 0.02 * accelerometer_angle

This equation says: trust the gyroscope for rapid changes, but slowly incorporate accelerometer corrections to prevent drift. The time constant (dt) represents your loop interval—typically 4ms for a 250Hz refresh rate.

PID Control Theory for Quadcopters

What PID Really Means

PID stands for Proportional-Integral-Derivative, three mathematical terms that work together to minimize error between desired and actual states. For quadcopters, this means continuously correcting the difference between where you want the aircraft tilted and where it actually is.

The Proportional term reacts to current error. If your quad tilts 10 degrees but you commanded 5 degrees, P-gain determines how aggressively the controller fights that 5-degree error. Higher P values create snappier response but can cause overshooting and oscillations.

The Integral term addresses accumulated error over time. If your quad consistently drifts despite P corrections, I-gain gradually builds up correction force. This eliminates steady-state error but can cause slow oscillations if set too high.

The Derivative term predicts future error based on rate of change. It acts as a damper, smoothing out the response and reducing overshoot from aggressive P settings. Think of D-gain as adding viscosity to your control response.

PID Implementation Architecture

An Arduino quadcopter typically uses cascaded PID loops—an outer loop controlling angle and an inner loop controlling rotation rate. This two-stage approach provides better stability than single-loop designs.

Control LoopInputOutputTypical Frequency
Angle/Attitude LoopDesired angleDesired rotation rate100-250 Hz
Rate LoopDesired rateMotor command250-500 Hz

The outer angle loop runs slower because orientation changes gradually. When you push the stick, it calculates what rotation rate will achieve your desired angle. The inner rate loop runs faster, adjusting motor speeds to maintain that calculated rate despite disturbances like wind gusts or sudden maneuvers.

Each axis (roll, pitch, yaw) gets its own PID controller, meaning your Arduino quadcopter runs six PID loops simultaneously. Roll and pitch typically use identical gains due to quadcopter symmetry, while yaw often needs different values due to different rotational inertia.

Practical PID Tuning Process

Starting Values and Safety

Never start tuning with a flight test. Begin with your Arduino quadcopter firmly secured to a test bench or held by the landing gear. I recommend starting with conservative baseline values and working up:

Initial PID Values for F450-sized Quadcopter:

AxisP GainI GainD Gain
Roll/Pitch Rate1.00.010.02
Roll/Pitch Angle4.00.020.0
Yaw Rate1.50.010.0

These conservative values won’t produce great flight performance but prevent dangerous oscillations during initial testing. From here, you’ll increase gains methodically while observing behavior.

The Tuning Workflow

Step one focuses on the rate P-gain. With motors armed but not spinning (or spinning at minimal throttle), tilt the quadcopter manually and observe the correction response. Too little P results in slow, sluggish corrections. Too much P causes rapid oscillations—the aircraft shakes back and forth trying to correct.

Find the highest P value where oscillations just begin, then reduce by 20-30%. This gives you headroom for D-gain tuning and accounts for differences between bench and flight conditions.

Next, add D-gain to smooth the P response. D acts like shock absorber dampening, reducing overshoot and oscillations. Start at about 20% of your P value and adjust upward until the response feels crisp but not jittery. Excessive D-gain creates high-frequency noise sensitivity—the motors might twitch in response to vibrations.

Finally, add I-gain to eliminate steady-state errors. If your quad drifts slightly or fails to hold angle perfectly despite correct P and D settings, gradually increase I until it locks in position. Watch for slow, rhythmic oscillations that indicate excessive I-gain.

Recognizing Common PID Problems

From field experience, here are the signatures I’ve learned to recognize:

Fast oscillations (8-10 Hz): P-gain too high. The controller overshoots, corrects, overshoots again in rapid succession.

Slow oscillations (1-2 Hz): I-gain too high. Accumulated integral windup causes lazy, wave-like movements.

Bouncy, underdamped response: D-gain too low. The quad reaches target angle but oscillates around it.

Sluggish, overdamped response: D-gain too high. The quad moves slowly toward target angle like moving through honey.

Drift during throttle changes: I-gain too low. Increased thrust creates torque that the controller can’t correct without integral action.

Flight Modes and Control Logic

Acro vs. Angle Mode

Your Arduino quadcopter can implement different flight modes by changing how it interprets stick inputs. Acro mode (also called rate mode) treats stick deflection as rotation rate commands. Push the stick halfway, get a steady rotation. Center the stick, rotation stops but the aircraft maintains whatever angle it reached.

Angle mode (also called level or stabilize mode) treats stick deflection as angle commands. Push the stick halfway, the quad tilts to a specific angle like 20 degrees. Release the stick, the quad automatically returns to level flight. This self-leveling makes angle mode much easier for beginners.

The code difference is subtle but significant. Acro mode uses only the rate PID loop—you’re directly commanding rotation rates. Angle mode adds the outer angle PID loop, which calculates the rotation rate needed to achieve your commanded angle.

Safety Systems and Arming

Never skip implementing arming logic in your Arduino quadcopter code. An arming sequence prevents motors from spinning unexpectedly when you power up the system or accidentally move the transmitter sticks.

A typical arming procedure requires holding both sticks to specific corners for 2-3 seconds. For example, bottom-left might arm the motors, while bottom-right disarms. This deliberate action prevents accidental activation while maintaining quick access when needed.

Your code should also implement failsafe behavior. If the receiver signal is lost, the Arduino should either maintain current position (if altitude hold is available) or execute a controlled descent. At minimum, it should cut motors after signal loss exceeds a threshold like 2 seconds—this prevents a runaway quad from flying until battery exhaustion.

Motor Mixing and ESC Control

Understanding Quad-X Configuration

The standard quad-X layout positions motors at 45-degree angles from the centerline. When viewed from above with the front pointing away:

  • Front-right motor spins clockwise
  • Rear-left motor spins clockwise
  • Front-left motor spins counter-clockwise
  • Rear-right motor spins counter-clockwise

This alternating spin pattern cancels torque reactions. When all motors spin at equal speed, the aircraft hovers with no net rotation. Adjusting individual motor speeds creates the control moments for roll, pitch, and yaw.

Motor Mixing Mathematics

Your flight controller calculates four motor commands from four control axes: throttle, roll, pitch, and yaw. The mixing equations account for each motor’s geometric position and rotation direction:

Motor_FL = Throttle – Roll + Pitch – Yaw

Motor_FR = Throttle + Roll + Pitch + Yaw

Motor_RL = Throttle – Roll – Pitch + Yaw

Motor_RR = Throttle + Roll – Pitch – Yaw

These equations show how increasing throttle affects all motors equally (vertical motion), while roll/pitch/yaw adjustments create differential thrust. For example, positive roll command increases right-side motors and decreases left-side motors, creating a rolling moment.

The Arduino must send these mixed values to ESCs as PWM signals. Most ESCs expect standard RC servo protocol: a pulse between 1000-2000 microseconds, repeated every 20ms. 1000µs represents zero throttle, 2000µs represents full throttle, with linear scaling between.

Software Architecture and Code Structure

Main Loop Organization

An efficient Arduino quadcopter maintains consistent loop timing. Irregular execution intervals make PID calculations unstable because the derivative and integral terms depend on knowing elapsed time (dt) accurately.

The basic structure looks like:

  1. Sensor Reading (1-2ms): Request and receive data from MPU6050
  2. Sensor Fusion (0.5ms): Combine gyro and accel into orientation estimate
  3. Receiver Input (0.5ms): Read pilot commands from RC receiver
  4. PID Calculation (1ms): Compute all six PID loops
  5. Motor Mixing (0.2ms): Convert control outputs to motor commands
  6. ESC Update (0.1ms): Send PWM signals to motors
  7. Telemetry (0.5ms): Optional data logging or wireless transmission

This totals about 5-6ms per loop, achieving roughly 170-200Hz. While not as fast as dedicated flight controllers running at 500-1000Hz, it’s sufficient for stable flight on a 450mm quadcopter. Faster loops require more powerful microcontrollers like the Arduino Due or Teensy 4.0.

Memory Management Strategies

Arduino Uno and Nano boards have limited RAM (2KB), which fills quickly when implementing full flight controller functionality. From my PCB design experience, I’ve learned several optimization techniques:

Use fixed-point math instead of floating-point where possible. Integer arithmetic runs 5-10x faster on 8-bit AVR processors and uses less memory. For example, store angles as integers representing hundredths of degrees rather than floating-point degrees.

Avoid dynamic memory allocation. Never use new, delete, or String objects that allocate heap memory. Memory fragmentation causes unpredictable crashes in long-running embedded systems. Pre-allocate all arrays and buffers at compile time.

Minimize serial communication during flight. Serial.print() consumes significant processing time. Implement a simple binary protocol for essential telemetry only, or disable serial entirely during flight and log to SD card for post-flight analysis.

Advanced Features and Enhancements

Altitude Hold Implementation

Adding a barometric pressure sensor like the BMP180 or BMP280 enables altitude hold mode. These sensors measure atmospheric pressure, which decreases predictably with altitude (roughly 12 Pa per meter at sea level).

The challenge is filtering. Barometers suffer from noise due to propeller downwash creating pressure variations. A low-pass filter smooths the readings, but introduces lag. The common solution implements a complementary filter similar to the IMU fusion, blending barometer data with accelerometer-derived vertical velocity.

Altitude hold adds another PID loop controlling vertical speed based on altitude error. This outer loop commands throttle adjustments, while the existing stabilization loops maintain level flight. The interaction between altitude control and stabilization requires careful tuning—aggressive altitude corrections can fight the pilot’s stick inputs during manual flight.

GPS Position Hold

For true autonomous flight, integrate a GPS module like the NEO-6M or NEO-M8N. GPS provides absolute position but updates slowly (typically 5-10Hz) and has meter-level accuracy. This is acceptable for position hold but requires additional processing.

The GPS subsystem needs its own cascaded control structure. An outer loop calculates desired velocity based on position error (how far from target). A middle loop calculates desired tilt angle based on velocity error. The existing inner loops execute that tilt angle command.

From a systems engineering perspective, GPS integration teaches valuable lessons about sensor fusion across different time scales and accuracy domains. The slow, absolute GPS data guides high-level navigation while fast, relative IMU data handles moment-to-moment stabilization.

Practical Build and Testing Tips

PCB Design Considerations

When designing a custom flight controller PCB, or modifying a quadcopter frame to accommodate an Arduino, several electrical considerations matter:

Separate analog and digital ground planes if possible. The high-current motor switching creates ground bounce that can couple into sensitive sensor readings. Star grounding topology helps—run separate ground traces from each component back to a single point near the power input.

Place the IMU sensor away from ESCs and power traces. Electromagnetic interference from switching regulators and motor drivers can introduce noise into gyroscope and accelerometer measurements. If the IMU must be on the same board as other electronics, use a ground plane flood beneath it for shielding.

Add TVS diodes on battery input and ESC signal lines. Brushless motors generate significant back-EMF spikes during direction changes that can damage sensitive electronics. A simple TVS diode clamps these transients.

Vibration Isolation

Every quadcopter vibrates. Motor imbalance, propeller imperfections, and frame resonances create oscillations that corrupt IMU readings. From testing dozens of builds, I’ve found several effective isolation methods:

Mount your flight controller on foam dampers. The soft foam mechanically filters high-frequency vibrations before they reach the IMU. Kyosho Zeal gel pads work excellently, or you can use 3M double-sided foam tape.

Balance your propellers. Even cheap props can be balanced by adding small amounts of tape to the lighter blade. Unbalanced props create ~100Hz vibrations that the software filters struggle to reject.

Use quality motors and match ESC firmware timing. Poorly synchronized ESCs create torque ripple that vibrates the entire frame. Flashing BLHeli firmware and calibrating timing can reduce this significantly.

Troubleshooting Common Issues

Motor Synchronization Problems

When motors don’t start together or exhibit jerky behavior at low throttle, suspect ESC calibration issues. All ESCs must recognize the same PWM range as minimum and maximum throttle. The calibration procedure typically involves:

  1. Power off ESCs, connect all signal wires to receiver throttle channel
  2. Set transmitter to full throttle
  3. Power on ESCs (they’ll beep acknowledging high signal)
  4. Reduce throttle to minimum (more beeps confirming range)
  5. Disconnect and reconnect normally

After calibration, all ESCs interpret the same PWM values identically, ensuring synchronized motor response.

Oscillations and Instability

If your quad oscillates in flight despite bench-stable PID values, check several environmental factors:

Propeller condition: Nicked or warped props create asymmetric thrust that no amount of PID tuning can correct. Inspect carefully and replace damaged props immediately.

Frame rigidity: Flexible frames create a control delay as the structure bends before force reaches the motors. Stiffen the frame with carbon fiber rods or switch to a more rigid design.

Battery voltage sag: As LiPo cells discharge, internal resistance rises and voltage drops under load. This reduces available motor power. What flew stable on a fresh battery oscillates on a depleted one. Monitor voltage and land before reaching low-voltage cutoff.

Community Resources and Code Libraries

MultiWii Platform

The MultiWii project provides mature, tested flight controller software designed for Arduino. Originally created for Nintendo Wii sensor integration (hence the name), it now supports numerous sensor combinations and has been flight-proven on thousands of multirotors worldwide.

MultiWii implements sophisticated features like GPS navigation, magnetometer heading hold, and altitude stabilization—far beyond what most individuals could develop from scratch. The code is well-documented with active forums where experienced users help troubleshoot issues.

For learning purposes, I recommend starting with a minimal MultiWii configuration. Strip out advanced features and focus on understanding the core stabilization loops. Once comfortable, gradually enable additional capabilities while observing how they interact.

Useful Open-Source Projects

Several GitHub repositories provide excellent reference implementations:

lobodol/drone-flight-controller: A clean, well-documented Arduino Uno flight controller with PID implementation and receiver integration. Perfect for understanding the basics.

liourej/CodeDroneDIY: Focuses on simplicity with both acrobatic and angle modes. Includes detailed explanations of the state machine and safety systems.

jarzebski/Arduino-MPU6050: While not a complete flight controller, this library provides rock-solid MPU6050 communication with calibration routines.

These projects demonstrate different implementation philosophies. Study multiple approaches to understand tradeoffs between code simplicity, feature richness, and performance.

Development Tools and Simulators

Before risking expensive hardware in flight tests, consider software simulation. Tools like Betaflight Configurator (originally for Betaflight firmware but usable with custom code) provide PID tuning interfaces and logging capabilities.

For deeper analysis, log flight data to an SD card and analyze with Blackbox Explorer or similar tools. Graphing gyroscope targets versus actual rates reveals tuning problems invisible during flight. You’ll see if P-gain causes overshoot, if I-gain creates drift, or if D-gain introduces noise sensitivity.

Safety and Legal Considerations

Building and flying a DIY Arduino quadcopter requires responsibility. FAA regulations in the United States require registration for aircraft over 250 grams, and restrict flight near airports, above 400 feet, or over people. Similar regulations exist in most countries.

From a technical safety perspective, implement multiple redundancy layers:

  • Software watchdog timer resets the Arduino if the code hangs
  • Low-voltage cutoff prevents battery over-discharge (which can cause fires)
  • Motor arming sequence prevents accidental starts
  • Failsafe behavior during signal loss
  • Physical propeller guards during testing

Never test indoors or near people during initial flights. Expect crashes during tuning—they’re inevitable. Wear safety glasses (propellers can shatter), and keep spare parts readily available.

Frequently Asked Questions

Q: Can Arduino Uno handle flight controller tasks, or do I need a more powerful board?

A: Arduino Uno can successfully fly a basic quadcopter with stabilization and manual control. However, its limited processing power (16MHz) and RAM (2KB) constrain loop rates to around 200Hz and prevent advanced features like GPS navigation or extensive telemetry. For better performance, consider Arduino Nano for size advantages at similar specs, Arduino Mega for more I/O pins, or Arduino Due for significantly faster processing at 84MHz.

Q: Why does my quad drift even with PID tuning?

A: Persistent drift usually indicates sensor calibration issues rather than PID problems. First, verify your MPU6050 gyroscope calibration—the sensor must be completely still during calibration to establish zero-rate offsets accurately. Second, check IMU mounting alignment with aircraft axes. Even 5-10 degrees of misalignment creates control coupling that manifests as drift. Third, examine accelerometer calibration for level flight reference.

Q: How do I choose PID values for different quadcopter sizes?

A: PID gains scale with aircraft rotational inertia and motor responsiveness. Smaller, lighter quads need higher P-gains because they rotate easily—typically 1.5-3.0 for rate P. Larger, heavier builds need lower P-gains, often 0.5-1.5, because high gains cause oscillations in their slower dynamics. Start conservative based on size, then increase gradually during bench testing before flight validation.

Q: What causes motors to spin unevenly even with identical ESC calibration?

A: Uneven motor performance stems from several sources. Manufacturing tolerances create slight differences in motor KV ratings—test each motor separately and note variations. ESC firmware timing affects synchronization; flashing consistent firmware versions helps. Propeller quality matters enormously; even perfectly balanced props from the same manufacturer may have different efficiency. Finally, check for mechanical friction in motor bearings—a worn bearing increases resistance and reduces RPM at the same throttle setting.

Q: Is it better to start with MultiWii or write custom code from scratch?

A: For learning, I recommend both approaches in sequence. Start with MultiWii to understand what working flight controller code looks like, how features interact, and what “tuned” feels like. Then write simplified custom code for just stabilization—this forces you to understand the fundamentals. The insights gained from custom coding make you far more effective when later customizing or troubleshooting MultiWii for specific applications.

Conclusion

Building an Arduino quadcopter teaches fundamentals that translate across the entire field of autonomous systems. You’ll develop intuition for sensor fusion, control theory, embedded systems optimization, and real-time programming—skills valuable far beyond hobby drones.

The Arduino platform’s transparency is both blessing and challenge. You control every aspect but must handle every detail. Commercial flight controllers abstract complexity behind configuration GUIs and automatic tuning, but they hide the underlying principles. With Arduino, you see it all—and in that visibility lies the deepest learning.

Start simple. Get basic stabilization working before adding altitude hold, GPS, or autonomous navigation. Each added feature multiplies complexity exponentially. Once you’ve successfully flown a manual quadcopter with stable PID control, you’ll have established the foundation for unlimited enhancement.

The PCB engineering perspective matters throughout this journey. Understanding signal integrity, power distribution, EMI mitigation, and mechanical integration separates flaky prototypes from reliable aircraft. Pay attention to those details from the beginning rather than treating them as afterthoughts.

Your Arduino quadcopter will crash. Parts will break. You’ll spend hours troubleshooting obscure bugs and tuning PID parameters. But when you finally achieve smooth, stable flight with hardware and software you built yourself, the satisfaction is unmatched. Welcome to the most rewarding hobby in electronics.

Leave a Reply

Your email address will not be published. Required fields are marked *

Contact Sales & After-Sales Service

Contact & Quotation

  • Inquire: Call 0086-755-23203480, or reach out via the form below/your sales contact to discuss our design, manufacturing, and assembly capabilities.

  • Quote: Email your PCB files to Sales@pcbsync.com (Preferred for large files) or submit online. We will contact you promptly. Please ensure your email is correct.

Drag & Drop Files, Choose Files to Upload You can upload up to 3 files.

Notes:
For PCB fabrication, we require PCB design file in Gerber RS-274X format (most preferred), *.PCB/DDB (Protel, inform your program version) format or *.BRD (Eagle) format. For PCB assembly, we require PCB design file in above mentioned format, drilling file and BOM. Click to download BOM template To avoid file missing, please include all files into one folder and compress it into .zip or .rar format.