Arduino/C2/Pulse-Width-Modulation/English
Visual Cue | Narration |
Slide 1: | Welcome to the spoken tutorial on Pulse Width Modulation. |
Slide 2:
Learning Objectives |
In this tutorial we will learn about:
|
Slide 3:
Pre-requisites |
To follow this tutorial, you should have basic knowledge of:
|
Slide 4:
System Requirements |
To record this tutorial, I am using
|
Slide 5(A):
External Components Required |
We will also require some external components such as:
|
Slide 5(B) :
Image DC-motor.jpg |
DC Motor |
Slide 5(C) :
Image L293D.jpg |
L293D Motor Driver IC |
Slide 6:
Pulse Width Modulation |
|
Slide 7:
Pulse Width Modulation |
|
Slide 8:
Image duty_cycle.jpg |
It is the percentage of time, a digital signal is on, over a period of time.
Duty cycle can be varied from 0% to 100%.. |
Slide 9:
Formula - Duty cycle Image duty_cycle_formula.jpg |
The formula to calculate the percentage of duty cycle is shown here.
|
Slide 10:
PWM frequency |
|
Slide 11:
Example - Duty Cycle |
We will perform one simple experiment by varying duty cycle.
This will control the brightness of LED. |
Slide 12:
Image Arduino_PWM_pins.png |
Arduino Uno has 6 PWM channels.
Pins 3, 5, 6, 9, 10, 11 on Arduino Uno are PWM channels. PWM channels are denoted by tilde sign. |
narration | Let us see the circuit connection now. |
Slide 13:
Image LED_Connection.png |
Connect anode leg of the LED to pin 9 of Arduino through 220 ohm resistor.
|
Image Live Setup
LED_connection_setup.png |
This is the live setup of the connection.
|
Open Arduino IDE | Let us open the Arduino IDE.
We will write a program to change the brightness of LED using PWM pin. |
int LED_Pin = 9;
int duty_cycle_value = 1; |
Type the code as shown.
We have assigned the PWM pin 9 to the variable LED_Pin.
|
void setup()
{ pinMode( LED_Pin, OUTPUT); } |
Inside void setup, we will write pinMode function.
We have declared pin 9 of the Arduino as OUTPUT. |
Highlight according to narration | Inside void loop function we will write this code.
Let me explain the code. While loop executes the code till the duty_cycle_value is below 255. analogWrite() function is used to generate PWM signal. We are passing two parameters. i.e PWM pin number and the duty cycle value. The duty cycle value must be between 0 to 255 i.e between (0v) and (5V) We will keep a delay of 3000 millisecond i.e. 3 seconds |
Compile and save the program | Click on the compile button to verify your program.
A pop up window will appear to save the current program. Let us save the program as LED_Brightness and click on the Save button. Now click on upload button to upload the current program on Arduino. |
Live Output Video
LED_output.mp4 |
We can see the brightness of LED increasing gradually. |
Next, we will do an experiment to control the speed and direction of a DC motor. | |
Slide 14:
Image L293D_Pinout.png |
This is the pinout diagram of L293D motor driver IC.
The speed of the motor is controlled by EN 1 and EN 2 of the IC. The direction of the motor is controlled by IN1, IN2, IN3, IN4 of the IC. We can control 2 motors at a time using this IC. In our experiment, we will connect only one DC motor. |
Let us see the circuit connection now. | |
Slide 15:
Image Speed-Direction-Control-Connection.png |
Do the connection as shown in the image. |
Slide 16:
Image Live Setup |
This is the live setup of the connection, as shown in the image.
I have fixed a wheel on the shaft of the motor. This will help to see the rotation and varying speed of motor clearly. Now we will write a program for this circuit to work. |
Switch to Arduino IDE | Let’s switch to Arduino IDE. |
Highlight the code
const int fwdbuttonPin = 13; const int bckbuttonPin = 12; const int ICpin2 = 11; const int ICpin7 = 10; |
Type the code as shown here.
We have initialized the connection between Arduino and driver IC. Potentiometer pin is connected to analog pin A0. fwdbuttonPin is the variable for push button connected to pin 13 of Arduino. bckbuttonPin is the variable for push button connected to pin 12 of Arduino. ICpin2 and ICpin7 are the variables which indicate pin 2 and pin 7 of IC. They are connected to pin 11 and pin 10 of Arduino respectively. |
int potValue = 0;
int motorValue = 0; int fwdbuttonState = 0; int bckbuttonState = 0; |
First we make sure that the potentiometer, motor and push buttons are in LOW state.
For that we have initialised it to 0. |
void setup()
{ pinMode(fwdbuttonPin, INPUT_PULLUP); pinMode(bckbuttonPin,INPUT_PULLUP); pinMode(ICpin2, OUTPUT); pinMode(ICpin7, OUTPUT); } |
In the void setup function, we will write this code.
In this mode we are using Arduino’s internal pull-up resistors. |
Show the demo of the manual | To know about the INPUT_PULLUP mode, refer to the manual.
Click on the Help menu in the Arduino IDE. Then click on Reference. This opens an offline page in your browser. Scroll down. Click on INPUT_PULLUP. |
Switch back to Arduino IDE.
ICpin2 and ICpin7 are set to OUTPUT mode to drive the motor. | |
void loop()
|
Next we will write the code in void loop function.
analogRead command will read the analog value from the potentiometer. This value will be given to analog pin A0. Depending upon the potentiometer value, the speed of the motor will vary. map command will convert the analog value to digital. fwdbuttonState and bckbuttonState will fetch the signal if push button is pressed. |
The IF command checks, if the push button connected to pin 12 or pin 13 is pressed.
This enables the motor to rotate in a clockwise or anti-clockwise direction. | |
else
{ digitalWrite(ICpin2, LOW); digitalWrite(ICpin7, LOW); } } |
Suppose we don’t press any of the two buttons.
Then the else command ensures the motor is in OFF condition. This code is available in the Code file link of this tutorial You can download and use it. |
Click on the compile button | Click on the compile button to verify the program. |
Compile and save the program | Let us save the program as PWM_Motor and click on the Save button.
Now click on upload button to upload the current program on Arduino. |
Point to the output in the video
DC_motor_output.mp4 |
Now we will see the output of the above program.
I’ll press the push button connected to pin 13. We can see the motor rotating in the clockwise direction. Now I will release the push button. The motor will stop rotating and it will be in OFF state.
We can see the motor is rotating in anti-clockwise direction.
|
This brings us to the end of this tutorial. Let us summarize. | |
Slide 17:
Summary |
In this tutorial, we learnt about
|
Slide 18:
Assignment Buzzer_output.mp4 |
As an assignment:
|
Here is the output of the assignment. | |
Slide 19:
About Spoken Tutorial project |
The video at the following link summarizes the Spoken Tutorial project.
Please download and watch it. |
Slide 20:
Spoken Tutorial workshops |
The Spoken Tutorial Project Team conducts workshops and gives certificates.
For more details, please write to us. |
Slide 21:
Forum for specific questions |
Please post your timed queries in this forum. |
Slide 22:
Acknowledgement |
Spoken Tutorial project is funded by MHRD, Government of India. |
This tutorial has been contributed by FOSSEE and Spoken Tutorial Project, IIT Bombay.
And this is Saurabh signing off. Thanks for joining. |