|  | .. zephyr:code-sample:: servo-motor | 
|  | :name: Servomotor | 
|  | :relevant-api: pwm_interface | 
|  |  | 
|  | Drive a servomotor using the PWM API. | 
|  |  | 
|  | Overview | 
|  | ******** | 
|  |  | 
|  | This is a sample app which drives a servomotor using the :ref:`PWM API <pwm_api>`. | 
|  |  | 
|  | The sample rotates a servomotor back and forth in the 180 degree range with a | 
|  | PWM control signal. | 
|  |  | 
|  | This app is targeted for servomotor ROB-09065. The corresponding PWM pulse | 
|  | widths for a 0 to 180 degree range are 700 to 2300 microseconds, respectively. | 
|  | Different servomotors may require different PWM pulse widths, and you may need | 
|  | to modify the source code if you are using a different servomotor. | 
|  |  | 
|  | Requirements | 
|  | ************ | 
|  |  | 
|  | The sample requires a servomotor whose signal pin is connected to a pin driven | 
|  | by PWM. The servo must be defined in Devicetree using the ``pwm-servo`` | 
|  | compatible (part of the sample) and setting its node label to ``servo``. You | 
|  | will need to do something like this: | 
|  |  | 
|  | .. code-block:: devicetree | 
|  |  | 
|  | / { | 
|  | servo: servo { | 
|  | compatible = "pwm-servo"; | 
|  | pwms = <&pwm0 1 PWM_MSEC(20) PWM_POLARITY_NORMAL>; | 
|  | min-pulse = <PWM_USEC(700)>; | 
|  | max-pulse = <PWM_USEC(2500)>; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | Note that a commonly used period value is 20 ms. See | 
|  | :zephyr_file:`samples/basic/servo_motor/boards/bbc_microbit.overlay` for an | 
|  | example. | 
|  |  | 
|  | Wiring | 
|  | ****** | 
|  |  | 
|  | BBC micro:bit | 
|  | ============= | 
|  |  | 
|  | You will need to connect the motor's red wire to external 5V, the black wire to | 
|  | ground and the white wire to the SCL pin, i.e. pin P19 on the edge connector. | 
|  |  | 
|  | Building and Running | 
|  | ******************** | 
|  |  | 
|  | The sample has a devicetree overlay for the :ref:`bbc_microbit`. | 
|  |  | 
|  | This sample can be built for multiple boards, in this example we will build it | 
|  | for the bbc_microbit board: | 
|  |  | 
|  | .. zephyr-app-commands:: | 
|  | :zephyr-app: samples/basic/servo_motor | 
|  | :board: bbc_microbit | 
|  | :goals: build flash | 
|  | :compact: |