问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

使用Arduino UNO和红外遥控器制作智能小车

创作时间:
作者:
@小白创作中心

使用Arduino UNO和红外遥控器制作智能小车

引用
CSDN
1.
https://blog.csdn.net/mftang/article/details/136053105

本文将详细介绍如何使用Arduino UNO和红外遥控器制作一台智能小车。通过L298N电机驱动模块和HX1838B红外接收模块,实现小车的前进、后退、左转和右转功能。文章包括详细的硬件连接、电路图和Arduino代码,适合对Arduino和机器人制作感兴趣的读者。

概述

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

硬件组成

1.1 电机驱动模块

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

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

驱动板引脚功能介绍:

引脚
功能
介绍
VCC
外部电源供电引脚
GND
公共地
控制板和外部电源GND都接在这个引脚上
5V
控制板电源引脚
IN1,IN2
左侧两个电机控制线
连接控制板IO
IN3,IN4
右侧两个电机控制线
连接控制板IO
OU1,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
连接IR
HX1838B 信号接口

1.3 遥控器模块

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

机械结构

2.1 底盘介绍

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

  1. 左侧两个电机转动方向必须一致
  2. 右侧两个电机转动方向必须一致

2.2 转向功能实现

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

软件实现

使用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 <Arduino.h>
#include <IRremote.hpp>

// 电机控制接口
#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.1 红外解码测试

红外解码测试:

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

4.2 电机运行测试

遥控器按键和小车运行方向关系:
通过按遥控器按键,可以自由控制小车运行方向:
现场测试图片:

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号