装小车是学习Arduino的好方法。现在就把跟Altar小车相关的模块和程序都写出来。 小车能跑主要是电机驱动模块,Altar小车的电机驱动用的是L9110S。原来用过L298N、L293D,这个L9110S第一次用,发现跟298、293不太一样,主要是没有Enable,直接输入PWM控制转速和方向。L298、L293是通过Enable输入PWM控制转速的。 一个L9110S可以控制一个正反转的电机、或者两个单向转的电机。而一个L298N可以控制两个正反转电机或4个单向转的电机。所以,Altar小车的电机驱动模块上有2个L9110S,控制2个电机的正反转。
控制电机的程序是小车程序的主要部分,通过D3、D5、D6、D9四个引脚输出0~255的PWM值控制速度和方向,程序里可以写一个固定值,也可以通过遥控逐渐增减PWM值。示例程序是以200的速度前后左右2s停,没有控制。主要是看每部分的子函数怎么写。[mw_shl_code=cpp,true]const byte inPin_leftB = 6;
const byte inPin_leftA = 9;
const byte inPin_rightA = 3;
const byte inPin_rightB = 5;
void setup(){
pinMode(inPin_leftA,OUTPUT);
pinMode(inPin_leftB,OUTPUT);
pinMode(inPin_rightA,OUTPUT);
pinMode(inPin_rightB,OUTPUT);
}
void loop(){
goUp(200);
delay(2000);
goLeft(80);
delay(2000);
goBack(200);
delay(2000);
goRight(80);
delay(2000);
goStop();
}
void goUp(int up_speed)
{
analogWrite(inPin_leftA,0);
analogWrite(inPin_rightA,0);
analogWrite(inPin_leftB,up_speed);
analogWrite(inPin_rightB,up_speed);
}
void goLeft(int left_speed)
{
analogWrite(inPin_leftA,255);
analogWrite(inPin_rightB,255);
analogWrite(inPin_leftB,left_speed);
analogWrite(inPin_rightA,left_speed);
}
void goRight(int right_speed)
{
analogWrite(inPin_leftB,255);
analogWrite(inPin_rightA,255);
analogWrite(inPin_leftA,right_speed);
analogWrite(inPin_rightB,right_speed);
}
void goBack(int back_speed)
{
analogWrite(inPin_leftB,255);
analogWrite(inPin_rightB,255);
analogWrite(inPin_leftA,back_speed);
analogWrite(inPin_rightA,back_speed);
}
void goStop()
{
analogWrite(inPin_leftA,0);
analogWrite(inPin_leftB,0);
analogWrite(inPin_rightA,0);
analogWrite(inPin_rightB,0);
}
[/mw_shl_code]
|