Overview
The ShillehTek Arduino Nano V3.0 Pre-Soldered (CH340G) is the classic, time-tested Nano: a compact breadboard-friendly microcontroller board built around the ATmega328P running at 16 MHz, with the familiar Micro-USB port and the WCH CH340G USB-to-serial converter. It ships with headers pre-soldered so you can plug it straight into a breadboard and start prototyping. If you've followed almost any Arduino tutorial from the last decade, this is the board the tutorial was written for.
You get 14 digital I/O pins (6 with PWM), 8 analog inputs with 10-bit resolution, hardware UART on D0/D1, hardware I2C on A4/A5, and hardware SPI on D10–D13. Three onboard indicator LEDs (TX, RX, and the yellow D13 LED) make it easy to tell what the board is doing at a glance, and the RESET button lets you restart a sketch without unplugging anything.
The CH340G USB-to-serial chip is supported out of the box on modern Windows, macOS, and Linux. Just plug in a Micro-USB cable, open the Arduino IDE, pick "Arduino Nano" as the board, choose the COM port, and upload. With over 32 KB of flash and thousands of compatible libraries, this board covers sensor reading, motor control, LED animations, data logging, and almost any other hobbyist project you can think of.
At a Glance
Specifications
| Parameter | Value |
| Microcontroller | Atmel ATmega328P (AVR 8-bit) |
| Clock Speed | 16 MHz (external crystal) |
| USB-to-Serial Chip | WCH CH340G |
| USB Connector | Micro-USB (Type-B) |
| Operating Voltage | 5V |
| Input Voltage (VIN) | 7–12V recommended (6–20V absolute) |
| Digital I/O Pins | 14 (D0–D13, 6 with PWM) |
| PWM Pins | 6 (D3, D5, D6, D9, D10, D11) |
| Analog Input Pins | 8 (A0–A7, 10-bit ADC) |
| DC Current per I/O Pin | 20 mA (40 mA absolute max) |
| 3.3V Pin Output | ~50 mA |
| Flash Memory | 32 KB (2 KB used by bootloader) |
| SRAM / EEPROM | 2 KB / 1 KB |
| Communication Interfaces | UART (D0/D1), I2C (A4/A5), SPI (D10–D13) |
| Onboard LEDs | Power, TX (white), RX (red), D13 (yellow) |
| Dimensions | 45 × 18 mm |
Pinout Diagram
Wiring Guide
Powering the Nano
The Nano V3.0 can be powered through any one of three sources. Only supply power through one source at a time to avoid back-feeding the onboard AMS1117 regulator.
| Source | Pin / Port | Details |
|---|---|---|
| Micro-USB | USB port | 5V regulated from host — easiest for programming and testing |
| Regulated 5V | 5V pin | Bypasses onboard regulator — must be clean, stable 5V |
| Unregulated DC | VIN pin | 7–12V recommended; onboard regulator steps down to 5V |
| 3.3V Output | 3V3 pin | Provides ~50 mA for 3.3V sensors and modules |
I2C Peripheral Wiring
The Nano's hardware I2C bus uses pins A4 (SDA) and A5 (SCL). You can daisy-chain multiple I2C devices on the same two lines — just make sure each device has a unique 7-bit address.
| I2C Peripheral Pin | Nano Pin |
|---|---|
| VCC | 5V (or 3V3 for 3.3V modules) |
| GND | GND |
| SDA | A4 |
| SCL | A5 |
SPI Peripheral Wiring
The Nano's hardware SPI peripheral uses fixed pins D10–D13. Chip Select (CS/SS) can be any digital pin, but D10 is the conventional choice.
| SPI Peripheral Pin | Nano Pin |
|---|---|
| VCC | 5V or 3V3 |
| GND | GND |
| SCK (Clock) | D13 |
| MISO (Master In) | D12 |
| MOSI (Master Out) | D11 |
| SS / CS (Slave Select) | D10 (or any digital pin) |
ICSP Header (In-Circuit Serial Programming)
The 6-pin ICSP header exposes the SPI lines directly and is used for flashing the ATmega328P with an external programmer (USBasp, AVRISP mkII, or another Arduino running ArduinoISP). This is how you reinstall the bootloader if it becomes corrupted, or how you bypass the CH340G entirely for high-speed uploads.
| ICSP Pin | Function | ATmega328P |
|---|---|---|
| 1 (MISO) | Master In, Slave Out | PB4 / D12 |
| 2 (VCC) | +5V | VCC |
| 3 (SCK) | Serial Clock | PB5 / D13 |
| 4 (MOSI) | Master Out, Slave In | PB3 / D11 |
| 5 (RESET) | Active-low reset | RST |
| 6 (GND) | Ground | GND |
Code Examples
Blink (Onboard LED)
// Blink the onboard yellow LED wired to D13.
// The classic "Hello World" of microcontrollers.
void setup() {
pinMode(LED_BUILTIN, OUTPUT); // LED_BUILTIN = D13 on the Nano
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
Serial Communication
// Print a counter over USB serial.
// Open Serial Monitor at 9600 baud to see output.
unsigned long counter = 0;
void setup() {
Serial.begin(9600);
Serial.println("Arduino Nano V3.0 ready!");
}
void loop() {
Serial.print("Counter: ");
Serial.println(counter);
counter++;
delay(500);
}
I2C Scanner
// Scan the I2C bus and print the address of every device.
// Use SDA = A4 and SCL = A5 on the Nano.
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("I2C Scanner");
}
void loop() {
byte error, address;
int nDevices = 0;
Serial.println("Scanning...");
for (address = 1; address < 127; address++) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C device found at 0x");
if (address < 16) Serial.print("0");
Serial.println(address, HEX);
nDevices++;
}
}
if (nDevices == 0) Serial.println("No I2C devices found");
else { Serial.print(nDevices); Serial.println(" device(s) found"); }
delay(5000);
}
Analog Read
// Read an analog value from A0 (potentiometer, LDR, etc.)
// and print both the raw 10-bit value (0-1023) and the voltage.
const int SENSOR_PIN = A0;
void setup() {
Serial.begin(9600);
Serial.println("Analog Read on A0");
}
void loop() {
int rawValue = analogRead(SENSOR_PIN);
float voltage = rawValue * (5.0 / 1023.0);
Serial.print("Raw: ");
Serial.print(rawValue);
Serial.print(" Voltage: ");
Serial.print(voltage, 3);
Serial.println(" V");
delay(200);
}
PWM Fade
// Fade an LED in and out using PWM.
// Wire an LED (with a 220 ohm resistor) from D9 to GND.
// D9 is one of six PWM pins (marked with "~" on the silkscreen).
const int LED_PIN = 9;
int brightness = 0;
int fadeStep = 5;
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
analogWrite(LED_PIN, brightness);
brightness += fadeStep;
if (brightness <= 0 || brightness >= 255) {
fadeStep = -fadeStep; // Reverse direction at endpoints
}
delay(20);
}
Frequently Asked Questions
analogWrite(pin, 0-255) to generate PWM output.analogRead() but they cannot be used as digital I/O. Pins A0 through A5 can be used as either analog inputs or digital pins.platformio.ini, use board = nanoatmega328 (standard bootloader) or board = nanoatmega328new depending on which bootloader your board shipped with. The CH340 driver is the only host-side software you need.