基于Arduino的循迹小车

前言

该小车采用Arduino UNO主控制核心,通过传感器传来的信号,对当前环境作出判断,最后对电机做出相应的动作。单片机通过红外传感器检测场地黑线,从而控制电机驱动模块,改变电机转速来控制小车方向,从而达到循迹的目的。

一、系统概述1

整个系统包括Arduino UNO控制模块、电机驱动模块、循迹模块、电源和小车车体

1.工作原理

通过高发射功率红外光电二极管和高灵敏光电晶体管组成的传感器循迹模块判断黑线路径。
然后由Arduino UNO通过IO口控制L298N驱动模板改变两个直流电机的工作状态。 最后实现小车循迹。

二、循迹小车硬件

1.Arduino UNO

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YWBrmP3y-1624623473333)(C:\Users\86182\Desktop\IMG_20210622_231300_edit_482206866577982.jpg)]

2.电机模块

选用双轴直流减速马达电机

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b0NP2AiC-1624623473335)(file:///C:\Users\86182\Documents\Tencent Files\185746080\Image\C2C\7AE20E026DA4751A18C0817431F58F19.jpg)]

电机驱动电路控制小车运行方法

a1 a2 b1 b2

1 0 1 0 前进

0 1 0 1 后退

1 0 0 1 左转弯

0 1 1 0 右转弯

0 0 0 0 停止

3.电机驱动模块

L298N实物接线图及驱动原理图:

L298N是一个内部有两个H桥的驱动芯片,这样电机的运转只需要用三个信号控制:两个方向信号和一个使能信号。(输入的电压不可超过它的额定电压)
L298N芯片的工作电压需要两路:
第一路:输出供给电机回路的工作电源
第二路:输入逻辑控制回路电源5V(电源出/入)

**+12V:**该引脚接的电压是驱动模块所能输出给电机的最大电压,一般 直接接电池。12V是由L298N芯片所能接受最大电压而定,一般介入5~12V电压。在此我们接入的电压为两节18650串联的电压,即3.7+3.7=7.4V;

GND: 在该项目中GND即为电源的负极,同时要保证Arduino开发板,驱动模块等所有模块的GND连在一起才可以正常工作。在某些复杂的项目中还需要区分数字地和模拟地,在此不做详细介绍。

+5V: L298N模块内含稳压电路,在模块内部将"+12V"引脚输入的电压转化为可供开发板使用的+5V电压,一般将次输出接入到开发板为开发板供电。

L298N有两路输出,所以可以控制小车前进、后退、转弯,其中:
ENA: 代表第一路输出的电压大小。驱动模块输出电压越高,电机转速越快。
1.当其输入为0V的时候,驱动模块输出对第一路电机输出电压为0V;
2.当其输入为3.3V的时候,驱动模块对第一路电机输出电压为"+12V"引脚的输入电压。
3.由于ENA输入电压的高低控制驱动对电机的输出电压,因此当我们需要对小车运动速度进行控制的时候,一般通过PWM对"ENA"引脚进行控制。

**IN1/IN2:**这两个引脚控制电机正反转方向。

**OUT1/OUT2:**这两个引脚分别接电机的两极。

ENB,IN3/IN4,OUT3/OUT4引脚控制第二路输出,与上述ENB,IN3/IN4,OUT3/OUT4功能相似。

L298N接入直流电机的端口接法:

直流电机 旋转方式 IN1 IN2 IN3 IN4 使能端A 使能端B
正转 0 1 / / 1 /
M1 反转 1 0 / / 1 /
停止 0 0 / / 1 /
正转 / / 0 1 / 1
M2 反转 / / 1 0 / 1
停止 / / 0 0 / 1

4.循迹模块

循迹原理: 利用红外线对于不同颜色具有不同的反射性质的特点。在小车行驶过程中传感器的红外发射二极管不断发射红外光,当红外光遇到白色地面时发生漫反射,红外对管接收管接收反射光;如果遇到黑线则红外光被吸收,则红外管接收不到信号。
红外对管采集回来的信号通过2路循迹传感器模块里面的LM339比较器后输出高或低电平,从而实现信号的检测。

所谓的差速,是指左右两车轮的速度差,假如左边车轮比右边快,则小车会偏向右。同时,左边的车轮转速比右的满,那么小车会向左边转动。
目前主要有以下两种方式:
小车向左转,可以左轮停止,左轮继续转动,这样可实现左转,这种方式实现小角度的转弯,在角度不大时可采用此种方式。
小车向左转,可以是左轮反转,右轮正转,这样可以实现大角度的左转,甚至可以进行原地打转。
同理可推出小车如何向右转向。

采用TCRT5000

5.PWM调速

脉宽调制(PWM)基本原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小,也可改变输出频率。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BZ1MZfqG-1624623473340)(C:\Users\86182\Desktop\20170831114514554.gif)]

三、程序模块

#define STOP      0 //停止
#define RUN       1 //前进
#define BACK      2 //后退
#define LEFT      3 //左转
#define RIGHT     4 //右转
int a1 = 6;//左电机1
int a2 = 7;//左电机2
int b1 = 8;//右电机1
int b2 = 9;//右电机2
int sensor1 = 5; //从车头方向的最右边开始排序 探测器
int sensor2 = 4;
int sensor3 = 3;
int sensor4 = 2;
int leftPWM = 10;//L298N使能端左
int rightPWM = 11;//L298N使能端右
void setup()
{Serial.begin(9600);//电机控制引脚初始化pinMode(a1, OUTPUT);pinMode(a2, OUTPUT);pinMode(b1, OUTPUT);pinMode(b2, OUTPUT);pinMode(leftPWM, OUTPUT);pinMode(rightPWM, OUTPUT);pinMode(sensor1, INPUT//寻迹模块引脚初始化pinMode(sensor2, INPUT);pinMode(sensor3, INPUT);pinMode(sensor4, INPUT);
}
void loop()
{tracing();
}
void Work(int c,int value)
{analogWrite(leftPWM, value);  //设置PWM输出,设置速度analogWrite(rightPWM, value);switch(c){case RUN:Serial.println("RUN"); //前进输出状态digitalWrite(a1, HIGH);digitalWrite(a2, LOW);digitalWrite(b1, HIGH);digitalWrite(b2, LOW);break;case BACK:Serial.println("BACK"); //后退输出状态digitalWrite(a1, LOW);digitalWrite(a2, HIGH);digitalWrite(b1, LOW);digitalWrite(b2, HIGH);break;case LEFT:Serial.println("LEFT"); //左转输出状态digitalWrite(a1, HIGH);digitalWrite(a2, LOW);digitalWrite(b1, LOW);digitalWrite(b2, HIGH);break;case RIGHT:Serial.println("RIGHT"); //右转弯输出状态digitalWrite(a1, LOW);digitalWrite(a2, HIGH);digitalWrite(b1, HIGH);digitalWrite(b2, LOW);break;default:Serial.println("STOP"); //停止输出状态digitalWrite(a1, LOW);digitalWrite(a2, LOW);digitalWrite(b1, LOW);digitalWrite(b2, LOW);}
}
void tracing()
{int d[4];d[0] = digitalRead(5);d[1] = digitalRead(4);d[2] = digitalRead(3);d[3] = digitalRead(2);if(!d[0] && !d[1] && !d[2] && !d[3]) //左右都没有检测到黑线{Work(RUN, 200);}if(d[0] || d[1]) //右边检测到黑线{Work(RIGHT, 150);}if(d[2] || d[3]) //左边检测到黑线{Work(LEFT, 150);}if(d[0] && d[3]) //左右都检测到黑线是停止{Work(STOP, 0);while(1);}Serial.print(d[0]);Serial.print("---");Serial.print(d[1]);Serial.print("---");Serial.print(d[2]);Serial.print("---");Serial.println(d[3]);
}

基于Arduino的循迹小车相关推荐

  1. 基于arduino的循迹小车(含有PID算法)

           循迹小车一般分为两方面:一方面是简单的闭环赛道只有直道和弯道,另一方面是毕设类型的包括一些元素:90度弯道.十字道路.S形弯道等. 1.CSDN下载: 含有PID:https://dow ...

  2. 基于CW32遥控循迹小车

    题目要求 1.完成小车组装: 2.小车具有循迹功能: 3.小车具有遥控功能: 4.可显示电池电压及左右轮分别的转速. 题目分析 由题可知小车大致可分为主控.显示.蓝牙.循迹四个部分 主控我选用的是CW ...

  3. arduino黑线循迹小车程序_循迹小车:给我一条线,我能自己走完全程

    在老少通吃的智能小车到底是什么呢?科普来喽!一文中,我们介绍了智能小车的分类及组成,为什么循迹小车能够追踪黑线轨迹呢? 智能小车在画有黑线的白纸 "路面"上行驶,由于黑线和白纸对光 ...

  4. 基于Arduino3路循迹小车

    本人西伯利亚蟑螂,最近抽空回顾了一下arduino,顺手做了个arduino循迹小车 (条件所限我的小车为两驱三路循迹模块小车) 话不多说,先上干货. #define STOP      0 #def ...

  5. Arduino uno循迹小车总结

    1.HW-096 4路循迹模块(红外发射器和红外接收器) 输出信号:TTL电平(可直接连接单片机I/0号,感应到传感器反射回来的红外光时,红指示灯亮,输出低电平:没有红外光时,指示灯不亮,输出高电平. ...

  6. 【Arduino】循迹小车

    这是一个会炫酷倒车并180°摆头的小车 一.小车组件 接了3个红外探测,一个稳压电路,一个驱动,和一个arduino主板,四个车轮和车轮电机. 二.小车展示 1.小车样子 2.倒车动作 下面是小车代码 ...

  7. 【FPGA-Spirit_V2】基于FPGA的循迹小车-小精灵V2开发板

  8. 基于arduino的5路循迹小车(1)

    基于arduino的5路循迹小车(1) 初步小车运动 1.硬件选用 1.开发板使用arduino 2560 2.电机驱动板使用 大功率电机驱动板(PWM由两个端子控制) 3.电源12V锂电池 4.降压 ...

  9. 基于arduino的5路循迹小车(2)

    基于arduino的5路循迹小车(2) 小车5路红外循线 接第一篇链接 https://blog.csdn.net/weixin_45984029/article/details/103437347 ...

  10. 基于arduino的5路循迹小车(4)与舵机控制板的通信控制

    基于arduino的5路循迹小车(4) arduino与舵机控制板的通信控制 以及语音播报模块 接第一篇链接 https://blog.csdn.net/weixin_45984029/article ...

最新文章

  1. 欧盟最新《AI网络安全政策发展框架》
  2. 每日一篇——Fed Unveils Major Expansion of Market Intervention
  3. SSRS Report Knowledge Base
  4. 在服务器搭建深度学习环境随笔
  5. linux-用户管理190919
  6. springboot实现第三方qq登入
  7. 1. Packet sniffers (包嗅探器 14个)
  8. php元换成万元,1000元怎么换算成万元(元怎么换成万元)
  9. 智能实验室管理系统的现状怎么样
  10. 2019圣诞节 — 徒步看风景
  11. 配置postfix邮件监控
  12. 用php计算自由落体,JavaScript模拟自由落体
  13. Fofa 下载与使用 网络空间搜索引擎
  14. 根据树状数据渲染树状下拉选项
  15. 【计算机网络】计算机网络、互联网、互连网、因特网、万维网
  16. python制作个人名片_python制作名片
  17. 2.4gwifi最高下载速度_2.4gwifi最高下载速度
  18. 【历史上的今天】8 月 30 日:首台通用电子计算机的发明者诞生;谷歌推出第一个涂鸦
  19. python开发一个web项目得需要多少行代码_用Python写个迷你出门问问|10几行代码搞定...
  20. Detr空间注意力热图及语义注意力热图可视化

热门文章

  1. JAVA JSP网上订餐系统JSP餐厅点餐系统源码JSP点餐系统JSP网上订餐系统JSP在线订餐
  2. ArcGIS的 高斯-克吕格 投影坐标系
  3. 使用miniSipServer为中小企业搭建VOIP服务器
  4. 现代控制理论(二)李雅普诺夫稳定性分析
  5. [科研自学神器]中国大学MOOC下载器
  6. nodejs 下载url文件
  7. 常用的SQL多表连接查询
  8. 业余剪辑——从拍摄到剪辑到加字幕
  9. 一个简单的WEB网页制作作业——黑色的山河旅行社网站(5个页面)HTML+CSS+JavaScript
  10. Matlab和Fluent联合仿真实现涡激振动