找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
楼主: eagler8
收起左侧

【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)

  [复制链接]
ID:513258 发表于 2019-6-16 16:25 | 显示全部楼层
用打火机的丁烷气体做测试


14- (1).jpg

回复

使用道具 举报

ID:513258 发表于 2019-6-16 16:38 | 显示全部楼层
第一次实验的串口数据


15 (1).jpg

回复

使用道具 举报

ID:513258 发表于 2019-6-16 16:41 | 显示全部楼层
第二次实验


15-2 (1).jpg

回复

使用道具 举报

ID:513258 发表于 2019-6-16 16:46 | 显示全部楼层
实验的波形图,检测到丁烷气体挺敏感


16.jpg

回复

使用道具 举报

ID:513258 发表于 2019-6-16 17:03 | 显示全部楼层
17.jpg
回复

使用道具 举报

ID:513258 发表于 2019-6-16 17:03 | 显示全部楼层
18 (1).jpg
回复

使用道具 举报

ID:513258 发表于 2019-6-16 17:22 | 显示全部楼层
19.jpg
回复

使用道具 举报

ID:513258 发表于 2019-6-17 17:12 | 显示全部楼层
实验二十六:4X4矩阵键盘模块(轻触式按键)


矩阵键盘
是单片机外部设备中所使用的排布类似于矩阵的键盘组。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。由于电路设计时需要更多的外部输入,单独的控制一个按键需要浪费很多的IO资源,所以就有了矩阵键盘,常用的矩阵键盘有4X4和8X8,其中用的最多的是4X4。


0.jpg


回复

使用道具 举报

ID:513258 发表于 2019-6-17 17:54 | 显示全部楼层
工作原理
矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4X4个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。由于单片机IO端口具有线与的功能,因此当任意一个按键按下时,行和列都有一根线被线与,通过运算就可以得出按键的坐标从而判断按键键值。


03-7.jpg


回复

使用道具 举报

ID:513258 发表于 2019-6-17 18:14 | 显示全部楼层
行列扫描法原理
1、使行线为编程的输入线,列线是输出线,拉低所有的列线,判断行线的变化,如果有按键按下,按键按下的对应行线被拉低,否则所有的行线都为高电平。
2、在第一步判断有键按下后, 延时10ms消除机械抖动,再次读取行值,如果此行线还处于低电平状态则进入下 一步,否则返回第一步重新判断。
3、开始扫描按键位置,采用逐 行扫描,每间隔1ms的时间,分别拉低第一列,第二列,第三列,第四 列,无论拉低哪一列其他三列都为高电平,读取行值找到按键的位置,分别把行值和列值储存在寄存器里。
4、从寄存器中找到行值和列 值并把其合并,得到按键值,对此按键值进行编码,按照从第一行第一个一直到第四行第四个逐行进行编码,编码值从“0000” 至“1111” , 再进行译码,最后显示按键号码。


03--.jpg


回复

使用道具 举报

ID:513258 发表于 2019-6-17 18:48 | 显示全部楼层
4X4矩阵4管脚直插按键键盘
(1)体积小;
(2)节省空间;
(3)使用方便;
(4)共计16按键;
(5)单片机外扩键盘的上佳选择。


01.jpg


回复

使用道具 举报

ID:513258 发表于 2019-6-17 19:30 | 显示全部楼层
矩阵键盘所需库文件
在Arduino IDE 1.8.0 或者以上版本中, 项目->加载库->管理库中搜索Keypad,然后安装即可。
也可以在下载库(需要下载库文件 https://github.com/Chris--A/Keypad),然后手动添加到IDE中。
01-0 (1).jpg

回复

使用道具 举报

ID:513258 发表于 2019-6-17 19:42 | 显示全部楼层
安装4*4矩阵键盘
4*4矩阵键盘有一个8孔的排母,理论上可以直接插到0-7脚上,但0,1脚用于串口通信,所以只能选择2~13脚,这里选用了2-9脚。


Keypad Pin R1 –> Arduino Pin 2
Keypad Pin R2 –> Arduino Pin 3
Keypad Pin R3 –> Arduino Pin 4
Keypad Pin R4 –> Arduino Pin 5
Keypad Pin C1 –> Arduino Pin 6
Keypad Pin C2 –> Arduino Pin 7
Keypad Pin C3 –> Arduino Pin 8
Keypad Pin C4 –> Arduino Pin 9
02 (1).jpg


回复

使用道具 举报

ID:513258 发表于 2019-6-17 19:48 | 显示全部楼层
  1. /*
  2. 【Arduino】37种传感器模块系列实验(26)
  3. 实验二十六:4X4矩阵键盘模块(12键示例代码)
  4. */

  5. #include <Keypad.h>

  6. const byte ROWS = 4;
  7. const byte COLS = 3;

  8. char keys[ROWS][COLS] = {
  9.   {'1','2','3'},
  10.   {'4','5','6'},
  11.   {'7','8','9'},
  12.   {'#','0','*'}
  13. };
  14. byte rowPins[ROWS] = {5, 4, 3, 2};
  15. byte colPins[COLS] = {8, 7, 6};

  16. Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

  17. void setup(){
  18.   Serial.begin(9600);
  19. }

  20. void loop(){
  21.   char key = keypad.getKey();

  22.   if (key != NO_KEY){
  23.     Serial.println(key);
  24.   }
  25. }
复制代码


回复

使用道具 举报

ID:513258 发表于 2019-6-17 19:56 | 显示全部楼层
07.jpg
回复

使用道具 举报

ID:513258 发表于 2019-6-17 20:00 | 显示全部楼层
这是一个非常简单的示例,可以看到将键盘输入添加到Arduino程序中是多么容易。也可以将此类输入用于许多不同的项目,包括:
●    门锁
●    输入PWM
●    闹钟
●    安全锁等


06.jpg


回复

使用道具 举报

ID:513258 发表于 2019-6-17 20:07 | 显示全部楼层
  1. /*
  2. 【Arduino】37种传感器模块系列实验(26)
  3. 实验二十六:4X4矩阵键盘模块(16键示例代码)
  4. */

  5. #include <Keypad.h>

  6. const byte ROWS = 4;
  7. const byte COLS = 4;

  8. char hexaKeys[ROWS][COLS] = {
  9.   {'1','2','3','A'},
  10.   {'4','5','6','B'},
  11.   {'7','8','9','C'},
  12.   {'*','0','#','D'}
  13. };

  14. byte rowPins[ROWS] = {2, 3, 4, 5};
  15. byte colPins[COLS] = {6, 7, 8, 9};

  16. Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

  17. void setup(){
  18.   Serial.begin(9600);
  19. }

  20. void loop(){
  21.   char customKey = customKeypad.getKey();

  22.   if (customKey){
  23.     Serial.println(customKey);
  24.   }
  25. }
复制代码


回复

使用道具 举报

ID:513258 发表于 2019-6-17 20:07 | 显示全部楼层
08.jpg
回复

使用道具 举报

ID:513258 发表于 2019-6-17 20:16 | 显示全部楼层
程序思路
1
#include <Keypad.h>   //加载库


2
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};//建立二维数组,用于设置按键的输出字符


3
byte rowPins[ROWS] = {2,3,4,5};   //定义行引脚
byte colPins[COLS] = {6,7,8,9};     //定义列引脚


4
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //实例化Keypad 对象


5
char key = keypad.getKey();//新建一个key 变量 用于获取键盘当前的值

02 (2) (1).jpg


回复

使用道具 举报

ID:513258 发表于 2019-6-17 20:54 | 显示全部楼层
4X4矩阵键盘模块的一些应用电路


10 (6).jpg



10 (1).jpg



10 (3).jpg

回复

使用道具 举报

ID:513258 发表于 2019-6-17 20:57 | 显示全部楼层
10 (8).jpg

10 (9).jpg


10 (10).jpg

回复

使用道具 举报

ID:513258 发表于 2019-6-17 21:00 | 显示全部楼层
12.jpg
回复

使用道具 举报

ID:513258 发表于 2019-6-18 06:27 | 显示全部楼层
实验二十七:GY-BMP280-3.3 高精度大气压强传感器模块


BMP280
博世Sensortec - BMP280 是一种专为移动应用设计的绝对气压传感器。该传感器模块采用极其紧凑的封装。得益于小尺寸和低功耗特性,这种器件可用在如移动电话、GPS 模块或手表等电池供电型设备中。与上代产品相同,BMP180、BMP280 也基于Bosch 成熟的压阻式压力传感器技术,具有高确度和线性度,以及长期稳定性和很高的 EMC 稳健性。多种设备工作选择带来了最高灵活性,可以在功耗、分辨率和滤波性能方面对设备进行优化。
0.jpg


回复

使用道具 举报

ID:513258 发表于 2019-6-18 06:55 | 显示全部楼层
BMP280是博世最新推出的数字气压传感器,具有卓越的性能和低廉的价格,相对精度为±0.12 hPa(相当于±1米),传感器功耗仅有2.7μA。BMP280具有业界最小封装,采用极其紧凑的8引脚金属盖LGA封装,占位面积仅为2.0×2.5mm2,封装高度为0.95 mm。包括有压力和温度测量功能。该气压传感器支持SPI和IIC通信接口,相比上一代的BMP180,精度已有相当大的提升,非常适合应用于低成本的多旋翼飞行器飞行控制器上,价格仅有目前流行的MS5611的四分之一。传感器模块它的小尺寸和2.74μA@ 1Hz的低功耗允许在电池驱动的设备中实现。门内导航,医疗保健以及GPS改进的新兴应用需要高相对精度和低TCO。

0--.jpg


回复

使用道具 举报

ID:513258 发表于 2019-6-18 07:07 | 显示全部楼层
BMP280芯片结构图


01-.jpg

回复

使用道具 举报

ID:513258 发表于 2019-6-18 07:16 | 显示全部楼层
BMP280非常适用于地板水平检测等应用,因为传感器具有±0.12 hPa的优异相对精度,相当于±1m高度差,偏移温度系数(TCO)仅为1.5 Pa / K(相当于12.6厘米/ K)。作为广泛实施的BMP180的继承者,BMP280最初在2011年开始大量使用手机中的气压测量,BMP280在所有需要精确压力测量的应用中实现了高性能。同时,BMP280具有更高的应用灵活性,新的滤波器模式和SPI接口,而且相对于BMP180,占位面积缩小了63%。


0-0.jpg

回复

使用道具 举报

ID:513258 发表于 2019-6-18 07:23 | 显示全部楼层
技术规格
1、气压工作范围 300 hPa 至 1100 hPa(全精度)
2、工作温度范围 -40°C 至 +85°C
3、相对的绝对精度 ±0.12 hPa(典型值)
4、平均测量时间 5.5 ms
5、工作电压 VDD 1.71 V 至 3.6 V
6、电源电压 VDDIO 1.2 V 至 3.6 V
7、I2C 和串行外设接口 (SPI)
8、平均电流消耗典型值(1Hz数据刷新率):2.74μA(超低功耗模式);睡眠模式下的平均电流消耗:0.1μA
9、封装规格 2.0 mm x 2.5 mm x 0.95 mm,8 引脚 LGA,全金属封装
01.jpg


回复

使用道具 举报

ID:513258 发表于 2019-6-18 07:34 | 显示全部楼层
应用范围
1、GPS 导航增强(例如改进初次定位时间、航位推算、斜率检测)
2、室内导航(室内检测、电梯检测)
3、户外导航,休闲和运动应用
4、天气预报
5、健康保健应用(如肺活量测定)
6、垂直速度指示(如上升/下沉速度)

0-1.jpg


回复

使用道具 举报

ID:513258 发表于 2019-6-18 09:03 | 显示全部楼层
GY-BMP280-3.3 高精度大气压强传感器模块
是个低功耗数字复合传感器,它可以测量环境温度和大气压强。气压敏感元件是一个低噪高精度高分辨率绝对大气压力压电式感应元件;温度感测元件具有低噪高分辨率特性,温度值可以对气压进行温度补偿自校正。通过配置采样率寄存器,可以设置敏感元件的采样率。非常适合空间有限的移动设备,如智能是手机、平板电脑、智能手表和可穿戴设备、天气预报、垂直速度指示、飞控设备、室内室外导航、智能家居装置。


03.jpg


回复

使用道具 举报

ID:513258 发表于 2019-6-18 09:50 | 显示全部楼层
模块电原理图


03-.jpg

回复

使用道具 举报

ID:513258 发表于 2019-6-18 10:43 | 显示全部楼层
Adafruit_BMP280_Library,用于BMP280传感器的Arduino库


下载地址
https://github.com/adafruit/Adafruit_BME280_Library
https://github.com/mahfuz195/BMP280-Arduino-Library
https://github.com/adafruit/Adafruit_BMP280_Library/releases(最新版本1.0.3)


03--.jpg


回复

使用道具 举报

ID:513258 发表于 2019-6-18 11:43 | 显示全部楼层
还需要下载这个库--Adafruit_Sensor
https://github.com/adafruit/Adafruit_Sensor

回复

使用道具 举报

ID:513258 发表于 2019-6-18 11:51 | 显示全部楼层
需要的材料和硬件连接
注意的是这块板子的额定电压是3.3v,且同时支持两种连接方式: I2C 和 SPI ,下面的连接方式是SPI的连接方式和程序。
04 (2).jpg

04 (4).jpg


回复

使用道具 举报

ID:513258 发表于 2019-6-18 11:59 | 显示全部楼层
左边的是BMP280的6个接口,右边是Arduino的6个接口,两者用杜邦线连接即可。将USB线缆连接到电脑,选择好合适的开发板以及端口,上传并打开串口监视器,查看数值变化。


GY-BMP 280        Arduino UNO
VCC                                 3.3v
GND                                 gnd
SCL                                 13
SDA                                 11
CSB                                 10
SDO                                 12


备注:不要使用5V,可能会损坏BMP280传感器


04 (12).jpg

04 (6).jpg


回复

使用道具 举报

ID:513258 发表于 2019-6-18 12:03 | 显示全部楼层
05.jpg
回复

使用道具 举报

ID:513258 发表于 2019-6-18 12:06 | 显示全部楼层
  1. /*
  2. 【Arduino】37种传感器模块系列实验(27)
  3. 实验二十七:GY-BMP280-3.3 高精度大气压强传感器模块(高度与温度计)
  4. */

  5. #include <Wire.h>
  6. #include <SPI.h>
  7. #include <Adafruit_Sensor.h>  
  8. #include <Adafruit_BMP280.h>

  9. #define BMP_SCK 13  
  10. #define BMP_MISO 12
  11. #define BMP_MOSI 11
  12. #define BMP_CS 10

  13. //Adafruit_BMP280 bmp;
  14. //Adafruit_BMP280 bmp(BMP_CS);
  15. Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO,  BMP_SCK);  

  16. void setup() {
  17.   Serial.begin(9600);
  18.   Serial.println(F("BMP280 测试"));
  19.   
  20.   if (!bmp.begin()) {  
  21.     Serial.println(F("找不到对应的传感器"));
  22.     while (1);
  23.   }
  24. }

  25. void loop() {
  26.     Serial.print(F("温度 = "));
  27.     Serial.print(bmp.readTemperature());
  28.     Serial.println(" *C");
  29.    
  30.     Serial.print(F("气压 = "));
  31.     Serial.print(bmp.readPressure());
  32.     Serial.println(" Pa");

  33.     Serial.print(F("海拔 = "));
  34.     Serial.print(bmp.readAltitude(1013.25));
  35.     Serial.println(" m");
  36.    
  37.     Serial.println();
  38.     delay(2000);
  39. }
复制代码


回复

使用道具 举报

ID:513258 发表于 2019-6-18 12:44 | 显示全部楼层
05-.jpg
回复

使用道具 举报

ID:513258 发表于 2019-6-18 12:44 | 显示全部楼层
06.jpg
回复

使用道具 举报

ID:513258 发表于 2019-6-18 13:25 | 显示全部楼层
实验二十八:5050 RGB全彩LED模块 KY-009


5050 RGB灯珠是LED灯珠的一种,5050是以产品尺寸命名而来,RGB是指红光、绿光、蓝光三基色。主要特点有:
1、低电压驱动,环保节能;
2、体积小,安装简便;
3、亮度高,散射角度大,一致性好
4、主要应用于LED 软灯条、LED 硬灯条、LED 模组、LED 背光源等。


00.jpg


回复

使用道具 举报

ID:513258 发表于 2019-6-18 14:36 | 显示全部楼层
内部结构与规格图


03-.jpg

03.jpg

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表