{
  "metadata": {
    "id": "adafruit-16ch-pwm-servo-shield",
    "name": "Adafruit 16-Channel 12-Bit PWM/Servo Shield",
    "type": "expansion_board",
    "description": "Arduino R3-compatible shield based on NXP PCA9685. Provides 16 independent 12-bit PWM outputs for servos or LEDs over I2C. Stackable up to 62 shields.",
    "manufacturer": "Adafruit",
    "part_number": "1411",
    "datasheet_url": "https://cdn-shop.adafruit.com/datasheets/PCA9685.pdf",
    "tags": [
      "pca9685",
      "i2c",
      "0x40",
      "servo",
      "pwm",
      "stackable",
      "shield",
      "arduino-r3"
    ],
    "schema_version": "1.4.0",
    "version": "1.1.0",
    "taxonomy": [
      "actuator.servo_controller",
      "expansion.arduino_shield"
    ]
  },
  "node_geometry": {
    "width_px": 160,
    "height_px": 160,
    "shape": "rounded_rectangle"
  },
  "domains": [
    {
      "domain": "electrical",
      "power_domains": [
        {
          "id": "logic_vcc",
          "name": "Logic VCC (Arduino 3.3–5.5 V)",
          "nominal_voltage_V": 5,
          "voltage_range_V": [
            3.3,
            5.5
          ],
          "isolation_type": "non_isolated",
          "ground_reference": "common",
          "description": "PCA9685 supply from Arduino 5V or 3.3V rail via shield headers"
        },
        {
          "id": "servo_vplus",
          "name": "Servo V+ rail",
          "nominal_voltage_V": 5,
          "voltage_range_V": [
            4.8,
            6
          ],
          "isolation_type": "non_isolated",
          "ground_reference": "common",
          "description": "External servo power via 2-pin terminal block; reverse-polarity protected"
        }
      ],
      "resources": [
        {
          "id": "i2c_sda",
          "name": "SDA",
          "functions": [
            {
              "name": "i2c_sda",
              "signal_class": "data"
            }
          ],
          "connector_type": "arduino_shield_header"
        },
        {
          "id": "i2c_scl",
          "name": "SCL",
          "functions": [
            {
              "name": "i2c_scl",
              "signal_class": "clock"
            }
          ],
          "connector_type": "arduino_shield_header"
        },
        {
          "id": "pwr_vplus",
          "name": "V+ (servo power in/out)",
          "functions": [
            {
              "name": "power_in",
              "signal_class": "power"
            },
            {
              "name": "power_bus",
              "signal_class": "power"
            }
          ],
          "connector_type": "terminal_block",
          "power_domain_id": "servo_vplus",
          "description": "External 5–6 V supply to servo rail"
        },
        {
          "id": "pwr_gnd",
          "name": "GND",
          "functions": [
            {
              "name": "ground",
              "signal_class": "ground"
            }
          ],
          "connector_type": "terminal_block",
          "power_domain_id": "servo_vplus"
        },
        {
          "id": "ch0",
          "name": "CH0 signal",
          "functions": [
            {
              "name": "pwm_out",
              "signal_class": "data"
            }
          ],
          "connector_type": "servo_header"
        },
        {
          "id": "ch1",
          "name": "CH1 signal",
          "functions": [
            {
              "name": "pwm_out",
              "signal_class": "data"
            }
          ],
          "connector_type": "servo_header"
        },
        {
          "id": "ch2",
          "name": "CH2 signal",
          "functions": [
            {
              "name": "pwm_out",
              "signal_class": "data"
            }
          ],
          "connector_type": "servo_header"
        },
        {
          "id": "ch3",
          "name": "CH3 signal",
          "functions": [
            {
              "name": "pwm_out",
              "signal_class": "data"
            }
          ],
          "connector_type": "servo_header"
        },
        {
          "id": "ch4",
          "name": "CH4 signal",
          "functions": [
            {
              "name": "pwm_out",
              "signal_class": "data"
            }
          ],
          "connector_type": "servo_header"
        },
        {
          "id": "ch5",
          "name": "CH5 signal",
          "functions": [
            {
              "name": "pwm_out",
              "signal_class": "data"
            }
          ],
          "connector_type": "servo_header"
        },
        {
          "id": "ch6",
          "name": "CH6 signal",
          "functions": [
            {
              "name": "pwm_out",
              "signal_class": "data"
            }
          ],
          "connector_type": "servo_header"
        },
        {
          "id": "ch7",
          "name": "CH7 signal",
          "functions": [
            {
              "name": "pwm_out",
              "signal_class": "data"
            }
          ],
          "connector_type": "servo_header"
        },
        {
          "id": "ch8",
          "name": "CH8 signal",
          "functions": [
            {
              "name": "pwm_out",
              "signal_class": "data"
            }
          ],
          "connector_type": "servo_header"
        },
        {
          "id": "ch9",
          "name": "CH9 signal",
          "functions": [
            {
              "name": "pwm_out",
              "signal_class": "data"
            }
          ],
          "connector_type": "servo_header"
        },
        {
          "id": "ch10",
          "name": "CH10 signal",
          "functions": [
            {
              "name": "pwm_out",
              "signal_class": "data"
            }
          ],
          "connector_type": "servo_header"
        },
        {
          "id": "ch11",
          "name": "CH11 signal",
          "functions": [
            {
              "name": "pwm_out",
              "signal_class": "data"
            }
          ],
          "connector_type": "servo_header"
        },
        {
          "id": "ch12",
          "name": "CH12 signal",
          "functions": [
            {
              "name": "pwm_out",
              "signal_class": "data"
            }
          ],
          "connector_type": "servo_header"
        },
        {
          "id": "ch13",
          "name": "CH13 signal",
          "functions": [
            {
              "name": "pwm_out",
              "signal_class": "data"
            }
          ],
          "connector_type": "servo_header"
        },
        {
          "id": "ch14",
          "name": "CH14 signal",
          "functions": [
            {
              "name": "pwm_out",
              "signal_class": "data"
            }
          ],
          "connector_type": "servo_header"
        },
        {
          "id": "ch15",
          "name": "CH15 signal",
          "functions": [
            {
              "name": "pwm_out",
              "signal_class": "data"
            }
          ],
          "connector_type": "servo_header"
        }
      ],
      "interfaces": [
        {
          "id": "i2c_target",
          "name": "I2C target",
          "protocol": {
            "type": "i2c",
            "role": "target"
          },
          "requires": [
            {
              "function": "i2c_sda",
              "count": 1,
              "shareable_with": [
                "i2c_scl"
              ]
            },
            {
              "function": "i2c_scl",
              "count": 1,
              "shareable_with": [
                "i2c_sda"
              ]
            }
          ],
          "timing": {
            "max_i2c_freq_hz": 1000000
          },
          "description": "7-bit base address 0x40 with A0–A5 jumpers for up to 62 unique addresses"
        },
        {
          "id": "pwm_source_16",
          "name": "16-channel PWM source",
          "protocol": {
            "type": "pwm",
            "role": "source"
          },
          "requires": [
            {
              "function": "pwm_out",
              "count": 16
            }
          ],
          "timing": {
            "pwm_freq_range_hz": [
              24,
              1526
            ],
            "servo_use_hz": 50
          },
          "description": "Independent 12-bit duty control on 16 outputs; push-pull or open-drain"
        },
        {
          "id": "servo_power_in",
          "name": "Servo power input",
          "protocol": {
            "type": "dc_power",
            "role": "sink"
          },
          "requires": [
            {
              "function": "power_in",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            }
          ],
          "power_delivery": {
            "max_voltage_V": 6
          }
        }
      ],
      "supply_voltage_V": [
        3.3,
        6
      ],
      "metadata": {
        "i2c_address_default_7bit": "0x40",
        "i2c_fast_mode_plus_supported": true,
        "pwm_resolution_bits": 12
      }
    },
    {
      "domain": "mechanical",
      "package_type": "Arduino R3 Shield",
      "dimensions_mm": {
        "length": 70,
        "width": 54,
        "height": 3
      },
      "resources": [
        {
          "id": "mh1",
          "name": "Mount hole 1",
          "functions": [
            {
              "name": "mounting_hole",
              "signal_class": "mechanical_drive"
            }
          ],
          "connector_type": "through_hole"
        },
        {
          "id": "mh2",
          "name": "Mount hole 2",
          "functions": [
            {
              "name": "mounting_hole",
              "signal_class": "mechanical_drive"
            }
          ],
          "connector_type": "through_hole"
        },
        {
          "id": "mh3",
          "name": "Mount hole 3",
          "functions": [
            {
              "name": "mounting_hole",
              "signal_class": "mechanical_drive"
            }
          ],
          "connector_type": "through_hole"
        },
        {
          "id": "mh4",
          "name": "Mount hole 4",
          "functions": [
            {
              "name": "mounting_hole",
              "signal_class": "mechanical_drive"
            }
          ],
          "connector_type": "through_hole"
        },
        {
          "id": "header_pins",
          "functions": [
            {
              "name": "structural"
            },
            {
              "name": "mounted"
            }
          ],
          "connector_type": "arduino_shield",
          "description": "Arduino R3 shield headers (connect to Uno form factor headers for structural and electrical support)"
        }
      ],
      "interfaces": [
        {
          "id": "arduino_uno_shield_mount",
          "protocol": {
            "type": "arduino_uno_shield",
            "role": "shield"
          },
          "requires": [
            {
              "function": "mounted",
              "count": 1
            }
          ],
          "description": "Standard Arduino shield mounting (plugs into Arduino Uno R3 headers; mechanically supported by header friction and Arduino mounting posts)",
          "name": "Arduino Shield Mount"
        }
      ]
    }
  ],
  "design_rules": [
    "Do not power servos from the Arduino 5V pin; feed V+ with a dedicated 5–6 V supply and common ground.",
    "Choose unique I2C address per stacked shield using A0–A5 jumpers; base address is 0x40.",
    "Set PWM frequency ~50–60 Hz for hobby servos; higher frequencies suit LEDs."
  ],
  "warnings": [
    "High servo currents cause supply droop and resets; size V+ supply accordingly.",
    "Observe signal-power-ground orientation on 3-pin servo headers.",
    "I2C bus total capacitance must meet Fm+ limits at chosen speed."
  ]
}