找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
楼主: eagler8
打印 上一主题 下一主题
收起左侧

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

  [复制链接]
1601#
ID:513258 发表于 2019-8-5 13:07 | 只看该作者
  1. /*
  2. 【Arduino】66种传感器模块系列实验(82)
  3. 实验八十二: MQ135空气质量检测传感器模块(有害物体 氨气 硫化物检测)
  4. 程序之二,使用MQ135库
  5. VCC 5V
  6. GND GND
  7. AO  A0
  8. DO  D3
  9. */

  10. #include "MQ135.h"
  11. const int ANALOGPIN=0;
  12. MQ135 gasSensor = MQ135(ANALOGPIN);

  13. void setup()
  14. {
  15.   Serial.begin(9600);     
  16. }

  17. void loop()
  18. {
  19.   float ppm = gasSensor.getPPM();
  20.   Serial.println(ppm);
  21.   delay(1000);
  22. }
复制代码

回复

使用道具 举报

1602#
ID:513258 发表于 2019-8-5 13:25 | 只看该作者

回复

使用道具 举报

1603#
ID:513258 发表于 2019-8-5 13:27 | 只看该作者
实验表明
1、使用优化的"MQ135"库非常有必要,检测性能大幅度提高;
2、MQ-135 可以检测上述提及的气体,但它并不能区别这些气体。如果你想检测某种具体的气体在空气中的含量,那你可能需要寻找其他更好的传感器了~
3、MQ-135使用一个加热模块来预热传感器,工作电流180毫安左右,因此建议使用容量大一点的电源才不会很快就耗尽电量。




回复

使用道具 举报

1604#
ID:513258 发表于 2019-8-5 14:10 | 只看该作者

回复

使用道具 举报

1605#
ID:513258 发表于 2019-8-5 14:13 | 只看该作者

回复

使用道具 举报

1606#
ID:513258 发表于 2019-8-5 15:14 | 只看该作者
实验八十三: 4路TTP224电容式触摸模块 人体数字触摸传感器

TTP224
是一款使用电容式感应原理设计的触摸IC,其稳定的感应方式可以应用到各种不同电子类产品,面板介质可以是完全绝源的材料,专为取代传统的机械结构开关或普通按键而设计,提供4个触摸输入端口及4个直接输出端口。




回复

使用道具 举报

1607#
ID:513258 发表于 2019-8-5 16:11 | 只看该作者

回复

使用道具 举报

1608#
ID:513258 发表于 2019-8-5 16:19 | 只看该作者
TTP224特点
ƒ 1、工作电压 2.4V~5.5V;
ƒ 2、可以由外部Option选择是否启用内部稳压电路功能;
ƒ 3、工作电流@VDD=3V无负载时: 低功耗模式下典型值2.5uA ,快速模式下典型值9uA ;
ƒ 4、@VDD=3V时,在快速模式下KEY最快响应时间为100mS,低功耗模式下为200mS;
ƒ 5、各KEY灵敏度可以由外部电容进行调节(0~50pF);
ƒ 6、提供LPMB端口选择快速模式或低功耗模式;
ƒ 7、提供直接输出模式,触发模式,开漏输出, CMOS高电平有效或低电平有效输出, 经由TOG/AHLB/OD端口选择;
ƒ 8、提供两个无二极管保护的输出端口TPQ0D,TPQ2D仅限于低电平有效;
ƒ 9、提供MOT1, MOT0端口选择最大输出时间:120秒/64秒/16秒/无穷大;
ƒ 10、上电后约有0.5秒的系统稳定时间,在此期间内不要触摸Touch PAD,且触摸功能无效;
ƒ 11、有自动校准功能,当无按键被触摸时,系统重新校准周期约为4.0秒。




回复

使用道具 举报

1609#
ID:513258 发表于 2019-8-5 16:21 | 只看该作者

回复

使用道具 举报

1610#
ID:513258 发表于 2019-8-5 16:23 | 只看该作者

回复

使用道具 举报

1611#
ID:513258 发表于 2019-8-5 16:25 | 只看该作者

回复

使用道具 举报

1612#
ID:513258 发表于 2019-8-5 16:26 | 只看该作者

回复

使用道具 举报

1613#
ID:513258 发表于 2019-8-5 16:28 | 只看该作者

回复

使用道具 举报

1614#
ID:513258 发表于 2019-8-5 16:30 | 只看该作者
4路TTP224电容式触摸模块 人体数字触摸传感器



回复

使用道具 举报

1615#
ID:513258 发表于 2019-8-5 17:04 | 只看该作者
1、板载TTP224电容式4键触摸感应IC
2、板载4路电平状态指示灯
3、工作电压:2.4V-5.5V
4、模块可以设置输出模式、键输出模式、最长输出时间和快速/低功耗选择
5、PCB板子尺寸:35(mm)x29(mm)



回复

使用道具 举报

1616#
ID:513258 发表于 2019-8-5 18:10 | 只看该作者
模块电原理图






回复

使用道具 举报

1617#
ID:513258 发表于 2019-8-5 18:54 | 只看该作者

回复

使用道具 举报

1618#
ID:513258 发表于 2019-8-5 19:17 | 只看该作者
  1. /*
  2.   【Arduino】66种传感器模块系列实验(81)
  3. 实验八十三: 4路TTP224电容式触摸模块 人体数字触摸传感器
  4. 对应按键输出数字
  5. */

  6. int i;

  7. void setup()
  8. {

  9. for(i=4; i<=7; i++)
  10. {
  11. pinMode(i, INPUT);

  12. }
  13. Serial.begin(9600);
  14. }

  15. void loop()
  16. {
  17. for(i=4; i<=7; i++)
  18. {
  19. if(digitalRead(i) == HIGH)
  20. {
  21. Serial.println(i-3);
  22. }
  23. }
  24. delay(100);
  25. }
复制代码


回复

使用道具 举报

1619#
ID:513258 发表于 2019-8-5 19:32 | 只看该作者

回复

使用道具 举报

1620#
ID:513258 发表于 2019-8-5 19:43 | 只看该作者
  1. /*
  2.   【Arduino】66种传感器模块系列实验(81)
  3. 实验八十三: 4路TTP224电容式触摸模块 人体数字触摸传感器
  4. 程序之二,稳定性很好,不易误触发
  5. 模块上的1,2,3,4对应于单片机上的7,6,5,4
  6. 其中引入了布尔型M,主要是为了实现,在按下到松开这个过程中,
  7. 仅输出一次高电平,即输出语句只输出一句,来避免一直输出。
  8. */

  9. #include <Arduino.h>

  10. int i;
  11. boolean m=true;
  12. void setup()
  13. {
  14.   Serial.begin(9600);
  15.   
  16. }

  17. void loop()
  18. {  
  19.      if(m==true){
  20.         for(i=0;i<5;i++){
  21.         if(digitalRead(8-i)==1){
  22.           delay(50);
  23.             if(digitalRead(8-i)==1){
  24.               Serial.print("hello ");
  25.               Serial.print(i);
  26.               Serial.println(" ---");
  27.               m=false;
  28.             }
  29.           }
  30.         }
  31.      }
  32.      
  33.       if(digitalRead(4)==0 && digitalRead(5)==0 && digitalRead(6)==0 && digitalRead(7)==0)
  34.       {m=true;}
  35. }

复制代码


回复

使用道具 举报

1621#
ID:513258 发表于 2019-8-5 19:47 | 只看该作者

回复

使用道具 举报

1622#
ID:513258 发表于 2019-8-5 20:31 | 只看该作者

回复

使用道具 举报

1623#
ID:513258 发表于 2019-8-5 20:40 | 只看该作者
  1. /*
  2.   【Arduino】66种传感器模块系列实验(81)
  3. 实验八十三: 4路TTP224电容式触摸模块 人体数字触摸传感器
  4. 程序之三,使用4路触控模块的其中3个开关,当作LED灯的开关、调亮和调暗控制界面
  5. */

  6. const byte LED_PIN = 5;    // LED灯的接脚
  7. const byte PWR_LED = 13;   // 电源指示灯的接脚

  8. bool powerOn = false;   // LED电源是否开启,默认“否”
  9. bool btnStatus;         // 按钮状态
  10. int pwmVal = 0;         // 电源输出值

  11. // 宣告触键的自订结构类型
  12. typedef struct {
  13.   byte pin;         // 按键的接脚编号
  14.   bool lastStatus;  // 上次的状态
  15. } key;

  16. // 宣告电源键的接脚和默认状态
  17. key powerKey = { 10, LOW };

  18. // 宣告“调亮”键的接脚和默认状态
  19. key upKey = { 11, LOW };

  20. // 宣告“调暗”键的接脚和默认状态
  21. key downKey = { 12, LOW };

  22. void setup() {
  23.   Serial.begin(9600);
  24.   pinMode(powerKey.pin, INPUT);
  25.   pinMode(upKey.pin, INPUT);
  26.   pinMode(downKey.pin, INPUT);
  27.   pinMode(LED_PIN, OUTPUT);
  28.   pinMode(PWR_LED, OUTPUT);
  29. }

  30. void loop() {
  31.   // 读取电源键的状态
  32.   btnStatus = digitalRead(powerKey.pin);

  33.   // 如果电源键的讯号从低电位变成高电位…
  34.   if (btnStatus && powerKey.lastStatus == LOW) {
  35.     powerOn = !powerOn;  // 反相电源状态
  36.     digitalWrite(PWR_LED, powerOn);

  37.     if (powerOn) {  // 若powerOn为true…
  38.       // 依照pwmVal的值点亮LED
  39.       analogWrite(LED_PIN, pwmVal);
  40.     } else {
  41.      // 关闭LED灯
  42.      digitalWrite(LED_PIN, LOW);
  43.     }
  44.   }
  45.   // 纪录这次的电源键讯号状态
  46.   powerKey.lastStatus = btnStatus;

  47.   // 读取“调亮”键的状态
  48.   btnStatus = digitalRead(upKey.pin);
  49.    
  50.   // 若“有开启电源”且“此按键讯号是高电位”且“前次讯号是低电位”
  51.   if (powerOn && btnStatus && upKey.lastStatus == LOW) {
  52.     // 增加亮度值,每次增加10,不能超过255。
  53.     if ((pwmVal+10) <= 255) { pwmVal += 10;
  54.     Serial.println(pwmVal);
  55.     analogWrite(LED_PIN, pwmVal); } }
  56.     upKey.lastStatus = btnStatus; // 读取“调暗”键的状态
  57.     btnStatus = digitalRead(downKey.pin);
  58.     if (powerOn && btnStatus && downKey.lastStatus == LOW) { // 减少亮度值,最低值为0
  59.       if ((pwmVal-10) >= 0) {
  60.     }
  61.       pwmVal -= 10;
  62.       Serial.println(pwmVal);
  63.       analogWrite(LED_PIN, pwmVal);
  64.     }
  65.   downKey.lastStatus = btnStatus;
  66. }
复制代码


回复

使用道具 举报

1624#
ID:513258 发表于 2019-8-5 20:44 | 只看该作者

回复

使用道具 举报

1625#
ID:513258 发表于 2019-8-5 20:57 | 只看该作者

回复

使用道具 举报

1626#
ID:513258 发表于 2019-8-6 07:47 | 只看该作者
实验八十四: 8位LED数码管MAX7219模块(支持级联八位串行3个IO口控制)

MAX7219
是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。只有一个外部寄存器用来设置各个LED的段电流。








回复

使用道具 举报

1627#
ID:513258 发表于 2019-8-6 07:51 | 只看该作者
一个方便的四线串行接口可以联接所有通用的微处理器。每个数据可以寻址在更新时不需要改写所有的显示。MAX7219同样允许用户对每一个数据选择编码或者不编码。整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。只需要3个IO口即可驱动8位数码管!数码管显示时无闪烁!支持级联!


回复

使用道具 举报

1628#
ID:513258 发表于 2019-8-6 08:04 | 只看该作者
MAX7219/MAX7221
是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。 只有一个外部寄存器用来设置各个LED的段电流。 MAX7221与SPI™、 QSPI™以及 MICROWIRE™相兼容,同时它有限制回转电流的段驱动来减少EMI(电磁干扰)。 一个方便的四线串行接口可以联接所有通用的微处理器。 每个数据可以寻址在更新时不需要改写所有的显示。MAX7219/MAX7221同样允许用户对每一个数据选择编码或者不编码。 整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。

功能特点
1 10MHz连续串行口
2 独立的LED段控制
3 数字的译码与非译码选择
4 150μA的低功耗关闭模式
5 亮度的数字和模拟控制
6 高电压中断显示
7 共阴极LED显示驱动
8 限制回转电流的段驱动来减少EMI(MAX7221)
9 SPI, QSPI, MICROWIRE串行接口(MAX7221)
10 24脚的 DIP和 SO 封装




回复

使用道具 举报

1629#
ID:513258 发表于 2019-8-6 08:15 | 只看该作者
管脚描述
管脚 名称 功能
1 DIN 串行数据输入端口。在时钟上升沿时数据被载入内部的16位寄存器。 2,3,5-8,10,11 DIG 0–DIG7 八个数据驱动线路置显示器共阴极为低电平。关闭时7219此管脚输出高电平,7221呈现高阻抗。
4,9 GND 地线 (4脚和9脚必须同时接地)
12 LOAD (MAX7219) 载入数据。连续数据的后16位在LOAD端的上升沿时被锁定。
CS (MAX7221) 片选端。该端为低电平时串行数据被载入移位寄存器。连续数据的后16位在cs端的上升沿时被锁定。
13 CLK 时钟序列输入端。最大速率为 10MHz.在时钟的上升沿, 数据移入内部移位寄存器。 下降沿时, 数据从DOUT端输出。MAX7221来说,只有当cs端为低电平时时钟输入才有效。
14-17,20-23 SEG 7 段和小数点驱动,为显示器提供电流。当一个段驱
A–SEG G, 动关闭时,7219的此端呈低电平,7221呈现高阻抗。
DP
18 SET 通过一个电阻连接到VDD 来提高段电流。
19 V+ 正极电压输入,+5V
24 DOUT 串行数据输出端口,从DIN输入的数据在16.5个时钟周期后在此端有效。当使用多个MAX7219/MAX7221时用此端方便扩展。




回复

使用道具 举报

1630#
ID:513258 发表于 2019-8-6 12:52 | 只看该作者

回复

使用道具 举报

1631#
ID:513258 发表于 2019-8-6 13:23 | 只看该作者
MAX7219是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。电原理图。



回复

使用道具 举报

1632#
ID:513258 发表于 2019-8-6 15:42 | 只看该作者
PCB板四个角采用铜螺柱固定,可有效防止短路等意外情况发生!
数码管为0.36寸4位一体共阴极数码管
本模块兼容5V/3.3V各种单片机(51/AVR/STM32.......)







回复

使用道具 举报

1633#
ID:513258 发表于 2019-8-6 16:02 | 只看该作者
接线说明(以提供的程序为例,可以接任意IO口,
在程序中修改端口定义即可):
VCC→5V
GND→GND
DIN→D2
CS  →D3
CLK→D4



回复

使用道具 举报

1634#
ID:513258 发表于 2019-8-6 16:07 | 只看该作者

回复

使用道具 举报

1635#
ID:513258 发表于 2019-8-6 17:17 | 只看该作者
  1. /*
  2.   【Arduino】66种传感器模块系列实验(84)
  3.    实验八十四: 8位LED数码管MAX7219模块
  4.    能通过验证,上传成功
  5.    仅显示“23456E86”,列为失败的程序,技术有限,只能以后再说了
  6. */

  7. #include <LedControl.h>

  8. int CLK = 4;
  9. int CS = 3;
  10. int DIN = 2; //这里定义了那三个脚
  11. int PIECENUM = 8;//数码管片数

  12. void setup() {

  13.   pinMode(CLK, OUTPUT);
  14.   pinMode(CS, OUTPUT);
  15.   pinMode(DIN, OUTPUT); //让三个脚都是输出状态
  16.   Delay_xms(50);
  17.   Init_MAX7219(PIECENUM);
  18.   Delay_xms(2000);
  19. }

  20. void loop() {

  21.   Write_Max7219(1, 0x0f, 0x00, 0);     //显示测试:1;测试结束,正常显示:0

  22.   for (int i = 1; i <= 5; i++) {
  23.     Write_Mynum(1, i, i + 1, 1);
  24.   }
  25.   //Write_Mynum(1, 7, '_', 0);
  26. // Write_Mynum(1, 8, '_', 0);
  27.   for (int i = 1; i <= 8; i++) {
  28.     Write_Mynum(2, i, 2, 0);
  29.   }

  30.   for (int i = 1; i <= 8; i++) {
  31.     Write_Mynum(3, i, 3, 0);
  32.   }

  33.   for (int i = 1; i <= 8; i++) {
  34.     Write_Mynum(4, i, 8 - i, 1);
  35.   }

  36.   while (1);
  37. }


  38. void Delay_xms(unsigned int x)
  39. {
  40.   unsigned int i, j;
  41.   for (i = 0; i < x; i++)
  42.     for (j = 0; j < 112; j++);
  43. }

  44. //切换地址,方便写
  45. void Write_Mynum(int pnum,  unsigned char address, unsigned char dat , int dp) {
  46.   Write_Max7219(pnum, 9 - address, dat, dp);
  47. }

  48. //功能:向MAX7219写入字节
  49. //入口参数:DATA,dp显示小数点与否
  50. void Write_Max7219_byte(unsigned char DATA, int dp)
  51. {
  52.   unsigned char i;
  53.   digitalWrite(CS, LOW);
  54.   for (i = 8; i >= 1; i--)
  55.   {
  56.     digitalWrite(CLK, LOW);
  57.     if (i == 8 && dp == 1)
  58.       digitalWrite(DIN, HIGH);
  59.     else {
  60.       if (DATA & 0X80)
  61.         digitalWrite(DIN, HIGH);
  62.       else
  63.         digitalWrite(DIN, LOW);
  64.     }
  65.     DATA <<= 1;
  66.     digitalWrite(CLK, HIGH);
  67.   }
  68. }

  69. //功能:向MAX7219写入数据
  70. //入口参数:pnum数码管片序号,address,dat,dp显示小数点与否
  71. void Write_Max7219(int pnum, unsigned char address, unsigned char dat, int dp)
  72. {
  73.   digitalWrite(CS, LOW);
  74.   Write_Max7219_byte(address, 0);          //写入地址,即数码管编号
  75.   Write_Max7219_byte(dat, dp);              //写入数据,即数码管显示数字
  76.   if (pnum > 1) {
  77.     digitalWrite(CLK, HIGH);
  78.     for (int i = 1; i < pnum; i++) {
  79.       Write_Max7219_byte(0X00, 0);
  80.       Write_Max7219_byte(0X00, 0);
  81.     }
  82.   }
  83.   digitalWrite(CS, HIGH);
  84. }


  85. //Max7219初始化
  86. void Init_MAX7219(int pienum)
  87. {
  88.   for (int i = 1 ; i <= pienum ; i++) {
  89.     Write_Max7219(i, 0x09, 0xff, 0);     //译码方式:BCD码
  90.     Write_Max7219(i, 0x0a, 0x03, 0);     //参数3:亮度
  91.     Write_Max7219(i, 0x0b, 0x07, 0);     //扫描界限;参数3:8个数码管显示
  92.     Write_Max7219(i, 0x0c, 0x01, 0);     //掉电模式:参数3:0,普通模式:1
  93.     Write_Max7219(i, 0x0f, 0x01, 0);     //显示测试:参数3:1;测试结束,正常显示:0
  94.   }
  95. }
复制代码


回复

使用道具 举报

1636#
ID:513258 发表于 2019-8-6 17:23 | 只看该作者

回复

使用道具 举报

1637#
ID:513258 发表于 2019-8-6 18:12 | 只看该作者
【Arduino】66种传感器模块系列实验(84)
实验八十四: 8位LED数码管MAX7219模块
程序之一,显示字符3和4,小数点流水移动




回复

使用道具 举报

1638#
ID:513258 发表于 2019-8-6 18:23 | 只看该作者

回复

使用道具 举报

1639#
ID:513258 发表于 2019-8-6 18:31 | 只看该作者

回复

使用道具 举报

1640#
ID:513258 发表于 2019-8-6 18:36 | 只看该作者
【Arduino】66种传感器模块系列实验(84)
实验八十四: 8位LED数码管MAX7219模块
程序之四,循环调整屏幕的16级亮度




回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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