找回密码
 立即注册
搜索
0赞
赞赏
手机版
扫码打开手机版
把文字装进口袋

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

123457730 2022-8-26 14:40:07
通常,振动传感器基于机械或光学原理检测振动,可用来测量、显示和分析线速度、位移和加速度。虽然人类对振动的感知能力非常弱,传感器却能提供这种振动的状态数据。这就为设备维护提供了关键数据,在设备损坏之前及时进行维修和保养。由于某些失效成本高昂且耗时,用振动传感器检测和锁定缺陷,是实现降本增效的一种好方法。
        振动传感器产生的弱小的模拟电压,可通过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的及其点亮的振动值。

        审核编辑:汤梓红

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

使用道具 举报

您需要登录后才可以回帖 立即登录
看了楼主的帖子,让我陷入了严肃的思考中,我认为,如果不把楼主的帖子顶上去,就是对真理的一种背叛,
就是对谬论的极大妥协。因此,我决定义无返顾的顶了。
2022-8-27 06:21:50
◥█▄▃▁
.......◥█☆█▅▄▃▁▁▁▁▁▃▄▅▅ 云南代表队 ▅▅▅▄▁
〓▇█████ 雷雷雷雷雷雷██████████████████▅▄▃▁▁
〓〓〓█████████████◤
....................轰炸过
..................轰炸过
...............轰炸过
............轰炸过
..........轰炸过
........轰炸过
......轰炸过
.....轰炸过
....轰炸过
...轰炸过
..轰炸过
.轰炸过 .轰炸过 楼上l楼下保持队行 !!!!!
2022-8-27 09:17:38
同志们好!
2022-8-28 00:06:22
第一次评论啊,好紧张啊,该怎么说啊,打多少字才显的有文采啊,这样说好不好啊,会不会成热贴啊,我写的这么好会不会太招遥,写的这么深奥别人会不会看不懂啊,怎样才能写出我博士后的水平呢,半年写了这么多会不会太快啊,好激动啊
2022-8-29 09:21:54
太赞了
2022-8-29 09:35:11
◥█▄▃▁
.......◥█☆█▅▄▃▁▁▁▁▁▃▄▅▅北京代表队 ▅▅▅▄▁
〓▇█████ 雷雷雷雷雷雷██████████████████▅▄▃▁▁
〓〓〓█████████████◤
....................轰炸过
..................轰炸过
...............轰炸过
............轰炸过
..........轰炸过
........轰炸过
......轰炸过
.....轰炸过
....轰炸过
...轰炸过
..轰炸过
.轰炸过 .轰炸过 楼上l楼下保持队行 !!!!!
2022-8-29 09:36:46
2022-8-29 10:02:28
楼主你知道的太多了。
2022-8-29 10:18:47
◥█▄▃▁
.......◥█☆█▅▄▃▁▁▁▁▁▃▄▅▅ 四川代表队 ▅▅▅▄▁
〓▇█████ 雷雷雷雷雷雷██████████████████▅▄▃▁▁
〓〓〓█████████████◤
....................轰炸过
..................轰炸过
...............轰炸过
............轰炸过
..........轰炸过
........轰炸过
......轰炸过
.....轰炸过
....轰炸过
...轰炸过
..轰炸过
.轰炸过 .轰炸过 楼上l楼下保持队行 !!!!!
2022-8-29 10:19:26
123下一页
返回顶部