Al-Nassim بناء مقياس فولتميتر باستخدام شاشة 16*2 و Arduino Mega 2560

Ahmad Altonji

Administrator
طاقم الإدارة
يمكن عن طريق هذه الدائرة تصميم مقياس فولت بسيط بعد توصيل العناصر الالكترونية مع بعضها و تحميل الكود للاردوينو

اولا : العناصر المطلوبة

  • Arduino Mega 2560
  • LCD 16*2
  • مقاومة متغيرة 1 كيلو عدد 2
ثانيا مخطط توصيل الدائرة مبين بالشكل التالي

do.php


ثالثا : عند تغذية الدائرة بالجهد الكهربائي ستبدا الشاشة بالعمل و تكون جاهزة لقياس الفولت كما هو موضح بالشكل التالي

do.php


رابعا : عند تغير قيمة الفولت على الـ A0 من 0 الى 5 ستبدأ الشاشة بعرض قيمة الفولت على شكل مؤشر سطري
مثلا اذا كان الجهد على الـ A0 يساوي 0.95 فولت ستكون طريقة عرض الشاشة هكذا

do.php


مثلا اذا كان الجهد على الـ A0 يساوي 2.55 فولت ستكون طريقة عرض الشاشة هكذا

do.php


مثلا اذا كان الجهد على الـ A0 يساوي 5 فولت ستكون طريقة عرض الشاشة هكذا

do.php


خامسا : تعمل الدائرة بشكل كامل على جهد تغذية 5 فولت

سادسا : لتحميل كود الاردوينو يرجى نسخه من هنا


PHP:
/*This code
 * download from https://www.al-nassim.net
***************************************************************************************************************
Arduino LCD Bargraph Voltmeter Sketch

Input Voltage - A0; 0-5v
//Ahmad Altonji
//syria
//Mob:+963935888592
*/

int Bit_0 =  2;
int Bit_1 =  3;
int Bit_2 =  4;
int Bit_3 =  5;
int Bit_4 =  6;
int Bit_5 =  7;
int Bit_6 =  8;
int Bit_7 =  9;
int RS =  10;
int EN =  11;

//int BinaryValue =  0;

int VoltageBarValue = 0;
int LCD_Address = 0x80;


// the setup function runs once when you press reset or power the board
void setup() {
  // initialize I/O as output.
  pinMode(Bit_0, OUTPUT);  //Bit_0
  pinMode(Bit_1, OUTPUT);  //Bit_1
  pinMode(Bit_2, OUTPUT);  //Bit_2
  pinMode(Bit_3, OUTPUT);  //Bit_3
  pinMode(Bit_4, OUTPUT);  //Bit_4
  pinMode(Bit_5, OUTPUT);  //Bit_5
  pinMode(Bit_6, OUTPUT);  //Bit_6
  pinMode(Bit_7, OUTPUT);  //Bit_7
 
  pinMode(RS, OUTPUT);  //Bit_10
  pinMode(EN, OUTPUT);  //Bit_11
 
  InitLCD();
}

void loop()
{
int analog_input = analogRead(A0);
ShowLCD_BarGraph (analog_input / 4.0 );//Normalize voltage full scale to 256
//to show 16 segments at Max = 5v;
}

void ShowLCD_BarGraph (int VoltageBarValue)
{
  LCD_Address = 0x80;
  while(VoltageBarValue > 0)
  {
    LCDC(LCD_Address);
    LCDD(0xff);
    VoltageBarValue=VoltageBarValue-15;
    LCD_Address++;
  }

// https://www.al-nassim.net
    //-----------------Clear previous locations----
    while(LCD_Address <= 0x8f)
    {
      LCDD(0xfe);
      LCD_Address++;
    }
}

void ConvertNumToBinary(int digit)
{
//--------------BIT_0------------
if(bitRead(digit, 0)== 1)
digitalWrite(Bit_0, HIGH);
if(bitRead(digit, 0)== 0)
digitalWrite(Bit_0, LOW);
//-------------------------------

//--------------BIT_1------------
if(bitRead(digit, 1) == 1)
digitalWrite(Bit_1, HIGH);
if(bitRead(digit, 1) == 0)
digitalWrite(Bit_1, LOW);
//-------------------------------

//--------------BIT_2------------
if(bitRead(digit, 2) == 1)
digitalWrite(Bit_2, HIGH);
if(bitRead(digit, 2) == 0)
digitalWrite(Bit_2, LOW);
//-------------------------------

//--------------BIT_3------------
if(bitRead(digit, 3) == 1)
digitalWrite(Bit_3, HIGH);
if(bitRead(digit, 3) == 0)
digitalWrite(Bit_3, LOW);
//-------------------------------

//--------------BIT_4------------
if(bitRead(digit, 4) == 1)
digitalWrite(Bit_4, HIGH);
if(bitRead(digit, 4) == 0)
digitalWrite(Bit_4, LOW);
//-------------------------------
// https://www.al-nassim.net
//--------------BIT_5------------
if(bitRead(digit, 5) == 1)
digitalWrite(Bit_5, HIGH);
if(bitRead(digit, 5) == 0)
digitalWrite(Bit_5, LOW);
//-------------------------------

//--------------BIT_6------------
if(bitRead(digit, 6) == 1)
digitalWrite(Bit_6, HIGH);
if(bitRead(digit, 6) == 0)
digitalWrite(Bit_6, LOW);
//-------------------------------

//--------------BIT_7------------
if(bitRead(digit, 7) == 1)
digitalWrite(Bit_7, HIGH);
if(bitRead(digit, 7) == 0)
digitalWrite(Bit_7, LOW);
//-------------------------------
}

void InitLCD()
{
delay(20);
//ConvertNumToBinary(0x30);

LCDC(0x30);
delay(5);
//-----------------
LCDC(0x30);
delay(5);
//-----------------
LCDC(0x30);
delay(1);
//-----------------
//; display clear
LCDC(0x01);
delay(1);
//-----------------
// ID=1,S=0 increment,no  shift 000001 ID S
LCDC(0x06);
delay(1);
//-----------------
//D=1,C=B=0 set display ,no cursor, no blinking
LCDC(0x0c);
delay(1);
//------------------
// dl=1 ( 8 bits interface,n=12 lines,f=05x8 dots)
LCDC(0x38);
delay(1);
//------------------


}
void LCDC(int command)
{
//RS = 0 ;EN = 0 ;
digitalWrite(RS, LOW);
digitalWrite(EN, LOW);
ConvertNumToBinary(command);
//; EN=1,RS=0
digitalWrite(RS, LOW);
digitalWrite(EN, HIGH);
delay(1);
//; EN=0,RS=0
digitalWrite(RS, LOW);
digitalWrite(EN, LOW);
delay(1);
}
//https://www.al-nassim.net
void LCDD(int data)
{
//RS = 1 ;EN = 0 ;
digitalWrite(RS, HIGH);
digitalWrite(EN, LOW);
ConvertNumToBinary(data);
//; EN=1,RS=1
digitalWrite(RS, HIGH);
digitalWrite(EN, HIGH);
delay(1);
//; EN=0,RS=1
digitalWrite(RS, HIGH);
digitalWrite(EN, LOW);
delay(1);
}

سابعا : لتحميل ملف محاكاة الدائرة على برنامج Proteus 8 Professional يرجى الضغط على الرابط التالي

Arduino LCD Bargraph Voltmeter - altonji.net تحميل ● مركز تحميل العلوم والهندسة

ثامنا : فيديو يوضح عمل الدائرة بشكل عملي واقعي

 
التعديل الأخير:

Eng Mohamad

مدير عام
طاقم الإدارة
موضوع جميل استاذ احمد والاجمل منه سخائك وكرمك في عرض الاكواد
واظن انه من الممكن تعديل الدارة لقياس جهود اكبر من ذلك
 

Ahmad Altonji

Administrator
طاقم الإدارة
موضوع جميل استاذ احمد والاجمل منه سخائك وكرمك في عرض الاكواد
واظن انه من الممكن تعديل الدارة لقياس جهود اكبر من ذلك
كل الشكر لك استاذي

و كلامك صحيح بالنسبة للجهد الكبير
 
أعلى