时隔多年,重拾Arduino,先拿直流电机风扇找一下手感。配套的东西如下图所示:直流电机、控制板、风扇、架子。
装好之后的效果如下图所示。
本文参照参考文献中的示例代码进行测试。参考文献中的代码主要通过按钮控制风扇的不同转速,本文中对代码进行了简化,为了测试程序的有效性,先在代码中写死转速,代码如下所示:
const int motorIn1=9;
const int motorIn2=10;#define rank 150void setup() {// put your setup code here, to run once:pinMode(motorIn1,OUTPUT);pinMode(motorIn2,OUTPUT);Serial.begin(9600);
}void loop() {// put your main code here, to run repeatedly:clockwise(rank);
}void clockwise(int Speed)
{analogWrite(motorIn1,0);analogWrite(motorIn2,Speed);
}
程序效果如下所示,代码上传到到Arduino后,风扇即开始转动。
为了能控制转速,对上述代码进行改造,可以通过串口与Arduino进行通信,设置电机的转速。详细的代码如下所示。需要注意的是,使用Arduino IDE中的串口监视器进行通信时,需要设置成没有结束符模式。
#define SPEED_COMMAND "SPD"
#define NUM_LENGTH 3
#define SPLIT_CHAR ';'#define RECEIVE_STAGE 0 // 接收命令阶段
#define EXECUTE_STAGE 1 // 执行命令阶段
#define OBSERVE_STAGE 2 // 观察阶段#define MAX_CHARS 49char buffer[MAX_CHARS + 1];
int charIndex = 0;int currentStage;
int curSpeed=0;const int motorIn1=9;
const int motorIn2=10;#define rank 150void setup() {// put your setup code here, to run once:pinMode(motorIn1,OUTPUT);pinMode(motorIn2,OUTPUT);Serial.begin(9600);currentStage = RECEIVE_STAGE;Serial.println("Ready");
}void loop() {// put your main code here, to run repeatedly:switch (currentStage){case RECEIVE_STAGE:ReceiveCommand();break;case EXECUTE_STAGE: if (Serial.available() > 0){currentStage = RECEIVE_STAGE;}else if (strncmp(buffer, SPEED_COMMAND, NUM_LENGTH) == 0){char* pInt = &buffer[NUM_LENGTH + 1];curSpeed=atoi(pInt);currentStage = OBSERVE_STAGE; }break;case OBSERVE_STAGE: if (Serial.available() > 0){currentStage = RECEIVE_STAGE;}else{clockwise(curSpeed);} break;}
}void clockwise(int Speed)
{analogWrite(motorIn1,0);analogWrite(motorIn2,Speed);
}void ReceiveCommand()
{if (Serial.available() > 0){char ch = Serial.read();if ((charIndex < MAX_CHARS) && (ch != SPLIT_CHAR)){buffer[charIndex++] = ch;}else{buffer[charIndex] = 0;charIndex = 0;currentStage = EXECUTE_STAGE;Serial.print("received command is ");Serial.println(buffer);}}
}
本文主要是初步介绍直流电机风扇的驱动方式,如果更深入的控制直流电机,可以在百度中自行搜索了解。
参考文献:
[1]《基于传感器开发套件玩转Arduino编程》