目录

概述

1. 硬件组成

1.1 电机驱动模块

1.2 控制板

1.3 遥控器模块

2 机械结构

2.1 底盘介绍

2.2 转向功能实现

3 软件实现

4 运行测试

4.1 红外解码测试

4.2 电机运行测试

智能小车测试视频

概述

本文主要介绍使用整体结构小车底盘,外加Arduion控制板和L298N控制板搭建一台智能遥控小车。以HX1838B作为控制信号接收模块,使用遥控器就能控制小车前进、后退、左转、右转功能。

1. 硬件组成

1.1 电机驱动模块

电机驱动模块,主要用于驱动板上的四个电机。使用LN298N模块,其通过下图的真值表,控制四个电机的前进,后退,左转,右转。且该模块还有一个集成的5V电压模块:78M05e稳压电路,其可以输出5V的电压,用于对控制板供电。

下图为L298N板卡电路图:

关于该模块的详细资料,查看文档:L298N 电机驱动板 - 详细介绍 - 知乎 (zhihu.com)

L298N驱动模块接口定义如下:

驱动板引脚功能介绍:

引脚功能介绍VCC外部电源供电引脚GND公共地控制板和外部电源GND都接在这个引脚上5V控制板电源引脚IN1,IN2左侧两个电机控制线连接控制板IOIN3,IN4右侧两个电机控制线连接控制板IOOU1,OUT2左侧电机驱动接口连接直流电机信号线OU3,OUT4右侧电机驱动接口连接直流电机信号线

1.2 控制板

控制板使用Arduino UNO, 其实现功能如下:

1)控制电机驱动板 IN1、IN2、IN3、IN4的电平状态

2)接收遥控器信号

引脚功能定义如下:

控制板引脚功能介绍AI-0连接控制板: IN-1左侧电机控制信号引脚AI-1连接控制板: IN-2左侧电机控制信号引脚AI-2连接控制板: IN-3右侧电机控制信号引脚AI-3连接控制板: IN-4右侧电机控制信号引脚D2连接IRHX1838B 信号接口

1.3 遥控器模块

红外信号接收信号,用于接收要控制发送的控制码,以实现小车前进,后退,左转,右转。Arduino UNO的公共库已经提供该模块的驱动,使用时仅需连接pin引脚。调用相应的接口函数,就可以实现解码功能。本系统使用IR模块为HX1838B。关于和红外遥控相关的代码可参考:

https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/ir_NEC.hpp

2 机械结构

2.1 底盘介绍

在某宝上,可以采购现成的地盘,回来自己组装,价位一般在50RMB,包括4个车轮,测速码盘,直流电机。线路连接注意点:

1)左侧两个电机转动方向必须一致

2)右侧两个电机转动方向必须一致

2.2 转向功能实现

右转: 右侧两个电机向后运行,左侧两个电机向前运动

左转: 右侧两个电机向前运行,左侧两个电机向后运动

3 软件实现

使用Arduino IDE编写代码,主要实现,红外解码,控制电机转动方向,详细代码如下:

具体代码如下:

// ATMEL ATMEGA8 & 168 / ARDUINO

//

// +-\/-+

// PC6 1| |28 PC5 (AI 5)

// (D 0) PD0 2| |27 PC4 (AI 4)

// (D 1) PD1 3| |26 PC3 (AI 3)

// (D 2) PD2 4| |25 PC2 (AI 2)

// PWM+ (D 3) PD3 5| |24 PC1 (AI 1)

// (D 4) PD4 6| |23 PC0 (AI 0)

// VCC 7| |22 GND

// GND 8| |21 AREF

// PB6 9| |20 AVCC

// PB7 10| |19 PB5 (D 13)

// PWM+ (D 5) PD5 11| |18 PB4 (D 12)

// PWM+ (D 6) PD6 12| |17 PB3 (D 11) PWM

// (D 7) PD7 13| |16 PB2 (D 10) PWM

// (D 8) PB0 14| |15 PB1 (D 9) PWM

// +----+

#include

#include

//电机控制接口

#define PIN_A0 (14)

#define PIN_A1 (15)

#define PIN_A2 (16)

#define PIN_A3 (17)

static const uint8_t MA0 = PIN_A0;

static const uint8_t MA1 = PIN_A1;

static const uint8_t MA2 = PIN_A2;

static const uint8_t MA3 = PIN_A3;

// IR 信号接口

#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here.

void setup() {

// put your setup code here, to run once:

IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);

Serial.begin(9600);

pinMode(MA0, OUTPUT);

pinMode(MA1, OUTPUT);

pinMode(MA2, OUTPUT);

pinMode(MA3, OUTPUT);

}

void loop() {

// put your main code here, to run repeatedly:

if (IrReceiver.decode()) { // Grab an IR code

IrReceiver.printIRResultShort(&Serial);

//IrReceive

Serial.println(IrReceiver.lastDecodedCommand, HEX); // Print "old" raw data

switch( IrReceiver.lastDecodedCommand )

{

case 0x18: //前进

digitalWrite(MA0, LOW);

digitalWrite(MA1, HIGH);

digitalWrite(MA2, LOW);

digitalWrite(MA3, HIGH);

break;

case 0x52: //后退

digitalWrite(MA0, HIGH);

digitalWrite(MA1, LOW);

digitalWrite(MA2, HIGH);

digitalWrite(MA3, LOW);

break;

case 0x08: // 左转

digitalWrite(MA0, HIGH);

digitalWrite(MA1, LOW);

digitalWrite(MA2, LOW);

digitalWrite(MA3, HIGH);

break;

case 0x5a: //右转

digitalWrite(MA0, LOW);

digitalWrite(MA1, HIGH);

digitalWrite(MA2, HIGH);

digitalWrite(MA3, LOW);

break;

case 0x45:

default:

digitalWrite(MA0, LOW);

digitalWrite(MA1, LOW);

digitalWrite(MA2, LOW);

digitalWrite(MA3, LOW);

break;

}

}

IrReceiver.resume(); // Prepare for the next value

}

4 运行测试

4.1 红外解码测试

红外解码测试:

地址位:

数据位:

数据码信息,控制板能准确解析遥控器的编码信息:

4.2 电机运行测试

遥控器按键和小车运行方向关系:

通过按遥控器按键,可以自由控制小车运行方向:

现场测试图片: