基于红外遥控的arduino遥控小车
遥控小车是每个人童年的最爱,不仅好奇它的奇妙,更是喜欢它带来的刺激。小编为大家带来几篇博客,来给大家讲讲制作遥控小车的程序。
看大标题可知我们一共有五个方法去制作一款带有遥控功能的小车,小编分开来给大家讲解。
本文是基于arduino的红外遥控小车
基于arduino的手机蓝牙遥控小车
基于arduino的红外遥控小车
基于arduino的无线NRF24L01遥控小车
基于ardunio的无线手柄遥控小车
基于ardunio的有线手柄遥控小车
从0到1教你做:基于红外遥控模块的Arduino的遥控小车
bilibili:https://www.bilibili.com/video/av74669242/
腾讯视频:https://v.qq.com/x/page/a301789lmwp.html
1、CSDN下载:
https://download.csdn.net/download/qq_38351824/11107043
红外遥控小车,用的就是遥控器来控制小车的移动,遥控部分分为发射端和接收端。如下图
第一个是遥控器为发射端,第二个为接收端。
我们只需要记录下来每个按键对应的码值,然后就可以像按键那样写程序啦,就是if(串口接收到是) 那么......
一、接线:
(1)红外遥控接线:
(2)电机接线:
四个逻辑通道从左到右(即IN1到IN4)分别接5、6、9、10
注意:此处驱动一定要和arduino共地!!!否则无法传输数据。
二、书写代码:
#include <IRremote.h> // 使用IRRemote函数库
///选择///
#define choose 2 //1为通过串口打印码值模式 //2为主函数运行模式//-------------------------------------------------------------------//
//*******************************************************************//
///
//电机设置/
///#define leftA_PIN 5
#define leftB_PIN 6
#define righA_PIN 9
#define righB_PIN 10
void motor_pinint( ); //引脚初始化
void forward( ); //前进
void back( ); //后退
void turnLeftOrigin( ); //原地左
void turnRightOrigin( ); //原地右
void turnRightforword( ); //右前
void turnLeftforword( ); //左前
void turnLeftback( ); //左后
void turnRightback( ); //右后
void _stop(); //停车//-------------------------------------------------------------------//
//*******************************************************************//
///
//红外遥控/
///const int irReceiverPin = 2; // 红外接收器的 OUTPUT 引脚接在 PIN2 接口 定义irReceiverPin变量为PIN2接口
IRrecv irrecv(irReceiverPin); // 设置irReceiverPin定义的端口为红外信号接收端口
decode_results results; // 定义results变量为红外结果存放位置
void rev(void);
void scan(void);//-------------------------------------------------------------------------//void setup()
{Serial.begin(9600); //9600(PC端使用)motor_pinint(); //电机引脚初始化irrecv.enableIRIn(); // 启动红外解码}
void loop()
{if(choose==1) scan();else if(choose==2) rev();
}/*电机引脚初始化*/
void motor_pinint( )
{pinMode (leftA_PIN, OUTPUT); //设置引脚为输出引脚pinMode (leftB_PIN, OUTPUT); //设置引脚为输出引脚pinMode (righA_PIN, OUTPUT); //设置引脚为输出引脚pinMode (righB_PIN, OUTPUT); //设置引脚为输出引脚}
/**************************************************
forward子函数——前进子函数
函数功能:控制车前进
**************************************************/
void forward( )
{analogWrite(leftA_PIN,180); analogWrite(leftB_PIN,0); //左轮前进analogWrite(righA_PIN,180); analogWrite(righB_PIN,0); //右轮前进
}
/**************************************************
back子函数——后退子函数
函数功能:控制车后退
**************************************************/
void back( )
{analogWrite(leftA_PIN,0); analogWrite(leftB_PIN,180); //左轮后退analogWrite(righA_PIN,0); analogWrite(righB_PIN,180); //右轮后退
}
/**************************************************
turnLeftOrigin子函数——原地左转子函数
函数功能:控制车原地左转
**************************************************/
void turnLeftOrigin( )
{analogWrite(leftA_PIN,0); analogWrite(leftB_PIN,120); //左轮后退analogWrite(righA_PIN,120); analogWrite(righB_PIN,0); //右轮前进
}
/**************************************************
turnRightOrigin子函数——原地右转子函数
函数功能:控制车原地右转
**************************************************/
void turnRightOrigin( )
{analogWrite(leftA_PIN,120); analogWrite(leftB_PIN,0); //左轮前进analogWrite(righA_PIN,0); analogWrite(righB_PIN,120); //右轮后退
}
/**************************************************
turnRightforword子函数——右前运动子函数
函数功能:控制车右前
**************************************************/
void turnRightforword( )
{analogWrite(leftA_PIN,200); analogWrite(leftB_PIN,0); //左轮快前进analogWrite(righA_PIN,120); analogWrite(righB_PIN,0); //右轮慢前进
}
/**************************************************
turnLeftforword子函数——左前运动子函数
函数功能:控制车左前
**************************************************/
void turnLeftforword( )
{analogWrite(leftA_PIN,120); analogWrite(leftB_PIN,0); //左轮慢前进analogWrite(righA_PIN,200); analogWrite(righB_PIN,0); //右轮快前进
}
/**************************************************
turnRightforword子函数——右后运动子函数
函数功能:控制车右后
**************************************************/
void turnRightback( )
{analogWrite(leftA_PIN,0); analogWrite(leftB_PIN,200); //左轮快后退analogWrite(righA_PIN,0); analogWrite(righB_PIN,120); //右轮慢后退
}
/**************************************************
turnLeftforword子函数——左后运动子函数
函数功能:控制车左后
**************************************************/
void turnLeftback( )
{analogWrite(leftA_PIN,0); analogWrite(leftB_PIN,120); //左轮慢后退analogWrite(righA_PIN,0); analogWrite(righB_PIN,200); //右轮快后退
}
/**************************************************
stop子函数—停止子函数
函数功能:控制车停止
**************************************************/
void _stop()
{analogWrite(leftA_PIN,0); analogWrite(leftB_PIN,0); //左轮静止不动analogWrite(righA_PIN,0); analogWrite(righB_PIN,0); //右轮静止不动
}void rev(void)
{if (irrecv.decode(&results)) { // 解码成功,把数据放入results.value变量中if ((results.value==16718055)||(results.value==1033561079)){forward( ) ;delay(500);_stop();}//2前进else if((results.value==465573243)||(results.value==16730805)||(results.value==304335233)||(results.value==891929274)||(results.value==93040025)){back( ) ;delay(500);_stop();}//8后退else if((results.value==16724175)||(results.value==814588342)||(results.value==2534850111)||(results.value==16724175)){turnLeftforword( ) ;delay(500);_stop();}//1左前else if((results.value==16743045)||(results.value==1635910171)||(results.value==16743045)) {turnRightforword( );delay(500);_stop();}//3右前else if((results.value==1209942246)||(results.value==851901943)||(results.value==16728765)) {turnLeftback( ) ;delay(500);_stop();}//7左后else if((results.value==16732845)||(results.value==1623741183)) {turnRightback( ) ;delay(500);_stop();}//9右后else if((results.value==2351064443)||(results.value==16716015)||(results.value==3640844469)||(results.value==3606423579)) {turnLeftOrigin( ) ;delay(250);_stop();}//4原地左转else if((results.value==16734885)||(results.value==71952287)) {turnRightOrigin( ) ;delay(250);_stop();}//6原地右转irrecv.resume(); // 继续等待接收下一组信号}if(results.value==0x16) delay(600); //延时600毫秒,做一个简单的消抖
}
void scan(void)
{if (irrecv.decode(&results)) { // 解码成功,把数据放入results变量中// 把数据输入到串口Serial.print("irCode: "); Serial.print(results.value, DEC); // 显示红外编码Serial.print(", bits: "); Serial.println(results.bits); // 显示红外编码位数irrecv.resume(); // 继续等待接收下一组信号}if(results.value==0x16)digitalWrite(9, HIGH); delay(600); //延时600毫秒,做一个简单的消抖
}
然后打开串口监视器,波特率设置为9600,使用遥控器对着红外头按下按键,串口监视器上就会出来当前按键的红外编码与位数。
显示irCode:FFFFFFFF,bits:32是因为遥控器上没有做中断,误码导致,只要按一下松开,再按一下松开就没问题。
小编用的是遥控器上的1-9九个按键,分别对应着小车的不同状态如下图:
然后开始一个按键一个按键进行测试记录数据,将数据填入程序中即可(下图对应按键数据的红圈)
由于小编手头的材料比较劣质,所以往往是一个按键对应多个码值,为了减少误码,特意多写了几个数据;如下图:
然后感受下,小车的转速、转角是否符合心意,如果想更改,请去每个按键对应的运动指令下,分别更改PWM和延时(对应下图的绿圈和红圈)
可能出现的问题https://blog.csdn.net/qq_38351824/article/details/88551999
如果大家在制作过程中有什么问题或者思路可以在下方留言和我一起交流噢!
如果发现本文有错误,也请在下方评论区指出,感激不尽!
基于红外遥控的arduino遥控小车相关推荐
- 基于手机蓝牙的arduino遥控小车
遥控小车是每个人童年的最爱,不仅好奇它的奇妙,更是喜欢它带来的刺激.小编为大家带来几篇博客,来给大家讲讲制作遥控小车的程序. 看大标题可知我们一共有五个方法去制作一款带有遥控功能的小车,小编分开来给大 ...
- 基于无线NRF24L01的ardunio遥控小车
遥控小车是每个人童年的最爱,不仅好奇它的奇妙,更是喜欢它带来的刺激.小编为大家带来几篇博客,来给大家讲讲制作遥控小车的程序. 看大标题可知我们一共有五个方法去制作一款带有遥控功能的小车,小编分开来给大 ...
- 基于手柄(有线)的ardunio遥控小车
遥控小车是每个人童年的最爱,不仅好奇它的奇妙,更是喜欢它带来的刺激.小编为大家带来几篇博客,来给大家讲讲制作遥控小车的程序. 看大标题可知我们一共有五个方法去制作一款带有遥控功能的小车,小编分开来给大 ...
- 单片机遥控车c语言程序,基于51单片机的无线遥控小车设计[附发射接收程序]
/***************************************************************/ /*[基于51单片机的无线遥控小车设计] 作者王*茹 */ /*** ...
- 基于51单片机的无线遥控小车
基于51单片机的无线遥控小车 材料:STC89C51(1个).nrf2401(2个).L298N(2个).小车底盘.18650(4个).按键若干.蜂鸣器 功能:前进.后退.左转.右转.鸣笛. 程序请移 ...
- 基于红外遥控的门禁系统(红外遥控、步进电机)
基于红外遥控的门禁系统(红外遥控.步进电机) 闲来无事,用手头STM32做个项目. 成品功能: 功能说明 材料 STM32ZET6开发板 TFT显示屏(战舰有我用的2.7寸的) 红外接收器和遥控器 五 ...
- 惠而浦空调遥控协议分析及使用Arduino遥控空调
一.工具 1.红外接收头(HS1838): 2.940nm红外发光二极管及限流电阻100Ω左右: 3.Arduino及Prototype Shield: 4.Saleae Logic兼容逻辑分析仪(价 ...
- 鸿蒙系统有没有红外遥控,红外遥控与蓝牙遥控的区别
现如今社会无线技术运用越来越广泛,大大提高了生活质量水平,而远程遥控技术又称为遥控技术,是指实现对被控目标的遥远控制,广泛用于社会的各行各业. 红外遥控是一种无线.非接触控制技术,具有抗干扰能力强,信 ...
- 基于STM32F103的红外循迹避障小车设计(含Proteus仿真)
基于STM32F103的红外循迹避障小车设计 红外循迹及红外避障实现较简单,无论是51单片机还是STM32单片机,其例程随处可见.但是完全可以运行的Proteus仿真,开源的并不多,更不要说基于STM ...
最新文章
- mysql数据库优化命令_MySQL数据库优化总结
- 虚拟化是云计算的第一步
- free: seconds argument `1‘ failed
- C++队列、堆栈、堆的区别
- Python中functools模块函数解析
- ik分词器 分词原理_ElasticSearch 集成Ik分词器
- LaTex中编译时出现“ Undefined control sequence”问题
- VSCode编译Python环境搭建及发布Python应用
- 2021-2027全球及中国工业物联网通信产品行业研究及十四五规划分析报告
- Mac 常用的 20 款效率神器推荐
- 【JAVA笔记】JAVA调用同一个包里的不同类的方法:
- html新浪短域名api,新浪短网址官方api接口
- linux服务器开发三(网络编程)
- Qt下MQTT模块的导入(源码直接导入)适用Windows和Linux系统
- LTspice基础教程-010.波形查看器的使用
- 1、python冒泡排序和快排
- 【C 语言知识点】C语言中 %s、%m.n、%e、%m.ne 的含义
- 5天学会mysql_5天学完《MySQL必知必会》学习笔记之第四天
- oracle特殊字符
- ISP是什么?我们常用的ISP