This example shows how to use Simulink Support Package for Arduino® Hardware to control a standard servo motor.
Arduino Lilypad USB
Arduino Mega 2560
Arduino Mega ADK
Arduino Nano 3.0
Available versions of this example:
The provided model is pre-configured for Arduino Mega 2560 and can be run on any of the borad listed in the "Suppoerted Hardware" section, by changing the "Target Hardware" parameter in the configuration parameters of the model as described in Task 1 of this example.
|On this page…|
Simulink Support Package for Arduino Hardware enables you to create and run Simulink® models on Arduino board. The target includes a library of Simulink blocks for configuring and accessing Arduino sensors, actuators and communication interfaces.
In this example you will learn how to create Simulink model that controls a standard servo motor. In a standard servo motor, the shaft position can be precisely set, usually between 0 and 180 degrees. Servo motors are used in many industrial, military and consumer applications and products.
We recommend completing Getting Started with Arduino Hardware example.
To run this example you will need the following hardware:
Supported Arduino board
Standard servo motor
10 kOhm resistor
Small breadboard (recommended)
You will perform this task if your Arduino board is not Arduino Mega 2560 hardware.
In this task, you will configure the model for the supported Arduino board.
1. In your Simulink model, click Tools > Run on Target Hardware > Options... .
2. When the Configuration Parameters page opens up, set the Target hardware parameter to your required Arduino hardware. Do not change any other settings.
3. Click OK.
In this task, you will connect your motor to the Arduino board. Servo motors have three wires: power, ground, and signal. Connect them as described below.
1. Connect the power wire (usually red) to the 5V pin.
2. Connect the ground wire (usually black) to the ground pin.
In this task you will set the position of the servo motor shaft using an internal source. The shaft angle will vary between 0 and 180 degrees, up and down.
2. Notice the Standard Servo Write block. The block sets the new angle of the servo motor shaft every 0.01 second.
3. In your Simulink model, click Tools > Run on Target Hardware > Options .
4. When the Configuration Parameters page opens up, set the Target hardware parameter to supported Arduino hardware which is connected to your computer. Do not change any other settings.
5. In your Simulink model, click the Deploy To Hardware button on the toolbar.
6. When the model starts running on the Arduino board, observe the motor shaft position sweeping between 0 and 180 degrees.
In this task you will set the position of the servo motor shaft manually, using a potentiometer. Connect the outer potentiometer terminals to 5V and GND pins on your Arduino board. Connect the middle terminal to analog input pin 0. As your rotate the potentiometer, its resistance changes. As a result, the voltage at the analog input pin changes as well. Your task is to set the servo motor angle proportional to this voltage.
1. In MATLAB®, select HOME > New > Simulink Model.
3. In the Simulink Library Browser, navigate to Simulink Support Package for Arduino Hardware > Common.
4. Drag the Analog Input block into the model. Double-click the block and set the Pin number to 0, and the Sample time to 0.01 second.
5. Drag the Standard Servo Write block into the model. Double-click the block and set the Pin number to 4.
6. Connect the Analog Input and the Standard Servo Write blocks.
7. From Simulink Math Operations library, drag the Gain block into the model and drop it on the line connecting the Analog Input and the Standard Servo Write block. Double-click the Gain block and set its value to 0.1760 (maximum servo motor displacement in degrees divided by analog input digital resolution i.e. 180/1023).
8. In your Simulink model, click Tools > Run on Target Hardware > Prepare To Run... .
9. When the Configuration Parameters page opens up, set the Target hardware parameter to supported Arduino hardware. Do not change any other settings.
10. Click OK.
11. In your Simulink model, click the Deploy To Hardware button on the toolbar. The model will now be deployed to the Arduino hardware.
12. When the model starts running on Arduino board, observe the motor shaft sweeping between 0 and 180 degrees.
In this task you will create a model that sets the position of the servo motor according to light intensity detected by a photocell. In a dark room the motor shaft should be positioned at 0 degrees, while in a bright room it should be positioned at 180 degrees.
Use a photocell and a resistor instead of the potentiometer you used in Task 4. Connect one end of the photocell to the 5V pin on the Arduino board. Next, connect one end of the resistor to the GND pin on the board. Connect the other ends of the photocell and the resistor together and then to the analog input pin 0 on the board.
The model will be similar to the one used in Task 4.
Experiment with other blocks in the Arduino block library. For example:
Use Digital Input block to adjust the motor shaft position depending on the external control signal or signals.
Use Standard Servo Read block to read the motor shaft position and compare it with the desired position.
This example showed you how to use Simulink Support Package for Arduino Hardware to control a standard servo motor. In this example you learned that:
Standard Servo Write block allows you to set the servo motor shaft position, usually in the range from 0 to 180 degrees.
Analog Input block measures the voltage applied to an Arduino analog input pin. Variety of sensors can be attached to analog pins.