eagler8 发表于 2019-7-5 16:13:46

eagler8 发表于 2019-7-5 16:59:32

/*
【Arduino】66种传感器模块系列实验(48)
实验四十八:GY-291 数字三轴重力加速度倾斜度模块 (IIC/SPI传输)
实验代码之二
*/

#include <Wire.h>

#define DEVICE (0x53)
#define TO_READ (6)   

byte buff ;      
char str;            
int regAddress = 0x32;   
int x, y, z;                        
double roll = 0.00, pitch = 0.00;      

void setup() {
Wire.begin();         
Serial.begin(9600);

writeTo(DEVICE, 0x2D, 0);      
writeTo(DEVICE, 0x2D, 16);
writeTo(DEVICE, 0x2D, 8);
}

void loop() {

readFrom(DEVICE, regAddress, TO_READ, buff);
                                             
x = (((int)buff) << 8) | buff;   
y = (((int)buff)<< 8) | buff;
z = (((int)buff) << 8) | buff;

//we send the x y z values as a string to the serial port
Serial.print("The acceleration info of x, y, z are:");
sprintf(str, "%d %d %d", x, y, z);
Serial.print(str);
Serial.write(10);

RP_calculate();
Serial.print("Roll:"); Serial.println( roll );
Serial.print("Pitch:"); Serial.println( pitch );
Serial.println("");

delay(300);
}

void writeTo(int device, byte address, byte val) {
Wire.beginTransmission(device);
Wire.write(address);      
Wire.write(val);      
Wire.endTransmission();
}

void readFrom(int device, byte address, int num, byte buff[]) {
Wire.beginTransmission(device);
Wire.write(address);      
Wire.endTransmission();

    Wire.beginTransmission(device);
Wire.requestFrom(device, num);   

int i = 0;
while(Wire.available())   
{
    buff = Wire.read();
    i++;
}
Wire.endTransmission();
}

void RP_calculate(){
double x_Buff = float(x);
double y_Buff = float(y);
double z_Buff = float(z);
roll = atan2(y_Buff , z_Buff) * 57.3;
pitch = atan2((- x_Buff) , sqrt(y_Buff * y_Buff + z_Buff * z_Buff)) * 57.3;
}

eagler8 发表于 2019-7-5 17:01:47

eagler8 发表于 2019-7-5 17:05:02

eagler8 发表于 2019-7-5 17:07:21

eagler8 发表于 2019-7-5 17:09:27

eagler8 发表于 2019-7-5 18:08:49

eagler8 发表于 2019-7-5 18:10:52

eagler8 发表于 2019-7-5 18:39:22

/*
【Arduino】66种传感器模块系列实验(48)
实验四十八:GY-291 数字三轴重力加速度倾斜度模块 (IIC/SPI传输)
实验代码之三
*/

#include <Wire.h>
#define Register_ID 0
#define Register_2D 0x2D
#define Register_X0 0x32
#define Register_X1 0x33
#define Register_Y0 0x34
#define Register_Y1 0x35
#define Register_Z0 0x36
#define Register_Z1 0x37

int ADXAddress = 0xA7 >> 1;
int reading = 0;
int val=0;
int X0,X1,X_out;
int Y0,Y1,Y_out;
int Z1,Z0,Z_out;
double Xg,Yg,Zg;

void setup()
{
   Wire.begin();         
   Serial.begin(9600);
   delay(100);
   
   Wire.beginTransmission(ADXAddress);
   Wire.write(Register_2D);
   Wire.write(8);               
   Wire.endTransmission();   
}

void loop()
{
   
   Wire.beginTransmission(ADXAddress);
   Wire.write(Register_X0);
   Wire.write(Register_X1);
   Wire.endTransmission();
   Wire.requestFrom(ADXAddress,2);
   if(Wire.available()<=2)   
   {
   X0 = Wire.read();
   X1 = Wire.read();
   X1=X1<<8;
   X_out=X0+X1;   
   }


   Wire.beginTransmission(ADXAddress);
   Wire.write(Register_Y0);
   Wire.write(Register_Y1);
   Wire.endTransmission();
   Wire.requestFrom(ADXAddress,2);
   if(Wire.available()<=2)   
   {
   Y0 = Wire.read();
   Y1 = Wire.read();
   Y1=Y1<<8;
   Y_out=Y0+Y1;
   }

   Wire.beginTransmission(ADXAddress);
   Wire.write(Register_Z0);
   Wire.write(Register_Z1);
   Wire.endTransmission();
   Wire.requestFrom(ADXAddress,2);
   if(Wire.available()<=2)   
   {
   Z0 = Wire.read();
   Z1 = Wire.read();
   Z1=Z1<<8;
   Z_out=Z0+Z1;
   }

    Xg=X_out;
    Yg=Y_out;
    Zg=Z_out;
   Serial.print("X= ");
   Serial.print(Xg);
   Serial.print("       ");
   Serial.print("Y= ");
   Serial.print(Yg);
   Serial.print("       ");
   Serial.print("Z= ");
   Serial.print(Zg);
   Serial.println("");
   delay(200);
}

eagler8 发表于 2019-7-5 18:42:38

eagler8 发表于 2019-7-5 18:44:49

eagler8 发表于 2019-7-7 15:52:25

实验四十九:有源蜂鸣器报警器发声模块 (低电平触发)

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

eagler8 发表于 2019-7-7 16:34:29

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

eagler8 发表于 2019-7-7 16:35:45

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

eagler8 发表于 2019-7-7 16:44:05

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

页: 46 47 48 49 50 51 52 53 54 55 [56] 57 58 59 60 61 62 63 64 65
查看完整版本: 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)