一、所需元件有一个arduino Nano (因为Uno太大,所以选择了体积小的nano ) ) ) ) ) )。
一个L298N电机驱动模块
2个直流减速电机
只有一个脚轮
丙烯板
两个轮胎
4个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表示与arduino的ENA连接的第12脚位。 在OUT1、OUT2上分别连接电机的上下端。 (在这里,即使连的顺序不同,也会写程序。 这里你可以自己试试。
四、程序代码在上传程序前首先在工具这里选择开发板为Arduino Nano。 下面的处理器选项也需要相应地进行更改。 一般选择atmega328p(oldbootloader )。 如果是新版的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,输出; }void loop () digitalwrite ) ) ENA,HIGH ); 数字写入(enb,HIGH ); la=分析读(A0 ); ra=模拟读(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; 延迟(300; (/if ) la=300ra=320 ) /都是黑线straight ); if(la=ralb=300Rb=300(/左侧检测到黑线,右侧没有,因此左转straightturnleft ); if(la=ralb=300Rb=300(/右侧检测到黑线,左侧没有,所以向右走); if(la=300ra=300 ) /均为黑线straight ); if(Rb=300 ) /大右转turnright ); if(lb=300(//大转弯turnleft ); }void straight () analog write (in1,0 ); //左正analog write (in2,60 ); analog write (in3,60 ); //右正分析写入(in4,0 ); }void straightturnleft () analog write (in1,0 ); //左正analog write (in2,60 ); analog write (in3,100 ); //右正分析写入(in4,0 ); }void straightturnright () analog write (in1,0 ); //左正模拟写入(in2,100 ); analog write (in3,60 ); //右正分析写入(in4,0 ); }void turnright () analog write (in1,0 ); //左正analog write (in2,150 ); analog write (in3,60 ); //右正分析写入(in4,0 ); }void turnleft () analog write (in1,0 ); //左正analog write (in2,60 ); analog write (in3,150 ); //右正分析写入(in4,0 ); )五、这个码块中的数字300和320是我测量的能够区分是否比较准确地检测到黑线的值,并不一定非常准确。 感兴趣的学生还可以使用串行监视器自己进行测量。
重新启用代码中的注释行可以监视串行端口。 导入程序后,单击右上角的放大镜以显示串行端口。 (Serial的前几行) ) ) ) ) )。
if(la=300ra=320 ) /均为黑线straight ); if(la=ralb=300Rb=300(/左侧检测到黑线,右侧没有,因此左转straightturnleft ); if(la=ralb=300Rb=300(/右侧检测到黑线,左侧没有,所以向右走); if(la=300ra=300 ) /均为黑线straight ); if(Rb=300 ) /大右转turnright ); if(lb=300(//大转弯turnleft ); 这是我在arduino做的第一个项目,没想到应该是最后一个。 最近在学习python,希望你不要忘记初心,加油。 忙于学业,更新缘分。 Arduino是参加比赛的好选择。