完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
红外遥控小车
【材料】 1、NEC编码红外遥控器; 2、红外接收器 VS1838B; 3、Arduino uno 一块 4、L298n驱动一块 5、9v电池 6、杜邦线若干 7、小车底板 8、四个直流电机 【模块介绍】 1、红外接收器 VS1838B VS1838b红外接收头,内部集成了监测,放大,滤波,解调等一系列电路处理输出基带信号。小车上安有红外接收装置,红外接收装置负责将接收到红外遥控器的信号进行解码,小车依据相应的命令进行操作。 红外接收器面向自己,从右往左分别是VCC,GND,OUT. 供电电源是3.3V–5V.(建议使用3.3V,电压太大容易坏掉) 原始信号就是我们要发送的一个数据“0”位或者一位数据“1”位,而所谓 38K 载波就是频率为 38K 的方波信号,调制后信号就是最终我们发射出去的波形。我们使用原始信号来控制 38K 载波,当信号是数据“0”的时候,38K 载波毫无保留的全部发送出去,当信号是数据“1”的时候,不发送任何载波信号。要想让 HS0038B 识别到 38K的红外信号,那么这个 38K 的载波必须要大于 10 个周期,这就限定了红外通信的基带信号的比特率必须不能高于 3800,那如果把串口输出的信号直接用 38K 调制的话,波特率也就不能高于 3800。 2、NEC编码红外遥控器 遥控范围是8–10 m(其实没有这么远,大概就两三米),红外波载频率为38 KHZ, 每个按键都有自己不同的编码,利用接收器收到不同的编码对小车执行不同的指令。但是当你连续快速按按键时,串口就会显示不同的编码。所以在编写代码时,尽可能填写多种可能的代码。 【小车组装】 模块接线如下: #这里一个驱动板控制了四个电机,同侧的电机接在驱动板的一侧; #驱动板,红外接收器,arduino的GND 要共地,否则小车不能动; #arduino的供电可以从DC接口引入,也可以从驱动板引出5V供电,也可以直接从arduino的VIN接口供电,该接口供电范围是5–12V. #组装时各模块要固定好,否则杜邦线会松动,损坏开发板。 Arduino 代码如下: #include ///选择/// #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 _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,120); analogWrite(leftB_PIN,0); //左轮前进 analogWrite(righA_PIN,120); analogWrite(righB_PIN,0); //右轮前进 } /************************************************** back子函数——后退子函数 函数功能:控制车后退 **************************************************/ void back( ) { analogWrite(leftA_PIN,0); analogWrite(leftB_PIN,120); //左轮后退 analogWrite(righA_PIN,0); analogWrite(righB_PIN,120); //右轮后退 } /************************************************** turnLeftOrigin子函数——原地左转子函数 函数功能:控制车原地左转 **************************************************/ void turnLeftOrigin( ) { analogWrite(leftA_PIN,0); analogWrite(leftB_PIN,0); analogWrite(righA_PIN,80); analogWrite(righB_PIN,0); //右轮前进 } /************************************************** turnRightOrigin子函数——原地右转子函数 函数功能:控制车原地右转 **************************************************/ void turnRightOrigin( ) { analogWrite(leftA_PIN,80); analogWrite(leftB_PIN,0); //左轮前进 analogWrite(righA_PIN,0); analogWrite(righB_PIN,0); } /************************************************** 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( ) ; }//2前进 else {if((results.value==465573243)||(results.value==16730805)||(results.value==304335233)||(results.value==891929274)||(results.value==93040025)) {back( ) ; }//8后退 else{if((results.value==2351064443)||(results.value==16716015)||(results.value==3640844469)||(results.value==3606423579)) {turnLeftOrigin( ) ; }//4原地左转 else{if((results.value==16734885)||(results.value==71952287)) {turnRightOrigin( ) ; }//6原地右转 else{if((results.value==16724175)||(results.value==814588342)||(results.value==2534850111)||(results.value==16724175)) {_stop( ) ; }//1停车 }}}} irrecv.resume(); } } |
|
|
|
只有小组成员才能发言,加入小组>>
3309 浏览 9 评论
2990 浏览 16 评论
3490 浏览 1 评论
9052 浏览 16 评论
4085 浏览 18 评论
1173浏览 3评论
603浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
596浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2333浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1894浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 09:04 , Processed in 1.319249 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号