Arduino蓝牙小车

本文详细介绍了如何通过Arduino、L289N驱动电机实现后驱双电机小车的前进、后退、左右转向及停止功能,同时涉及蓝牙APP的搭建,以及遇到的万向轮起步转向问题及其解决方案。
摘要由CSDN通过智能技术生成

实现功能

后两驱 前方万向轮 基本的运动功能 前进后退停车 以及变速

电路搭建

两个电机连接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

搭建软件网址点这
组件设计:
在这里插入图片描述

逻辑设计:
逻辑设计要与代码相符

实现效果

效果

问题

由于采用两驱 前方采用万向轮 在起步时会出现万向轮转向导致不直线运动的问题。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值