之前了解了PS2遥控器的通信协议,这次制作了一辆消防小车,使用PS2遥控器控制,可以灵活运动、控制喷头方位、打开关闭水泵、还有太阳能发电板为电池充电。
小车整体结构如下:
硬件部分:
主控板为STM32F103ZE开发板,运动电机使用TB6612驱动,方位电机使用L298N驱动,水泵受光耦继电器控制,还有PS2遥控接收器。
电源部分:
电源使用12V可充电电池,并且使用太阳能发电板为电池充电。(图为太阳能发电板和稳压电路)
软件部分:
主函数,PS2通信协议之前附过
int main(void)
{
delay_init(); //延时函数初始化
LED_Init(); //初始化LED
// KEY_Init(); //初始化按键
PS2_Init(); //驱动端口初始化
PS2_SetInit(); //配置初始化
TIM1_PWM_Init(999,0);//PWM输出初始化
TIM_SetCompare1(TIM1,500);//设置占空比为50%
// Adc_Init(); //ADC初始化
// uart_init(9600); //串口初始化,波特率为9600
while(1)
{
key=PS2_DataKey();
// if(USART_RX_STA&0x8000) { yaokong();}
yundong();
delay_ms(50);
PBout(5)=!PBout(5) ;
}
}
运动函数
void yundong()
{
// key=PS2_DataKey();
if(key==13)//小车前进
{
delay_ms(10);
PEout(7)=1;
PEout(8)=0;
PEout(9)=1;
PEout(10)=0;
}
else if(key==14)//小车右转
{
delay_ms(10);
PEout(7)=1;
PEout(8)=0;
PEout(9)=0;
PEout(10)=0;
}
else if(key==15)//小车后退
{
delay_ms(10);
PEout(7)=0;
PEout(8)=1;
PEout(9)=0;
PEout(10)=1;
}
else if(key==16)//小车左转
{
delay_ms(10);
PEout(7)=0;
PEout(8)=0;
PEout(9)=1;
PEout(10)=0;
}
else if(key==2)//水泵开
{
delay_ms(10);
PEout(11)=1;
}
else if(key==3)//水泵关
{
delay_ms(10);
PEout(11)=0;
}
else if(key==5)//喷头向上
{
delay_ms(10);
PEout(12)=1;
PEout(13)=0;
}
else if(key==7)//喷头向下
{
delay_ms(10);
PEout(12)=0;
PEout(13)=1;
}
else if(key==6)//喷头向左
{
delay_ms(10);
PEout(14)=1;
PEout(15)=0;
}
else if(key==8)//喷头向右
{
delay_ms(10);
PEout(14)=0;
PEout(15)=1;
}
else//停止运动
{
PEout(7)=0;
PEout(8)=0;
PEout(9)=0;
PEout(10)=0;
PEout(12)=0;
PEout(13)=0;
PEout(14)=0;
PEout(15)=0;
}
}