解读arduino读取模拟信号实例

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


文章出处: https://haigear.blog.csdn.net/article/details/84795847

一、基础知识

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

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

二、arduino端代码实现

在程序中,我们用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板来进行模数转换即可,非也!非也!

1、硬件连接图

但凡模拟信号输入的器件和模块,一个信号都需要三根线,有可能发生电压变化的那根线接在模拟信号输入口,其余两根接在GND和VCC。这里列出几种器件的接法:
在这里插入图片描述
有关光敏电阻的电路仿真可以参考我后续的博文: proteus光敏电阻电路的arduino仿真
如果我们通过一个可变电阻来模拟,接下如下:
在这里插入图片描述

上面就是光敏电阻和电位器的接线,很显然,他们都是三根接线。不仅要知道需要接三根线,还要搞懂为什么接三根,原理的消息分析可以参考后面的博文: proteus光敏电阻电路的arduino仿真

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

2、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);       
        }   
      }
   
   }

3、最终效果

随着我们的光照的变化,绿色矩形的高度就会发生变化,运行效果如下:
在这里插入图片描述
当然,这里的Processing的程序也可以用于电位器的实验和摇杆左边变化的图形显示。
码字不易,请注明出处:https://haigear.blog.csdn.net/article/details/84795847

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河西石头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值