找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

  [复制链接]
841#
ID:513258 发表于 2019-7-5 17:01 | 只看该作者

回复

使用道具 举报

842#
ID:513258 发表于 2019-7-5 17:04 | 只看该作者

回复

使用道具 举报

843#
ID:513258 发表于 2019-7-5 17:06 | 只看该作者

回复

使用道具 举报

844#
ID:513258 发表于 2019-7-5 17:08 | 只看该作者

回复

使用道具 举报

845#
ID:513258 发表于 2019-7-5 18:08 | 只看该作者

回复

使用道具 举报

846#
ID:513258 发表于 2019-7-5 18:10 | 只看该作者

回复

使用道具 举报

847#
ID:513258 发表于 2019-7-5 18:38 | 只看该作者
  1. /*
  2. 【Arduino】66种传感器模块系列实验(48)
  3. 实验四十八:GY-291 数字三轴重力加速度倾斜度模块 (IIC/SPI传输)
  4. 实验代码之三
  5. */

  6. #include <Wire.h>
  7. #define Register_ID 0
  8. #define Register_2D 0x2D
  9. #define Register_X0 0x32
  10. #define Register_X1 0x33
  11. #define Register_Y0 0x34
  12. #define Register_Y1 0x35
  13. #define Register_Z0 0x36
  14. #define Register_Z1 0x37

  15. int ADXAddress = 0xA7 >> 1;
  16. int reading = 0;
  17. int val=0;
  18. int X0,X1,X_out;
  19. int Y0,Y1,Y_out;
  20. int Z1,Z0,Z_out;
  21. double Xg,Yg,Zg;

  22. void setup()
  23. {
  24.    Wire.begin();         
  25.    Serial.begin(9600);  
  26.    delay(100);
  27.    
  28.    Wire.beginTransmission(ADXAddress);
  29.    Wire.write(Register_2D);
  30.    Wire.write(8);               
  31.    Wire.endTransmission();     
  32. }

  33. void loop()
  34. {
  35.    
  36.    Wire.beginTransmission(ADXAddress);
  37.    Wire.write(Register_X0);
  38.    Wire.write(Register_X1);
  39.    Wire.endTransmission();
  40.    Wire.requestFrom(ADXAddress,2);
  41.    if(Wire.available()<=2)   
  42.    {
  43.      X0 = Wire.read();
  44.      X1 = Wire.read();
  45.      X1=X1<<8;
  46.      X_out=X0+X1;   
  47.    }

  48.   
  49.    Wire.beginTransmission(ADXAddress);
  50.    Wire.write(Register_Y0);
  51.    Wire.write(Register_Y1);
  52.    Wire.endTransmission();
  53.    Wire.requestFrom(ADXAddress,2);
  54.    if(Wire.available()<=2)   
  55.    {
  56.      Y0 = Wire.read();
  57.      Y1 = Wire.read();
  58.      Y1=Y1<<8;
  59.      Y_out=Y0+Y1;
  60.    }
  61.   
  62.    Wire.beginTransmission(ADXAddress);
  63.    Wire.write(Register_Z0);
  64.    Wire.write(Register_Z1);
  65.    Wire.endTransmission();
  66.    Wire.requestFrom(ADXAddress,2);
  67.    if(Wire.available()<=2)   
  68.    {
  69.      Z0 = Wire.read();
  70.      Z1 = Wire.read();
  71.      Z1=Z1<<8;
  72.      Z_out=Z0+Z1;
  73.    }
  74.   
  75.     Xg=X_out;  
  76.     Yg=Y_out;  
  77.     Zg=Z_out;  
  78.    Serial.print("X= ");
  79.    Serial.print(Xg);
  80.    Serial.print("       ");
  81.    Serial.print("Y= ");
  82.    Serial.print(Yg);
  83.    Serial.print("       ");
  84.    Serial.print("Z= ");
  85.    Serial.print(Zg);
  86.    Serial.println("  ");
  87.    delay(200);
  88. }
复制代码


回复

使用道具 举报

848#
ID:513258 发表于 2019-7-5 18:41 | 只看该作者

回复

使用道具 举报

849#
ID:513258 发表于 2019-7-5 18:43 | 只看该作者

回复

使用道具 举报

850#
ID:513258 发表于 2019-7-7 15:51 | 只看该作者
实验四十九:有源蜂鸣器报警器发声模块 (低电平触发)

压电陶瓷片
压电陶瓷片,俗称蜂鸣片。压电陶瓷片是一种电子发音元件,在两片铜制圆形电极中间放入压电陶瓷介质材料,当在两片电极上面接通交流音频信号时,压电片会根据信号的大小频率发生震动而产生相应的声音来。压电陶瓷片由于结构简单造价低廉,被广泛的应用于电子电器方面如:玩具,发音电子表,电子仪器,电子钟表,定时器等方面。超声波电机就是利用相关的性质制成的。




回复

使用道具 举报

851#
ID:513258 发表于 2019-7-7 16:13 | 只看该作者
工作原理
当电压作用于压电陶瓷时,就会随电压和频率的变化产生机械变形。另一方面,当振动压电陶瓷时,则会产生一个电荷。利用这一原理,当给由两片压电陶瓷或一片压电陶瓷和一个金属片构成的振动器,所谓叫双压电晶片元件,施加一个电信号时,就会因弯曲振动发射出超声波。相反,当向双压电晶片元件施加超声振动时,就会产生一个电信号。基于以上作用,便可以将压电陶瓷用作超声波传感器。




回复

使用道具 举报

852#
ID:513258 发表于 2019-7-7 16:32 | 只看该作者
压电蜂鸣器
是一种电声转换器件。将压电材料粘贴在金属片上,当压电材料和金属片两端施加上一个电压后,因为逆压电效应,蜂鸣片就会产生机械变形而发出声响。压电材料有多种,用在蜂鸣片上的压电材料通常是高压极化后的压电陶瓷片。压电式蜂鸣器通常呈圆形,由压电陶瓷片、引线和共鸣腔组成。而中间的压电陶瓷片又由金属镀层、陶瓷片、胶水、金属片构成。从电学角度来看,压电陶瓷可以简化为一个电感和一个电容的串联模型。压电式蜂鸣器具有体积小、灵敏度高、耗电省、可靠性好,造价低廉的特点和良好的频率特性。因此它广泛应用于各种电器产品的报警、发声用途。最常见的莫过于音乐贺卡、电子手表、袖珍计算器、电子门铃和电子玩具等小型电子用品上作发声器件。



回复

使用道具 举报

853#
ID:513258 发表于 2019-7-7 16:42 | 只看该作者
主要优点
  1、因无可动触点部分,因此寿命长、可靠性高,连续使用可达10000小时以上,是半永久性的器件
  2、不产生飞弧或者射频噪声,对其他线路无干扰
  3、不会因松动而引起大的振动
  4、用电子线路控制,所以能发出多种悦耳的声音及模拟声、断续声。音色纯正,不易被噪声所覆盖
  5、用电压激励,所以消耗电流小,一般在20mA以下,不会超过100mA
  6、小型大音量。音量可达到70分贝/20cm,而元件厚度仅为1mm以下
  7、工作温度范围宽
  8、便于安装,而且无电磁线圈和动圈,不必担心绝缘恶化,并无漏电的可能




回复

使用道具 举报

854#
ID:513258 发表于 2019-7-7 17:07 | 只看该作者
有源压电蜂鸣器
是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示。主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。有源蜂鸣器的优点是,程序控制方便。




回复

使用道具 举报

855#
ID:513258 发表于 2019-7-7 17:12 | 只看该作者
如何区分有源和无源蜂鸣器
大家要了解有源和无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。实际是指驱动方式分类,有源驱动和无源驱动,有源蜂鸣器又称为直流蜂鸣器,其内部已经包含了一个多谐振荡器,只要在两端施加额定直流电压即可发声,具有驱动、控制简单的特点,但价格略高。无源蜂鸣器又称为交流蜂鸣器,内部没有振荡器,需要在其两端施加特定频率的方波电压(注意并不是交流,即没有负极性电压)才能发声,具有可靠、成本低、发声频率可调整等特点。

外观上看
两种蜂鸣器好像一样,但仔细看,两者的高度略有区别,有源蜂鸣器a,高度为9mm,而无源蜂鸣器b的高度为8mm。如将两种蜂鸣器的引脚郡朝上放置时,可以看出有绿色电路板的一种是无源蜂鸣器,没有电路板而用黑胶封闭的一种是有源蜂鸣器。

万用表测电阻区别
用万用表电阻档Rxl档测试:用黑表笔接蜂鸣器 "+"引脚,红表笔在另一引脚上来回碰触,如果触发出咔、咔声的且电阻只有8Ω(或16Ω)的是无源蜂鸣器;如果能发出持续声音的,且电阻在几百欧以上的,是有源蜂鸣器。同时有源蜂鸣器直接接上额定电源(新的蜂鸣器在标签上都有注明)就可连续发声;而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能发声。




回复

使用道具 举报

856#
ID:513258 发表于 2019-7-7 17:22 | 只看该作者
有源蜂鸣器模块(低电平触发)



回复

使用道具 举报

857#
ID:513258 发表于 2019-7-7 17:40 | 只看该作者
模块电原理图











回复

使用道具 举报

858#
ID:513258 发表于 2019-7-7 17:43 | 只看该作者
模块描述
1 模块采用S8050三极管驱动
2 工作电压3.3V-5V
3 设有固定螺栓孔,方便安装
4 小板PCB尺寸:3.2cm * 1.3cm
5 当I/O口输入低电平时,蜂鸣器发声



回复

使用道具 举报

859#
ID:513258 发表于 2019-7-7 17:47 | 只看该作者
模块接口说明(3线制)
1 VCC 外接3.3V-5V电压(可以直接与5v单片机和3.3v单片机相连)
2 GND 外接GND
3 I/O (out)外接Arduino数字端口



回复

使用道具 举报

860#
ID:513258 发表于 2019-7-7 17:50 | 只看该作者

回复

使用道具 举报

861#
ID:513258 发表于 2019-7-7 18:51 | 只看该作者
  1. /*
  2. 【Arduino】66种传感器模块系列实验(49)
  3. 实验四十九:有源蜂鸣器报警器发声模块 (低电平触发)
  4. 按键按下发声,LED亮暗反转
  5. */

  6. #define LED 13
  7. #define KEY 2
  8. #define BUZZER 3
  9. int KEY_NUM = 0;

  10. void setup() {
  11.   pinMode(LED,OUTPUT);
  12.   pinMode(KEY,INPUT_PULLUP);
  13.   pinMode(BUZZER,OUTPUT);
  14.   digitalWrite(BUZZER,HIGH);
  15. }

  16. void loop() {
  17.   ScanKey();
  18.   if(KEY_NUM==1)
  19.   {
  20.     digitalWrite(LED,!digitalRead(LED));
  21.   }
  22. }

  23. void ScanKey()
  24. {
  25.    KEY_NUM = 0;
  26.     if(digitalRead(KEY)==LOW)
  27.     {
  28.       delay(20);
  29.       if(digitalRead(KEY)==LOW)
  30.       {
  31.         KEY_NUM=1;
  32.         buzzer_Di();
  33.         while(digitalRead(KEY)==LOW);
  34.       }  
  35.     }
  36.   }
  37.   
  38.   void buzzer_Di()
  39.   {
  40.   digitalWrite(BUZZER,LOW);
  41.   delay(100);
  42.   digitalWrite(BUZZER,HIGH);
  43.   }
复制代码


回复

使用道具 举报

862#
ID:513258 发表于 2019-7-7 18:56 | 只看该作者

回复

使用道具 举报

863#
ID:513258 发表于 2019-7-7 19:12 | 只看该作者

回复

使用道具 举报

864#
ID:513258 发表于 2019-7-7 19:20 | 只看该作者

回复

使用道具 举报

865#
ID:513258 发表于 2019-7-7 19:59 | 只看该作者
实验五十:W25Q64 64Mbit FLASH外扩存储模块 (SPI接口 )

W25X64
该系列是华邦公司推出的大容量SPI FLASH 产品,W25X64 的容量为 64Mbit(8M),该系列还有 W25Q80/16/32 等W25X16、W25X32、W25X64分别有8192、16384、32768个可编程页,每页256字节,用扇区擦除指令每次可以擦除16页,用块擦除指令每次可以擦除256页,用整片擦除指令既可以擦除整个芯片,W25X16、W25X32、W25X64分别有512、1024、2048个可擦除扇区,或者32、64、128个可擦除的块。W25Q64 的擦写周期多达 10W 次,具有 20 年的数据保存期限,支持电压为 2.7~3.6V,W25Q64 支持标准的 SPI,还支持双输出/四输出的 SPI,最大 SPI 时钟可以到 80Mhz(双输出时相当于 160Mhz,四输出时相当于 320M)。




回复

使用道具 举报

866#
ID:513258 发表于 2019-7-7 20:05 | 只看该作者
SPI总线
SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。上升沿发送、下降沿接收、高位先发送。上升沿到来的时候,sdo上的电平将被发送到从设备的寄存器中。下降沿到来的时候,sdi上的电平将被接收到主设备的寄存器中。

SPI总线是Motorola公司推出的三线同步接口,同步串行3线方式进行通信:一条时钟线SCK,一条数据输入线MOSI,一条数据输出线MISO;用于 CPU与各种外围器件进行全双工、同步串行通讯。SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。




回复

使用道具 举报

867#
ID:513258 发表于 2019-7-7 20:23 | 只看该作者
SPI 数据速率一般在1到70MHz的范围内,字长为从8位及12位到这两个值的倍数。数据传输一般由数据交换构成。在主控制器向从设备发送数据时,从设备也向主控制器发送数据。因此主控制器的内部移位寄存器和从设备都采用环形设置。在数据交换之前,主控制器和从设备会将存储器数据加载至它们的内部移位寄存器。收到时钟信号后,主控制器先通过MOSI线路时钟输出其移位寄存器的MSB。同时从设备会读取位于SIMO的主控器第一位元,将其存储在存储器中,然后通过SOMI时钟输出其MSB。主控制器可读取位于MISO的从设备第一位元,并将其存储在存储器中,以便后续处理。整个过程将一直持续到所有位元完成交换,而主控器则可让时钟空闲并通过/SS 禁用从设备。



回复

使用道具 举报

868#
ID:513258 发表于 2019-7-7 20:27 | 只看该作者
在 SPI 中,主控制器可与单个或多个从设备通信。如果是一个单从设备,从设备选择信号可连接至从设备的本地接地电位,实现永久接入。对使用多个从设备的应用,可使用两种配置:独立从设备与菊花链从设备。要与从设备单独通信,主控制器必须提供多重从设备选择信号。该配置通常用于必须单独访问多个模数转换器 (ADC) 及数模转换器 (DAC) 的数据采集系统中。菊花链从设备只需要主控制器提供一个从设备选择信号,因为这种配置要求所有从设备同时启用,以确保数据不间断地流经该链路中的所有移位寄存器。典型应用是工业 I/O 模块中的级联多通道输入串行器与输出驱动器。注意,菊花链连接不一定适用于所有的SPI设备,特别是要求多字节传输的(比如存储器芯片)设备。另外,要对外设芯片的数据表进行仔细分析,确定能对它做什么而不能做什么。如果芯片的数据表中没有明确提到菊花链连接,那么该芯片不支持这种连接的几率为50%。



回复

使用道具 举报

869#
ID:513258 发表于 2019-7-7 20:39 | 只看该作者
W25Q64FWSSIG参数
功能数量        1 端子数量        8
最大工作温度        85 Cel
最小工作温度        -40 Cel
最大供电/工作电压        1.95 V
最小供电/工作电压        1.65 V
额定供电电压        1.8 V
最大时钟频率        104 MHz
加工封装描述        0.208 INCH, GREEN, SOIC-8 状态        ACTIVE 工艺        CMOS
包装形状 SQUARE
包装尺寸        SMALL OUTLINE
表面贴装        Yes
端子形式        GULL WING
端子间距        1.27 mm
端子位置        DUAL
包装材料 PLASTIC/EPOXY
温度等级        INDUSTRIAL
内存宽度        1 组织        64M X 1
存储密度        6.41E7 deg
操作模式        SYNCHRONOUS
位数 6.41E7 words
位数        64M
内存IC类型        FLASH 1.8V PROM
串行并行        SERIAL



回复

使用道具 举报

870#
ID:513258 发表于 2019-7-7 20:44 | 只看该作者




回复

使用道具 举报

871#
ID:513258 发表于 2019-7-8 09:04 | 只看该作者
W25Q64引脚
CS:CS为片选管脚,低电平有效。上电之后,在执行一条新的指令之前,必须让/CS管脚先有一个下降沿。
DO(MISO):DO为串行数据输出引脚,在CLK(串行时钟)管脚的下降沿输出数据。
WP:WP为写保护管脚,有效电平为低电平。高电平可读可写,低电平仅仅可读。
DI(MOSI):DI为串行数据输入引脚,数据、地址和命令从DI引脚输入到芯片内部,在CLK(串行时钟)管脚的上升沿捕获捕获数据。
CLK(SLCK):CLK为串行时钟引脚。SPI时钟引脚,为输入输出提供时钟脉冲。
HOLD:HOLD为保持管脚,低电平有效。当CS为低电平,并且把HOLD拉低时,数据输出管脚将保持高阻态,并且会忽略数据输入管脚和时钟管脚上的信号。把HOLD管脚拉高,器件恢复正常工作。
VCC:电源2.7V~3.6V。
GND:地。

W25Q64内部框架图




回复

使用道具 举报

872#
ID:513258 发表于 2019-7-8 09:11 | 只看该作者
W25Q64操作原理
通过SPI接口,用标准的SPI协议发送相应指令给flash,然后flash根据命令进行各种相关操作。

W25Q64常用操作命令




回复

使用道具 举报

873#
ID:282095 发表于 2019-7-8 09:40 | 只看该作者
涨知识了
回复

使用道具 举报

874#
ID:513258 发表于 2019-7-8 09:56 | 只看该作者
W25Q64 64Mbit FLASH外扩存储模块



回复

使用道具 举报

875#
ID:513258 发表于 2019-7-8 11:13 | 只看该作者

回复

使用道具 举报

876#
ID:513258 发表于 2019-7-8 11:26 | 只看该作者

回复

使用道具 举报

877#
ID:513258 发表于 2019-7-8 11:28 | 只看该作者

谢谢老师的鼓励!
回复

使用道具 举报

878#
ID:513258 发表于 2019-7-8 14:26 | 只看该作者
模块接口定义
CS:为片选信号脚---D10
DI(MOSI):为串行数据输入引脚----D11
DO(MISO):为串行数据输出引脚---D12
CLK(SLCK):SPI总线---D13
VCC:  电源3.3V
GND:接地




回复

使用道具 举报

879#
ID:513258 发表于 2019-7-8 14:32 | 只看该作者
奈何师傅的实验代码

  1. /*
  2. 【Arduino】66种传感器模块系列实验(50)
  3. 实验五十:W25Q64 64Mbit FLASH外扩存储模块 (SPI接口 )
  4. Arduino 的 uno 引脚
  5. CS----------10
  6. MOSI(DI)---11
  7. MISO(DO)---12
  8. CLK---------13
  9. VCC 3.3V
  10. */

  11. #include <SerialFlash.h>
  12. #include <SPI.h>

  13. // 文件大小
  14. #define FSIZE 256
  15. // 文件名
  16. const char *filename = "Eagler8.txt";
  17. // 文件内容
  18. const char *contents = "The groundbreaking Intel Curie module expands the possibilities of what tech can do.";
  19. // 片选引脚
  20. const int FlashChipSelect = 10;

  21. void setup() {
  22.   Serial.begin(9600);
  23.   while (!Serial) ;
  24.   delay(500);
  25.   // 初始化SPI Flash芯片
  26.   SerialFlash.begin(FlashChipSelect);

  27.   // 如果文件已存在,则输出提示
  28.   // 如果文件不存在,则创建文件并写入
  29.   if(SerialFlash.exists(filename)) {
  30.       Serial.println("File " + String(filename) + " already exists");
  31.   }
  32.   else {
  33.       Serial.println("Creating file " + String(filename));
  34.       SerialFlash.create(filename, FSIZE);
  35.       // 新建SerialFlashFile对象用于文件操作
  36.       SerialFlashFile file;
  37.       file = SerialFlash.open(filename);
  38.       file.write(contents, strlen(contents) + 1);
  39.       Serial.println("String \"" + String(contents) + "\" written to file " + String(filename));
  40.   }
  41. }

  42. void loop() {
  43. }
复制代码



回复

使用道具 举报

880#
ID:513258 发表于 2019-7-8 14:36 | 只看该作者

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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