解读arduino读取模拟信号实例

版权声明:本博客所有原创文章转发或者拷贝均须注明出处,本人保留版权法律追诉权。 https://blog.csdn.net/haigear/article/details/84795847

相信无论是51板还是stm32板,甚至是arm板,最简单的莫过于数字信号的输出或输入,所以Arduino的数字信号口的操作这里我们不打算重复,我们要讲讲Arduino模拟信号口的操作。

一、基础知识
这里我们首先讲模拟信号的输入(即读取),首先我们要普及一下基础知识,什么是模拟信号,什么是数字信号,模拟信号与数字信号有什么差别?
当然,我不想教科书式的来阐述,我就分别用一句话来说明:
数字信号只有高电平和低电平(可以理解为要么就低电压要么就高电压,就两种电压来表示0和1,没有中间电压);
模拟信号曾在连续的电压,它的变化是连续的,不会总从一个高电压跳崖式的陡降到低电压,当然也不会陡然爬升;
他们的区别很明显:数字信号只有两个种电压,且仅仅在这两种电压间变化;模拟信号是真实的自然电压信号,其信号为连续的电压变化;

好了,明白这些了,我们就可以来一起看看我们的Arduino板的模拟信号的读取了。
我们以Arduino的UNO板为例来说明,如下图:
在这里插入图片描述
红色线框所指的ANALOG IN的A0到A5共六个口都为模拟信号输入口。我们要读取的模拟信号一定是来自于这六个口。

二、程序中实现
在程序中,我们用analogRead函数来读取,这个在程序中非常简单,我们来看看一个典型的读取模拟信号口的程序:

/*
 Name:		Sketch1.ino
 Created:	12/1/2018 9:42:13 AM
 Author:	Administrator
*/

// the setup function runs once when you press reset or power the board
void setup() {
	Serial.begin(9600);
}

// the loop function runs over and over again until power down or reset
void loop() {
  int val=analogRead(A0);
  Serial.write(val);
}

这段代码用了analogRead读取A0口的信号值,然后通过串口输出,如果我们的硬件部分连接好了,在串口监视器中就能够看到读取到的模拟信号的数值了。很简单,仅仅从程序代码的角度来说,和数字口比较可以说更为简单。毕竟数字口我们还需要用pinMode设置数字口的模式然后再读取。

三、硬件准备和认知
我们很多的传感器都是接在模拟口的,因为传感器得到的信号来自大自然,如果传感器上没有进行模数转换(所谓模数转换那就是将模拟信号转换为数字信号),我们就必须接到模拟信号口上作为输入。
比如,我们在网络上常常会买到很多的arduino实验配件,很多都是不带模数转换的原始器件(当然也有部分是带有模数转换的,那个就要贵多了),比如变阻器(又称电位器)、光敏电阻、摇杆(游戏杆)等等。那么要读取他们的值该如何接线呢?
是不是也像数字信号的接口一样,一个接GND一个接信号口,或者一个接VCC一个接信号口呢?甚至,我们还可以凭想象,模拟口接收到变化的电压直接给UNO板来进行模数转换即可,非也!非也!

但凡模拟信号输入的器件和模块,一个信号都需要三根线,有可能发生电压变化的那根线接在模拟信号输入口,其余两根接在GND和VCC。这里列出几种器件的接法:
在这里插入图片描述
在这里插入图片描述
上面就是光敏电阻和电位器的接线,很显然,他们都是三根接线。

线面,我们来结合光敏电阻的信号读取,在Processing中绘制一个刻度图,看看效果:
Processing的代码如下:

Serial sp;
int val;
void setup()
{
  
  size(600,400);
  background(255);
  sp=new Serial(this,"COM3",9600);
    
}

void draw()
{
   while(sp.available()>0)
   {
     val=sp.read();
     println(val);
     
     background(255);
     fill(0,180,0);
     //translate(0,400);
     rect(40,380-val*2,530,val*2);
     line(38,20,38,380);
     for(int i=2;i<20;i++)
     {
       line(38,i*20,48,i*20);
       fill(0, 102, 153);
       text(20-i, 50, i*20);       
     }
     
   
   }

}

随着我们的光照的变化,绿色矩形的高度就会发生变化,运行效果如下:
在这里插入图片描述
当然,这里的Processing的程序也可以用于电位器的实验和摇杆左边变化的图形显示。

猜你喜欢

转载自blog.csdn.net/haigear/article/details/84795847