0°

Arduino小车-红外遥控实验

分别按遥控器的2,4,5,6,8,小车分别做前进,左转,停止,右转,后退动作

介绍

  • 本文介绍红外遥控功能

所需硬件

  • 红外遥控器
  • 红外接收头
  • Arduino开发板

连接图

  • 红外接收头连接
    注:该图的遥控接收头是说明原理,和实际模块样子不一样。红线和黑线分别连接5V和GND,绿线Data连接Arduino开发板的11脚
    Arduino小车-红外遥控实验
  • 电机连接参考小车运动

样例代码

注:如果库里面没有IRremote库,可以打开IDE:项目→加载库→添加→搜索IRremote→安装IRredmote库

//=============================================================================
//  智能小车红外遥控实验
//  实验中所用接收红外信号为配送遥控器的信号,也可打印出信号数值,配合其他红外信号控制
//  参考4.视频教程\Arduino套件视频\视频教程\例程19-红外遥控.mp4
//  本实验不可调节电机速度,调节pwm值会影响红外的信号接收
//=============================================================================
#include <IRremote.h>//打开IDE:项目→加载库→添加→搜索IRremote→安装IRredmote库
int RECV_PIN = 11;//红外接收端口
IRrecv irrecv(RECV_PIN);
decode_results results;//结构声明

//==============================
int Left_motor_back=5;     //左电机后退(IN1)
int Left_motor_go=6;     //左电机前进(IN2)

int Right_motor_go=9;    // 右电机前进(IN3)
int Right_motor_back=10;    // 右电机后退(IN4)

void setup()
{
  //初始化电机驱动IO为输出方式
  pinMode(Left_motor_go,OUTPUT); // PIN 5 (PWM)
  pinMode(Left_motor_back,OUTPUT); // PIN 6 (PWM)
  pinMode(Right_motor_go,OUTPUT);// PIN 9 (PWM) 
  pinMode(Right_motor_back,OUTPUT);// PIN 10 (PWM)
  pinMode(13, OUTPUT);////端口模式,输出
  Serial.begin(9600);   //波特率9600
  irrecv.enableIRIn(); // Start the receiver
}
void run()     // 前进
{
  digitalWrite(Right_motor_go,HIGH);  // 右电机前进
  digitalWrite(Right_motor_back,LOW);     
  digitalWrite(Left_motor_go,HIGH);  // 左电机前进
  digitalWrite(Left_motor_back,LOW);
}

void brake()         //刹车,停车
{
  digitalWrite(Right_motor_go,LOW);
  digitalWrite(Right_motor_back,LOW);
  digitalWrite(Left_motor_go,LOW);
  digitalWrite(Left_motor_back,LOW);
}

void left()         //左转(左轮不动,右轮前进)
{
  digitalWrite(Right_motor_go,HIGH);    // 右电机前进
  digitalWrite(Right_motor_back,LOW);
  digitalWrite(Left_motor_go,LOW);   //左轮不动
  digitalWrite(Left_motor_back,LOW);
}

void spin_left()         //左转(左轮后退,右轮前进)
{
  digitalWrite(Right_motor_go,HIGH);    // 右电机前进
  digitalWrite(Right_motor_back,LOW);
  digitalWrite(Left_motor_go,LOW);   //左轮后退
  digitalWrite(Left_motor_back,HIGH);
}

void right()        //右转(右轮不动,左轮前进)
{
  digitalWrite(Right_motor_go,LOW);   //右电机不动
  digitalWrite(Right_motor_back,LOW);
  digitalWrite(Left_motor_go,HIGH);//左电机前进
  digitalWrite(Left_motor_back,LOW);
}

void spin_right()        //右转(右轮后退,左轮前进)
{
  digitalWrite(Right_motor_go,LOW);   //右电机后退
  digitalWrite(Right_motor_back,HIGH);
  digitalWrite(Left_motor_go,HIGH);//左电机前进
  digitalWrite(Left_motor_back,LOW);
}

void back()          //后退
{
  digitalWrite(Right_motor_go,LOW);  //右轮后退
  digitalWrite(Right_motor_back,HIGH);
  digitalWrite(Left_motor_go,LOW);  //左轮后退
  digitalWrite(Left_motor_back,HIGH);
}

//=============================================================================
//读取各个按键需要用到这段代码
//=============================================================================
/*
void read_key()
{
    if(irrecv.decode(&results)){  //如果接收到信息
        Serial.print("code:");
        Serial.println(results.value,HEX);//results.value为16进制,unsigned long
        Serial.print("bits:");
        Serial.println(results.bits);//输出元位数
        irrecv.resume();
      } 
}
*/


void loop()
{
//  read_key();
  if(irrecv.decode(&results)){  //如果接收到信息
   switch(results.value){
     case 0xFD8877:  //前,对应2
       run();
       break;
     case 0xFD9867:  //后,对应8
       back();
       break;
     case 0xFD28D7:  //左,对应4
       left();
       break;
     case 0xFD6897:  //右,对应6
       right();
       break;
     case 0xFDA857:  //停止,对应5
       brake();
       break;
     default:
       break;
   }
  irrecv.resume();
  }
}

测试结果

  • 分别按遥控器的2,4,5,6,8,小车分别做前进,左转,停止,右转,后退动作
    注:可以在转向文件里增加延时和停止函数,可以定量运动
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论