时隔多年,重拾Arduino,先拿直流电机风扇找一下手感。配套的东西如下图所示:直流电机、控制板、风扇、架子。
装好之后的效果如下图所示。
本文参照参考文献中的示例代码进行测试。参考文献中的代码主要通过按钮控制风扇的不同转速,本文中对代码进行了简化,为了测试程序的有效性,先在代码中写死转速,代码如下所示:
const int motorIn1=9;
const int motorIn2=10;
#define rank 150
void 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 49
char buffer[MAX_CHARS + 1];
int charIndex = 0;
int currentStage;
int curSpeed=0;
const int motorIn1=9;
const int motorIn2=10;
#define rank 150
void 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编程》