使用Arduino UNO硬件和红外遥控制作智能小车 |
您所在的位置:网站首页 › 蓝牙控制小车的前进和转向程序 › 使用Arduino UNO硬件和红外遥控制作智能小车 |
目录 概述 1. 硬件组成 1.1 电机驱动模块 1.2 控制板 1.3 遥控器模块 2 机械结构 2.1 底盘介绍 2.2 转向功能实现 3 软件实现 4 运行测试 4.1 红外解码测试 4.2 电机运行测试 智能小车测试视频 概述本文主要介绍使用整体结构小车底盘,外加Arduion控制板和L298N控制板搭建一台智能遥控小车。以HX1838B作为控制信号接收模块,使用遥控器就能控制小车前进、后退、左转、右转功能。 电机驱动模块,主要用于驱动板上的四个电机。使用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 信号接口红外信号接收信号,用于接收要控制发送的控制码,以实现小车前进,后退,左转,右转。Arduino UNO的公共库已经提供该模块的驱动,使用时仅需连接pin引脚。调用相应的接口函数,就可以实现解码功能。本系统使用IR模块为HX1838B。关于和红外遥控相关的代码可参考: https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/ir_NEC.hpp 在某宝上,可以采购现成的地盘,回来自己组装,价位一般在50RMB,包括4个车轮,测速码盘,直流电机。线路连接注意点: 1)左侧两个电机转动方向必须一致 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 红外解码测试红外解码测试: 地址位: 数据位: 数据码信息,控制板能准确解析遥控器的编码信息: 遥控器按键和小车运行方向关系: 通过按遥控器按键,可以自由控制小车运行方向: 现场测试图片: |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |