基于arduino的5路循迹小车(2)
基于arduino的5路循迹小车(2)
小车5路红外循线
接第一篇链接 https://blog.csdn.net/weixin_45984029/article/details/103437347
1.硬件选用
5个红外循迹模块(推荐这种,性价比较高)
2.接线
VCC接开发板3.3V
GND接开发板GND
D0接开发板信号口(具体位置对应代码)
A0不接
3.代码
int Left_motor_go1 = 24; //左电机前进 AIN1
int Left_motor_back1 = 25; //左电机后退 AIN2int Right_motor_go1 = 22; //右电机前进 BIN1
int Right_motor_back1 = 23; //右电机后退 BIN2int Left_motor_pwm1 = 3; //左电机控速 PWMA1
int Right_motor_pwm1= 5; //右电机控速 PWMB1
int Left_motor_pwm2 = 4; //左电机控速 PWMA2
int Right_motor_pwm2= 6; //右电机控速 PWMB2//循迹红外引脚定义
//TrackSensorLeftPin1 TrackSensorLeftPin2 TrackSensorMid TrackSensorRightPin1 TrackSensorRightPin2
// A1 A2 A3 A4 A5
const int TrackSensorLeftPin1 = A1; //定义第一个循迹红外传感器引脚为A1
const int TrackSensorLeftPin2 = A2; //定义第二个循迹红外传感器引脚为A2
const int TrackSensorMid = A3; //定义第三个循迹红外传感器引脚为A3
const int TrackSensorRightPin1 = A4; //定义第四个循迹红外传感器引脚为A4
const int TrackSensorRightPin2 = A5; //定义第五个循迹红外传感器引脚为A5//定义各个循迹红外引脚采集的数据的变量
int SLL;
int SL;
int SM;
int SR;
int SRR;void setup()
{//初始化电机驱动IO口为输出方式pinMode(Left_motor_go1, OUTPUT);pinMode(Left_motor_back1, OUTPUT);pinMode(Right_motor_go1, OUTPUT);pinMode(Right_motor_back1, OUTPUT);//定义四路循迹红外传感器为输入接口pinMode(TrackSensorLeftPin1, INPUT);pinMode(TrackSensorLeftPin2, INPUT);pinMode(TrackSensorMid,INPUT);pinMode(TrackSensorRightPin1, INPUT);pinMode(TrackSensorRightPin2, INPUT);//四路循迹红外传感器初始化为高电平digitalWrite(TrackSensorLeftPin1, HIGH);digitalWrite(TrackSensorLeftPin2, HIGH);digitalWrite(TrackSensorMid,HIGH);digitalWrite(TrackSensorRightPin1, HIGH);digitalWrite(TrackSensorRightPin2, HIGH);
}void run(int left_speed, int right_speed)
{//左电机前进digitalWrite(Left_motor_go1, LOW); //左电机前进使能digitalWrite(Left_motor_back1, HIGH); //左电机后退禁止analogWrite(Left_motor_pwm1, LOW);analogWrite(Left_motor_pwm2, left_speed);//右电机前进digitalWrite(Right_motor_go1, LOW); //右电机前进使能digitalWrite(Right_motor_back1, HIGH); //右电机后退禁止analogWrite(Right_motor_pwm1, LOW);analogWrite(Right_motor_pwm2, right_speed);
}void left(int left_speed, int right_speed)
{//左电机后退digitalWrite(Left_motor_go1, HIGH); //左电机前进禁止digitalWrite(Left_motor_back1,LOW); //左电机后退禁止analogWrite(Left_motor_pwm2, left_speed);analogWrite(Left_motor_pwm1,LOW);//右电机前进digitalWrite(Right_motor_go1, LOW); //右电机前进使能digitalWrite(Right_motor_back1, HIGH); //右电机后退禁止analogWrite(Right_motor_pwm2, LOW);analogWrite(Right_motor_pwm1, right_speed);
}void right(int left_speed, int right_speed)
{//左电机前进digitalWrite(Left_motor_go1, LOW); //左电机前进使能digitalWrite(Left_motor_back1, HIGH); //左电机后退禁止analogWrite(Left_motor_pwm2, LOW);analogWrite(Left_motor_pwm1, left_speed);//右电机后退digitalWrite(Right_motor_go1, HIGH ); //右电机前进禁止digitalWrite(Right_motor_back1,LOW); //右电机后退禁止analogWrite(Right_motor_pwm2, right_speed);analogWrite(Right_motor_pwm1, LOW );}void back(int left_speed, int right_speed)
{//左电机后退digitalWrite(Left_motor_go1, HIGH); //左电机前进禁止digitalWrite(Left_motor_back1, LOW); //左电机后退使能analogWrite(Left_motor_pwm1, left_speed);analogWrite(Left_motor_pwm2, LOW);//右电机后退digitalWrite(Right_motor_go1, HIGH); //右电机前进禁止digitalWrite(Right_motor_back1, LOW); //右电机后退使能analogWrite(Right_motor_pwm1, right_speed);analogWrite(Right_motor_pwm2, LOW);
}void bank(int left_speed, int right_speed)//惯性停车
{//左电机空digitalWrite(Left_motor_go1, LOW); //左电机前进禁止digitalWrite(Left_motor_back1, LOW); //左电机后退禁止analogWrite(Left_motor_pwm1, left_speed);analogWrite(Left_motor_pwm2, left_speed);//右电机空digitalWrite(Right_motor_go1, LOW); //右电机前进禁止digitalWrite(Right_motor_back1,LOW); //右电机后退禁止analogWrite(Right_motor_pwm1, right_speed);analogWrite(Right_motor_pwm2, right_speed);
}
void loop()
{//检测到黑线时循迹模块相应的指示灯灭,端口电平为HIGH//未检测到黑线时循迹模块相应的指示灯亮,端口电平为LOWSLL = digitalRead(TrackSensorLeftPin1);SL = digitalRead(TrackSensorLeftPin2);SM = digitalRead(TrackSensorMid);SR = digitalRead(TrackSensorRightPin1);SRR = digitalRead(TrackSensorRightPin2);//循迹if( SM == HIGH ){run(45,37); }if( SL == HIGH && SM == LOW){left(35,57);}if( SLL == HIGH && SM == LOW){left(35,57);}if( SR == HIGH && SM == LOW){right(50,32);}if( SRR == HIGH && SM == LOW){right(50,32);}if(SR == HIGH && SRR == HIGH){right(50,32);}if(SL == HIGH && SLL == HIGH){left(30,57);}if(SRR == HIGH && SR == HIGH && SM == HIGH && SL == HIGH){right(50,32);}if(SM == HIGH && (SL == HIGH && SLL == HIGH) || (SR == HIGH && SL == HIGH) || (SR == HIGH && SRR == HIGH)){run(45,37);}
}
4.测试小车
按正确连线,已经可以正常循迹了
代码中的PWM数值可根据实际情况更改(每个电机各有差异)
基于arduino的5路循迹小车(2)相关推荐
- 基于arduino的5路循迹小车(1)
基于arduino的5路循迹小车(1) 初步小车运动 1.硬件选用 1.开发板使用arduino 2560 2.电机驱动板使用 大功率电机驱动板(PWM由两个端子控制) 3.电源12V锂电池 4.降压 ...
- 基于arduino的5路循迹小车(4)与舵机控制板的通信控制
基于arduino的5路循迹小车(4) arduino与舵机控制板的通信控制 以及语音播报模块 接第一篇链接 https://blog.csdn.net/weixin_45984029/article ...
- 基于arduino的5路循迹小车(3)
基于arduino的5路循迹小车(3) 使用红外模块的定位停车 以及超声波避障 接第一篇链接 https://blog.csdn.net/weixin_45984029/article/details ...
- 基于Arduino控制的网格循迹小车
1.元器件选型 电子元器件清单 序号 标号 名称 规格 数量 1 / Arduino板 / 1 2 / 驱动模块 LM298N 1 3 / 巡线模块 5 机械零部件清单 序号 标号 名称 规格 数量 ...
- ARDUINO NANO 的 PID 循迹小车
[Arduino项目]使用 ARDUINO NANO 的 PID 循迹小车 -------------------------------------------------------------- ...
- 基于Arduino3路循迹小车
本人西伯利亚蟑螂,最近抽空回顾了一下arduino,顺手做了个arduino循迹小车 (条件所限我的小车为两驱三路循迹模块小车) 话不多说,先上干货. #define STOP 0 #def ...
- 基于STM32F103C8T6的六路寻迹小车制作攻略
文章目录 前言 一.所需材料 二.组装步骤 三.代码讲解 总结 前言 寻迹小车是一个入门级别的东西,可以通过制作一辆寻迹小车熟悉单片机的一些基础操作,比如运用GPIO口.串口通信等单片机知识.寻迹我采 ...
- 基于STM32开发板的循迹小车设计
STM32的简单应用之循迹小车 前言 智能寻迹基于自动引导机器人系统,可以实现小车自动识别路线.智能寻迹小车运用传感器.单片机.电机驱动及自动控制等技术实现,管理时自动寻迹导航.该技术已经应用于无人驾 ...
- 基于STM32芯片的四驱循迹小车
循迹小车包括三个基本模块: 1.宏定义模块 2.电机驱动模块 3.红外循迹模块 4.PWM调速模块 我将代码部分分为4个模块进行模块化编程:interface(各个引脚口的宏定义,方便记忆).moto ...
最新文章
- shell访问php文件夹,Shell获取某目录下所有文件夹的名称
- 融云发送图片消息_发送消息
- 二分图专题系列各大知识点总结(匈牙利,染色法,最大独立集,最小点覆盖,最小路径覆盖)
- 真实版删库跑路,宕机36小时市值蒸发9亿!
- Pixel 3的超分辨变焦技术
- Linux加密框架 crypto 哈希算法举例 MD5
- Matlab仿真炮弹飞行轨迹——探究射弹参数对飞行轨迹的影响
- SAP License:物料分类帐-上一期间结算错误处理办法
- Xshell 安装教程以及踩过的坑
- 免费OCR文字识别软件,识别图片文字
- 一款ModbusRTU/TCP485串口协议调试软件工具绿色版免安装
- 常用 ajax js 表单
- 87个电影调色PR预设包
- 遍历vad二叉树来遍历进程里的模块
- 程控交换机、电话交换机、什么是交换机、网络交换机
- 微软Azure组面试(部分)
- RK系列(RK3568) 收音机tef6686芯片驱动,i2c驱动
- Servlet什么时候实例化?destory到底摧毁的是什么?
- (姊妹仨)BlazePalm: 先检手掌再检骨架,虚拟合成数据助力 2.5D 信息输出
- CAD图纸可以转换成哪些格式呢?