Arduino智能小车设计(二)

177
0
2020年12月15日 09时08分

由于学校这几天在开运动会,所以刚好有空闲的时间来好好琢磨这些原件以及认认真真完成这几篇博客。。。。
所以,这几天就好好研究这些电子元件

 

那怎么具体研究呢,我想大概可以从这几个方面入手。

 

1.元件的介绍
2.作用
3.连接方式
4.所控代码

 

因为我也算是萌新,所以这个过程大概会比较复杂,但是我会将我所不懂得点着重标记下来。如果你也是小萌新,也可以参考参考我所遇到的问题;如果你是大佬,也可以给些不错的意见。

 

那么,正式开始吧

 

1.Arduino 板的说明

 

博主用的是Arduino Mega2560主板,而在网上找到的图的主板是Arduino UNO板。两个板该有的功能都是基本一致的,不同的是Mega2560主板应该更强大,为什么这么说呢,见图。

 

微信图片_20201210223900

 

微信图片_20201210223904

 

虽然Mega2560主板更好一点,但是毕竟网上的方便,而且两个板能实现的功能基本一致,所以就拿上图UNO板来说明了。

 

1607611208(1)

 

为什么先介绍普通的主板呢,在我看来,如果将Arduino小车比作一个人的话,那么主板所对应的就是人脑,也就是最最最基本的东西,也是最最最重要的东西。(我也是大概玩了一周的板才开始玩一些元件的)

 

那么主板的作用呢(与电脑主板差不多相同吧):


1,将不同电压的用电器连接在一起,并提供相应的电源;
2,将不同功能的用电器连接在一起,使它们相互传递信息;
3,接收外来数据,并给其它设备处理;
4,将内部设备处理的数据集中,并传递给外界;
5,平衡电脑中的数据、能源、速度、温度、电流等

 

2.HC-SR04超声波测距模块

 

介绍:一款利用超声波测距离的传感器,多应用于 机器人避开障碍物,距离测量。

 

基本工作原理:

 

(1)采用 IO 口 TRIG 触发测距,给最少 10us 的高电平信呈。
(2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回
(3)有信号返回,通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回 的时间。测试距离=(高电平时间*声速(340M/S))/2;

 

微信图片_20201210224037

 

使用代码:

 

int inputPin = 8; // 定义超声波信号接收接口
int outputPin = 9; // 定义超声波信号发出接口
void setup()
{
  Serial.begin(9600);//设置串口波特率为9600
  pinMode(inputPin, INPUT);
  pinMode(outputPin, OUTPUT);
}

void loop()

{
  digitalWrite(outputPin, LOW); // 使发出发出超声波信号接口低电平2ms
  delayMicroseconds(2);
  digitalWrite(outputPin, HIGH); // 使发出发出超声波信号接口高电平10ms,这里是至少10μs
  delayMicroseconds(10);
  digitalWrite(outputPin, LOW); // 保持发出超声波信号接口低电平
  int distance = pulseIn(inputPin, HIGH); // 读出脉冲时间
  distance = distance / 58; // 将脉冲时间转化为距离(单位:厘米)
  Serial.print(distance);
  Serial.println("cm");//向串口监视器中输出距离信息
  delay(500);//刷新时间500ms,也就是0.5s
}

 

这是在度娘上找的代码,说实话我一开始也挺萌比的。查找了相关的资料,才有了一定的认识。
在介绍代码之前,首先会说明HC-SR04上的引脚。

 

引脚说明:

 

VCC – 供5V电源
TRIG – 触发控制信号输入 连9号引脚
ECHO – 回响信号输出等四个接口端 连8号引脚
GND – 为地线

 

代码说明:

 

前面的代码中规中矩,可以很好地理解,但是到loop函数中:

 

  digitalWrite(outputPin, LOW); // 使发出发出超声波信号接口低电平2ms
  delayMicroseconds(2);
  digitalWrite(outputPin, HIGH); // 使发出发出超声波信号接口高电平10ms,这里是至少10μs
  delayMicroseconds(10);
  digitalWrite(outputPin, LOW); // 保持发出超声波信号接口低电平

 

这一段我就不太理解了,虽然能看懂意思,但具体为什么这么做却不清楚了。在度娘上查找资料,这一段的主要意思是启动超声波传感器

 

下来就是函数:pulseIn() //注意:第一个l是小写的“L”,第二个l是大写的“i”

 

介绍:读引脚的脉冲信号,被读取的脉冲信号可以使HIGH或LOW。例如我们要检测HIGH脉冲信号,Arduino将在引脚变为高电平时开始计时,当引脚变为低电平时停止计时,并返回脉冲持续的时长(微秒)。如果在超时时间内没有读到脉冲信号,则返回0。

 

有了这个函数,就可以测量脉冲时间,从而算出距离。

 

线路图:

 

3.TCRT5000新款寻迹模块

 

介绍:一块利用红外线反射的寻迹传感器。

 

基本工作原理:接好VCC(3.3V-5V)和GND,TCRT5000传感器的红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,红外接收管一直处于关断状态,此时模块的输出端为低电平,指示二极管一直处于熄灭状态;被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,红外接收管饱和,此时模块的输出端为高电平,指示二极管被点亮。OUT输出接口可以与单片机IO口直接相连,一般接外部中断。接收红外信号强度,常表现在反射面的颜色(反射率)、形状和反射面接收管的距离等方面。

 

int led=13;
int buttonpin=9;
int val;
void setup()
{
  pinMode(led,OUTPUT);
  pinMode(buttonpin,INPUT);
  Serial.begin(9600);
}
void loop()
{
  val=digitalRead(buttonpin);
  Serial.println(val);
  if(val==HIGH)
  {
    digitalWrite(led,HIGH);
  }
  else
  {
    digitalWrite(led,LOW);
  }
}

 

这个代码相对看的比较简单,就是在传感器无遮拦的情况下,输入led亮,被遮住的情况下,LED灯熄灭。

 

连接示意图:

 

微信图片_20201210224132

 

我的想法:

 

1.在超声波测距那块,一直不明白代码是怎么利用传感器的,也是通过网上大量的解释,从传感器工作的原理到代码的一行行解释,才算稍微理解了一点。(说稍微一点也不为过,因为如果是我,最简单的代码估计我都写不出来)
2.同样,在嵌入式学习中,我个人认为一定要软硬都得玩。既要知道硬件的工作原理和连接方式,也要清楚软件代码中每一行代码的目的,这样才会有更深一层的提高。如果只是光玩一种的话,我自己感觉还是挺枯燥的。。。。

发表评论

后才能评论