Arduino 输入引脚悬空时,串口信号不稳定

问题

描述

最近开始玩 Arduino, 在设置数字引脚为输入端时,发现了一个现象,当引脚没有用杜邦线连接到下拉电阻或上拉电阻时,串口的信号就会发生震荡,很不稳定。引脚用杜邦线接出来但没有连接也是一样的效果。

这个现象与我正常理解的不太一样,我理解的是在不接地或者没有信号时,引脚的串口信号会保持一个稳定的状态(保持高电压或者低电压),但事实是,信号会随机变化。

但是由于引脚信号在使用过程中需要变化,作为控制单元,在受到外部信号的影响时,由低变到高或者由高变到低。因此不能简单地只接下拉电阻或是只接上拉电阻。

接线

Arduino 板的说明图如下:
Arduino 输入引脚悬空时,串口信号不稳定_第1张图片

图片来自 W3Cschool :Arduino 板的说明

我连接的引脚口是图中15号数字I/O中的 2 号引脚,简化后的代码如下:

const int pinLight = 2;

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

void loop() {
  // put your main code here, to run repeatedly:
  int read_light = digitalRead(pinLight);
  if (read_light == HIGH) {
    Serial.println("3");
  }
  else if (read_light == LOW) {
    Serial.println("4");
  }
}

最后利用串口监视器监视的效果就是 34 在震荡。

解决过程

主要查了以下几个资料:

  1. ARDUINO UNO数字引脚端口上电后不稳定状态。

最初找到的就是这篇博客,上面说: 引脚作为数字输入,但是不连接任何的拉电阻,处于悬空转态,容易受电子噪声干扰而随机的改变其电平状态。

不过,个人尝试了一下,发现不是噪声这么简单,信号的震荡频率很大,有时会一直保持高电位;有时又会一直保持低电位。基本上一直不会稳定下来。

  1. Arduino 入门教程

这个教程里说: 如果你将数字引脚悬空(没接下拉电阻),LED可能会不规律的闪烁。这是因为此时Arduino引脚的输入一直在”漂移”。就是说,程序不能判定它是高电压还是低电压,故而只会随机的返回HIGH或LOW

我觉得这个说得比较对,不只是噪声的问题。

后来又问了一下学长,得到的解释是,在悬空时,会输出三个0连着三个1,实际中并不是这么有规律的,但确实见到过三个0连着三个1的情况,网上没有查到具体细节。

最后的解决方案

唯一的解决方案就是让串口接触稳定,就算是更换输入信号,也要很快完成改变,尽量不能悬空。

我使用的是 欧姆龙(OMRON)MY2NJ继电器,按照继电器上的连线情况,在另一端的连线处,增加一根连接 Arduino 上接地的线。这样,无论开关是打开或是闭合,都可以接一个稳定的信号源了。

你可能感兴趣的:(硬件学习,Arduino,硬件学习)