原创 用振动传感器和Arduino监测工业设备的振动状态

2022-8-23 09:22 600 1 1 分类: MCU/ 嵌入式 文集: 方案

通常,振动传感器基于机械或光学原理检测振动,可用来测量、显示和分析线速度、位移和加速度。虽然人类对振动的感知能力非常弱,传感器却能提供这种振动的状态数据。这就为设备维护提供了关键数据,在设备损坏之前及时进行维修和保养。由于某些失效成本高昂且耗时,用振动传感器检测和锁定缺陷,是实现降本增效的一种好方法。

振动传感器产生的弱小的模拟电压,可通过Arduino的模拟输入引脚转换为数字输出。本项目通过三种不同的程序实现振动检测:
示例一先检测振动,再通过Serial monitor显示振动值;
示例二包含了简单的模拟引脚读数技巧,以及Pulse-in技术;
示例三是控制3个不同的LED,如果某个LED引脚的振动值超过预定义的振动值,这个LED就点亮。

 


项目BOM如下:
12v适配器  x1
Arduino Uno  x1
Arduino Nano  x1
51-000923振动传感器  x1
SW-420振动传感器  x1
交通LED模块  x1
面板板  x1
杜邦线  若干

其中,AAC 51-000923振动传感器由长方形压电陶瓷板制成,能够将收集的振动转换为电压输出;或者,将施加其上的电压信号转换为振动,即加上电压就振动。AAC 51-000923长度43mm,带有红、黑两根引线和连接器。创作项目一般使用Arduino,如果不需要连接器可将其剪掉,仅仅通过两根引线连接Arduino和其他MCU板子。

将振动传感器的黑线连接到Arduino的引脚GND,红线连接到Pin A0,接线就完成了。

 

 

下面,我们先看示例代码1:

int vib_sensor = A0; 
int vib_data = 0;

void setup() {
 // put your setup code here, to run once:
Serial.begin(9600);
pinMode(vib_sensor, INPUT); 
}

void loop() {
 // put your main code here, to run repeatedly:
vib_data = analogRead(vib_sensor); 
Serial.println(vib_data);
delay(100);
}

int vib_sensor = A0; 
int vib_data = 0; 

void setup() {
 // put your setup code here, to run once:
Serial.begin(9600);
pinMode(vib_sensor, INPUT); 


void loop() {
 // put your main code here, to run repeatedly:
vib_data = analogRead(vib_sensor); 
Serial.println(vib_data);
delay(100);
}

其中,int vib_sensor = A0; 表示振动传感器连接在Arduino的模拟引脚A0上。void setup() 函数激活串口,数据率为 9600。void loop() 函数读、存传感器数据,并通过Serial monitor进行显示。

 

 

我们将Arduino连接到笔记本电脑,上传以上代码,上传完成后打开Serial Monitor,确定数据率为9600。尝试拍打振动传感器,可看到Serial Monitor的读数在变化。

接下来,我们看看示例代码2:

int vs = A0; // vibration sensor

void setup(){
 pinMode(led, OUTPUT);
 pinMode(vs, INPUT); 
 Serial.begin(9600); 

}
void loop(){
 long measurement =vibration();
 delay(50);
 Serial.println(measurement);
 if (measurement > 50){
   digitalWrite(led, HIGH);
 }
 else{
   digitalWrite(led, LOW); 
 }
}

long vibration(){
 long measurement=pulseIn (vs, HIGH);  //wait for the pin to get HIGH and returns measurement
 return measurement;
}


这里同样使用pin A0,pulseIn()函数用来测量振动期间输入信号的高、低,如果检测到相关震动就点亮LED。

 

 

上传代码后打开Serial monitor,确定数据率为9600。拍打传感器,Serial Monitor读数开始变化,停止后就归零。不过,这个示例只能检测中、强级别的振动。

最后,我们看看示例代码3:

示例3可以检测出振动强度,绿、黄、红三色LED分别指示振动的程度为低、中、强。这三个LED的工作电压为5v,无需限流电阻。具体连接如下:
_ Traffic LED模块的GND引脚连接到Arduinoui引脚;
_ 红色LED连接到Arduino板子的13引脚;
_ 黄色LED连接到Arduino板子的12引脚;
_ 绿色LED连接到Arduino板子的11引脚。

int yellow_led = 12; 
int green_led = 11; 

int vs = A0; // vibration sensor

void setup(){
 pinMode(red_led, OUTPUT);
 pinMode(yellow_led, OUTPUT);
 pinMode(green_led, OUTPUT);

 digitalWrite(red_led, LOW);
 digitalWrite(yellow_led, LOW);
 digitalWrite(green_led, LOW);
 
 pinMode(vs, INPUT); 
 Serial.begin(9600); 

}
void loop(){
 long measurement =vibration();
 delay(50);
 Serial.println(measurement);
 if ((measurement > 50)&&(measurement < 1000)){
      digitalWrite(green_led, HIGH);
      digitalWrite(red_led, LOW);
      digitalWrite(yellow_led, LOW);
      delay(100);
 }

   if ((measurement > 1000)&&(measurement < 4000)){
      digitalWrite(green_led, LOW);
       digitalWrite(yellow_led, HIGH);
      digitalWrite(red_led, LOW);
     delay(100);
 }

     if (measurement > 4000){
       digitalWrite(red_led, HIGH);
      digitalWrite(green_led, LOW);
      digitalWrite(yellow_led, LOW);
      
     
 }

 
 else{
   
 digitalWrite(red_led, LOW);
 digitalWrite(yellow_led, LOW);
 digitalWrite(green_led, LOW);
 }
}

long vibration(){
 long measurement=pulseIn (vs, HIGH);  //wait for the pin to get HIGH and returns measurement
 return measurement;
}

 


这是示例2的升级版,void loop() 函数定义了三个LED的及其点亮的振动值。
 

作者: 硬之城Allchips, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3975615.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

给作者打赏,鼓励TA抓紧创作!

赞赏支持
点赞 1
赞赏0

文章评论0条评论)

登录后参与讨论
相关推荐阅读
硬之城Allchips 2022-08-29 10:30
霍尔传感器原理、典型应用及与Arduino的接口
霍尔传感器(Hall Effect Sensor)是根据霍尔效应制作的一种磁场传感器,当恒定电流通过内部的霍尔半导体片时,将在垂直方向产生电位差即霍尔电压。这个霍尔电压随磁场强度的变化而变化,磁场越强...
硬之城Allchips 2022-08-26 08:59
传感器到云应用中的超低功耗Sub-1GHz RF收发方案
在ISM和SRD(短距离无线电设备)应用中,高性能和长电池寿命至关重要。本方案采用S2-LP sub-1GHz超低功耗的低数据率,可实现+27dBm(500mW)的输出功率,可使电池寿命从几个月延长为...
硬之城Allchips 2022-08-25 09:58
用IR传感器和Arduino制作一个数字转速计(附代码)
本项目采用IR传感器和Arduino开发板制作了一个数字转速计,以RPM为单位测量马达的转数。项目黑简单,只需将IR传感器和Arduino板子与16*2 LCD连接即可。BOM表及电路图本转速计可连续...
硬之城Allchips 2022-08-24 10:27
基于AP33772的家电及电动工具USB-C PD3.0/PPS接收方案
Type-C PD3.0适配器已经大量上市,这要求Type-C接口设备(TCD)配备灵活、精简且具成本效益的充电解决方案。本设计采用AP33772高效能USB Type-C PD3.0/PPS接收控制...
硬之城Allchips 2022-08-22 09:27
基于ACS712电流传感器的电流检测方案(电路图+BOM表)
ACS712是一种低噪声、使用方便、性价比高的线性电流传感器,主要应用于电机控制、载荷检测和管理、开关式电源和过电流故障保护等,特别是那些要求电气绝缘却未使用光电绝缘器或其它昂贵绝缘技术的应用中。AC...
我要评论
0
1
1
2
3
4
5
6
7
8
9
0
关闭 热点推荐上一条 /4 下一条