# Lesson 22 Simple Creation-Small Fan¶

## Introduction¶

In this experiment, we will learn how to control the direction and speed of a small-sized DC motor by a driver chip L293D. Making simple experiments, we will just make the motor rotate left and right, and accelerate or decelerate automatically.

## Components¶ ## Schematic Diagram¶

The maximum current of an Arduino I/O port is 20mA but the drive current of a motor is at least 70mA. Therefore, we cannot directly use the I/O port to drive the current; instead, we can use an L293D to drive the motor.

The Enable pin 1,2EN of the L293D are connected to 5V already, so L293D is always in the working state. Connect pin 1A and 2A to pin 9 and 10 of the control board respectively. The two pins of the motor are connected to pin 1Y and 2Y respectively. When pin 10 is set as High level and pin 9 as Low, the motor will start to rotate towards one direction. When the pin 10 is Low and pin 9 is High, it rotates in the opposite direction.

The schematic diagram: ## Experimental Procedures¶

Step 1: Build the circuit Step 2: Open the code file.

Step 3: Select the Board and Port.

Step 4: Upload the sketch to the board.

The blade of the DC motor will begin rotating left and right, in a speed that varies accordingly. Code

## Code Analysis¶

This code nests five `if` statements to determine the button press status.

• The first if statement is used to determine if the button is pressed.

• The second if statement is used to determine if 50ms has elapsed.

• The third if statement is used to determine if the button has been pressed after 50ms, so as to avoid false touches.

• The fourth if statement is used to record the number of button presses, adding 1 to `stat` for each press.

• The fifth if statement is used to determine if the number of button presses is greater than 4. If so, `stat` is cleared to zero.

switch() statement

```switch(stat)
{
case 1:
clockwise(rank1);// When stat=1, set the rotate speed of the motor as rank1=150
break;
case 2:
clockwise(rank2);// When stat=2, set the rotate speed of the motor as rank1=200
break;
case 3:
clockwise(rank3);// When stat=3, set the rotate speed of the motor as rank1=250
break;
default:
clockwise(0);
}
```

The `switch` statement, like the `if` statement, `switch case` allows the programmer to control the flow of the program with different code executed under various conditions. In particular, the switch statement compares the value of a variable with the value specified in the case statement. When a case statement is found whose value matches the value of a variable, the code in that case statement is run. If there is no `break` statement, the `switch` statement will continue to execute the following expression until `break` or until it reaches the end of the switch statement.

In this part of the code.

• If stat = 1, let the fan rotate at speed rank1(150).

• If stat = 1, let the fan rotate at speed rank2(200).

• If stat = 1, let the fan rotate at speed rank3(250).

• If stat = 0, let the fan rotate at speed 0.

clockwise() function

```void clockwise(int Speed)//
{
analogWrite(motorIn1,0);
analogWrite(motorIn2,Speed);
}
```

This function sets the speed of the motor: write `Speed` to pin 9 and 0 to pin 10. The motor rotates in a certain direction with the value of `Speed`.

## Experiment Summary¶

In this experiment, you can also control the motor to rotate or not. Just connect pin 1, 2EN of the L293D to an I/O port of the control board. Set 1, 2EN as High level, and the motor will start rotating; set it as Low level, it will stop the rotating.