0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何利用Arduino構建一個功率計

科技觀察員 ? 來源:八色木 ? 作者:八色木 ? 2022-04-12 16:23 ? 次閱讀

作為電子愛好者,我們常常依靠一些儀表或儀器來測量和分析電路。從簡單的萬用表到復雜的功率分析儀或DSOs,所有的儀表都有它們自己獨特的用途。這些儀表的大部分都有成品,我們可以根據(jù)特定的需要來購買。有時我們可能會想自己制作一個儀表。例如,當我們準備做一個太陽能光伏項目時,我們想計算負載的功耗,在這種情況下,我們就可以用一個像Arduino這樣的微控制器平臺來構建我們自己的功率計了。

pYYBAGJVNrKAWcQgAAgM650SDEg747.png

構建自己的功率計不僅可以降低成本,還可以為我們提供更深入了解開發(fā)測試功能的途徑。例如,使用Arduino的功率計可以很容易地調整串口監(jiān)視器上的監(jiān)控結果,可以在串口上繪制圖形,可以添加SD卡在預定義的時間內自動記錄電壓、電流和功率的數(shù)值。

功率計材料清單

Arduino Nano

LM358運放

7805

LCD1602

0.22歐姆2瓦電阻

10k可調電阻

10k,20k,2.2k,1k電阻

0.1uF電容

測試負載

面包板

功率計電路圖

下面是arduino功率計項目的完整電路圖:

poYBAGJVNriAVo3jAALe0sBaDUI609.png

為了便于理解,我們把arduino功率計電路被分為兩個部分。電路的上半部分是測量單元,電路的下半部分是計算和顯示單元。該電路測量范圍適合于0-24V,考慮到太陽能光伏電池的規(guī)格,電流為0-1A。電路的基本原理是通過測量負載的電流和電壓,從而計算出負載所消耗的能量,并將測量值顯示在1602顯示器上。

下面,我們再把電路分成多個功能塊進行介紹,這樣我們就能更清楚地了解電路是如何工作的。

測量單元

測量單元包含一個分壓器可以幫助我們測量電壓;一個非反向的運算放大器幫助我們測量通過電路的電流。上述電路的分壓部分如下所示:

poYBAGJVNr2AICbpAAAihGVDlWg110.png

這里輸入電壓是由Vcc表示的,就像前面說的,我們正在設計從0到24V的電壓范圍的電路。但是像Arduino這樣的微控制器無法測量如此高的電壓值,它只能測量0-5v的電壓。因此,我們必須將0-24v的電壓(轉換)到0-5v。這因此我們通過使用一個分壓電路來實現(xiàn),如下所示。10k和2.2k電阻形成了分壓電路,用下面的公式可計算出分壓器的輸出電壓。

Vout = (Vin × R2) / (R1 + R2)

電路圖中標記為Voltage的電壓可以從兩個電阻中間獲得,這個轉換后的電壓就可以被輸入到Arduino的模擬針中。接下來就是電流測量單元,我們知道微控制器只能讀取模擬電壓,所以我們需要將電流的值轉換成電壓。這時,可以通過在電路中添加一個電阻(并聯(lián))來實現(xiàn),根據(jù)歐姆定律,它會降低電壓值,這與流過它的電流成正比。這樣獲得的值會非常小,所以我們用一個運算放大器來放大它。電路如下所示:

poYBAGJVNsKAQVFoAABuq9Zvf2U253.png

分流電阻(SR1)的值是0.22歐姆。就像之前說的,我們設計的是0-1A的測量電路,基于歐姆定律,我們可以計算出這個電阻的電壓降,當最大的1A電流通過負載時,它的電壓會在0.2V左右。這個電壓對于微控制器來說是非常小的,我們使用一個運算放大器來將電壓從0.2V放大到到更高。這個放大器的增益是21,所以0.2*21=4.2v。計算運算放大器增益的公式如下所示:

Gain = Vout / Vin = 1 + (Rf / Rin)

在例子中,Rf的值是20k而Rin的值是1k,這樣我們就能獲得21的增益值。然后,將放大器的放大電壓輸入到一個由電阻1k和電容0.1uf組成的的RC濾波電路,過濾掉耦合噪聲。最后,將得到的電壓輸入到Arduino模擬針上。

測量單元最后的部分是電壓調節(jié)電路。由于實際輸入的電壓可能是可變的,而Arduino和運算放大器需要一個穩(wěn)定的+5V來保證正常工作,因此我們用7805穩(wěn)壓模塊并添加一個噪聲電容來進行電壓調節(jié)。電路如下:

pYYBAGJVNsmASG_JAAAlt4JQjAw622.png

計算和顯示單元

在測量單元中,我們將電壓和電流參數(shù)轉換成了0-5v,使之可以用在Arduino模擬輸入上?,F(xiàn)在,我們需要將這些電壓信號與Arduino連接起來,并將1602液晶顯示器連接到Arduino上,這樣我們就可以查看最終結果了。

pYYBAGJVNs6Aeh5iAADaIVLZcE8175.png

如上圖所示,Voltage針與Arduino模擬針A3相連,而Current針連接到Arduino模擬針A4,1602液晶顯示器的電源來自于7805輸出的+5 V,同時將1602其它信號針與Arduino的數(shù)字數(shù)字針相連,以4-bit模式工作,同時我們使用了一個電位計(10 k)連接到1602的 Con 針用來調節(jié)LCD的對比度。

Arduino編程部分

硬件部分討論結束后,現(xiàn)在輪到軟件部分了。軟件部分代碼的基本思路是讀取A3和A4上的模擬電壓,并計算電壓、電流和功率值,最后將其顯示在LCD屏幕上。下面我們將代碼分割成小段來解釋。和所有Arduino程序一樣,開始都是定義使用的引腳。在本例中,A3和A4針分別用于測量電壓和電流,數(shù)字針3,4,8,9,10和11用于與Arduino進行交互。

int Read_Voltage = A3;

int Read_Current = A4;

const int rs = 3, en = 4, d4 = 8, d5 = 9, d6 = 10, d7 = 11; //1602 LCD 連接針

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

included一個名為“l(fā)iquid crystal”的頭文件。然后setup 函數(shù)中,初始化LCD顯示屏,并將串口顯示文本設置為“Arduino Wattmeter”,然后等待兩秒鐘。代碼如下所示:

void setup() {

lcd.begin(16, 2); //Initialise 16*2 LCD

lcd.print(“ Arduino Wattmeter”);

lcd.setCursor(0, 1);

lcd.print(“-Circuitdigest”);

delay(2000);

lcd.clear();

}

在主循環(huán)函數(shù)中,我們使用analogread函數(shù)來讀取A3和A4的電壓值。我們知道Arduino ADC的輸出值是0-1203,因為它有一個10位的ADC,這個值必須被轉換成0-5v,可以通過乘以(5/1023)來完成。在硬件介紹部分,我們已經(jīng)完成從0-24v到0-5v的電壓轉換,以及0-1a到0-5v的轉換。所以現(xiàn)在我們要用一個乘數(shù)把這些值恢復到實際值??梢酝ㄟ^將其與乘數(shù)值相乘來完成。乘數(shù)的值可以用硬件部分提供的公式來計算,或者如果你已知電壓和電流值,你可以實際計算它。本例遵循了后一種選擇,因為它在現(xiàn)實中往往更準確。所以乘數(shù)的值是6.46和0.239。因此,代碼如下所示:

float Voltage_Value = analogRead(Read_Voltage);

float Current_Value = analogRead(Read_Current);

Voltage_Value = Voltage_Value * (5.0/1023.0) * 6.46;

Current_Value = Current_Value * (5.0/1023.0) * 0.239;

如何提高測量精度?

上述計算實際電壓和電流值的方法可以很好地工作。但是也有一個缺點,那就是測量的ADC電壓和實際電壓之間的關系不是線性的,因此得到的結果不會非常精確。為了提高精確度,我們可以用已知的一組值來建立測量的ADC值的集合,然后利用這些數(shù)據(jù),使用線性回歸方法推導出乘數(shù)方程。一旦我們計算出了實際電壓和實際電流值,我們就可以用公式計算出功率(P=V*I)。然后使用下面的代碼在LCD上顯示這三個值。

lcd.setCursor(0, 0);

lcd.print(“V=”); lcd.print(Voltage_Value);

lcd.print(“ ”);

lcd.print(“I=”);lcd.print(Current_Value);

float Power_Value = Voltage_Value * Current_Value;

lcd.setCursor(0, 1);

lcd.print(“Power=”); lcd.print(Power_Value);

完整測試代碼

poYBAGJVNwWAchosAAWDO1I3Ta0450.png

/*

 * Wattmeter for Solar PV using Arduino
 * Dated: 2-10-2018
 * Website: www.basemu.com
 * Translation to:circuitdigest.com
 * Power LCD and circuitry from the +5V pin of Arduino whcih is powered via 7805
 * LCD RS -> pin 2
 * LCD EN -> pin 3
 * LCD D4 -> pin 8
 * LCD D5 -> pin 9
 * LCD D6 -> pin 10
 * LCD D7 -> pin 11
 * Potetnital divider to measure voltage -> A3
 * Op-Amp output to measure current -> A4
 */

#include    

int Read_Voltage  = A3;
int Read_Current  = A4;
const int rs = 3, en = 4, d4 = 8, d5 = 9, d6 = 10, d7 = 11; 
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  lcd.begin(16, 2); 
  lcd.print(" Arduino Wattmeter"); 
  lcd.setCursor(0, 1);
  lcd.print("  With Arduino  "); 
  delay(2000);
  lcd.clear();
}
void loop() { 
 float Voltage_Value = analogRead(Read_Voltage);
 float Current_Value = analogRead(Read_Current);
 Voltage_Value = Voltage_Value * (5.0/1023.0) * 6.46;
 Current_Value = Current_Value * (5.0/1023.0) * 0.239;
 lcd.setCursor(0, 0);
 lcd.print("V="); lcd.print(Voltage_Value); 
 lcd.print("  "); 
 lcd.print("I=");lcd.print(Current_Value);
 float Power_Value = Voltage_Value * Current_Value;
 lcd.setCursor(0, 1);
 lcd.print("Power="); lcd.print(Power_Value); 
delay(200);
}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 功率計
    +關注

    關注

    2

    文章

    191

    瀏覽量

    29622
  • Arduino
    +關注

    關注

    187

    文章

    6453

    瀏覽量

    185920
收藏 人收藏

    評論

    相關推薦

    如何使用8051微控制器構建簡單的數(shù)字溫度

    有時,由于波動,人們發(fā)現(xiàn)很難從模擬溫度讀取溫度。因此,在這里我們將使用8051微控制器構建簡單的數(shù)字溫度,其中LM35傳感器用于測量
    的頭像 發(fā)表于 11-21 16:38 ?3028次閱讀
    如何使用8051微控制器<b class='flag-5'>構建</b><b class='flag-5'>一</b><b class='flag-5'>個</b>簡單的數(shù)字溫度<b class='flag-5'>計</b>

    請問下怎樣去設計種基于Arduino功率?

    怎樣去設計種基于Arduino功率?怎樣去設計Arduino功率
    發(fā)表于 07-26 06:18

    Arduino功率電路是如何工作的

    怎樣去設計Arduino功率的完整電路?Arduino功率電路是如何工作的?
    發(fā)表于 09-29 08:46

    使用Arduino構建數(shù)字羅盤

    描述幾個人用機器人技術開發(fā)項目,其中大問題是確定他們的導航方向。換句話說,機器人在環(huán)境中移動,但系統(tǒng)不知道它的確切方向,這意味著它的導航過程。作為種解決方案,許多人采用GPS設備來輔助確定方向
    發(fā)表于 08-25 06:11

    利用IC構建簡單的溫度式電壓指示

    利用IC構建簡單的溫度式電壓指示 本應用筆記介紹了產生溫度式電壓指示的電路。該電路可以
    發(fā)表于 04-25 10:44 ?995次閱讀
    <b class='flag-5'>利用</b>IC<b class='flag-5'>構建</b>簡單的溫度<b class='flag-5'>計</b>式電壓指示

    如何使用Arduino構建電子動畫眼睛

    在這個項目中,我們將使用 Arduino 構建動畫眼睛。在網(wǎng)上尋找新的項目創(chuàng)意時,我萌生了制作動畫眼睛的想法,這個項目立即引起了我的注意。
    的頭像 發(fā)表于 07-10 09:52 ?2330次閱讀
    如何使用<b class='flag-5'>Arduino</b><b class='flag-5'>構建</b><b class='flag-5'>一</b><b class='flag-5'>個</b>電子動畫眼睛

    使用Arduino設計壁掛式紅外溫度

    在這個項目中,我們將使用 Arduino 設計壁掛式紅外溫度,可以簡單地固定在墻上并保持開啟狀態(tài)。
    發(fā)表于 08-09 16:54 ?2606次閱讀
    使用<b class='flag-5'>Arduino</b>設計<b class='flag-5'>一</b><b class='flag-5'>個</b>壁掛式紅外溫度<b class='flag-5'>計</b>

    如何使用Arduino和OLED設計GPS車速表

     在這個項目中,我們將使用帶有 OLED 顯示屏的 NEO6M GPS 模塊 構建Arduino GPS 速度。
    發(fā)表于 08-09 17:01 ?4850次閱讀
    如何使用<b class='flag-5'>Arduino</b>和OLED設計<b class='flag-5'>一</b><b class='flag-5'>個</b>GPS車速表

    如何制作Arduino pH

     在這個項目中,我們將制作Arduino pH ,并學習如何使用重力 pH 傳感器和 Arduino 測量液體溶液的 pH 值。16x
    發(fā)表于 08-12 16:39 ?4830次閱讀
    如何制作<b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>Arduino</b> pH<b class='flag-5'>計</b>

    使用RDA5807構建Arduino FM收音機

    在本教程中,我們將構建Arduino FM 接收器,并將其添加到我們的項目庫中。我們將使用帶有 Arduino 的 RDA5807 FM
    發(fā)表于 08-19 14:50 ?1.8w次閱讀
    使用RDA5807<b class='flag-5'>構建</b><b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>Arduino</b> FM收音機

    使用Arduino和加速度構建簡單且便宜的計步器

    在本教程中,我們將使用 Arduino 和加速度構建簡單且便宜的 DIY 計步器。該計步器將計算腳步的數(shù)量并將其顯示在16x2 LCD
    的頭像 發(fā)表于 08-19 15:15 ?4518次閱讀
    使用<b class='flag-5'>Arduino</b>和加速度<b class='flag-5'>計</b><b class='flag-5'>構建</b><b class='flag-5'>一</b><b class='flag-5'>個</b>簡單且便宜的計步器

    如何使用Arduino構建無線門鈴

     在這個項目中,我們將使用 Arduino 構建無線門鈴。我們將有按鈕,按下該按鈕將無線
    發(fā)表于 08-19 15:57 ?1661次閱讀
    如何使用<b class='flag-5'>Arduino</b><b class='flag-5'>構建</b><b class='flag-5'>一</b><b class='flag-5'>個</b>無線門鈴

    如何使用MPU6050和Arduino構建數(shù)字量角器

    MPU6050是款 集成 了 IC 3 軸加速度和 3 軸陀螺儀的 單元。它還包含溫度傳感器和
    發(fā)表于 08-31 15:42 ?5242次閱讀
    如何使用MPU6050和<b class='flag-5'>Arduino</b><b class='flag-5'>構建</b><b class='flag-5'>一</b><b class='flag-5'>個</b>數(shù)字量角器

    構建Arduino交通燈模塊

    電子發(fā)燒友網(wǎng)站提供《構建Arduino交通燈模塊.zip》資料免費下載
    發(fā)表于 12-13 10:39 ?0次下載
    <b class='flag-5'>構建</b><b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>Arduino</b>交通燈模塊

    如何使用加速度構建基于Arduino的地震探測器

    采取預防措施。在這里,我們使用加速度ADXL335來檢測地震前的振動。加速度ADXL335對所有三軸的振動和振動都非常敏感。在這里,我們正在 使用加速度
    的頭像 發(fā)表于 01-25 15:57 ?1518次閱讀
    如何使用加速度<b class='flag-5'>計</b><b class='flag-5'>構建</b><b class='flag-5'>一</b><b class='flag-5'>個</b>基于<b class='flag-5'>Arduino</b>的地震探測器