| .. _servo-motor-sample: |
| |
| Servomotor |
| ########## |
| |
| Overview |
| ******** |
| |
| This is a sample app which drives a servomotor using PWM. |
| |
| 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 |
| ************ |
| |
| You will see this error if you try to build this sample for an unsupported |
| board: |
| |
| .. code-block:: none |
| |
| Unsupported board: pwm-servo devicetree alias is not defined |
| |
| The sample requires a servomotor whose signal pin is connected to a PWM |
| device's channel 0. The PWM device must be configured using the ``pwm-servo`` |
| :ref:`devicetree <dt-guide>` alias. Usually you will need to set this up via a |
| :ref:`devicetree overlay <set-devicetree-overlays>` like so: |
| |
| .. code-block:: DTS |
| |
| / { |
| aliases { |
| pwm-servo = &some_pwm_node; |
| }; |
| }; |
| |
| Where ``some_pwm_node`` is the node label of a PWM device in your system. |
| |
| 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 21 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: |