1. 程式人生 > >解讀arduino讀取模擬訊號例項

解讀arduino讀取模擬訊號例項

相信無論是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的程式也可以用於電位器的實驗和搖桿左邊變化的圖形顯示。