基于L298N驱动的麦克纳姆轮小车 代码与逻辑以及上位机控制

Posted 王若依

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于L298N驱动的麦克纳姆轮小车 代码与逻辑以及上位机控制相关的知识,希望对你有一定的参考价值。

基于L298N驱动的麦克纳姆轮小车(二) 代码与逻辑以及上位机控制


实现的功能为,通过串口发送指令,进行小车的前进,后退,左平移,右平移,左转和右转。在驱动小车的时候应该与麦克纳姆轮的物理特性紧密结合。

一、代码

int LB_IN1=2;    //右上电机
int LB_IN2=4;
int LB_EN=3;

int LU_IN1=6;     //右下电机
int LU_IN2=7;
int LU_EN=5;

int RU_IN1=8;       //左下电机
int RU_IN2=9;
int RU_EN=10;

int RB_IN1=12;      //左上电机
int RB_IN2=14;
int RB_EN=11 ;
int val;
//char msg;

void Stop(){
   digitalWrite(LB_IN1,LOW);
   digitalWrite(LB_IN2,LOW);
   digitalWrite(LU_IN1,LOW);
   digitalWrite(LU_IN2,LOW);
   digitalWrite(RB_IN1,LOW);
   digitalWrite(RB_IN2,LOW);
   digitalWrite(RU_IN1,LOW);
   digitalWrite(RU_IN2,LOW);//停止
  }
void Up(){
   digitalWrite(LB_IN1,LOW);
   digitalWrite(LB_IN2,HIGH);
   digitalWrite(LU_IN1,LOW);
   digitalWrite(LU_IN2,HIGH);
   digitalWrite(RB_IN1,LOW);
   digitalWrite(RB_IN2,HIGH);
   digitalWrite(RU_IN1,LOW);
   digitalWrite(RU_IN2,HIGH);//前进
  }
void Back(){
   digitalWrite(LB_IN1,HIGH);
   digitalWrite(LB_IN2,LOW);
   digitalWrite(LU_IN1,HIGH);
   digitalWrite(LU_IN2,LOW);
   digitalWrite(RB_IN1,HIGH);
   digitalWrite(RB_IN2,LOW);
   digitalWrite(RU_IN1,HIGH);
   digitalWrite(RU_IN2,LOW);//后退
  }

void TurnRight(){
   digitalWrite(LB_IN1,LOW);
   digitalWrite(LB_IN2,HIGH);
   digitalWrite(LU_IN1,LOW);
   digitalWrite(LU_IN2,HIGH);
   digitalWrite(RB_IN1,HIGH);
   digitalWrite(RB_IN2,LOW);
   digitalWrite(RU_IN1,HIGH);
   digitalWrite(RU_IN2,LOW);//右转
  }

void TurnLeft(){
   digitalWrite(LB_IN1,HIGH);
   digitalWrite(LB_IN2,LOW);
   digitalWrite(LU_IN1,HIGH);
   digitalWrite(LU_IN2,LOW);
   digitalWrite(RB_IN1,LOW);
   digitalWrite(RB_IN2,HIGH);
   digitalWrite(RU_IN1,LOW);
   digitalWrite(RU_IN2,HIGH);//左转
  }

void RightLine(){
   digitalWrite(LB_IN1,HIGH);      
   digitalWrite(LB_IN2,LOW);
   digitalWrite(LU_IN1,LOW);        
   digitalWrite(LU_IN2,HIGH);
   digitalWrite(RB_IN1,LOW);        
   digitalWrite(RB_IN2,HIGH);
   digitalWrite(RU_IN1,HIGH);       
   digitalWrite(RU_IN2,LOW);//右平移
  }

void LeftLine(){
   digitalWrite(LB_IN1,LOW);
   digitalWrite(LB_IN2,HIGH);
   digitalWrite(LU_IN1,HIGH);
   digitalWrite(LU_IN2,LOW);
   digitalWrite(RB_IN1,HIGH);
   digitalWrite(RB_IN2,LOW);
   digitalWrite(RU_IN1,LOW);
   digitalWrite(RU_IN2,HIGH);//左平移
  }


void setup() {
	Serial.begin(57600);
  pinMode(LB_IN1,OUTPUT);
  pinMode(LB_IN2,OUTPUT);
  pinMode(LB_EN,OUTPUT);
  pinMode(LU_IN1,OUTPUT);
  pinMode(LU_IN2,OUTPUT);
  pinMode(LU_EN,OUTPUT);
  pinMode(RU_IN1,OUTPUT);
  pinMode(RU_IN2,OUTPUT);
  pinMode(RU_EN,OUTPUT);
  pinMode(RB_IN1,OUTPUT);
  pinMode(RB_IN2,OUTPUT);
  pinMode(RB_EN,OUTPUT);
  //最开始设置制动模式
  Stop();
  val=map(150,0,1023,0,255);//映射一下
  analogWrite(LB_EN,val);
  analogWrite(LU_EN,val);
  analogWrite(RU_EN,val);
  analogWrite(RB_EN,val);
}

void loop() 
{
 if(Serial.available()>0)
 {
  switch (Serial.read())
  {
    case 'U':
      Up();
      break;
    case 'B':
      Back();
      break;
    case 'R':
      TurnRight();
      break;
    case 'L':
      TurnLeft();
      break;
    case 'D':
      RightLine();
   
      break;
    case 'A':
      LeftLine();
      break;
   }
 }
}

其实麦克娜姆的运动原理很简单,一张图来点清楚麦克娜姆轮的运动原理。
在这里插入图片描述

通过发送不同的指令,最终实现了每个字符对应的控制小车。

二、上位机部分

之前的文章中涉及到了自定义协议,有想法的小伙伴可以通过这个项目再来深入的了解一番。这其实不过是调用终端来实现小车的操控。烧录好程序以后,打开终端。(没有python的小伙伴可以看我之前的博客《python制作上位机控制Arduino下位机(自定义协议)》)

//打开python的环境
python
>>> import serial        //导入串口的库
>>>ser = serial.Serial("COM3",57600)   //连接串口
>>>ser.write(‘U’.encode('ascii'))		//前进
>>>ser.write(‘D’.encode('ascii')) 		//右平移
>>>ser.write(‘A’.encode('ascii'))		//左平移
>>>ser.write(‘L’.encode('ascii'))		//左转
>>>ser.write(‘R’.encode('ascii'))		//右转
>>>ser.write(‘B’.encode('ascii'))		//后退
>>>ser.write(‘S’.encode('ascii'))		//停止

下阶段

当然,完整的小车成品怎么能带有线的呢?下一阶段,进阶无线设备控制,打算采用rnf24l0模块。同时,推荐一名python的博主,袁六加。本博主刷着她的博客学到了不少东西,感觉和本博主一样,不断的踩坑,试水,最终达到实现功能的目的。同时,袁博主的博客内容确实干货,对树莓派和python有兴趣的可以去刷刷看看(~ ̄▽ ̄)~ 。

以上是关于基于L298N驱动的麦克纳姆轮小车 代码与逻辑以及上位机控制的主要内容,如果未能解决你的问题,请参考以下文章

基于L298N驱动的麦克纳姆轮小车 代码与逻辑以及上位机控制

基于L298N驱动的麦克纳姆轮的小车组装与驱动电机介绍

基于L298N驱动的麦克纳姆轮的小车组装与驱动电机介绍

nrf24L01的通讯控制 基于L298N驱动的麦克纳姆轮的小车

nrf24L01的通讯控制 基于L298N驱动的麦克纳姆轮的小车

nrf24L01的通讯控制 基于L298N驱动的麦克纳姆轮的小车