Arduino智能小车设计(二)

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

那怎么具体研究呢,我想大概可以从这几个方面入手。
1.元件的介绍
2.作用
3.连接方式
4.所控代码

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

那么,正式开始吧

1.Arduino 板的说明

博主用的是Arduino Mega2560主板,而在网上找到的图的主板是Arduino UNO板。两个板该有的功能都是基本一致的,不同的是Mega2560主板应该更强大,为什么这么说呢,见图。
在这里插入图片描述
在这里插入图片描述
虽然Mega2560主板更好一点,但是毕竟网上的方便,而且两个板能实现的功能基本一致,所以就拿上图UNO板来说明了。

数字名称+作用
1电源USB:Arduino板可以通过使用计算机上的USB线供电。你需要做的是将USB线连接到USB接口。
2电源(桶插座):Arduino板可以通过将其连接到电影插口直接从交流电源供电。
3稳压器:稳压器的功能是控制提供给Arduino板的电压,并稳定处理器和其他元件使用的直流电压。
4晶体振荡器:晶振帮助Arduino处理时间问题。Arduino如何计算时间?答案是,通过使用晶体振荡器。在Arduino晶体顶部打印的数字是16.000H9H。它告诉我们,频率是16,000,000赫兹或16MHz。
5,17Arduino重置:你可以重置你的Arduino板,例如从一开始就启动你的程序。可以通过两种方式重置UNO板。首先,通过使用板上的复位按钮(17)。其次,你可以将外部复位按钮连接到标有RESET(5)的Arduino引脚。
6,7,8,9引脚(3.3,5,GND,Vin):①3.3V(6) - 提供3.3输出电压 ②5V(7) - 提供5输出电压 ③使用3.3伏和5伏电压,与Arduino板一起使用的大多数组件可以正常工作。 ④GND(8)(接地) - Arduino上有几个GND引脚,其中任何一个都可用于将电路接地。 ⑤VVin(9) - 此引脚也可用于从外部电源(如交流主电源)为Arduino板供电。
10模拟引脚:Arduino UNO板有六个模拟输入引脚,A0到A5。这些引脚可以从模拟传感器(如湿度传感器或温度传感器)读取信号,并将其转换为可由微处理器读取的数字值。
11微控制器:每个Arduino板都有自己的微控制器(11)。你可以假设它作为板的大脑。Arduino上的主IC(集成电路)与板对板略有不同。微控制器通常是ATMEL公司的。在从Arduino IDE加载新程序之前,你必须知道你的板上有什么IC。此信息位于IC顶部。有关IC结构和功能的更多详细信息,请参阅数据表。
12ICSP引脚:大多数情况下,ICSP(12)是一个AVR,一个由MOSI,MISO,SCK,RESET,VCC和GND组成的Arduino的微型编程头。它通常被称为SPI(串行外设接口),可以被认为是输出的“扩展”。实际上,你是将输出设备从属到SPI总线的主机。
13电源LED指示灯:当你将Arduino插入电源时,此LED指示灯应亮起,表明你的电路板已正确通电。如果这个指示灯不亮,那么连接就出现了问题。
14TX和RX LED:在你的板上,你会发现两个标签:TX(发送)和RX(接收)。它们出现在Arduino UNO板的两个地方。首先,在数字引脚0和1处,指示引脚负责串行通信。其次,TX和RX LED(13)。发送串行数据时,TX LED以不同的速度闪烁。闪烁速度取决于板所使用的波特率。RX在接收过程中闪烁。
15数字I/O:Arduino UNO板有14个数字I/O引脚(15)(其中6个提供PWM(脉宽调制)输出),这些引脚可配置为数字输入引脚,用于读取逻辑值(0或1) ;或作为数字输出引脚来驱动不同的模块,如LED,继电器等。标有“〜”的引脚可用于产生PWM。
16AREF:AREF代表模拟参考。它有时用于设置外部参考电压(0至5伏之间)作为模拟输入引脚的上限。

为什么先介绍普通的主板呢,在我看来,如果将Arduino小车比作一个人的话,那么主板所对应的就是人脑,也就是最最最基本的东西,也是最最最重要的东西。(我也是大概玩了一周的板才开始玩一些元件的)
那么主板的作用呢(与电脑主板差不多相同吧):
1,将不同电压的用电器连接在一起,并提供相应的电源;
2,将不同功能的用电器连接在一起,使它们相互传递信息;
3,接收外来数据,并给其它设备处理;
4,将内部设备处理的数据集中,并传递给外界;
5,平衡电脑中的数据、能源、速度、温度、电流等

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

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

基本工作原理:
(1)采用 IO 口 TRIG 触发测距,给最少 10us 的高电平信呈。
(2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回
(3)有信号返回,通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回 的时间。测试距离=(高电平时间*声速(340M/S))/2;
在这里插入图片描述
使用代码:

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灯熄灭。

连接示意图:
在这里插入图片描述

我的想法:

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

  • 13
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值