快捷搜索:  汽车  科技

arduino直流电机制作教程(利用直流电机制作简易风扇)

arduino直流电机制作教程(利用直流电机制作简易风扇)当我们旋转RotaryEncoder模块时会获得一个数字量,通过左转和右转可以使这个数字量增大或减少,我们读取这个数字量把他转化成风扇的三个档位,该模块还有一个按下的开关,当开关被按下。就会开启摇头功能,直到下一次被按下。工作原理:一个舵机一个 RotaryEncoder模块线路图:


arduino直流电机制作教程(利用直流电机制作简易风扇)(1)

夏日炎炎,如果没有一丝自然风,那只能自己创造啦! 运用手头的道具制作一个具有调速和摇头功能的简易风扇,利用Arduino控制直流电机来实现扇叶的转动,可随意控制岂不乐哉。

arduino直流电机制作教程(利用直流电机制作简易风扇)(2)

今天我们来利用手头的道具制作一个具有调速和摇头功能的简易风扇,本次一共用到了:

一个直流电机

一个舵机

一个 RotaryEncoder模块

线路图:

arduino直流电机制作教程(利用直流电机制作简易风扇)(3)

工作原理:

我们旋转RotaryEncoder模块时会获得一个数字量,通过左转和右转可以使这个数字量增大或减少,我们读取这个数字量把他转化成风扇的三个档位,该模块还有一个按下的开关,当开关被按下。就会开启摇头功能,直到下一次被按下。

实验所用的代码如下:

/*********************************************************** File name: _26_DCMotorModule.ino Description: The state of DC motor includes its forward reverse acceleration deceleration and stop. And you will see the data on the Serial monitor Website: www.adeept.com E-mail: support@adeept.com Author: Tom Date: 2017/03/18 ***********************************************************/ #include<Servo.h> const int DC_APin = 10; //DC motor module A pin connected to digital 11 pin const int DC_BPin = 11; //DC motor module B pin connected to digital 10 pin int DCmotorSpeed = 60; //motor speed 0~255 const int APin= 2; //Set the digital 2 to A pin const int BPin= 3; //Set the digital 3 to B pin const int SPin= 4 ;//Set the digital 4 to S pin int i=1; int encoderVal = 0; int angle = 90; Servo s1; int flag = LOW; int flag_1 = 0; int getRotaryEncoder(void) { static int oldA = HIGH; //set the oldA as HIGH static int oldB = HIGH; //set the oldB as HIGH int result = 0; int newA = digitalRead(APin); //read the value of APin to newA int newB = digitalRead(BPin); //read the value of BPin to newB if (newA != oldA || newB != oldB)//if the value of APin or the BPin has changed { if (oldA == HIGH && newA == LOW)// something has changed { result = (oldB * 2 - 1); } } oldA = newA; oldB = newB; return result; } void clockwise(int Speed) //the function to drive motor rotate clockwise { analogWrite(DC_APin Speed); //set the speed of motor analogWrite(DC_BPin 0); //stop the B pin of motor } void counterclockwise(int Speed) //the function to drive motor rotate counterclockwise { analogWrite(DC_APin 0); //stop the A pin of motor analogWrite(DC_BPin Speed); //set the speed of motor } void setup() { pinMode(DC_APin OUTPUT); //initialize the A pin as output pinMode(DC_BPin OUTPUT); //initialize the B pin as output pinMode(APin INPUT);//initialize the A pin as input pinMode(BPin INPUT);//initialize the B pin as input pinMode(SPin INPUT);//initialize the S pin as input s1.attach(A4); s1.write(angle); analogWrite(DC_APin 0); analogWrite(DC_BPin 0); Serial.begin(115200); //opens serial port sets data rate to 9600 bps } int j; void loop() { int change = getRotaryEncoder(); encoderVal = encoderVal - change; if(encoderVal>=72){ encoderVal = 72; } if(encoderVal<=0){ encoderVal = 0; DCmotorspeed = 0; } if(encoderVal>0&&encoderVal<24) DCmotorspeed = 60; if(encoderVal>24&&encoderVal<48) DCmotorspeed = 80; if(encoderVal>48&&encoderVal<72) DCmotorspeed = 120; if(digitalRead(SPin) == LOW) flag = !flag; if(i!=encoderVal){ Serial.write(encoderVal); i = encoderVal; } counterclockwise(DCmotorspeed); s1.write(angle); j ; if(flag &&j > 500) { j = 0; if(flag_1 == 0) { angle =3; } else { angle -=3; } if(angle > 150) { flag_1 = 1; } if(angle < 30) { flag_1 = 0; } Serial.print(angle); } }

猜您喜欢: