• Tidak ada hasil yang ditemukan

Monitoring Tegangan Arus dan Daya Pada C

N/A
N/A
Protected

Academic year: 2018

Membagikan "Monitoring Tegangan Arus dan Daya Pada C"

Copied!
28
0
0

Teks penuh

(1)

TUGAS AKHIR SEMESTER 1

MIKROKONTROLLER DAN INTERFACE

MONITORING TEGANGAN, ARUS, DAN DAYA PADA

CHARGER BATERI

Oleh :

Mughni Syahid

NRP. 1310145014

Dosen :

Mohamad Safrodin B.Sc, MT

PROGRAM STUDI DIII TEKNIK ELEKTRO INDUSTRI

DEPARTEMEN TEKNIK ELEKTRO

POLITEKNIK ELEKTRONIKA NEGERI SURABAYA

Kampus ITS Keputih Sukolilo, Surabaya 60111, Jawa Timur, Indonesia

Telp.(031) 5947280 Fax:(031)5946114

(2)

MONITORING TEGANGAN, ARUS DAN DAYA

PADA CHARGER BATERAI

I.

TUJUAN

1.

Sebagai tugas akhir semester 1 mata kuliah mikrokontroller dan interface.

2.

Dapat mengaplikasikan visual studio C# sebagai monitoring dan data base MySQL

sebagai media penyimpan data monitoring.

II.

DASAR TEORI

2.1 Sensor Tegangan

Rangkaian sensor tegangan yang dipakai adalah pembagi tegangan dengan

resistor dikarenakan tegangan yang diukur maksimal 27,72 V, sedangkan tegangan

yang diperbolehkan masuk ke ADC pada mikrokontroler maksimal 5 V. Gambar 2.1.

menunjukkan gambar rangkaian sensor tegangan dengan dua buah resistor R1 dan R2.

Gambar 2.1. Rangkaian Sensor Tegangan

Untuk mendapatkan nilai dari resistor yang digunakan adalah dengan rumus

pembagi teganagan seperti pada rumus 2.1 dibawah ini :

2 =

( 1 + 2)

(2.1)

Dimana :

R1

: Resistor R1

R2

: Resistor R2

Vi

: Tegangan Input

Vo

: Tagangan Output

2.2 Sensor Arus (ACS 712) 5A

(3)

Gambar 2.2.

1

Konfigurasi Pin dari IC ACS7 12.

Sensor ACS712 ini pada saat tidak ada arus yang terdeteksi, maka keluaran

sensor adalah 2,5 V. Dan saat arus mengalir dari IP+ ke IP-, maka keluaran akan >2,5

V. Sedangkan ketika arus listrik mengalir terbalik dari IP- ke IP+, maka keluaran akan

< 2,5 V. Berikut ini adalah karakteristik dari sensor suhu ACS712.

Memiliki sinyal analog dengan sinyal-ganguan rendah (low-noise)

Ber-bandwidth 80 kHz

Total output error 1.5% pada Ta = 25°C

Memiliki resistansi dalam 1.2 mΩ

Tegangan sumber operasi tunggal 5.0V

Sensitivitas keluaran: 66 sd 185 mV/A

Tegangan keluaran proporsional terhadap arus AC ataupun DC

Fabrikasi kalibrasi

Tegangan offset keluaran yang sangat stabil

Hysterisis akibat medan magnet mendekati nol

Rasio keluaran sesuai tegangan sumber

2.3

Daya DC

Daya DC adalah perkalian dari tegangan dan arus, sehingga :

=

(2.2)

Dimana :

P = Daya (Watt)

V = Tegangan ( Volt)

I = Arus (Ampere)

1

(4)

III.

GAMBAR BLOK DIAGRAM RANGKAIAN

IV.

ALAT DAN BAHAN

Software

1.

Microsoft Visual Studio 2008 C#

2.

XAMPP ( Apache dan MySQL )

3.

MySql Connector

4.

Code Vision AVR

5.

Khazama AVR Programmer

Hardware

1.

Transformator 5A

2.

Rectifier dan Filter

3.

Minimum sistem mikrokontroller Atmega 16

4.

LCD Display16X2

5.

DC – DC Converter ( Buck Converter )

6.

Sensor Tegangan ( Voltage Devider )

7.

Sensor Arus (ACS712) 5A

(5)

V.

PROSEDUR PERCOBAAN

A.

Membuat Program di Mikrokontroller

1.

Buka Code Vsision AVR

2.

Setting konfigurasi I/O

(6)

4.

Download ke Mikrokontroller dengan Khazama AVR Programmer

B.

Membuat Program di PC / Komputer

1.

Membuat Program Data Base My SQL ( Aktifkan Aphace dan MySQL)

(7)

3.

Untuk koneksi data base dengan visual C# maka instal MySQL Connector

4.

Buat Program monitoring di Visual C#

(8)

5.

Buat desain Form dan Program

6.

Untuk menambahkan Grafik tambahkan Zedgraph

(9)

VI.

HASIL PERCOBAAN

1.

Tampilan monitoring Visual C#

Keterangan :

1.

Grafik Tegangan, Arus, Daya yang ditampilkan per detik / real time

namun tidak disimpan di data base.

2.

Grafik Tegangan / Arus / Daya dari data base yang ditampilkan per menit.

3.

Tabel untuk melihat data yang tersimpan di data base.

4.

Setting COM serial dan tombol connect.

5.

Tombol tools untuk grafik dan data base.

(10)

Grafik tegangan naik menandakan proses pengisian. Pada saat arus tegangan

naik maka menggunakan charger metode Arus Konstan sehingga tegangan baterai

yang akan berubah. Saat tegangan baterai mecapai 14,4 V maka metode yang

digunakan Tegangan Konstan sehingga tegangan charger konstan di 14,4V. Karena

kondisi kontrol PI yang tidak stabil serta skala pembacaan sensor sehingga

menyebabkan output menjadi osilasi diantara setpoint 14,4 V.

3.

Membaca data base dan menampilkan grafik arus

Saat awal pengisian baterai maka charger menggunkan metode Arus Konstan

sehingga arus sesuai set point 1,44 A. Namun karena kondisi kontrol PI yang tidak

stabil dan skala pembacaan sensor arus yang besar menyebabkan output dari kontrol

PI osilasi di antara setpoint arus 1,44 A. Setelah Tegangan Charger menjadi 14,4 V

maka metode berubah menjadi Tegangan Konstan set point 14,4V dan arus pengisian

akan turun. Jika arus pengisian turun dan mencapai steady maka menandakan baterai

sudah dalam kondisi penuh dan pengisian selesai.

4.

Membaca data base dan menampilkan grafik daya

(11)

5.

Membaca data base di MySQL

Membaca data di MyAdmin SQL yang sudah tersimpan. Karena daya yang banyak

maka ditampilkan yang 500 baris.

6.

Membuat tampilan gafik di MySQL

Untuk mempermudah menganalisa data maka di MySQL data base dapat

ditampilkan ke grafik. Dari tampilan grafik hasilnya sama dengan tampilan grafik di

monitoring Visul C# namun di MySQL data Tegangan, Arus dan Daya ditampilkan

di satu grafik sehingga data arus yang nilainya kecil sulit untuk dianalisa nilainya.

(12)

VII.

KESIMPULAN

Dari percobaan ini maka dapat diambil keimpulan diantaranya :

1.

Dengan monitoring data yang ditampilkan di grafik dapat mempermudah

melihat dan menganalisa perubahan data dari sensor.

2.

Dengan penyimpanan data di data base maka akan mempermudah

pengambilan sensor data karena tidak perlu mencatat tiap waktu dan

mengurangi resiko error dan kesalahan saat pengambilan data manual.

(13)

VIII.

LAMPIRAN PROGRAM

1.

Program di Mikrokontroller

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

Project : Monitoring Tegangan, Arus, dan Daya pada Charger Baterai

Version : rev 1

Date : 28/10/2015

Author : Mughni Syahid

Company : PENS

Comments: bismillah project mikrokontroller dan interface

Chip type : ATmega16

Program type : Application

AVR Core Clock frequency: 16,000000 MHz

Memory model : Small

// Declare your global variables here

#define ADC_VREF_TYPE 0x00

unsigned char lcd[16];

float nilaitt, nilaiaa;

int kirima, kirimv;

float nilai_t, Inte_t=0, error_t=0, P_t=0 , I_t=0 , PI_t=0;

float nilai_a, Inte_a=0, error_a=0, P_a=0 , I_a=0 , PI_a=0;

int da[51], a=0, na=0, aa;

(14)

int m=0, o=1, p=0, q=0, ca=1, ct=1, cs=1, charger=0, ;

// Read the AD conversion result

unsigned int read_adc(unsigned char adc_input)

{

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);

// Delay needed for the stabilization of the ADC input voltage

delay_us(10);

// Start the AD conversion

ADCSRA|=0x40;

// Wait for the AD conversion to complete

while ((ADCSRA & 0x10)==0);

nilaitt=((tt*5.0/1023)*12200)/2200;

(15)

{

if(nilaiaa<=500&&o==1)

{ ca=on; ct=off; cs=off; o=0; p=1; q=0; m=0; }

if(nilaitt>=14.4&&p==1)

{ ca=off; ct=on; cs=off; o=0; p=0; q=1; m=0; }

//////////// arus konstan 1.44 A /////////////

if(ca==on)

{

sprintf(lcd,"%.2fV A> %.3fA ",nilaitt,nilaiaa);

lcd_gotoxy(0,1); lcd_puts(lcd);

//////////////// Kontrol PI //////////////////

nilai_a=((adc_ars*5.0/1023)-2.5)/0.185;

error_a=sp_a-nilai_a;

Inte_a=Inte_a+(error_a*tsa);

P_a=kp_a*error_a;

sprintf(lcd,"%.2fV <T %.3fA ",nilaitt,nilaiaa);

lcd_gotoxy(0,1); lcd_puts(lcd);

//////////////// Kontrol PI //////////////////

nilai_t=(((adc_teg*5.0)/1023)*12200)/2200;

error_t=sp_t-nilai_t;

(16)

/////////////////// end /////////////////

}

// Declare your global variables here

void main(void)

{

// Declare your local variables here

PORTA=0x00;

// Clock source: System Clock

// Clock value: 15,625 kHz

// Mode: Normal top=0xFF

// Clock source: System Clock

// Clock value: 16000,000 kHz

// Mode: Ph. correct PWM top=ICR1

// OC1A output: Non-Inv.

// OC1B output: Non-Inv.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0xA2;

TCCR1B=0x11;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=200; // TOP=(fclk/(2*N*fpwm)) //138 //150

OCR1AH=0x00;

(17)

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x41;

// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART Receiver: On

// ADC Clock frequency: 1000,000 kHz

// ADC Voltage Reference: AREF pin

// ADC Auto Trigger Source: ADC Stopped

ADMUX=ADC_VREF_TYPE & 0xff;

ADCSRA=0x84;

// Alphanumeric LCD initialization

// Connections are specified in the

(18)
(19)

private void ShowData() {

if (GrafikDB.GraphPane.CurveList.Count <= 0)

return;

LineItem curve1DB = GrafikDB.GraphPane.CurveList[0] as

LineItem;

if (curve1DB == null)

return;

IPointListEdit List1DB = curve1DB.Points as

IPointListEdit;

MySqlDataReader reader = null;

conn.Open();

MySqlCommand cmd = new MySqlCommand(command.CommandText,

conn); double time = (Environment.TickCount - TickStartDB) / 1000.0;

dbteg = Convert.ToInt16(

reader["Tegangan"].ToString());

dbarus = Convert.ToInt16(reader["Arus"].ToString());

(20)

GraphPane myPaneDB = GrafikDB.GraphPane;

if (Convert.ToString(CBDB.Text)== "Tegangan")

{

List1DB.Add(i, dbteg);

(21)

private void Form1_Load(object sender, EventArgs

RollingPointPairList ListDB = new

RollingPointPairList(60000);

RollingPointPairList List1DB = new

RollingPointPairList(60000);

LineItem curveDB = myPaneDB.AddCurve(" ", ListDB,

Color.Red, SymbolType.None);

waktu = string.Format("{0:yyyy'-'MM'-'dd

HH':'mm':'ss}",tgl);

MySqlConnection conn = koneksi.getkoneksi();

MySqlCommand command = conn.CreateCommand();

command.CommandText = "INSERT INTO data_charger

(Tegangan,Arus,Daya,Waktu) VALUES('" + teg + "','" + arus + "','" + daya + "','" + waktu + "')";

conn.Open();

MySqlCommand cmd = new MySqlCommand(command.CommandText,

conn);

(22)

conn.Close();

MySqlCommand cmd = new MySqlCommand(command.CommandText,

conn);

private void lvData_SelectedIndexChanged(object sender,

EventArgs e)

void zedGraphControlT_Load(object sender, EventArgs e)

(23)

SerialPort.PortName = Convert.ToString(comboBox.Text);

RollingPointPairList ListT = new

RollingPointPairList(60000);

RollingPointPairList List1T = new

RollingPointPairList(60000);

LineItem curveT = myPaneT.AddCurve("Tegangan", ListT,

Color.Blue, SymbolType.None);

LineItem curve1T = myPaneT.AddCurve(" ", List1T,

Color.YellowGreen, SymbolType.None);

myPaneT.XAxis.Scale.Min = 0;

RollingPointPairList ListA = new

RollingPointPairList(60000);

RollingPointPairList List1A = new

RollingPointPairList(60000);

LineItem curveA = myPaneA.AddCurve("Arus", ListA,

Color.Green, SymbolType.None);

LineItem curve1A = myPaneA.AddCurve(" ", List1A,

Color.Blue, SymbolType.None);

(24)

// grafik Daya

GraphPane myPaneD = GrafikDaya.GraphPane;

myPaneD.Title.Text = " Grafik Daya "; myPaneD.XAxis.Title.Text = " Waktu (s) "; myPaneD.YAxis.Title.Text = " Daya (A) ";

RollingPointPairList ListD = new

RollingPointPairList(60000);

RollingPointPairList List1D = new

RollingPointPairList(60000);

LineItem curveD = myPaneD.AddCurve("Daya", ListD,

Color.Red, SymbolType.None);

LineItem curve1D = myPaneD.AddCurve(" ", List1D,

Color.White, SymbolType.None);

myPaneD.XAxis.Scale.Min = 0;

arusint = Convert.ToInt32(DataSerial.Substring(pos2 + 1,

4));

arusfloat = ((arusint * 5 * 1000 /1023 ) - 2500 ) * 1000 / 185;

arus = Convert.ToString(arusfloat);

dayafloat = (Convert.ToInt32(tegfloat) *

Convert.ToInt32(arusfloat))/1000;

dayaint = Convert.ToInt32 (dayafloat) ;

daya = Convert.ToString(dayaint);

(25)

LineItem curveT = GrafikTegangan.GraphPane.CurveList[0] as

LineItem;

LineItem curve1T = GrafikTegangan.GraphPane.CurveList[1]

as LineItem;

(26)

GrafikTegangan.AxisChange();

LineItem curveA = GrafikArus.GraphPane.CurveList[0] as

LineItem;

LineItem curve1A = GrafikArus.GraphPane.CurveList[1] as

LineItem;

(27)

}

LineItem curveD = GrafikDaya.GraphPane.CurveList[0] as

LineItem;

LineItem curve1D = GrafikDaya.GraphPane.CurveList[1] as

LineItem;

(28)

private void DrawDB(string setpointDB, string DB)

LineItem curveDB = GrafikDB.GraphPane.CurveList[0] as

LineItem;

LineItem curve1DB = GrafikDB.GraphPane.CurveList[1] as

Gambar

Gambar 2.1.  Rangkaian Sensor  Tegangan
Gambar 2.2.  1Konfigurasi Pin dari IC ACS7 12.
GAMBAR BLOK DIAGRAM RANGKAIAN
Grafik tegangan naik menandakan proses pengisian. Pada saat arus tegangan naik maka menggunakan charger metode Arus Konstan sehingga tegangan baterai

Referensi

Dokumen terkait

(3) Pengharmonisasian, pembulatan, dan pemantapan konsepsi Rancangan Undang-Undang yang berasal dari Presiden dikoordinasikan oleh menteri atau kepala lembaga yang

38 Dalam Kompilasi Hukum Islam pada pasal 113, disebutkan bahwa perkawinan dapat putus karena: (1) Kematian (2) Perceraian (3) Putusan Pengadilan Pada pasal

Setiap dosen dalam mengatur mahasiswa sangat memerlukan data terkini yang akurat dan untuk mendukung penyediaan data tersebut maka data tidak mungkin diolah

Vektor ciri variabel habitat dengan komponen utama menunjukkan bahwa variabel kemiringan lereng mempunyai hubungan positif yang tinggi terdapat pada komponen utama

Dalam hubungannya dengan revolusi mental, ayat tersebut menyarankan bahwa untuk merevolusi sistem kehidupan bangsa diperlukan strategi dan materi yang utuh yang mampu

Pengaruh variabel dukungan suami terhadap kecemasan ibu hamil trimester III Hasil analisis pada penelitian ini menunjukkan bahwa tidak terdapat pengaruh atau hubungan yang

Hal tersebut menimbulkan permasalahan pada mitra yang merupakan siswa SD yaitu anak sering bersikap enggan untuk patuh minum obat demi kesembuhan penyakit atau gangguan

Untuk daerah linier yang lain yaitu rentang ketinggian antara 24 cm – 74 cm juga terdapat hubungan yang linier antara tegangan keluaran detektor dengan ketinggian bensin, oli,