Arduino Voltmeter (negative & positive Voltage)

ازاي نصمم دايرة voltmeter باستخدام Arduino؟

اشتري كل المكونات المطلوبة للمشروع عن طريق صفحتنا على الفيسبوك من هنا، اكتب اسم المشروع وقولنا عالعنوان واحنا هنوصله لحد عندك.

 

الأردوينو فيه Analog pins بتقيس الجهود الـanalog لحد 5 فولت، جواه فيه حاجة اسمها analog-to-digital converter ودا بيحول الجهد من analog إلى رقم binary عشان الاردوينو يعرف يتعامل معاه. الـADC اللي في الأردوينو الدقة بتاعته 10bits ودا معناه انه ممكن يطلع 1024 رقم مختلف للجهود، لما يدخله 0 فولت بيطلع 0000000000 ولما يدخله 5 فولت بيطلع 1111111111. فبالتالي ممكن نستخدمه كجهاز قياس.

Arduino Voltmeter



هنحلل الدايرة دي باستخدام Nodal Analysis:

( V_ard-V_in ) / R1 + V_ard / R2 + V_ard / R + ( V_ard - 5 ) / R = 0

V_{ard} = ( V_{in} R_{2} R + 5 R_{1} R_{2}) / ( R_{2} R + R_{1} R + 2R_{1} R_{2} )

الشرط الأول:

Numerator must be +ve, arduino can’t read -V:

-V_{in} R_{2} R + 5 R_{1} R_{2} >= 0

5 R_{1} R_{2}>= V_{in} R_{2} R

R_{1}>= V_{in} / 5R

الشرط التاني:

Vard must be less than 5V:

(5-V_{in}) R_{2} R + 5 R R_{1} + 5 R_{1} R_{2} = 0

R = -5 / V_{in} R_{2}

هنهمل السالب ﻷنه ملوش معنى في المعادلة، مفيش مقاومة بالسالب.

هنختار الـVmax المناسبة ونراعي موضوع الـSensitivity ونعوض ونطلع قيم المقاومات.

اخترت S=0.1 V/V ودا مناسب ليا، دا بيسمحلي إني أقيس من 50 فولت إلى -50 فولت. عوضت بـ50 مكان الـVin واخترت أصغر مقاومة تساوي 10k.

LCD circuit



هنوصل الأسلاك زي الصورة، ونستخدم الـanalog pin A0 عشان نقيس بيه.

الكود

أخيرا الكود اللي هنرفعه على الأردوينو:

بعض الملاحظات في الكود:

1- حاول تقيس المقاومات اللي هتحطها بأفوميتر دقيق واكتب قيمهم في الكود مكان الـ R1 و الـR2.

2- بعد ما توصل حط السلك اللي المفروض بتقيس بيه في الأرضي وشوف الأردوينو قاري كام فولت؟ لو صفر يبقا تمام، لو زيادة شوية اجمع الرقم دا على الثابت c1 بنفس الإشارة، يعني لو قاري 0.43 فولت، اكتب +0.43.

/***********************************************************************

* voltmeter part

************************************************************************/

#include <LiquidCrystal.h> // include Arduino LCD library

float R1 = 10000.0;

float R2 = 100000.0;

float Vdd = 5.0;

float c1 = Vdd * R2 / R1 + 0.43; //calibration

float c2 = 2.0 * (1+R2/R1);

float c3 = Vdd/1023.0;

// LCD module connections (RS, E, D4, D5, D6, D7)

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup(void) {

lcd.begin(16, 2); // set up the LCD's number of columns and rows

lcd.setCursor(0, 0);

lcd.print("Voltage");

}

uint16_t get_avg() {

uint16_t Vx = 0;

for(uint8_t i = 0; i < 100; i++) {

uint16_t r = analogRead(A0); // read from analog channel 0 (A0)

Vx+=r;

delay(1);

}

Vx/=100;

return Vx;

}

// get actual voltage reading

float get_real(uint32_t V_m) {

float V_analog = V_m*c3;

float V_r = ( c2*V_analog - c1);

return V_r;

}

// main loop

void loop() {

// get average amplitude

uint32_t v_divided = get_avg();

// calculate actual voltage

float v= get_real(v_divided);

lcd.setCursor(0, 1);

lcd.print("V= "); lcd.print(v, 2);

lcd.print(" ");

delay(500);

}

المرة الجاية هنتكلم عن الـAC voltage بالتفصيل.

نتمنى تكونوا استفدتم بالمقال، وإلى مقال اخر.

Comments

Popular Posts