Arduino小车-红外遥控实验
介绍
- 本文介绍红外遥控功能
所需硬件
- 红外遥控器
- 红外接收头
- Arduino开发板
连接图
- 红外接收头连接
注:该图的遥控接收头是说明原理,和实际模块样子不一样。红线和黑线分别连接5V和GND,绿线Data连接Arduino开发板的11脚
- 电机连接参考小车运动
样例代码
注:如果库里面没有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,小车分别做前进,左转,停止,右转,后退动作
注:可以在转向文件里增加延时和停止函数,可以定量运动
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号