{
    "key": "sg90",
    "kind": "actuator",
    "model": {
        "aliases": [
            "sg90"
        ],
        "device_class": "servo"
    },
    "driver": {
        "runtime": {
            "init": {
                "args": {
                    "pwm_out": "{pwm_channel}",
                    "max_pulse": 2400,
                    "min_pulse": 500
                },
                "class": "adafruit_motor.servo.Servo"
            },
            "apt_packages": [],
            "pip_packages": [
                "adafruit-circuitpython-motor",
                "rpi-lgpio"
            ],
            "python_module": "drivers.servo"
        },
        "targets": [
            "raspberrypi"
        ],
        "verified": {
            "by": null,
            "os": null,
            "date": null,
            "board": null,
            "reviewed_by": null,
            "evidence_url": null
        },
        "interface": "pwm",
        "connection": {
            "pins": [
                {
                    "role": "signal",
                    "notes": "50Hz control pulse.",
                    "required": true
                }
            ],
            "supply_voltage": "5V",
            "level_shift_required": null
        },
        "constraints": {
            "warmup_seconds": null,
            "read_timeout_seconds": null,
            "min_read_interval_seconds": null
        },
        "failure_modes": [
            "Pulse width limits vary between units and clones. Commanding the full nominal range drives many units into their end stops, where they stall and draw heavily.",
            "A stalled servo draws several hundred milliamps and will brown out a Raspberry Pi sharing the 5V rail. Use a separate supply with grounds tied.",
            "There is no position feedback. The commanded angle is not confirmation that the horn reached it.",
            "Software PWM jitter makes the horn buzz and hunt around the setpoint."
        ]
    },
    "source": "platform-seed",
    "status": "draft",
    "platform": {
        "name": "SG90 Micro Servo",
        "states": [
            {
                "label": "Set Angle",
                "command": "SET_ANGLE",
                "payload": "{\"angle\": 90}",
                "parameter": {
                    "name": "angle",
                    "required": true,
                    "data_type": "integer",
                    "range_max": 180,
                    "range_min": 0,
                    "unit_symbol": "°"
                },
                "sort_order": 1,
                "description": "Set servo position to a specific angle 0-180 degrees. Payload: integer angle value"
            },
            {
                "label": "Center",
                "command": "CENTER",
                "payload": "CENTER",
                "parameter": null,
                "sort_order": 2,
                "description": "Move servo to center position (90 degrees)"
            },
            {
                "label": "Minimum",
                "command": "MIN",
                "payload": "MIN",
                "parameter": null,
                "sort_order": 3,
                "description": "Move servo to minimum position (0 degrees)"
            },
            {
                "label": "Maximum",
                "command": "MAX",
                "payload": "MAX",
                "parameter": null,
                "sort_order": 4,
                "description": "Move servo to maximum position (180 degrees)"
            }
        ],
        "protocol": "pwm",
        "description": "180 degree micro servo motor. PWM controlled. 4.8V-6V operating voltage. Used for small positional control tasks.",
        "manufacturer": "Tower Pro",
        "model_number": "SG90",
        "actuator_type": "servo",
        "datasheet_url": null,
        "command_topic_suffix": "command/position",
        "response_topic_suffix": "response/position"
    },
    "revision": 1
}