锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Arduino入门

时间:2022-08-10 20:00:00 主板硬件三极管如何放掉电容器一半电36v指示灯串电阻判断电阻大小内接外接arduino电位器串口监视器单路循环继电器工作原理

目录

第1小节 简介

第2小节 认识Arduino Uno

第3小节 arduino IDE下载方法

第4小节 驱动安装方法

第5小节 Arduino IDE介绍设置和工具栏

第6小节 添加库文件

第7节 单传感器实验课程

实验一 点亮LED

实验三 激光头传感器模块发出激光

实验四 按键传感器检测实验

触摸传感器检测实验-toc" style="margin-left:40px;">实验五 电容触摸传感器检测实验测试实验测试

实验六 避障传感器检测障碍物

实验七 巡线传感器检测黑白线

实验八 光折断计数

实验九 倾斜模块的原理

实验十 碰撞传感器的原理

实验十一 霍尔传感器检测南极磁场

实验十二 干簧管检测附近磁场

实验十三 附近有人吗

实验十四 有源蜂鸣器模块播放声音

实验十五 8002b功放 喇叭模块

实验十六 130电机模块

实验十七 插件RGB模块调节LED颜色

实验十八 旋转电位器传感器读取模拟值

实验十九 水滴蒸汽传感器

实验二十 声音传感器检测声量

实验二十一 光敏电阻传感器

实验二十二  NTC-MF52AT模拟温度传感器

实验二十三  薄膜压力传感器

实验二十五 MQ-3 酒精传感器

实验二十六  SK6812 RGB模块

实验二十七  红外遥控与接收

第8节 传感器/模块组合实验课程

实验二十八 呼吸灯

实验二十九 按键控制LED灯

实验三十  障碍物报警实验

实验三十一 紫外线报警

实验三十二  人体红外报警

实验三十三 音乐播放

实验三十四  灭火机器人的原理

实验三十五  旋转编码器模块控制RGB模块

实验三十八  6812花样彩灯

实验三十九  红外遥控灯

相关资料链接


 

第1小节 简介

  1. 什么是Arduino?

Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。由一个欧洲开发团队于2005年冬季开发。

其特点有:

跨平台
Arduino IDE可以在Windows、Macintosh OS X、Linux三大主流操作系统上运行,而其他的大多数控制器只能在Windows上开发。

简单清晰
Arduino IDE基于processing IDE开发。对于初学者来说,极易掌握,同时有着足够的灵活性。 

开放性
Arduino的硬件原理图、电路图、IDE软件及核心库文件都是开源的,在开源协议范围内里可以任意修改原始设计及相应代码。

编程方式多样代码简洁
Arduino编程主要有以下几种方式:第一种是使用官网Arduino IDE编程环境,这可以在官网下载,支持Windows,MacOS,Linux操作系统。第二如果不太喜欢写代码,或者是教小孩子玩Arduino,也有图形化的编程环境,比如Mixly/Scratch。

型号多样

Arduino主板有很多型号,比如:
Arduino Uno, Arduino Nano, Arduino Nano, Arduino LilyPad, Arduino Mega 2560, Arduino Ethernet, Arduino Due, Arduino Leonardo

!注意:在接下来的课程种我们主要介绍的是Arduino Uno开发板的性能和用法。

第2小节 认识Arduino Uno

本课程以Arduino uno为主板

(1)规格参数

主控芯片:ATMEGA328微控制器

USB转串口芯片:Atmega16U2

USB线供电:5v

外接电源:7-12v,建议用9v

数字输入/输出引脚14个(其中6个支持PWM)

模拟输入引脚  6范围

IO输出电流:20mA

3.3V输出电流:50mA

内置闪存:32K

SRAM : 2k

EPROM:1K

时钟频率:16MH

ICSP接口:给ATMEGA328P-AU烧录固件接口

数字口:D0-D13

串口通信:D0(RX)和D1(TX)

外部中断:D2(中断0)和D3(中断1)

PWM口:D3、D5、D6、D9、D10和D11

SPI通信:D10(SS)、D11(MOSI)、D12(MISO)和D13(SCK)

LED:D13标志“L”的LED

USB接口:用于下载程序与串口调试

DC电源接口:可接入7V-12V范围内电压

电源输出接口:输出3.3V或5V,常用于对外供电或进行共地处理

模拟口A0-A5:IIC通信:A4(SDA)和A5(SCL)

也可当做数字口使用:A0(D14)、A1(D15)、A2(D16)、A3(D17)、A4(D18)和A5(D19)

第3小节 arduino IDE下载方法

我们先到arduino 官方的网站Arduino - Home下载最新版本的arduino开发软件,进入网站之后点击界面上的SOFTWARE,选择DOWNLOADS进入下载页面,如下图:

Arduino 软件有很多版本,有wodows,mac linux系统的(如下图),而且还有过去老的版本,你只需要下载一个适合系统的版本。

这里我们以WINDOWS系统的为例给大家介绍一下下载和安装的步骤。

WINDOWS系统的也有两个版本,一个版本是安装版的,一个是下载版的不用安装,直接下载文件到电脑,解压缩就可以用了。

两个版本都可以正常使用,看你自己的喜好了。选择一个版本,然后将Arduino 开发软件下载到我们的电脑。

一般情况下,我们点击JUST DOWNLOAD就可以下载了,当然如果你愿意,你可以选择小小的赞助,以帮助伟大的ARDUINO 开源事业。

第4小节 驱动的安装方法

接下来是开发板驱动的安装,这次我们安装的是Arduino Uno 开发板的驱动,这个开发板的USB转串口芯片是Atmega16U2。在ARDUINO 开发软件1.8以上的版本里就已经包含了这个芯片的驱动程序,这样我们使用起来会非常方便。一般插上USB,电脑就会识别到硬件,WINDOWS就会自动安装Atmega16U2的驱动。

如果驱动安装不成功,或者你想手动安装驱动,请打开电脑的设备管理器

显示Atmega16U2的驱动没有安装成功,有一个黄色的感叹号。我们双击硬件更新驱动

(目前克隆版的Arduino比较多,如果你的板子是其他驱动可以选择相应的驱动文件,这里还提供了CH340、CP2101驱动)

浏览计算机查找驱动文件。驱动文件的下载链接

我们选择这个文件夹,然后点击确定,驱动安装成功。

这个时候再打开设备管理器,我就可以看到Atmega16U2的驱动程序已经安装成功了,刚刚的那个黄色的感叹号不见了。

第5小节 Arduino IDE设置和工具栏介绍

装好了开发板的驱动,我们下面要了解Arduino开发软件的使用了,首先我们点击电脑桌面上的图标,打开Arduino IDE。

 

为了避免在将程序上载到板上时出现任何错误,必须选择正确的Arduino板名称,该名称与连接到计算机的电路板相匹配。转到工具→开发板,然后选择你的板。

然后再选择正确的COM口(安装驱动成功后可看到对应COM口)。

我们的程序上传到板之前,我们必须演示Arduino IDE工具栏中出现的每个符号的功能。

A - 用于检查是否存在任何编译错误。

B - 用于将程序上传到Arduino板。

C - 用于创建新草图的快捷方式。

D - 用于直接打开示例草图之一。

E - 用于保存草图。

F - 用于从板接收串行数据并将串行数据发送到板的串行监视器。

启动你的第一个程序

上面我们学习了怎么下载软件和安装开发板的驱动,那下面我们就开始正式开始第一个程序,打开文件选择例子,选择第一个文件BASIC里面的BLINK程序

按照前面方法设置板和COM口,IDE右下角显示对应板和COM口。

点击图标开始编译程序,检查错误,检查无误。

点击点击--->图标开始上传程序,上传成功。

程序上传成功,板载的LED灯亮一秒钟,灭一秒钟,恭喜你的第一个程序完成了!

第6小节 库文件的添加

首先找到arduino库文件夹:

然后把所要用到的库文件复制在这个文件夹下就行了。

第7节 单个传感器实验课程

我们下面的课程是先从简单到复杂学习单个模块/传感器的原理,后面再学习一些模块/传感器的组合应用以巩固加深我们的理解。

特别注意:实验时,模块/传感器连接线材时,必须按照资料里的接线方法及位置,电源与信息脚不能错接,否则会损坏模块/传感器。

实验一  点亮LED

实验说明

LED模块:它的控制方法非常简单,要想点亮LED,只要让它两端有一定的电压就可以。

实验中,我们通过编程控制信号端S的高低电平,从而控制LED的亮灭。我们提供两个实验程序,分别控制LED模块上实现点亮和闪烁的效果。

实验原理

下面附了两个电路原理图,左边我们直接把LED串联一个电阻,负极接地,正极接到单片机的IO口,理论上来说当我们把信号端S输出高电平(5V),LED两端就会有电压,LED就会被点亮,那么我们为什么说这么接不合理呢?原因就是我们单片机IO口输出电流的能力有限(最大20mA),虽然输出了高电平,但是可能达不到控制LED的电流,此时LED可能比较暗。

右边的接法:控制时,GND和VCC上电后,如果信号端S为高电平,那么三极管Q1就会导通,则LED有电流流过,LED即会亮起(注意:此时电流是由VCC电源端流经LED和电阻R3到GND,而不是直接从单片机IO口输出,此时输出电流的能力就比较强),S端为低电平时三极管Q1截止,那么就没有电流流过LED,那么LED就会熄灭。也就是说,我们这里的三极管Q1相当于一个开关作用,而电阻R1,R3都是一个限流电阻,顾名思义就是限制电流的大小,以免烧坏电子元器件。

实验器材

 LED模块*1

Arduino主板*1

连接线*1

接线图

实验代码

代码1:

void setup() {

  pinMode(3, OUTPUT);//设置模式为输出

}



void loop() {

  digitalWrite(3, HIGH); //输出高电平,点亮



}

代码2:

int ledPin = 3; //定义LED管脚接D3

void setup() {

  pinMode(ledPin, OUTPUT);//设置模式为输出

}



void loop() {

  digitalWrite(ledPin, HIGH); //输出高电平,点亮

  delay(1000);//延迟1000毫秒

  digitalWrite(ledPin, LOW); //输出低电平,熄灭

  delay(1000);



}

代码说明

代码1说明:

  1. int ledPin = 3;int是变量类型范围为-32,768 ~ 32,767,这条代码语句意思是取个ledpin的变量名然后赋值为3,后面我们需要用到这个引脚时就直接使用ledpin而不用“3”,当我们接的传感器模块多了,引脚多了我们就需要这样设置一个简单易记的变量名方便我们使用。
  2. pinMode(pin,mode);pin是用于设置模式的Arduino引脚号;mode为模式,可选:输入模式INPUT,输出模式OUTPUT或输入上拉INPUT_PULLUP,在这里我们设置了管脚3为输出模式。
  3. digitalWrite(pin, value);pin是单片机数字管脚,在这里我们定义了管脚3;value是你将要输出的数字电平(HIGH/LOW);如果使用pinMode()将引脚配置为OUTPUT,则其电压将设置为相应的值:5V(在3.3V板上为3.3V)为HIGH,低电平为0V(接地)。如果没有把pinMode()设置为OUTPUT,而是将LED连接到引脚,则在调用digitalWrite(HIGH)时,LED可能会变暗。因为此时digitalWrite()将启用内部上拉电阻,其作用类似于一个大限流电阻。

代码2说明:

  1. setup()中代码是只执行一次,而loop()函数里面的代码是一直循环执行。delay(ms);延时函数,ms为暂停的毫秒数,数据类型:unsigned long(范围 0~ 4,294,967,295 (2^32 - 1))。
  2. 通过整合前面知识。我们再来看代码就清楚明了了,代码中第一条我们把模块信号端接到ledpin也就是数字口D3,设置为高电平,就是点亮模块上LED;第二条延迟1000毫秒,就是让模块上LED点亮1秒。同样第三条第四条代码表示让模块上LED熄灭1秒。代码默认循环,也就是控制模块上LED,循环亮1秒,灭1秒,实现闪烁效果。通过代码设置,我们可以更改模块上LED亮灭的延迟时间,从而使模块上LED实现不同的闪烁效果。
  3. 更多arduino语法解释与详情请了解官网https://www.arduino.cc/reference/en/

测试结果

代码一:上传实验程序一成功后,上电,模块上白色LED点亮

代码二:上传实验程序二成功后,上电,白色LED亮1秒灭一秒,循环交替闪烁。

实验二  交通灯模块

实验说明

我想大家都看见过交通灯,就是马路上十字路口的红绿灯。如果您开过车,我想您一定仔细观察过交通灯,如果您还没有驾驶过车,您是否仔细观察过交通灯呢?在我们这个套件中,就包含一个交通灯模块。我们经常会用红绿黄3个LED外接电路来模拟路边的红绿黄灯闪烁。因此我们特别设计了这款模块,模块上自带了红黄绿3个LED灯,我们这个实验就做一个模拟交通灯。

实验原理

前面第一课我们就学习了如何控制一个LED,由原理图容易得知,控制这个模块就好比分别控制3个独立的LED灯(我们这个灯可直接由单片机IO口驱动),给对应颜色灯高电平就亮起对应的颜色。比如,我们给信号“R”输出高电平,也就是5V,则红色LED点亮。


实验器材

 交通灯模块*1

Arduino主板*1

连接线*1

接线图

实验代码

int greenPin = 4;   //绿色LED接数字口D4

int yellowPin = 3; //黄色LED接数字口D3

int redPin = 2;   //红色LED接数字口D2

void setup() {

  //LED接口都设置为输出模式

  pinMode(greenPin, OUTPUT);

  pinMode(yellowPin, OUTPUT);

  pinMode(redPin, OUTPUT);

}



void loop() {

  digitalWrite(greenPin, HIGH); //点亮绿色LED

  delay(5000);  //延时5秒

  digitalWrite(greenPin, LOW); //关闭绿色LED

  for (int i = 1; i <= 3; i = i + 1) {  //运行三次

    digitalWrite(yellowPin, HIGH); //点亮黄色LED

    delay(500); //延时0.5秒

    digitalWrite(yellowPin, LOW); //关闭黄色LED

    delay(500); //延时0.5秒

  }

  digitalWrite(redPin, HIGH); //点亮红色LED

  delay(5000);  //延时5s

  digitalWrite(redPin, LOW); //关闭红色LED



}

代码说明

  1. 定义管脚接口,设置引脚模式,延时函数,输出高低电平参考实验一说明,这里就不多说了。
  2. 这里我们还用到了for()循环:最简单形式为for( ; ; ),我们在此实验中用到for (int i = 1; i <= 3; i = i + 1);表示变量i从1到3,每次自加1,知道不满足 i <= 3这个判断表达式,否则一直执行大括号里的代码,即一共执行3次大括号里的代码;同理:如果是for (int i = 255; i >= 0; i = i - 1);i每次自减1,当不满足i>= 0时,跳出该for()循环,一共执行256次。

测试结果

上传实验程序成功,上电后,模块上绿色LED亮5秒然后熄灭,黄色LED闪烁3秒然后熄灭,再然后红色LED亮5秒,然后熄灭,模块上3个LED自动模拟交通灯循环运行。

实验三  激光头传感器模块发出激光

实验说明

我们都应该经常又听说激光,激光与常见的光不同。

一方面是由于它的来源。当原子被激发,从而电子从低能级跃迁到高能级,再从高能级回落到低能级的时候,能量以特定频率的电磁波向外辐射。由于电子的能级是特定的,因而辐射出的电磁波频率是一致的。由此,一束激光只有一种特定频率的电磁波(光)。这使得激光比起普通光源,激光的单色性好。另一方面,激光发射器内部特定的结构,使得激光能够被聚集成单束光,朝着同一方向射出,亮度高,方向性好。

正是由于这些特性,激光被广泛用于对特定材料进行切割、焊接、表面处理等等。激光的能量非常高,玩具激光笔照射人眼可能导致眩光,长时间可能导致视网膜损害,我国也禁止用激光照射航行的飞机。因此,请注意不要用激光发射器对准人眼。

实验原理

激光头传感器模块主要由激光头组成,激光头由发光管芯、聚光透镜、铜可调套筒三部分组成。我们可以看到此模块电路原理图,可知该模块的控制方法与我们前面学习过的LED非常相似,都是用三极管驱动,在信号端直接输入一个高电平数字信号,传感器开始工作,输入低电平时停止工作。

实验器材

 激光模块*1

Arduino主板*1

连接线*1

接线图

实验程序

int laserPin = 2; //定义激光引脚为D2

void setup() {

  pinMode(laserPin, OUTPUT);//定义激光引脚为输出模式

}

 



void loop() {

  digitalWrite(laserPin, HIGH); //打开激光

  delay(2000);  //延时2秒

  digitalWrite(laserPin, LOW); //关闭激光

  delay(2000);  //延时2秒



}

代码说明

代码设置即说明请参考前面实验一。

测试结果

上传实验程序成功,上电后,模块上激光管发射红色激光信号2秒,停止发射红色激光信号2秒,循环交替。

实验四  按键传感器检测实验

实验说明

单路按键模块,它主要采用1个轻触开关,自带1个黄色按键帽。前面我们学习了怎么让我们单片机的引脚输出一个高电平或者低电平,这节实验我们就来学习怎么读取引脚是高电平(5V)还是低电平(0V)。

实验中,我们通过读取传感器上S端高低电平,判断传感器上按键是否按下;并且,我们在串口监视器上显示测试结果。

实验原理

附原理图,按键有四个引脚,其中1和3是相连的,2和4是相连的,在我们未按下按键时,13与24是断开的,信号端S读取的是被4.7K的上拉电阻R1所拉高的高电平,而当我们按下按键时,13和24连通。信号端S连接到了GND,此时读取到的电平为低电平,即按下按键,传感器信号端为低电平;松开按键时,信号端为高电平。

实验器材

单路按键模块*1

Arduino主板*1

连接线*1

接线图

实验程序

int val = 0;  //用来存放按键值

int button = 2; //按键的管脚接数字口D2

void setup() {

  Serial.begin(9600); //启动串口监视器并设置波特率为9600

  pinMode(button, INPUT); //设置按键管脚为输入模式

}



void loop() {

  val = digitalRead(button);  //读取按键的值并赋给变量val

  Serial.print(val);  //串口上打印出来

  if (val == 0) { //按下按键则读取到低电平,打印按下相关信息

    Serial.print("        ");

    Serial.println("Press the botton");

    delay(100);

  }



  else {  //打印松开按键相关信息

    Serial.print("        ");

    Serial.println("Loosen the botton");

    delay(100);

  }

}

代码说明

  1.  pinMode(button, INPUT); 由前面学过的知识我们知道,在这里我们定义按键管脚为数字口2,设置为输入模式。通过pinMode()配置为INPUT的Arduino(ATmega)引脚处于高阻抗状态。配置为INPUT的引脚对要采样的电路的要求极小,相当于该引脚前面的100MΩ串联电阻。这使它们对于读取传感器很有用。将引脚配置为INPUT,并且正在读取开关,则当开关处于断开状态时,输入引脚将处于“悬空状态”,从而导致不可预测的结果。为了确保开关断开时的读数正确,必须使用上拉或下拉电阻(我们的模块已经使用上拉电阻R1)。该电阻的目的是在开关断开时将引脚拉至已知状态。通常选择一个4.7K/10 K欧姆的电阻,因为它的阻值足够低,可以可靠地防止输入悬空,同时,该阻值也要足够高,以使开关闭合时不会消耗太多电流。如果使用下拉电阻,则当开关断开时,输入引脚将为低电平;当开关闭合时,输入引脚将为高电平。如果使用上拉电阻,则当开关断开时,输入引脚将为高电平;当开关闭合时,输入引脚将为低电平。

2. Serial.begin(9600);初始化串口通信,并设置波特率为9600.

3. digitalRead(button);读取按键的数字电平,高HIGH或者低LOW。如果该引脚未连接任何东西,则digitalRead()可以返回HIGH或LOW(并且可以随机更改)。UNO R3模拟输入引脚可以用作数字引脚:A0、A1、A2、A3、A4、A5,我们的plus开发板多出两个模拟引脚A6及A7。

4. if..else..语句:当if后面()的逻辑判断为真时,执行大括号里的代码;否则执行else后面{}里的代码。

5. 代码逻辑是传感器感应到按键按下时,信号端为低电平,D2口为低电平,即val为

0。这时我们在串口监视器显示对应的数字值和字符;否则(传感器感应到按键松开时),val为1,窗口监视器显示1和另外的字符。

测试结果

上传实验程序成功,利用USB线上电后,打开串口监视器,设置波特率为9600。串口监视器显示对应数据和字符。实验中,当传感器按下按键时,val为0,串口监视器显示“Press the button”字符;松开按键时,val为1,串口监视器显示“Loosen the button”字符,如下图。

实验五  电容触摸传感器检测实验

实验说明

电容触摸模块:主要采用1个TTP223-BA6芯片。它是触摸检测芯片,提供一个触摸按键,功能是用可变面积的按键取代传统按键。当我们上电之后,传感器需要约0.5秒的稳定时间,此时间段内不要对键进行触摸,此时所有功能都被禁止,始终进行自校准,校准周期约为4秒。

我们在串口监视器上显示测试结果。

实验原理

当我们用手指触摸模块时,信号端S输出高电平,板载红色LED点亮,我们通过读取传感器上S端高低电平,判断传感器上按键是否按下(上一实验学习的单路按键模块刚好相反,按下为低电平)。

实验器材

电容触摸模块*1

Arduino主板*1

连接线*1

接线图

实验程序


int val = 0;

int button = 3; //按键的PIN

void setup() {

 

  Serial.begin(9600);//波特率为9600

  pinMode(button, INPUT);//设置输入模式

}



void loop() {

  val = digitalRead(button);//读取按键的值

  Serial.print(val);//打印出来按键值

  if (val == 1) {//按下为高电平

    Serial.print("        ");

    Serial.println("Press the button");

    delay(100);

  }

  else {//松开为低电平

    Serial.print("        ");

    Serial.println("Loosen the button");

    delay(100);

  }

}

代码说明

与实验四不同的是:当我们触摸传感器时,单片机会读取到高电平,即val == 1打印“Press the button”,否则打印“Loosen the button”。细节请参考实验四的代码说明。

测试结果

上传实验程序成功,利用USB线上电后,打开串口监视器,设置波特率为9600。串口监视器显示对应数据和字符。实验中,当传感器按下按键时,板载红色LED点亮,val为1,串口监视器显示“Press the button”字符;松开按键时,板载红色LED熄灭,val为0,串口监视器显示“Loosen the button”字符,如下图。

实验六  避障传感器检测障碍物

实验说明

避障传感器,它主要采用一对红外线发射与接收管元件。实验中,我们通过读取传感器上S端高低电平,判断是否存在障碍物;并且,我们在串口监视器上显示测试结果。

实验原理

原理就是NE555时基电路提供发射管TX发射出一定频率的红外信号,红外信号会随着传送距离的加大逐渐衰减,如果遇到障碍物,就会形成红外反射。当检测方向RX遇到反射回来的信号比较弱时,接收检测引脚输出高电平,说明障碍物比较远;当反射回来的信号比较强,接收检测引脚输出低电平,说明障碍物比较近了,接收检测引脚输出低电平,此时指示灯亮起。传感器上有两个电位器,一个用于调节发送功率,一个用于调节接收频率,通过调节2个电位器,我们可以调节它的有效距离。

实验器材

避障传感器*1

Arduino主板*1

连接线*1

接线图

实验程序

/*

 

  红外避障传感器

  

*/

int val = 0;

void setup() {

  Serial.begin(9600);//设置波特率为9600

  pinMode(3, INPUT);//设置引脚3为输入模式

}



void loop() {

  val = digitalRead(3);//读取数字电平

  Serial.print(val);//打印读取的电平信号

  if (val == 0) {//检测到障碍物

    Serial.print("        ");

    Serial.println("There are obstacles");

    delay(100);

  }

  else {//没检测到障碍物

    Serial.print("        ");

    Serial.println("All going well");

    delay(100);

  }

}

代码说明

我们这里使用一款传感器,所以没有定义管脚名称变量了,直接使用引脚“3”,其它设置方法和实验四类似,这里就不多做介绍了。

特别注意

烧录好实验程序,按照接线图连接好线,上电后,我们开始调节两个电位器调节感应距

离。

1.调节发射功率调节电位器,先将电位器顺时针到尽头,然后回调一些,使传感器上

P LED介于不亮与亮之间的零界点。

2.调节接收频率调节电位器,顺时针调节时,频率增大。调节使它产生38KHz频率的方波,调节时,也观察传感器上S LED,使它介于不亮与亮之间的零界点。

测试结果

上传实验程序成功,利用USB线上电后,打开串口监视器,设置波特率为9600。串口监视器显示对应数据和字符。实验中,当传感器检测到障碍物时,val为0,串口监视器显示“There are obstacles”字符;没有检测到障碍物时,val为1,串口监视器显示“All going well”字符,如下图。

实验七  巡线传感器检测黑白线

实验说明

单路循线传感器:它主要采用1个TCRT5000 反射型 黑白线识别传感器元件。

实验中,我们通过读取模块上S端高低电平,判断传感器检测到的物体颜色(黑白);并且,我们在串口监视器上显示测试结果。

实验原理

上个实验我们学习了避障传感器的原理,其实巡线传传感器的原理也是相同的。是利用红外线对颜色的反射率不一样,将反射信号的强弱转化成电流信号。上电时,发射二极管发射红外光,RP1 是一个电位器,我们通过调整电位器给 电压比较器LM393 的 2 脚提供一个阈值电压,这个电压值的大小可以根据实际情况来调试确定。而红外光敏二极管收到红外光的时候,会产生电流,并且随着红外光的从弱变强,电流会从小变大。当没有红外光或者说红外光很弱的时候,3 脚的电压就会接近 VCC,即信号R3电压接近VCC,如果 3 脚比 2 脚的电压高的话,通过 LM393 比较器后,接收检测引脚输出一个高电平。当随着光强变大,电流变大,3 脚的电压值等于 VCC-I*R3,电压就会越来越小,当小到一定程度,比 2 脚的电压还小的时候,接收检测引脚就会变为低电平。当红外信号发送到黑色轨道时,黑色因为吸光能力比较强,红外信号发送出去后就会被吸收掉,反射部分很微弱。白色轨道就会把大部分红外信号反射回来。

 

也就是说检测到黑色或没检测到物体时,信号端为高电平;检测到白色物体时,信号端为低电平;它的检测高度为 0—3cm。我们可以通过旋转传感器上电位器,调节灵敏度,即调节检测高度。当旋转电位器,是传感器上红色 LED介于不亮与亮之间的临界点时,灵敏度最好。

实验器材

单路循线传感器*1

Arduino主板*1

连接线*1

接线图

实验程序

/*

 

 

  黑白巡线传感器



*/

int val = 0;

void setup() {

  Serial.begin(9600);//设置波特率为9600

  pinMode(3, INPUT);//设置传感器引脚为输入模式

}



void loop() {

  val = digitalRead(3);//读取巡线传感器输出的数字电平

  Serial.print(val);//串口打印值

  if (val == 0) {//检测到白色val为0

    Serial.print("        ");

    Serial.println("White");

    delay(100);

  }

  else {//检测到黑色val为1

    Serial.print("        ");

    Serial.println("Black");

    delay(100);

  }

}

代码说明

设置方法和实验六类似,这里就不多做介绍了,具体详细请看代码注释。

测试结果

上传实验程序成功,利用USB线上电后,打开串口监视器,设置波特率为9600。串口监视器显示对应数据和字符。实验中,当传感器没有检测到物体或者检测到黑色物体时,val为1,串口监视器显示“Black”字符;检测到白色物体(能够反光)时,val为0,串口监视器显示“White”字符,如下图。

实验八  光折断计数

实验说明

光折断模块:它主要采用1个ITR-9608光电开关。它属于对射遮断式光电开关光学开关传感器。

在这里,我们不仅与前面的课程一样只打印信号端的电平信号,而是通过代码设置,模拟出流水线上利用类似传感器,对产品进行计数。

实验原理

如原理图:当用纸片挡住传感器凹槽后,C与VCC导通,传感器信号端S为高电平,自带红色 LED熄灭;否则传感器信号端为被R2拉低为低电平,自带红色LED亮起。


实验器材

光折断模块*1

Arduino主板*1

连接线*1

接线图

实验程序

/*

 

 

  光折断模块

*/

int PushCounter = 0; //计数变量赋初值0

int State = 0; //存放传感器输出当前的状态

int lastState = 0; //存放传感器上一次输出的状态



void setup() {

  Serial.begin(9600);//设置波特率为9600

  pinMode(3, INPUT);//设置光折断传感器管脚为输入模式

}



void loop() {

  State = digitalRead(3);//
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章