<>一,所需元件

arduino nano一个(Uno太大,所以选择了体积较小的Nano)
L298N电机驱动模块一个
直流减速电机两个
万向轮一个
亚克力板
轮胎两个
TCRT5000寻迹传感器四个
(速成可直接跳到三,连线部分)

<>二,元器件的详细介绍

(1)arduino nano

下面看一张Nano的图,比较生涩难懂,没关系,我也没搞懂。在本项目中只需要大家知道GDN(Ground)是接地的,3v3和5v是输出电压的(给Nano板通电及能用)。图中曲线的引脚(D3,D5,D6,D9,D10,D11)可进行PWM输出。(通俗的讲:这几个引脚可以输出低电压到高电压中间的任何一个值,而其他的引脚要么输出高电压,要么输出低电压)

(2)L298N电机驱动模块
具体长这样(图来自tb)
注意红色圈出的地方:写有ENA,IN1,IN2,IN3,IN4,ENB。ENA相当于EN1,EN2的总开关,ENB对应IN3,IN4的总开关。例:让ENA为高电平,IN1,IN2脚位给什么信号就是什么信号,若ENA为低电平,IN1,IN2无论给什么信号这两个脚位都是低电平。(
注:仅是可以这样理解,ENA和ENB有它专门的名字叫使能)
(3)直流减速电机,万向轮,亚克力板

我用的是这样的(图来自tb),当然也还有很多直流电机供大家选择,图示应该是最便宜的了。
(4)TCRT5000寻迹传感器

注意到图中有四个引脚,该项目中要用到A0,VCC,GND,三个引脚,VCC和GND为正负极,用来供电,A0来输出检测到的信息。(D0没有用到,也不用接任何线)。

<>三,连线

TCRT5000寻迹传感器放在小车的前端,从左到右依次编号为Lb,La,Ra,Rb。Lb,La,Ra,Rb的vcc连arduino板的5V,GND连arduino板的GND,其A0脚位分别连arduino的A0,A1,A2,A3脚位。这点在程序中可以清晰的看到。

L298N电机驱动模块的连线也在程序中有所表达,例,ENA=12代表ENA连到arduino的12脚位。OUT1,与OUT2分别连电机的上下端。(这里连的顺序不一样程序也会写的不同)。这里可以自行尝试。

<>四,程序代码

上传程序之前首先在工具这里把将开发板选择为 Arduino Nano,下面的处理器选项也需要相应改动,一般情况是选择ATmega328P(Old
Bootloader),如果是新版的Nano开发板就选择另外两个试试。
int ENA=12,IN1=9,IN2=6,IN3=5,IN4=3,ENB=2; int La,Ra,Lb,Rb; void setup() {
//Serial.begin(9600); pinMode(2,OUTPUT); pinMode(3,OUTPUT); pinMode(5,OUTPUT);
pinMode(6,OUTPUT); pinMode(9,OUTPUT); pinMode(12,OUTPUT); } void loop() {
digitalWrite(ENA,HIGH); digitalWrite(ENB,HIGH); La=analogRead(A0); Ra=analogRead
(A1); Rb=analogRead(A2); Lb=analogRead(A3); /*Serial.print(Lb);
Serial.print(";"); Serial.print(La); Serial.print(";"); Serial.print(Ra);
Serial.print(";"); Serial.println(Rb); delay(300);*/ if(La<=300 && Ra<=320)
//均未检测到黑线 straight(); if(La>=Ra && Lb<=300 && Rb<=300)//左侧检测到黑线,右侧没有,所以要左转
straightturnleft(); if(La<=Ra && Lb<=300 && Rb<=300)//右侧检测到黑线,左侧没有,所以右转
straightturnright(); if(La>=300 && Ra>=300)//均检测到黑线 straight(); if(Rb>=300)//大右转
turnright(); if(Lb>=300)//大左转 turnleft(); } void straight() { analogWrite(IN1,0)
;//左正 analogWrite(IN2,60); analogWrite(IN3,60);//右正 analogWrite(IN4,0); } void
straightturnleft() { analogWrite(IN1,0);//左正 analogWrite(IN2,60); analogWrite(
IN3,100);//右正 analogWrite(IN4,0); } void straightturnright() { analogWrite(IN1,0
);//左正 analogWrite(IN2,100); analogWrite(IN3,60);//右正 analogWrite(IN4,0); } void
turnright() { analogWrite(IN1,0);//左正 analogWrite(IN2,150); analogWrite(IN3,60);
//右正 analogWrite(IN4,0); } void turnleft() { analogWrite(IN1,0);//左正 analogWrite
(IN2,60); analogWrite(IN3,150);//右正 analogWrite(IN4,0); }
<>五,一些说明

该代码块中数字300和320是我测得的一个相对可以准确区分是否检测到黑线的值,不一定非常准确,感兴趣的同学也可以使用串口监视器自己测。
将代码中注释掉的那几行重新启用就可进行串口监视了,导入程序后点击右上角的小放大镜查看串口。(Serial打头的那几行)
if(La<=300 && Ra<=320)//均未检测到黑线 straight(); if(La>=Ra && Lb<=300 && Rb<=300)
//左侧检测到黑线,右侧没有,所以要左转 straightturnleft(); if(La<=Ra && Lb<=300 && Rb<=300)
//右侧检测到黑线,左侧没有,所以右转 straightturnright(); if(La>=300 && Ra>=300)//均检测到黑线 straight
(); if(Rb>=300)//大右转 turnright(); if(Lb>=300)//大左转 turnleft();

这是用arduino做的第一个项目,不出意外的话,也应该是最后一个。最近在学python,也希望各位不忘初心,继续加油。忙于学业,更新随缘。最后arduino在行业中算是较为低端的一种语言,在高中生中比较流行,大家稍作了解即可,不用对此特别深入。用来参加比赛是个不错的选择,但尽量不要在arduino上花费太多的时间。

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:766591547
关注微信