实现功能
后两驱 前方万向轮 基本的运动功能 前进后退停车 以及变速
电路搭建
两个电机连接L289N的两个输出端,Arduino的PWM端连接L289N的信号输入引脚,
四个IO连接L289N的方向控制引脚 INA INB
蓝牙模块直连 Arduino的0 1脚(烧录程序的过程中 需要拔掉)
代码编写
#include "Arduino.h"
const byte MOT1_a=6;
const byte MOT1_b=7;
const byte MOT2_a=8;
const byte MOT2_b=9;
const byte MOT1_PWM=10;
const byte MOT2_PWM=11; //电机控制引脚
const byte Sensor_Flash=A3;//灯光控制
const byte Flash=3;
unsigned char cmd=0;
boolean flag=0;
unsigned char MOT1_PWM_num=0;
unsigned char MOT2_PWM_num=0;
void MOT_Setup() //L289N控制电机 数字控制电机方向 模拟控制PWM 控速 采用差速转向
{
pinMode(MOT1_a, OUTPUT);
pinMode(MOT1_b, OUTPUT);
pinMode(MOT2_a, OUTPUT);
pinMode(MOT2_b, OUTPUT);
pinMode(MOT1_PWM, OUTPUT);
pinMode(MOT2_PWM, OUTPUT);
digitalWrite(MOT1_a, LOW);
digitalWrite(MOT1_b, LOW);
digitalWrite(MOT2_a, LOW);
digitalWrite(MOT2_b, LOW);
analogWrite( MOT1_PWM, 0);
analogWrite( MOT2_PWM, 0);
}
void MOT_UP()
{
digitalWrite(MOT1_a, HIGH);
digitalWrite(MOT1_b, LOW);
digitalWrite(MOT2_a, LOW);
digitalWrite(MOT2_b, HIGH);
if (MOT1_PWM_num+60<=255) {
MOT1_PWM_num=MOT1_PWM_num+60;
}
else{MOT1_PWM_num=255;}
MOT2_PWM_num=MOT1_PWM_num;
}
void MOT_DOWN() // 按得越久 速度越快 模拟汽车加速过程
{
digitalWrite(MOT1_a, LOW);
digitalWrite(MOT1_b, HIGH);
digitalWrite(MOT2_a, HIGH);
digitalWrite(MOT2_b, LOW);
if (MOT1_PWM_num+40<=100) {
MOT1_PWM_num=MOT1_PWM_num+40;
}
else{MOT1_PWM_num=255;}
MOT2_PWM_num=MOT1_PWM_num;
}
void MOT_STOP()
{
MOT1_PWM_num=0;
MOT2_PWM_num=0;
}
void MOT_LEFT()
{
MOT1_PWM_num=50;
MOT2_PWM_num=80;
}
void MOT_RIGHT()
{
MOT1_PWM_num=80;
MOT2_PWM_num=50;
}
void setup() {
// put your setup code here, to run once: 初始化
MOT_Setup();
Serial.begin(9600); //串口通信
}
void loop() {
// put your main code here, to run repeatedly:
while(Serial.available()>0){
cmd=Serial.read();
flag=1; //每接受一次指令改变一次状态
delay(50);
}
if(flag)
{
switch(cmd)
{
case 'u' :MOT_UP(); Serial.print("前进\n");break;
case 'e' :MOT_DOWN(); Serial.print("后退\n");break;
case 'l' :MOT_LEFT(); Serial.print("左转\n");break;
case 'r' :MOT_RIGHT(); Serial.print("右转\n");break;
case 't' :MOT_STOP(); Serial.print("停止\n");break;
default:
break;
}
flag=0;
}
analogWrite(MOT1_PWM, MOT1_PWM_num); //模拟输出控制速度
analogWrite(MOT2_PWM, MOT2_PWM_num);
delay(100);
}
转向利用差速转向
搭建蓝牙APP
搭建软件网址点这
组件设计:
逻辑设计:
实现效果
效果
问题
由于采用两驱 前方采用万向轮 在起步时会出现万向轮转向导致不直线运动的问题。