KE0086 Keyes Arduino37合1传感器套件

来自KEYES
跳转至: 导航搜索

目录

Keyes Arduino37合1传感器套件

KE0086-.png


说明

这款套件包含我们玩单片机时常用到的37款传感器模块,如有源蜂鸣器模块、5V继电器模块、温湿度传感器等等。它适用于各种单片机和树莓派。同时我们为套件里的每一款传感器都编写了资料,资料里介绍了传感器模块基于Arduino开发板的使用方法,包含了接线方法、测试代码、实验结果等信息。


清单

编码 名称 描述 数量 图片
1 Keyes模块 keyes 草帽LED白发白模块(焊盘孔) 红色 环保 1 KE0086-led cap.png
2 Keyes模块 keyes 干簧管(焊盘孔) 红色 环保 1 Ke0086-干簧管.png
3 Keyes模块 keyes 双色LED模块(焊盘孔) 红色 环保 1 Ke0086-双色LED.png
4 Keyes模块 keyes 手指测心跳模块(焊盘孔) 红色 环保 1 Ke0086-心跳.png
5 Keyes模块 keyes 贴片RGB模块(焊盘孔) 红色 环保 1 Ke0086-SMD RGB.png
6 Keyes模块 keyes 有源蜂鸣器模块焊盘孔) 红色 环保 1 Ke0086-有源蜂鸣器.png
7 Keyes模块 keyes 无源蜂鸣器模块(焊盘孔) 红色 环保 1 Ke0086-无源蜂鸣器.png
8 Keyes模块 keyes 旋转编码器模块(焊盘孔) 红色 环保 1 Ke0086-旋转编码器.png
9 Keyes模块 keyes 可调电位器模块(焊盘孔) 红色 环保 1 Ke0086-电位器.png
10 Keyes模块 keyes 5V 单路继电器模块(焊盘孔) 红色 环保 1 Ke0086-继电器.png
11 Keyes模块 keyes 插件RGB(焊盘孔) 红色 环保 1 Ke0086-RGB.png
12 keyes传感器 keyes 热敏电阻传感器(焊盘孔) 红色 环保 1 Ke0086-热敏电阻.png
13 keyes传感器 keyes 按键传感器(焊盘孔) 红色 环保 1 Ke0086-按键.png
14 keyes传感器 keyes 魔术光杯传感器(焊盘孔) 红色 环保 4 Ke0086-光杯.png
15 keyes传感器 keyes DHT11温湿度传感器(焊盘孔) 红色 环保 1 Ke0086-DHT11.png
16 keyes传感器 keyes 光敏电阻传感器(焊盘孔) 红色 环保 1 Ke0086-光敏电阻.png
17 keyes传感器 keyes 倾斜模块传感器(焊盘孔) 红色 环保 1 Ke0086-倾斜模块.png
18 keyes传感器 keyes 光折断传感器(焊盘孔) 红色 环保 1 Ke0086-光折断.png
19 keyes传感器 keyes ADXL345加速度传感器(焊盘孔) 红色 环保 1 Ke0086-加速.png
20 keyes传感器 keyes 麦克风声音传感器(焊盘孔) 红色 环保 1 Ke0086-声音.png
21 keyes传感器 keyes 霍尔传感器(焊盘孔) 红色 环保 1 Ke0086-霍尔.png
22 keyes传感器 keyes 碰撞传感器(焊盘孔) 红色 环保 1 Ke0086-碰撞.png
23 keyes传感器 keyes 红外发射传感器(焊盘孔) 红色 环保 1 Ke0086-发射.png
24 keyes传感器 keyes 超声波传感器(焊盘孔) 红色 环保 1 Ke0086-超声波.png
25 keyes传感器 keyes MQ-2 烟雾传感器(焊盘孔) 红色 环保 1 Ke0086-烟雾.png
26 keyes传感器 keyes 敲击模块传感器(焊盘孔) 红色 环保 1 Ke0086-敲击.png
27 keyes传感器 keyes 电容触摸传感器(焊盘孔) 红色 环保 1 Ke0086-电容.png
28 keyes传感器 keyes 红外接收传感器(焊盘孔) 红色 环保 1 Ke0086-接收.png
29 keyes传感器 keyes 摇杆模块传感器(焊盘孔) 红色 环保 1 Ke0086-摇杆.png
30 keyes传感器 keyes MQ-3 酒精传感器(焊盘孔) 红色 环保 1 Ke0086-酒精.png
31 keyes传感器 keyes 避障传感器(焊盘孔) 红色 环保 1 Ke0086-避障.png
32 keyes传感器 keyes LM35温度传感器(焊盘孔) 红色 环保 1 Ke0086-温度.png
33 keyes传感器 keyes 人体红外热释电传感器(焊盘孔) 红色 环保 1 Ke0086-PIR.png
34 keyes传感器 keyes 激光头传感器模块(焊盘孔) 红色 环保 1 Ke0086-激光头.png
35 keyes传感器 keyes 巡线传感器(焊盘孔) 红色 环保 1 Ke0086-巡线.png
36 keyes传感器 keyes 18B20温度传感器(焊盘孔) 红色 环保 1 Ke0086-18B20 温度.png
37 keyes传感器 keyes TEMT6000光线传感器(焊盘孔) 红色 环保 1 Ke0086-光线.png


Arduino IDE和驱动的安装

当我们拿到Arduino开发板时,首先我们要安装Arduino IDE和驱动,相关文件我们可以在官网上找到,以下链接是包含各种系统、各种版本的Arduino IDE和驱动任你选择。
https://www.arduino.cc/en/Main/OldSoftwareReleases#1.5.x
下面我们介绍下Arduino-1.5.6 版本IDE在Windows系统的安装方法。
下载下来的文件是一个arduino-1.5.6-r2-windows.zip的压缩文件夹,解压出来到硬盘。
双击Arduino-1.5.6 .exe文件
001.png

然后点击下一步
002.png

再然后点击安装
003.png

等待安装完成.点击close,安装完成。
004.png

1.5.6版本安装后的样子
005.png


  • 接下来是开发板驱动的安装,这次我们安装的是Keyes UNO R3 开发板的驱动,Keyes 2560 R3 开发板安装驱动方法和这个类似,驱动文件可以用同一个文件。

不同的系统,安装驱动的方法也有一些细小的区别,下面我们介绍在WIN 7系统安装驱动的方法。
第一次Keyes UNO R3 开发板连接电脑时,点击计算机--属性--设备管理器,显示如下图。

006.png

点击 Unknown device 安装驱动,如下图

007.png
进入下图,选择

008.png
找到Arduino安装位置的drivers文件夹,

009.png
点击“Next”,进入下图选择,开始安装驱动

010.png
安装驱动完成,出现下图点击Close。

011.png

这样驱动就装好了。

点击计算机属性,进入设备管理器进入界面,我们可看见如下图。
012.png


Arduino IDE的使用方法

Keyes UNO R3 开发板的USB驱动安装成功之后,我们可以在Windows设备管理器中找到相应的串口。
下面示范第一个程序的烧写,串口监视器中显示“Hello World!”。
测试代码为:

int val;
int ledpin=13; 
void setup()
{
Serial.begin(9600);
pinMode(ledpin,OUTPUT);
}
void loop()
{
val=Serial.read();
if(val=='R')
{
digitalWrite(ledpin,HIGH);
delay(500);
digitalWrite(ledpin,LOW);
delay(500);
Serial.println("Hello World!");
}
}


我们打开Arduino 的软件,编写一段程序让Keyes UNO R3 开发板接受到我们发的指令就显示“Hello World!”字符串;我们再借用一下Keyes UNO R3 开发板上的 D13 的指示灯,让Keyes UNO R3 开发板接受到指令时指示灯闪烁一下,再显示“Hello World!”。 打开Arduino 的软件,设置板,如下:

013.png

设置COM端口,如下

014.png

点击015.png 编译程序,检查程序错误;点击016.png 上传程序;Uno板设置OK后右下脚显示如下图,和设备管理器中显示一致。

017.png

上传成功,输入R,点击发送,Arduino 自带的数字13 口LED闪烁一次,串口监视器中显示 Hello World! 如下图

018.png

那么恭喜你,你的第一个程序已经成功了!!!


实验课程

实验一 草帽LED模块

实验说明
本实验我们主要用来检测草帽LED模块。实验中我们将草帽LED模块的信号端接在开发板数字口3上,它同时也是PWM口。我们用两个实验检测,一个是让草帽LED进行闪烁实验;另一个是让PWM口控制草帽LED的亮度,让草帽LED逐渐变亮和逐渐变暗,模拟人体呼吸的现象。

实验器材

  • 开发板*1
  • USB线*1
  • 草帽LED模块*1
  • 杜邦线若干

接线图
KE0086-实验1.png

测试代码

代码A:

int led = 3;                     //定义数字口3
void setup()
{
  pinMode(led, OUTPUT);     //设置led为输出
}
void loop()
{
  digitalWrite(led, HIGH);   //开启led
   delay(1000); //延迟1秒              
  digitalWrite(led, LOW);    //关闭led
  delay(1000);//延迟1秒 
}


代码B:

int ledPin = 3; // 定义数字口3
void setup()
{
pinMode(ledPin, OUTPUT);// 将ledPin设置为输出
}
void loop()
{
for (int a=0; a<=255;a++)// 设置使LED逐渐变亮
{
analogWrite(ledPin,a); // 开启led,调节亮度,范围是0-255,在255时led最亮
delay(10); // 延迟0.01秒
}
for (int a=255; a>=0;a--) // 设置使LED逐渐变暗
{
analogWrite(ledPin,a); // 开启led,调节亮度,范围是0-255,在255时led最亮
delay(10); // 延迟0.01秒
}
delay(1000);// 延迟1秒
}

测试结果
上传完代码A,上电后 ,我们就可以看到草帽LED不停闪烁,间隔大约为1秒。上传完代码B,上电后 ,我们就可以看到草帽LED先逐渐变亮,后逐渐变暗,循环交替


实验二 干簧管模块

实验说明
本实验我们主要用来检测干簧管模块。该模块主要由干簧管组成,模块接上电源后,信号端输出为高电平,传感器上LED变暗;当给模块施加一个磁场时信号端输出为低电平,传感器上LED变亮。实验中我们用到了Arduino UNO 板上自带的D13 的指示灯,通过传感器,控制D13 的指示灯的亮灭。

实验器材

  • 开发板*1
  • USB线*1
  • 干簧管模块*1
  • 杜邦线若干

接线图
KE0086-实验2.png

测试代码

int Led=13;//定义数字口13
int buttonpin=3; //定义数字口3
int val;//定义数字变量val
void setup()
{
pinMode(Led,OUTPUT);//将Led设置为输出
pinMode(buttonpin,INPUT);//将buttonpin设置为输入
 }
void loop()
{

val=digitalRead(buttonpin);// 读取数字口3的数值,并赋值给val 

if(val==LOW)//当val为高电平时
{
digitalWrite(Led,HIGH);   //LED亮起
}
else
{
digitalWrite(Led,LOW);   //LED熄灭
}
}

测试结果
按照上图接好线,上传好代码,上电后,Arduino UNO 板上的 D13 的指示灯熄灭,模块上D1灯熄灭;当有磁铁靠近模块时, Arduino UNO 板上的 D13 的指示灯亮起,模块上D1灯亮。


实验三 双色LED模块

实验说明
本实验我们主要用来检测双色LED模块。双色LED模块采用共阴驱动,发光颜色为红色和绿色,通过两个PWM口我们可以调节显示红色和绿色的比例,组合成其他颜色。实验中我们把双色LED模块的信号端接在数字口5和6上,它同时也是PWM口。实验中我们让双色LED模块循环显示红色和绿色。

实验器材

  • 开发板*1
  • USB线*1
  • 双色LED模块*1
  • 杜邦线若干

接线图
KE0086-实验3.png

测试代码

int redPin = 5;  // R 红色LED 控制引脚 连接到Arduino的 5脚 
int greenPin = 6;  // G绿色LED 控制引脚 连接到Arduino的6脚 
void setup()    
{   
       pinMode(redPin, OUTPUT); //设置redPin对应的管脚5为输出
       pinMode(greenPin, OUTPUT); //设置greenPin,对应的管脚6为输出
}    
      
void loop()  
{    
        // Basic colors:  
       color(255, 0); // 红色亮
       delay(1000); // 延时一秒 
       color(0,255); //绿色亮
       delay(1000); //延时一秒
}          
void color (unsigned char red, unsigned char green)  //颜色控制函数 
{    
        analogWrite(redPin, red);   
        analogWrite(greenPin,green); 
} 

测试结果
上传完代码,上电后 ,我们就可以看到双色LED模块上LED显示红色1秒,绿色1秒,循环交替。


实验四 手指测心跳模块

实验说明
本实验我们主要用来检测手指测心跳模块。该模块主要包含红外发射器和光敏接收器组成。红外发射器在手指的一面,光敏接收器在手指的另一面;光敏接收器用来获取发射的光通量;当血压脉动通过手指时,光敏接收器的电阻会用微小的变化。实验中将传感器的信号端接到开发板的模拟口A0,在Arduino IDE的串口监视器显示相对应的数值。

实验器材

  • 开发板*1
  • USB线*1
  • 手指测心跳模块*1
  • 杜邦线若干

接线图
KE0086-实验4.png

测试代码

int ledPin = 13;
int sensorPin = 0;
double alpha = 0.75;
int period = 20;
double change = 0.0;
void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(115200);
}
void loop()
{
static double oldValue = 0;
static double oldChange = 0;
int rawValue = analogRead(sensorPin);
double value = alpha * oldValue + (1 - alpha) * rawValue;
Serial.print(rawValue);
Serial.print(",");
Serial.println(value);
oldValue = value;
delay(period);
}

测试结果
按照上图接好线,上传好代码,上电后,打开串口监视器,串口监视器显示相对应的数值,并复制到excel上,生成对应图片,如下图。 KE0086-实验4-2.png KE0086-实验4-3.png KE0086-实验4-4.png


实验五 贴片RGB模块

实验说明
本实验我们主要用来检测贴片RGB模块。本模块由主要一个贴片全彩LED制成,通过 R、 G、 B三个引脚的PWM电压输入可以调节三种基色(红/蓝/绿)的强度从而实现全彩的混色效果。我们用Arduino对模块的控制可实现酷炫的灯光效果。实验中我们让贴片RGB模块循环显示不同颜色。

实验器材

  • 开发板*1
  • USB线*1
  • 贴片RGB模块*1
  • 杜邦线若干

接线图
KE0086-实验5.png

测试代码

int redPin = 6;  // R 红色LED 控制引脚 连接到Arduino的 6脚 
int greenPin = 5;  // G绿色LED 控制引脚 连接到Arduino的5脚
int bluePin = 3;  // B蓝色LED 控制引脚 连接到Arduino的3脚    
void setup()    
{   
        pinMode(redPin, OUTPUT); //设置redPin对应的管脚6为输出
        pinMode(greenPin, OUTPUT); //设置greenPin,对应的管脚5为输出
        pinMode(bluePin, OUTPUT); //设置bluePin对应的管脚3为输出
}    
      
void loop()  
{    
        // Basic colors:  
       color(255, 0, 0); // 红色亮
       delay(1000); // 延时一秒 
       color(0,255, 0); //绿色亮
       delay(1000); //延时一秒
       color(0, 0, 255); // 蓝色灯亮  
       delay(1000); //延时一秒
  
        // Example blended colors:  
        color(255,255,0); // 黄色亮
        delay(1000); //延时一秒      
        color(128,0,255); // 紫色亮  
        delay(1000); //延时一秒
        color(255,255,255); // 白色亮  
        delay(1000); //延时一秒
        color(0,0,0); // 关闭led  
        delay(1000); //延时一秒  
}          
void color (unsigned char red, unsigned char green, unsigned char blue)  //颜色控制函数 
{    
        analogWrite(redPin, 255-red);   
        analogWrite(greenPin,255-green); 
        analogWrite(bluePin, 255-blue); 
} 

测试结果
上传完代码,上电后,RGB模块会陆续显示红色1秒,绿色1秒,蓝色1秒,黄色1秒,紫色1秒,白色1秒,停止显示1秒,然后循环交替。


实验六 有源蜂鸣器模块

实验说明
本实验我们主要用来检测有源蜂鸣器模块。它主要由有源蜂鸣器组成,是一种一体化结构的电子讯响器,采用直流电源供电。模块接上电源后,当我们直接给信号端输入个高电平信号后,蜂鸣器响起。实验中我们让有源蜂鸣器模块循环响起,关闭。

实验器材

  • 开发板*1
  • USB线*1
  • 有源蜂鸣器模块*1
  • 杜邦线若干

接线图
KE0086-实验6.png

测试代码

int buzzPin = 3;    //定义数字口3
 void setup()  
 {        
  pinMode(buzzPin, OUTPUT);  //将buzzPin设置为输出
}
 void loop()                     
{
  digitalWrite(buzzPin, HIGH);//有源蜂鸣器响起
  delay(2000); //延迟2秒
  digitalWrite(buzzPin, LOW);  //有源蜂鸣器关闭
  delay(2000);  //延迟2秒      
}

测试结果
有源蜂鸣器只需要有个高电平电压蜂鸣器就响起。上传好代码,连接好线,上电后,有源蜂鸣器响2秒,静音2秒,循环交替。


实验七 无源蜂鸣器模块

实验说明
本实验我们主要用来检测草无源蜂鸣器模块。蜂鸣器可分为有源蜂鸣器和无源蜂鸣器两种。无源蜂鸣器内部不带振荡源,直流信号无法令其鸣叫,须用方波驱动。 实验中我们将无源蜂鸣器模块的信号端接在开发板的数字口3上,通过开发板控制数字口3输出方波,从而驱动无源蜂鸣器。我们用两个实验检测,一个是让数字口3循环输出两种频率的方波,驱动无源蜂鸣器响起;另一个是我们让数字口3输出各种频率的方波,并且设定好节奏,从而让无源蜂鸣器播放《欢乐颂》的曲子。

实验器材

  • 开发板*1
  • USB线*1
  • 无源蜂鸣器模块*1
  • 杜邦线若干

接线图
KE0086-实验7.png

测试代码

代码A:

int buzzer=3;          //定义数字口3
void setup() 
{ 
pinMode(buzzer,OUTPUT);//将buzzer设置为输出
} 
void loop() 
{ 
unsigned char i,j;//定义变量i,j
while(1) 
{ 
for(i=0;i<80;i++)// 输出一个频率的声音
{ 
digitalWrite(buzzer,HIGH);
delay(1);//延迟1ms 
digitalWrite(buzzer,LOW);
delay(1);//延迟1ms 
} 
for(i=0;i<100;i++)//  输出另一个频率的声音
{ 
digitalWrite(buzzer,HIGH); 
delay(2);//延迟2ms 
digitalWrite(buzzer,LOW); 
delay(2);//延迟2ms 
}
} 
} 

代码B:

#define D0 -1
#define D1 262
#define D2 293
#define D3 329
#define D4 349
#define D5 392
#define D6 440
#define D7 494
#define M1 523
#define M2 586
#define M3 658
#define M4 697
#define M5 783
#define M6 879
#define M7 987
#define H1 1045
#define H2 1171
#define H3 1316
#define H4 1393
#define H5 1563
#define H6 1755
#define H7 1971
//列出全部D调的频率
#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.25
#define SIXTEENTH 0.625
//列出所有节拍
int tune[]=        //根据简谱列出各频率
{
  M3,M3,M4,M5,
  M5,M4,M3,M2,
  M1,M1,M2,M3,
  M3,M2,M2,
  M3,M3,M4,M5,
  M5,M4,M3,M2,
  M1,M1,M2,M3,
  M2,M1,M1,
  M2,M2,M3,M1,
  M2,M3,M4,M3,M1,
  M2,M3,M4,M3,M2,
  M1,M2,D5,D0,
  M3,M3,M4,M5,
  M5,M4,M3,M4,M2,
  M1,M1,M2,M3,
  M2,M1,M1
};
float durt[]=       //根据简谱列出各节拍
{
  1,1,1,1,
  1,1,1,1,
  1,1,1,1,
  1+0.5,0.5,1+1,
  1,1,1,1,
  1,1,1,1,
  1,1,1,1,
  1+0.5,0.5,1+1,
  1,1,1,1,
  1,0.5,0.5,1,1,
  1,0.5,0.5,1,1,
  1,1,1,1,
  1,1,1,1,
  1,1,1,0.5,0.5,
  1,1,1,1,
  1+0.5,0.5,1+1,
};
int length;
int tonepin=3;   //得用3号接口
void setup()
{
  pinMode(tonepin,OUTPUT);
  length=sizeof(tune)/sizeof(tune[0]);   //计算长度
}
void loop()
{
  for(int x=0;x<length;x++)
  {
    tone(tonepin,tune[x]);
    delay(500*durt[x]);   //这里用来根据节拍调节延时,500这个指数可以自己调整,在该音乐中,我发现用500比较合适。
    noTone(tonepin);
  }
  delay(2000);
}

测试结果
上传完代码A,上电后,无源蜂鸣器会发出两种不同的声音,两种声音循环交替。上传完代码B,上电后,无源蜂鸣器会想响起《欢乐颂》的曲子。


实验八 旋转编码器模块

实验说明
本实验我们主要用来检测旋转编码器模块。它主要由旋转编码器组成,它可通过旋转可以计数正方向和反方向转动过程中输出脉冲的次数,这种转动计数是没有限制的,复位到初始状态,即从0开始计数。实验中我们利用一个旋转编码器模块控制两个草帽LED的亮灭。

实验器材

  • 开发板*1
  • USB线*1
  • 旋转编码器模块*1
  • 草帽LED模块*2
  • 杜邦线若干

接线图
KE0086-实验8.png

测试代码

const int interruptA = 0; //中断0就是在数字口2
const int interruptB = 1;//中断1就是在数字口3
int CLK = 2; // 定义数字口2
int DAT = 3; // 定义数字口3
int BUTTON = 4; // 定义数字口4
int LED1 = 5; // 定义数字口5
int LED2 = 6; // 定义数字口6
int COUNT = 0;//设置数字变量COUNT为0
void setup()
{
attachInterrupt(interruptA, RoteStateChanged, FALLING);
// 当数字口2由高电平变为低电平时,触发中断。
pinMode(CLK, INPUT);//设置CLK为输入
digitalWrite(2, HIGH); // 设置数字口2为高电平
pinMode(DAT, INPUT); //设置DAT为输入
digitalWrite(3, HIGH); //设置数字口3为高电平
pinMode(BUTTON, INPUT); //设置BUTTON为输入
digitalWrite(4, HIGH); //设置数字口4为高电平
pinMode(LED1, OUTPUT);//设置LED1为输出
pinMode(LED2, OUTPUT);//设置LED1为输出
Serial.begin(9600); //设置波特率
}
void loop()
{
if (digitalRead(BUTTON)==LOW)//当数字口4为低电平时
{
COUNT = 0; //设置数字变量COUNT为0
Serial.println("STOP COUNT = 0");//显示对于内容
digitalWrite(LED1, LOW);//LED1变暗
digitalWrite(LED2, LOW);//LED2变暗
delay (2000);//延迟2S
}
Serial.println(COUNT);//显示COUNT数据
}
void RoteStateChanged() //当数字口2由高电平变为低电平时
{
if (digitalRead(DAT)==HIGH) // 当数字口3为高电平时
{
COUNT++;//数字变量COUNT加1
digitalWrite(LED1, HIGH);//LED1亮起
digitalWrite(LED2, LOW);//LED2变暗
delay(200);//延迟0.2S
}
else 
{
COUNT--;//数字变量COUNT减1
digitalWrite(LED2, HIGH);//LED2亮起
digitalWrite(LED1, LOW);//LED1变暗
delay(200);//延迟0.2S
}
}

测试结果
上传好代码,连接好线,上电后,我们可以通过旋转旋转编码器,可以随意控制两个草帽LED的亮灭。


实验九 可调电位器模块

实验说明
本实验我们主要用来检测可调电位器模块。它主要由可调电位器组成,模块上电后,我们只需旋转模块上电位器就可以调节模拟输入数值。实验中将模块的S端接到开发板的模拟口A0,在Arduino IDE的串口监视器上可看到对应的模拟值显示。

实验器材
开发板*1
USB线*1
可调电位器模块*1
杜邦线若干

接线图
KE0086-实验9.png

测试代码

int sensorPin =A0 ;  //定义模拟口A0
int value = 0;      //设置value为0
void setup() 
{
 Serial.begin(9600);//设置波特率

 } 
void loop() 
{
value = analogRead(sensorPin);   //将value设置为读取到的A0的数值
Serial.println(value, DEC);    //显示value数值,并自动换行
delay(100);  //延迟0.1秒
}

测试结果
按照上图接好线,烧录好代码,上电后,我们可以在软件的串口监视器中看到模拟口A0模拟值,旋转旋钮,数据变化,变化范围在 0-1023,如下图。 KE0086-实验9-2.png


实验十 5V单路继电器模块

实验说明
本实验我们主要用来检测5V 单路继电器模块。这个继电器模块是高电平有效,我们把继电器模块的信号端接在数字口3。实验中我们通过开发板控制数字口3,控制模块上继电器循环开启和关闭。

实验器材

  • 开发板*1
  • USB线*1
  • 5V 单路继电器模块*1
  • 杜邦线若干

接线图
KE0086-实验10.png

测试代码

int Relay = 3; //定义数字口3
void setup()
{
pinMode(Relay, OUTPUT); //将Relay设置为输出
}
void loop()
{
digitalWrite(Relay, HIGH); //打开继电器
delay(2000); //延时2秒
digitalWrite(Relay, LOW); //关闭继电器
delay(2000); //延时2秒
}

测试结果
按照上图接好线,上传好代码,上电后,继电器开启(ON端连通,NC断开)2秒,停止(ON端断开,NC端连通)2秒,循环交替,开启时继电器上D2灯亮起。

实验十一 插件RGB模块

实验说明
本实验我们主要用来检测插件RGB模块。本模块由主要一个插件全彩LED制成,通过 R、 G、 B三个引脚的PWM电压输入可以调节三种基色(红/蓝/绿)的强度从而实现全彩的混色效果。我们用Arduino对模块的控制可实现酷炫的灯光效果。实验中我们让插件RGB模块循环显示不同颜色。

实验器材

  • 开发板*1
  • USB线*1
  • 插件RGB模块*1
  • 杜邦线若干

接线图
KE0086-实验11.png

测试代码

int redPin = 6;  // R 红色LED 控制引脚 连接到Arduino的 6脚 
int greenPin = 5;  // G绿色LED 控制引脚 连接到Arduino的5脚
int bluePin = 3;  // B蓝色LED 控制引脚 连接到Arduino的3脚    
void setup()    
{   
        pinMode(redPin, OUTPUT); //设置redPin对应的管脚6为输出
        pinMode(greenPin, OUTPUT); //设置greenPin,对应的管脚5为输出
        pinMode(bluePin, OUTPUT); //设置bluePin对应的管脚3为输出
}    
      
void loop()  // run over and over again  
{    
        // Basic colors:  
       color(255, 0, 0); // 红色亮
       delay(1000); // 延时一秒 
       color(0,255, 0); //绿色亮
       delay(1000); //延时一秒
       color(0, 0, 255); // 蓝色灯亮  
       delay(1000); //延时一秒
  
        // Example blended colors:  
        color(255,255,0); // 黄色亮  
        delay(1000); //延时一秒      
        color(128,0,255); // 紫色亮  
        delay(1000); //延时一秒
        color(255,255,255); // 白色亮  
        delay(1000); //延时一秒
        color(0,0,0); // 关闭led  
        delay(1000); //延时一秒  
}          
void color (unsigned char red, unsigned char green, unsigned char blue)  //颜色控制函数 
{    
        analogWrite(redPin, red);   
        analogWrite(greenPin,green); 
        analogWrite(bluePin, blue); 
} 

测试结果
上传完代码,上电后,RGB模块会陆续显示红色1秒,绿色1秒,蓝色1秒,黄色1秒,紫色1秒,白色1秒,停止显示1秒,然后循环交替。


实验十二 热敏电阻传感器

实验说明
本实验我们主要用来检测热敏电阻传感器。它是基于热敏电阻的工作原理,能够实时感知周边环境温度的变化,我们把数据送到 Arduino的模拟口,接来下我们只要经过简单的编程就能将传感器输出的数据转换为摄氏温度值,并加以显示,借此广泛应用于园艺、家庭警报系统等装置中。
实验中将传感器的信号端接到开发板的模拟口A0,在Arduino IDE的串口监视器上可看到当前环境中的温度值。

实验器材

  • 开发板*1
  • USB线*1
  • 热敏电阻传感器*1
  • 杜邦线若干

接线图
KE0086-实验12.png

测试代码

#include <math.h>
double Thermister(int RawADC) {
double Temp;
Temp = log(((10240000/RawADC) - 10000));
Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
Temp = Temp - 273.15; // Convert Kelvin to Celcius
return Temp;
}
void setup() 
{
Serial.begin(9600); //设置波特率
}
 void loop() 
{ 
Serial.print(Thermister(analogRead(0))); // 显示计算的温度值 
Serial.println("c");  // 显示c,并自动换行
delay(500);  // 延迟0.5S
} 

测试结果
按照上图接好线,上传好代码,上电后,我们可以在软件的串口监视器中看到当前环境中的温度值,如下图。
KE0086-实验12-2.png


实验十三 按键传感器

实验说明
本实验我们主要用来检测按键传感器。当我们按下按键时传感器信号端输出低电平信号,释放按键时传感器信号端保持高电平。实验中我们用到了Arduino UNO 板上自带的D13 的指示灯,通过传感器,控制D13 的指示灯的亮灭。

实验器材

  • 开发板*1
  • USB线*1
  • 按键传感器*1
  • 杜邦线若干

接线图
KE0086-实验13.png

测试代码

int ledPin = 13;  //定义数字口13
int inputPin = 3; //定义数字口3
void setup() 
{
pinMode(ledPin, OUTPUT);   //将ledPin设置为输出 
pinMode(inputPin, INPUT); //将inputPin设置为输入 
}
void loop()
{
int val = digitalRead(inputPin);
//设置数字变量val,读取到数字口3的数值,并赋值给 val 
if (val == LOW) //当val为低电平时,LED亮起
{ 
digitalWrite(ledPin, HIGH); // LED亮起
}
 else 
{
digitalWrite(ledPin, LOW); // LED变暗
}
}

测试结果
按照上图接好线,上传好代码,上电后,按下传感器按键后,Arduino UNO 板上的 D13 的指示灯亮起,释放传感器按键后,Arduino UNO 板上的 D13 的指示灯熄灭。


实验十四 魔术光杯传感器

实验说明
本实验我们主要用来检测魔术光杯传感器。它是一款可以和Arduino互动的传感器,原理是利用PWM调光的原理,两个传感器的亮度发生变化。实验中滚珠开关提供数字信号,触发PWM的调节,通过程序的设计,我们就能看到类似于两组装满光的杯子倒来倒去的效果了。

实验器材

  • 开发板*1
  • USB线*1
  • 魔术光杯传感器*2
  • 杜邦线若干

接线图
KE0086-实验14.png

测试代码

int LedPinA = 5; //定义数字口5
int LedPinB = 6; //定义数字口6
int ButtonPinA = 7;//定义数字口7
int ButtonPinB = 4;//定义数字口4
int buttonStateA = 0;
int buttonStateB = 0;
int brightnessA = 0;
int brightnessB= 255;
void setup()
{
Serial.begin(9600);//设置波特率
pinMode(LedPinA, OUTPUT);//数字口5设置为输出
pinMode(LedPinB, OUTPUT);//数字口6设置为输出
pinMode(ButtonPinA, INPUT);//数字口7设置为输入
pinMode(ButtonPinB, INPUT);//数字口4设置为输入
}
void loop()
{
buttonStateA = digitalRead(ButtonPinA);//读取数字口7的数值赋值给buttonStateA
if (buttonStateA == HIGH && brightnessA != 255)
//当buttonStateA为高电平且brightnessA不为255
{
brightnessA ++;//brightnessA加1
delay(10);//延迟0.01S
}
if (buttonStateA == LOW && brightnessA != 0)
//当buttonStateA为低电平且brightnessA不为0
{
brightnessA --;//brightnessA减1
delay(10);//延迟0.01S
}
analogWrite(LedPinB, brightnessA);//将brightnessA赋值为给PWM口6
Serial.print(brightnessA);//显示brightnessA数值
Serial.print("   ");
buttonStateB = digitalRead(ButtonPinB);//读取数字口4的数值赋值给buttonStateB
if (buttonStateB == HIGH && brightnessB != 0)
//当buttonStateB为高电平且brightnessA不为0
{
brightnessB --;//brightnessB减1
delay(10);//延迟0.01S
}
if (buttonStateB == LOW && brightnessB != 255)
//当buttonStateB为低电平且brightnessA不为255
{
brightnessB++;//brightnessB加1
delay(10);//延迟0.01S
}
analogWrite(LedPinA, brightnessB); //将brightnessB赋值为给PWM口5
Serial.println(brightnessB);//显示brightnessB数值,并自动换行
delay(5);
}

测试结果
按照上图接好线,烧录好代码,上电后,将两个魔术光杯传感器同时倾斜一边, 一个魔术光杯上的LED逐渐变暗,同时另一个逐渐变亮,最终一个LED完全熄灭,一个LED最亮;在串口监视器中看到对应具体数值变化,如下图。当倾斜另一边中,现象一样,方向相反。
KE0086-实验14-2.png


实验十五 DHT11温湿度传感器

实验说明
本实验我们主要用来检测DHT11温湿度传感器。它是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。实验中将传感器的信号端接到开发板的数字口3,在Arduino IDE的串口监视器上可看到当前环境中的温度值和湿度值。

实验器材

  • 开发板*1
  • USB线*1
  • DHT11温湿度传感器*1
  • 杜邦线若干

接线图
KE0086-实验15.png

测试代码

#include <dht11.h>
dht11 DHT;
#define DHT11_PIN 3   
void setup(){
  Serial.begin(9600);
  Serial.println("DHT TEST PROGRAM ");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT11LIB_VERSION);
  Serial.println();
  Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
}  
void loop(){
  int chk;
  Serial.print("DHT11, \t");
  chk = DHT.read(DHT11_PIN);    // READ DATA
  switch (chk){
    case DHTLIB_OK:  
                Serial.print("OK,\t"); 
                break;
case DHTLIB_ERROR_CHECKSUM: 
                Serial.print("Checksum error,\t"); 
                break;
    case DHTLIB_ERROR_TIMEOUT: 
                Serial.print("Time out error,\t"); 
                break;
    default: 
                Serial.print("Unknown error,\t"); 
                break;
  }
 // DISPLAT DATA
  Serial.print(DHT.humidity,1);
  Serial.print(",\t");
  Serial.println(DHT.temperature,1);  
  delay(1000);
}

库文件下载地址: https://pan.baidu.com/s/1eSlMYD8

测试结果
按照上图接好线,上传好代码,上电后,我们可在软件串口监视器中看到当前环境中的温度值和湿度值,如下图。
KE0086-实验15-2.png


实验十六 光敏电阻传感器

实验说明
本实验我们主要用来检测光敏电阻传感器。这个传感器对环境光线最敏感,一般用来检测周围环境的光线的亮度,触发单片机或继电器模块等。实验中将传感器的信号端接到开发板的模拟口A0,在Arduino IDE的串口监视器上可看到对应的模拟值输出。

实验器材

  • 开发板*1
  • USB线*1
  • 光敏电阻传感器*1
  • 杜邦线若干

接线图
KE0086-实验16.png

测试代码

int sensorPin =A0 ;  //定义模拟口A0
int value = 0;    //设置value为0
void setup() 
{
 Serial.begin(9600); //设置波特率
} 
void loop() 
{
value = analogRead(sensorPin);  //将value设置为读取到的A0的数值
Serial.println(value, DEC);  //显示value数值,并自动换行
delay(200);  //延迟0.2秒
}

测试结果
按照上图接好线,上传好代码,上电后,我们可以在软件的串口监视器中看到代表当前光线强弱的模拟值,光线越强,数值越大,如下图。
KE0086-实验16-2.png


实验十七 倾斜模块传感器

实验说明
本实验我们主要用来检测倾斜模块传感器。这个传感器主要是利用滚珠在开关内随不同倾斜角度的发化,达到触发电路的目的;可用于倾斜检测、报警器制作或者其他检测。实验中我们用到了Arduino UNO 板上自带的D13 的指示灯,通过传感器,控制D13 的指示灯的亮灭。

实验器材

  • 开发板*1
  • USB线*1
  • 倾斜模块传感器*1
  • 杜邦线若干

接线图
KE0086-实验17.png

测试代码

int ledPin = 13; //定义数字口13
int switcher = 3; // 定义数字口3
void setup()
{
pinMode(ledPin, OUTPUT); // 将ledPin设置为输出
pinMode(switcher, INPUT); //将switcher设置为输入
}
void loop()
{
if(digitalRead(switcher)==HIGH) //当读取数字口3,并发现为高电平
{
digitalWrite(ledPin, HIGH); // LED亮起
}
else
{
digitalWrite(ledPin, LOW); // LED变暗
}
}

测试结果
按照上图接好线,上传好代码,上电后,倾斜一方时 Arduino UNO 板上的 D13 的指示灯亮,数字倾斜模块上D1灯灭;倾斜另一方时 Arduino UNO 板上的 D13 的指示灯灭,数字倾斜模块上D1灯亮。


实验十八 光折断传感器

实验说明
本实验我们主要用来检测光折断传感器。它主要由光遮断器组成,它属于对射遮断式光电开关光学开关传感器。实验中我们用到了Arduino UNO 板上自带的D13 的指示灯,通过传感器,控制D13 的指示灯的亮灭。

实验器材

  • 开发板*1
  • USB线*1
  • 光折断传感器*1
  • 杜邦线若干

接线图
KE0086-实验18.png

测试代码

int Led = 13 ;//定义数字口13
int buttonpin = 3; //定义数字口3
int val ;//定义数字变量val
void setup ()
{
pinMode (Led, OUTPUT) ; //将Led设置为输出 
pinMode (buttonpin, INPUT) ;//将buttonpin设置为输入 
}
void loop ()
{
val = digitalRead (buttonpin) ;//读取到数字口3的数值,并赋值给 val 
if (val == HIGH)//当val为高电平时,LED亮起
{
digitalWrite (Led, HIGH);// LED亮起
}
else
{
digitalWrite (Led, LOW);// LED变暗
}
}

测试结果
按照上图接好线,烧录好代码,上电后,模块上的D1灯亮起,Arduino UNO 板上的D13 的 LED 指示灯关闭;用纸片挡挡住模块凹槽后,模块上的D1灯关闭,Arduino UNO 板上的D13 的 LED 指示灯亮起。


实验十九 ADXL345加速度传感器

实验说明
本实验我们主要用来检测ADXL345加速度传感器。ADXL345是一款小巧纤薄的低功耗三轴加速度计,它的分辨率为13位,测量范围为±16 g,数字输出数据为 16 位二进制补码格式。它支持I2C和SPI的通信方式。实验中将利用I2C通信,在Arduino IDE的串口监视器上可看到传感器所测数据。

实验器材

  • 开发板*1
  • USB线*1
  • ADXL345加速度传感器*1
  • 杜邦线若干

接线图
KE0086-实验19.png

测试代码

#include <Wire.h>
// Registers for ADXL345
#define ADXL345_ADDRESS (0xA6 >> 1)  // address for device is 8 bit but shift to the
                                     // right by 1 bit to make it 7 bit because the
                                     // wire library only takes in 7 bit addresses
#define ADXL345_REGISTER_XLSB (0x32)
int accelerometer_data[3];
// void because this only tells the cip to send data to its output register
// writes data to the slave's buffer
void i2c_write(int address, byte reg, byte data) {

  // Send output register address
  Wire.beginTransmission(address);
  // Connect to device
  Wire.write(reg);
  // Send data
  Wire.write(data); //low byte
  Wire.endTransmission();
}

// void because using pointers
// microcontroller reads data from the sensor's input register
void i2c_read(int address, byte reg, int count, byte* data) {
  // Used to read the number of data received
  int i = 0;
  // Send input register address
  Wire.beginTransmission(address);
  // Connect to device
  Wire.write(reg);
  Wire.endTransmission();

  // Connect to device
  Wire.beginTransmission(address);
  // Request data from slave
  // Count stands for number of bytes to request
  Wire.requestFrom(address, count);
  while(Wire.available()) // slave may send less than requested
  {
    char c = Wire.read(); // receive a byte as character
    data[i] = c;
    i++;
  }
  Wire.endTransmission();
}

void init_adxl345() {
  byte data = 0;

  i2c_write(ADXL345_ADDRESS, 0x31, 0x0B);   // 13-bit mode  +_ 16g
  i2c_write(ADXL345_ADDRESS, 0x2D, 0x08);   // Power register


  i2c_write(ADXL345_ADDRESS, 0x1E, 0x00);   // x
  i2c_write(ADXL345_ADDRESS, 0x1F, 0x00);   // Y
  i2c_write(ADXL345_ADDRESS, 0x20, 0x05);   // Z
 
  // Check to see if it worked!
  i2c_read(ADXL345_ADDRESS, 0X00, 1, &data);
  if(data==0xE5)
    Serial.println("it work Success");
  else
    Serial.println("it work Fail");
}

void read_adxl345() {
  byte bytes[6];
  memset(bytes,0,6);

  // Read 6 bytes from the ADXL345
  i2c_read(ADXL345_ADDRESS, ADXL345_REGISTER_XLSB, 6, bytes);
  // Unpack data
  for (int i=0;i<3;++i) {
    accelerometer_data[i] = (int)bytes[2*i] + (((int)bytes[2*i + 1]) << 8);
  }
}
// initialise and start everything
void setup() {
  Wire.begin();
  Serial.begin(9600);
  for(int i=0; i<3; ++i) {
    accelerometer_data[i]  = 0;
  }
  init_adxl345();
}

void loop() {
  read_adxl345();
  Serial.print("ACCEL: ");
  Serial.print(float(accelerometer_data[0])*3.9/1000);//3.9mg/LSB scale factor in 13-bit mode
  Serial.print("\t");
  Serial.print(float(accelerometer_data[1])*3.9/1000);

  Serial.print("\t");
  Serial.print(float(accelerometer_data[2])*3.9/1000);
  Serial.print("\n");
  delay(100);
}

库文件下载地址: https://pan.baidu.com/s/1kVkXsm7

测试结果
按照上图接好线,烧录好代码,上电后,打开串口监视器,转动传感器,数值变化显示如下图。
KE0086-实验19-2.png


实验二十 麦克风声音传感器

实验说明
本实验我们主要用来检测麦克风声音传感器。这个传感器的S端是模拟输出,是麦克风的电压信号实时输出,通过电位器可调节信号增益。实验中将传感器的S端接到开发板的模拟口A0,在Arduino IDE的串口监视器上可看到对应的模拟值输出。

实验器材

  • 开发板*1
  • USB线*1
  • 麦克风声音传感器*1
  • 杜邦线若干

接线图
KE0086-实验20.png

测试代码

int sensorPin =A0 ;  //定义模拟口A0
int value = 0;    //设置value为0
void setup() 
{
 Serial.begin(9600); //设置波特率
} 
void loop() 
{
value = analogRead(sensorPin);  //将value设置为读取到的A0的数值
Serial.println(value, DEC);  //显示value数值,并自动换行
delay(100);  //延迟0.1秒
}

测试结果
按照上图接好线,上传好代码,上电后,我们可以在软件的串口监视器相对应模拟值,如下图。声音越大模拟值越大。 KE0086-实验20-2.png


实验二十一 霍尔传感器

实验说明
本实验我们主要用来检测霍尔传感器。传感器输入为磁感应强度,输出是一个数字电压信号。它具有体积小、灵敏度高、响应速度快、温度性能好、可靠性高等特点。产品可用于无触点开关、位置转速检测与控制、全报警装置、纺织控制系统等方面。实验中我们用到了Arduino UNO 板上自带的D13 的指示灯,通过传感器,控制D13 的指示灯的亮灭。

实验器材

  • 开发板*1
  • USB线*1
  • 霍尔传感器*1
  • 杜邦线若干

接线图
KE0086-实验21.png

测试代码

int ledPin = 13; //定义数字口13
int inputPin = 3; //定义数字口3
int val = 0; //定义数字变量val,并设为0
void setup() 
{
pinMode(ledPin, OUTPUT); //将ledPin设置为输出
pinMode(inputPin, INPUT); //将inputPin设置为输入
}
void loop(){
val = digitalRead(inputPin); //读取到数字口3的数值,并赋值给val
if (val == LOW) //当val为低电平时,LED亮起
{  
digitalWrite(ledPin, HIGH); //LED亮起
} 
else 
{
digitalWrite(ledPin, LOW); //LED变暗
}
}

测试结果
按照上图接好线,上传好代码后,上电后,Arduino UNO 板上的 D13 的指示灯关闭,模块上D1灯关闭;当有磁铁靠近模块时, Arduino UNO 板上的 D13 的指示灯亮起,模块上D1灯亮起。


实验二十二 碰撞传感器

实验说明
本实验我们主要用来检测碰撞传感器。当传感器因碰撞物体按下按键时传感器信号端输出低电平信号,释放按键时传感器信号端保持高电平。该传感器可用于3D打印机内做限位开关。实验中我们用到了Arduino UNO 板上自带的D13 的指示灯,通过传感器,控制D13 的指示灯的亮灭。

实验器材

  • 开发板*1
  • USB线*1
  • 碰撞传感器*1
  • 杜邦线若干

接线图
KE0086-实验22.png

测试代码

int Led=13;//定义 LED 接口
int Shock=3;//定义碰撞传感器接口
int val;//定义数字变量 val
void setup()
{
pinMode(Led,OUTPUT);//定义 LED 为输出接口
pinMode(Shock,INPUT);//定义碰撞击传感器为输出接口
}
void loop()
{
val=digitalRead(Shock);//将数字接口 3 的值读取赋给 val
if(val==LOW)//当碰撞传感器检测有信号时,LED 亮起
{
digitalWrite(Led,HIGH); //LED 亮起
}
 else
{
digitalWrite(Led,LOW); //LED 变暗
}
}

测试结果
按照上图接好线,烧录好代码;上电后,将碰撞传感器的小铁片往下压, Arduino UNO 板上的 D13 的指示灯亮起和碰撞模块上D1灯亮起,否则,Arduino UNO 板上的 D13 的指示灯熄灭和碰撞模块上D1灯熄灭。


实验二十三 红外发射传感器和红外接收传感器

实验说明
本实验我们主要用来检测红外发射传感器和红外接收传感器,二者相互搭配使用。红外发射传感器主要由红外发射管等组成,它是可将电能直接转换成近红外光并能辐射出去的发光器件。红外接收传感器主要由红外接收头组成,它是集接收、放大、解调一体的器件,它内部IC就已经完成了解调,输出的就是数字信号。
实验中我们用2块Arduino UNO 板分别搭建红外发射电路和红外接收电路,实验中我们利用红外发射模块发送信号,红外接收模块接收到信号,并进行解码,将结果在Arduino IDE的串口监视器上显示。

实验器材

  • 开发板*2
  • USB线*1
  • 红外发射传感器*1
  • 红外接收传感器*1
  • 杜邦线若干

接线图
红外发射传感器接线图
KE0086-实验23-1.png

红外接收传感器接线图
KE0086-实验23-2.png

测试代码

发射代码:

#include <IRremote.h>
IRsend irsend;
void setup() 
{ 
Serial.begin(9600); 
} 
void loop() 
{ 
for (int i = 0; i < 50; i++) 
{ 
irsend.sendSony(0xa90, 12); // Sony电视电源开关编码
delay(40); 
} 
}

接收代码:

#include <IRremote.h>
int RECV_PIN = 11; //定义数字口11
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
 { 
 Serial.begin(9600);//设置波特率
 irrecv.enableIRIn(); // 使能红外接收
 }
void loop() 
{
if (irrecv.decode(&results)) 
{ 
Serial.println(results.value, HEX); //显示数据
irrecv.resume();
}
}

库文件下载地址: https://pan.baidu.com/s/1pLDpyg7

测试结果
按照上图分别接好线,烧录好代码;上电后,红外发射传感器对准红外接收传感器发送信号,红外发射传感器和红外接收传感器的D1灯快速闪烁,将接了红外接收传感器的arduino板接到电脑,我们可以在串口监视器显示“A90”,如下图。
KE0086-实验23-3.png


实验二十四 超声波传感器

实验说明
本实验我们主要用来检测超声波传感器。该传感器主要用于测距,它具有高精度、盲区(2cm)超近、性能稳定的特点。实验中将传感器的信号端接到开发板的数字口7和数字口8,在Arduino IDE的串口监视器上可看到超声波传感器和前方障碍物之间的距离。

实验器材

  • 开发板*1
  • USB线*1
  • 超声波传感器*1
  • 杜邦线若干

接线图
KE0086-实验24.png

测试代码

#define echoPin 7 // Echo Pin
#define trigPin 8 // Trigger Pin
#define LEDPin 13 // Onboard LED

int maximumRange = 200; // Maximum range needed
int minimumRange = 0; // Minimum range needed
long duration, distance; // Duration used to calculate distance

void setup() {
 Serial.begin (9600);
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);
 pinMode(LEDPin, OUTPUT); // Use LED indicator (if required)
}

void loop() {
/* The following trigPin/echoPin cycle is used to determine the
 distance of the nearest object by bouncing soundwaves off of it. */ 
 digitalWrite(trigPin, LOW); 
 delayMicroseconds(2); 

 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10); 
 digitalWrite(trigPin, LOW);

 duration = pulseIn(echoPin, HIGH);
 
 //Calculate the distance (in cm) based on the speed of sound.
 distance = duration/58.2;
 
 if (distance >= maximumRange || distance <= minimumRange){
 /* Send a negative number to computer and Turn LED ON 
 to indicate "out of range" */
 Serial.println("-1");
 digitalWrite(LEDPin, HIGH); 
 }
 else {
 /* Send the distance to the computer using Serial protocol, and
 turn LED OFF to indicate successful reading. */
 Serial.println(distance);
 digitalWrite(LEDPin, LOW); 
 }
 
 //Delay 50ms before next reading.
 delay(50);
}

测试结果
按照上图接好线,上传好代码,上电后,打开串口监视器,即可看到超声波传感器和前方障碍物之间的距离,单位为cm,显示如下图。 KE0086-实验24-2.png


实验二十五 MQ-2 烟雾传感器

实验说明
本实验我们主要用来检测MQ-2 烟雾传感器。该传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。MQ-2 气体传感器对液化气、丙烷、氢气的灵敏度高,对天然气和其它可燃蒸汽的检测也很理想。它可检测多种可燃性气体,是一款适合多种应用的低成本传感器。 实验中将传感器的A0端接到开发板的模拟口A0,在Arduino IDE的串口监视器上可看到对应的模拟值输出。

实验器材

  • 开发板*1
  • USB线*1
  • MQ-2 烟雾传感器*1
  • 杜邦线若干

接线图
KE0086-实验25-1.png

测试代码

void setup() {
  Serial.begin(9600); //设置波特率
}
void loop() {
  int sensorValue = analogRead(A0); //读取到的A0的数值,并赋值给数字变量sensorValue
  Serial.println(sensorValue, DEC); //显示sensorValue数值,并自动换行
delay(100);  //延迟0.1秒
}

测试结果
按照上图接好线,上传好代码,上电后,传感器上D1灯亮起,调节电位器可调节灵敏度;打开窗口监视器,可看到相对应的模拟值。检测到气体浓度越高,模拟值越大。
KE0086-实验25-2.png


实验二十六 敲击模块传感器

实验说明
本实验我们主要用来检测敲击模块传感器。它主要由SW-280振动开关组成,是电感式接近开关,是在感应震动力大小将感应结果传递到电路装置,并使电路启动工作的电子开关。实验中我们用到了Arduino UNO 板上自带的D13 的指示灯,通过传感器,控制D13 的指示灯的亮灭。

实验器材

  • 开发板*1
  • USB线*1
  • 敲击模块传感器*1
  • 杜邦线若干

接线图
KE0086-实验26.png

测试代码

int Led=13;//定义数字口13
int Shock=3;//定义数字口3
int val;//定义数字变量val
void setup()
{
pinMode(Led,OUTPUT);//将Led设置为输出
pinMode(Shock,INPUT);//将Shock设置为输入
}
void loop()
{
val=digitalRead(Shock);//读取到数字口3的数值,并赋值给val
if(val==LOW)         //当val为低电平时,Led亮起
{
digitalWrite(Led,HIGH); //Led亮起
}
else
{
digitalWrite(Led,LOW); //Led变暗
}
}

测试结果
按照上图接好线,上传好代码,上电后,敲击该模块,Arduino UNO 板上的D13 LED指示灯和模块上D1灯亮起。


实验二十七 电容触摸传感器

实验说明
本实验我们主要用来检测电容触摸传感器。它主要由触摸检测IC等组成。触摸检测IC是为了用可变面积的键取代传统的按钮键而设计的,具有低功耗和宽工作电压的特点。当我们上电之后,传感器需要约0.5sec的稳定时间,此时间段内不要对键进行触摸,此时所有功能都被禁止,始终进行自校准,当键没被触摸时,重校准周期约为4.0sec。传感器可用于防水电器、按钮键取代品等地方。 实验中我们用到了Arduino UNO 板上自带的D13 的指示灯,通过传感器,控制D13 的指示灯的亮灭。

实验器材

  • 开发板*1
  • USB线*1
  • 电容触摸传感器*1
  • 杜邦线若干

接线图
KE0086-实验27.png

测试代码

int ledPin = 13; //定义数字口13
int KEY = 3; //定义数字口3
void setup()
  {
pinMode(ledPin, OUTPUT); //将ledPin设置为输出 
pinMode(KEY, INPUT);    //将KEY设置为输入 
}
void loop()
{
if(digitalRead(KEY)==HIGH) //当数字口3读取为高电平时,LED亮起
{ 
digitalWrite(ledPin, HIGH); // LED亮起
}
else
{
digitalWrite(ledPin, LOW); //LED变暗
}
}

测试结果
按照上图接好线,上传好代码;上电后,按下按键后, 传感器上D2灯亮起,Arduino UNO 板上的 D13指示灯亮起;否则,传感器上D2灯熄灭,Arduino UNO 板上的 D13指示灯熄灭。


实验二十八 摇杆模块传感器

实验说明
本实验我们主要用来检测摇杆模块传感器。它使用5V供电,信号端X,Y接模拟口,原始状态下读出电压为2.5V左右,当随箭头方向按下,读出电压值随着增加,最大到5V,箭头相反方向按下,读出电压值减少,最小为0V;信号端B接数字口,原始状态下输出0,按下输出1。
实验中我们将摇杆模块传感器信号端接到开发板上的两个模拟口和一个数字口上,然后在软件的串口监视器显示对应数据,根据数据,我们可以知道摇杆模块传感器具体状态。

实验器材

  • 开发板*1
  • USB线*1
  • 摇杆模块传感器*1
  • 杜邦线若干

接线图
KE0086-实验28.png

测试代码

int JoyStick_X = 0; //定义模拟口A0
int JoyStick_Y = 1; //定义模拟口A1
int JoyStick_Z = 3; //定义数字口3
void setup()
{
pinMode(JoyStick_Z, INPUT);//将JoyStick_Z设置为输入
Serial.begin(9600); // 设置波特率
}
void loop()
{
int x,y,z; //定义数字变量x y z
x=analogRead(JoyStick_X); //将x设置为读取到的A0的数值
y=analogRead(JoyStick_Y);//将y设置为读取到的A1的数值
z=digitalRead(JoyStick_Z);//将z设置为读取到的数字口3的数值
Serial.print(x ,DEC); //显示x的数值
Serial.print(","); //显示逗号
Serial.print(y ,DEC);//显示y的数值
Serial.print(",");//显示逗号
Serial.println(z ,DEC);//显示z的数值,并自动换行
delay(100);//延迟0.1S
}

测试结果
按照上图接好线,上传好代码,上电后,通电后,将 X 轴向左移,X 轴数据在0-512 范围内,X 轴向右移,X 轴数据在 512-1023 范围内;将 Y 轴向上移,Y 轴数据在 0-512范围内,Y 轴向下移,Y 轴数据在 512-1023 范围内,如附图;Z 轴方向为 0,按下摇杆后,Z 轴显示 1。
KE0086-实验28-2.png


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

实验说明
本实验我们主要用来检测MQ-3 酒精传感器。它所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在酒精蒸汽时,传感器的电导率随空气 中酒精蒸汽浓度的增加而增大。
实验中将传感器的A0端接到开发板的模拟口A0,在Arduino IDE的串口监视器上可看到对应的模拟值输出。

实验器材

  • 开发板*1
  • USB线*1
  • MQ-3 酒精传感器*1
  • 杜邦线若干

接线图
KE0086-实验29.png

测试代码

void setup() {
  Serial.begin(9600); //设置波特率
}
void loop() {
  int sensorValue = analogRead(A0); //读取到的A0的数值,并赋值给数字变量sensorValue
  Serial.println(sensorValue, DEC); //显示sensorValue数值,并自动换行
}

测试结果
按照上图接线,烧录好程序,上电后,传感器上D1灯亮起,调节电位器可调节灵敏度;打开窗口监视器,可看到相对应的模拟值,将酒精靠近传感器时数据增大变化。
KE0086-实验29-2.png


实验三十 避障传感器

实验说明
本实验我们主要用来检测避障传感器。接好线上电后,传感器感应到物体时信号端S输出0,未感应到时信号端S输出1。它可通过调节电位器用来调节感应灵敏度。它速度快,适合智能小车避障、黑白线循迹、防跌落,产品计数器,流水线切割,液位检测等。实验中我们用到了Arduino UNO 板上自带的D13 的指示灯,通过传感器,控制D13 的指示灯的亮灭。

实验器材

  • 开发板*1
  • USB线*1
  • 避障传感器*1
  • 杜邦线若干

接线图
KE0086-实验30.png

测试代码

const int sensorPin = 3; //定义数字口13
const int ledPin = 13; //定义数字口3
int sensorState = 0; //定义数字变量sensorState,并设为0
void setup() 
{
pinMode(ledPin, OUTPUT); //将ledPin设置为输出
pinMode(sensorPin, INPUT);//将sensorPin设置为输入
 }
void loop()
{
sensorState = digitalRead(sensorPin);
//读取到数字口3的数值,并赋值给sensorState
if (sensorState == LOW)  //当sensorState为低电平时,LED亮起
{
digitalWrite(ledPin, HIGH);//LED亮起
}
else 
{
digitalWrite(ledPin, LOW);//LED变暗
}
}

测试结果
按照上图接好线,上传好代码,上电后,通电后,靠近红外发射头的电位器顺时针调到尽头,再调节靠近红外接收头的电位器,观察D1灯,使D1灯关闭,并且保持将要亮起的临界点,此时感应距离最长。没有障碍物挡住红外避障传感器时,红外避障传感器上的D1灯关闭,Arduino UNO 板上的 D13 的指示灯关闭;当用障碍物挡住红外避障传感器,红外避障传感器上的D1灯亮起,Arduino UNO 板上的 D13 的指示灯亮起。


实验三十一 LM35温度传感器

实验说明
本实验我们主要用来检测LM35温度传感器。它的输出电压与摄氏温标呈线性关系,转换公式如式,0时输出为0V,每升高1℃,输出电压增加10mV。 实验中将传感器的信号端接到开发板的模拟口A0,在Arduino IDE的串口监视器上可看到当前环境中的温度值。

实验器材

  • 开发板*1
  • USB线*1
  • LM35温度传感器*1
  • 杜邦线若干

接线图
KE0086-实验31-1.png

测试代码

void setup()
{
Serial.begin(9600);//设置波特率
  }
 void loop()
{ 
int val; //定义数字变量val
int dat;//定义数字变量dat
val=analogRead(0);//将val设置为读取到的A0的数值
dat=(500 * val) /1024; //计算出当前温度数字dat
Serial.print("Temp:"); //显示 Temp: 
Serial.print(dat);  //显示计算的温度值
Serial.println("C");//显示C,并自动换行
delay(500); //延迟0.5S
}

测试结果
按照上图接好线,上传好代码,上电后,我们可以在软件的串口监视器中看到当前环境中的温度值,如下图。
KE0086-实验31-2.png


实验三十二 人体红外热释电传感器

实验说明
本实验我们主要用来人体红外热释电传感器。它是基于红外线技术的自动控制产品。它具有灵敏度高、可靠性强、超低功耗,超低电压工作模式等特点,广泛应用于各类自动感应电器设备,尤其是干电池供电的自动控制产品。我们可以通过调节两个电位器调节感应距离和感应延时。调节距离电位器顺时针旋转,感应距离增大(约7米),反之,感应距离减小(约3米)。调节延时电位器顺时针旋转,感应延时加长(约300S),反之,感应延时减短(约5S)。
实验中我们用到了Arduino UNO 板上自带的D13 的指示灯,通过传感器感应附近是否有人体运动,控制D13 的指示灯的亮灭。

实验器材

  • 开发板*1
  • USB线*1
  • 人体红外热释电传感器*1
  • 杜邦线若干

接线图
KE0086-实验32.png

测试代码

byte sensorPin = 3;//定义数字口3
byte indicator = 13;//定义数字口13
void setup()
{
  pinMode(sensorPin,INPUT);//设置数字口3位输入
  pinMode(indicator,OUTPUT);//设置数字口13为输出
  Serial.begin(9600);//设置波特率
}
void loop()
{
  byte state = digitalRead(sensorPin);//读取到数字口3的数值赋值给state
  digitalWrite(indicator,state);//控制数值口13的状态
  if(state == 1)//当数值口3位高电平时,串口监视器输出对应字符,并自动换行
  Serial.println("Somebody is in this area!");
  else if(state == 0) //当数值口3位低电平时,串口监视器输出对应字符,并自动换行
  Serial.println("No one!");
  delay(500);//延迟0.5秒
}

测试结果
按照上图接好线,上传好代码,上电后,检测到人体运动时Arduino UNO板上D13的指示灯亮起,串口监视器中显示"Somebody is in this area!";没有检测到人体运动时Arduino UNO板上D13的指示灯熄灭,串口监视器中显示"No one!"。
KE0086-实验32-2.png


实验三十三 激光头传感器模块

实验说明
本实验我们主要用来检测激光头传感器模块。它主要由激光头组成,激光头由发光管芯、聚光透镜、铜可调套筒三部分组成。接上电源后,我们在信号端直接输入个高电平数字信号,传感器开始工作。它可用于激光类玩具、电子教鞭笔、电子水平尺、微型液晶投影等地方。实验中我们让激光头传感器模块循环开启,关闭。

实验器材

  • 开发板*1
  • USB线*1
  • 激光头传感器模块*1
  • 杜邦线若干

接线图
KE0086-实验33.png

测试代码

void setup()
{
pinMode(3, OUTPUT); // 定义3脚为数字输出接口
}
void loop() {
digitalWrite(3, HIGH); // 打开激光头
delay(1000); // 延时一秒
digitalWrite(3, LOW); // 关闭激光头
delay(1000); // 延时一秒
}

测试结果
按照上图接好线,上传好代码,上电后,激光头打开1秒,关闭1秒,循环交替。


实验三十四 巡线传感器

实验说明
本实验我们主要用来检测巡线传感器。传感器上的TCRT5000红外对管的工作原理是利用红外线对颜色的反射率不一样,将反射信号的强弱转化成电流信号。传感器在检测到黑色高电平有效,检测到白色是为低电平有效,检测高度为 0—3cm。在电路中你可以使用旋钮电位器来调黑白寻迹的灵敏度。 实验中将传感器的S端接到开发板的数字口D3,在Arduino IDE的串口监视器上可看到对应的数值输出。

实验器材

  • 开发板*1
  • USB线*1
  • 巡线传感器*1
  • 杜邦线若干

接线图
KE0086-实验34-1.png

测试代码

void setup()
{
  Serial.begin(9600);//设置波特率
}
void loop()
{
  Serial.println(digitalRead(3)); // 输出从数字口3读取到的数值,并自动换行
  delay(500);//延迟0.5秒
}

测试结果
按照上图接好线,上传好代码,上电后,传感器在检测到黑色时,信号端输出高电平,串口监视器显示1,传感器上D1指示灯熄灭;传感器在检测到其他颜色时,信号端输出低电平,串口监视器显示0,传感器上D1指示灯亮起。旋转电位器可调节灵敏度,将D1调节至亮与不亮的临界点时,灵敏度最高。
KE0086-实验34-2.png


实验三十五 18B20温度传感器

实验说明
本实验我们主要用来检测18B20温度传感器。该传感器主要由DS18B20可编程数字温度器等组成,具有体积小,抗干扰能力强,精度高的特点。它的测温范围 -55℃~+125℃,固有测温误差是1℃。 实验中将传感器的信号端接到开发板的数字口3,在Arduino IDE的串口监视器上可看到当前环境中的温度值。

实验器材

  • 开发板*1
  • USB线*1
  • 18B20温度传感器*1
  • 杜邦线若干

接线图
KE0086-实验35-1.png

测试代码

#include <OneWire.h>
int DS18S20_Pin = 3; //定义数字口3
OneWire ds(DS18S20_Pin);  
 void setup(void) {
  Serial.begin(9600); //设置波特率
}
 void loop(void) {
  float temperature = getTemp(); //调用函数计算温度值
  Serial.println(temperature); //显示温度值,并自动换行
  delay(100); //延迟0.1S   
}
float getTemp(){
  //returns the temperature from one DS18S20 in DEG Celsius
  byte data[12];
  byte addr[8];
  if ( !ds.search(addr)) {
      //no more sensors on chain, reset search
      ds.reset_search();
      return -1000;
  }
  if ( OneWire::crc8( addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
      return -1000;
  }
  if ( addr[0] != 0x10 && addr[0] != 0x28) {
      Serial.print("Device is not recognized");
      return -1000;
  }
  ds.reset();
  ds.select(addr);
  ds.write(0x44,1); // start conversion, with parasite power on at the end
  byte present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE); // Read Scratchpad  
  for (int i = 0; i < 9; i++) { // we need 9 bytes
    data[i] = ds.read();
  }
  ds.reset_search();  
  byte MSB = data[1];
  byte LSB = data[0];
  float tempRead = ((MSB << 8) | LSB); //using two's compliment
  float TemperatureSum = tempRead / 16;  
  return TemperatureSum;   
}

库文件下载地址: https://pan.baidu.com/s/1o7HKVKQ

测试结果
按照上图接好线,上传好代码,通电后,我们可在软件串口监视器中看到当前环境温度值,如下图。

KE0086-实验35-2.png


实验三十六 TEMT6000光线传感器

实验说明
本实验我们主要用来检测TEMT6000光线传感器它主要由一个高灵敏可见光光敏(NPN型)三极管构成,可以将捕获的微小光线变化并放大100倍左右,并且轻松的被微控制器识别,进行AD转换。它对可见光照度的反应特性与人眼的特性类似,可以模拟人对环境光线的强度的判断,从而方便做出与人友好互动的应用。 实验中将传感器的S接到开发板的模拟口A0,在Arduino IDE的串口监视器上可看到对应的模拟值输出。

实验器材

  • 开发板*1
  • USB线*1
  • TEMT6000光线传感器*1
  • 杜邦线若干

接线图
KE0086-实验36.png

测试代码

void setup() {
  Serial.begin(9600); //设置波特率
}
void loop() {
  int sensorValue = analogRead(A0); //读取到的A0的数值,并赋值给数字变量sensorValue
  Serial.println(sensorValue, DEC); //显示sensorValue数值,并自动换行
  delay(100); //延迟0.1秒
}

测试结果
按照上图接线,上传好程序,上电后,打开窗口监视器,设置波特率为9600,即可看到代表当前光照强度的模拟值,如下图。
KE0086-实验36-2.png


相关资料链接

https://pan.baidu.com/s/1i51WsFN