• Mikroavr
  • Arduino
    • program
    • Sensor
    • Project
  • IOT
  • Dasar
    • Rangkaian
  • Produk
  • About
Sabtu, Desember 14, 2019
  • Mikroavr
  • Arduino
    • program
    • Sensor
    • Project
  • IOT
  • Dasar
    • Rangkaian
  • Produk
  • About
No Result
View All Result
  • Mikroavr
  • Arduino
    • program
    • Sensor
    • Project
  • IOT
  • Dasar
    • Rangkaian
  • Produk
  • About
No Result
View All Result
No Result
View All Result
Home Arduino

Sensor Arus Listrik ACS712 30A dengan ATMEGA

by Jimmi Sitepu
April 23, 2019
in Arduino, Sensor
0

Sensor Arus ACS712

Teori dan Cara Kerja Sensor Arus

Sensor arus listrik ACS712 30A sangat banyak di gunakan di sistem kendali automasi, contoh nya adalah sistem keamanan arus beban pada listrik, monitoring beban arus jarak jauh, kwh meter dan lain lain.

Apakah teman-teman ingin monitoring arus listrik dengan internet? Cukup klik tombol merah di bawah ini.

Monitoring Arus Listrik

Sensor ini memiliki ukuran yang sangat mungil, tapi mampu mengukur arus dari -30A sampai dengan 30A. bayangin tuh kalo seandaninya di lalui tegangan 220V, maka daya yang bisa di lewati nya adalah

P = I*V

P = 30A*220V

= 6.600VA

Bagaimana kah cara kerja sensor ACS712 30A ini? Oke setiap arus yang di lalu oleh sensor ini maka ada perubahan tegangan pada ouput sensor. jika dilihat dari datasheet nya, dari tegangan 0-2.5v ini range arus nya sebesar -30A-0A, sementara 2.5V-5.0V ini range nya 0A – 30 A. Lebih jelas nya cara kerja sensor ini bisa dilihat di datasheet ini

Download (PDF, 644KB)

Oke kita lanjut ya..

Coding Sensor Arus dengan Codevision

Output sensor arus ACS712 30A ini akan kita hubungkan ke PIN ADC.0 pada ATMEGA16, kemudian langsung kita olah datanya di program,. berikut program nya

#include <mega16.h>
#include <delay.h>
#include <stdlib.h>

// Alphanumeric LCD functions
#include <alcd.h>

// Declare your global variables here

// Voltage Reference: AREF pin
#define ADC_VREF_TYPE ((0<<REFS1) | (0<<REFS0) | (0<<ADLAR))

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | ADC_VREF_TYPE;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=(1<<ADSC);
// Wait for the AD conversion to complete
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA|=(1<<ADIF);
return ADCW;
}

float adc_volt;
float amp;
float temps;
float watt;
unsigned char buf_data[16];
unsigned char buf_amp[16];
unsigned char buf_watt[16];


void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization

DDRA=0X00;//penting agar PINA sebagai output
PORTA=0X00;//penting utk di setting nilai PORTA=0

// ADC initialization
// ADC Clock frequency: 1000.000 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: ADC Stopped
ADMUX=ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);
SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);


// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 1
// EN - PORTC Bit 2
// D4 - PORTC Bit 4
// D5 - PORTC Bit 5
// D6 - PORTC Bit 6
// D7 - PORTC Bit 7
// Characters/line: 20
lcd_init(20);

while (1)
      {
      // Place your code here
            temps = read_adc(1)*(5.0/1023);
      adc_volt = fabs(temps-2.50)/0.066;//0.066 di dapat dari data sheet
      amp = adc_volt;
      watt = 220 * amp;    

      lcd_gotoxy(0,0);
      lcd_putsf("UJI SENSOR ARUS");
      lcd_gotoxy(0,1);
      lcd_putsf("VOUT: ");
      ftoa(temps,3,buf_data);
      lcd_puts(buf_data);
      lcd_putsf(" V"); 

      lcd_gotoxy(0,2);
      lcd_putsf("ARUS: ");
      ftoa(amp,3,buf_amp);
      lcd_puts(buf_amp);
      lcd_putsf(" A");

      lcd_gotoxy(0,3);
      lcd_putsf("DAYA: ");
      ftoa(watt,3,buf_watt);
      lcd_puts(buf_watt);
      lcd_putsf(" WATT");
      delay_ms(100);
      lcd_clear();
      }
}

Hasil program di atas akan di tampilkan dengan menggunakan LCD 20X4, dan pin pin pada LCD 20×4 di hubungkan ke PORTC.

Hasil nya sangat mengejutkan, ya itu pembacaan sensor yang tidak stabil. datanya arus nya berubah ubah. jika data ini akan kita gunakan untuk monitoring dan mengendalikan sebuah system maka hasilnya akan tidak baik.

saya juga sempat bingung dengan output ACS712 30A ini, kenapa outputnya naik turun dan tidak setabil. ternyata sebabnya adalah karena kita mengukur arus AC. yang mana gelombang arus AC ini mengakibabkan output sensor ini tidak stabil. jadi bagaimana kah cara agar pembacaan nya menjadi stabil.

Artikel Membaca sensor Arus yang Lebih Stabil

Untuk Artikel di atas, teman-teman cukup klik saja, maka akan mendapat kan cara agar sensor ini lebih berhasil dalam pembacaan nya. Atau kita bahas saha pada sub bab di bawah ini,

Data Maximum Sensor Arus

Untuk pembacaan output sensor arus yang lebih stabil, kita akan coba sampling ADC dalam beberapa waktu kemudian kita lihat nilai maximum nya. Besar arus AC pada suatu beban tidak lah stabil, pasti ada riak atau gelombang nya. Untuk cara pengambilan  Max nya bisa kita lihat pada program di bawah ini,

#include <mega16.h>

#include <delay.h>
#include <stdlib.h>

// Alphanumeric LCD functions
#include <alcd.h>

// Declare your global variables here

// Voltage Reference: AREF pin
#define ADC_VREF_TYPE ((0<<REFS1) | (0<<REFS0) | (0<<ADLAR))

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | ADC_VREF_TYPE;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=(1<<ADSC);
// Wait for the AD conversion to complete
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA|=(1<<ADIF);
return ADCW;
}

float arus1, vout1, daya;
int adc1, count, dataMin, dataMax;
//unsigned char buf_min[10];
unsigned char buf_max[10];
unsigned char buf_arus1[10];
unsigned char buf_daya[10];

void main(void)
{
// Declare your local variables here

DDRA=0X00;//penting agar PINA sebagai output
PORTA=0X00;//penting utk di setting nilai PORTA=0

// ADC initialization
// ADC Clock frequency: 1000.000 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: ADC Stopped
ADMUX=ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);
SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);

// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 1
// EN - PORTC Bit 2
// D4 - PORTC Bit 4
// D5 - PORTC Bit 5
// D6 - PORTC Bit 6
// D7 - PORTC Bit 7
// Characters/line: 16
lcd_init(20);

dataMin = adc1;
dataMax = adc1;

while (1)
      {
      // Place your code here
        for ( count = 0; count < 1000; count++){
    adc1 = read_adc(1);
    if ( adc1 > dataMax ) dataMax = adc1;
            if ( adc1 < dataMin ) dataMin = adc1;
            delay_ms(1);
        }
         
      vout1 = dataMax*(5.0/1023);
      arus1 = fabs(vout1-2.50)/0.066;
      daya = arus1*220;

      ftoa(arus1,3,buf_arus1);

      itoa(dataMax,buf_max);
      ftoa(daya,2,buf_daya);
      
      lcd_clear();
      lcd_gotoxy(0,0);
      lcd_putsf("UJI SENSOR ACS712 30");  

      lcd_gotoxy(0,1);
      lcd_putsf("AMP: ");
      lcd_puts(buf_arus1);
      lcd_putsf(" A");

      lcd_gotoxy(0,2);
      lcd_putsf("MAX: ");
      lcd_puts(buf_max);

      lcd_gotoxy(0,3);
      lcd_putsf("WATT: ");
      lcd_puts(buf_daya);
      lcd_putsf(" VA");

      dataMax=0; dataMin=0; arus1=0;vout1=0;      // reset data


      }
}

Pada program di atas, kita akan membaca sensor Arus dalam satu detik dengan mengabil data sebanyak 1000x. Dalam pembacaan data 1000x ini kita akan melihat data maximun dan data minimum nya. Hal ini di lakukan karena Arus pada Beban AC tidak lah memang stabil.

Pembacaan Sensor Arus dengan Arduino

Bisa kah kita konversi program di atas ke arduino? Dengan struktur yang sama? min max data? Yaps, pasti bisa, karena semua program pada dasarnya memiliki alur yang sama, apalagi sama-sama berbahasa C. Untuk lebih jelas nya mari kita lihat pada program di bawah ini,

float arus0, vout0, daya;
int adc0;
int dataMin, dataMax;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(A0, INPUT_PULLUP);
  dataMin = adc0;
  dataMax = adc0;
}

void loop() {
  // put your main code here, to run repeatedly:
    for ( int i=0; i<1000; i++){
    adc0 = analogRead(A0);
    if ( adc0 > dataMax)dataMax = adc0;
      if ( adc0 < dataMin)dataMin = adc0;
      delay(1);
    }
    vout0 = dataMax*(5.0/1023);
    arus0 = fabs(vout0-2.50)/0.066;
    daya = arus0*220;

    Serial.print("Arus: ");
    Serial.println(arus0);
    Serial.print("Daya: ");
    Serial.println(daya);

    dataMin = 0; dataMax = 0; arus0=0; vout0 = 0;
}

Program di atas memiliki kesamaan cara kerja dengan program codevision AVR, silahkan teman-teman kembangkan sendiri,

Thanks,

Semoga membantu

Tags: arus listrikatmega16sensor arus
Previous Post

Kontrol Jarak Jauh Dengan ATMEGA dan Module GSM SIM800L

Next Post

Mengatasi Sensor Arus ACS712 yang Tidak Stabil Pada Beban AC

Jimmi Sitepu

Hobbyist Embedded System, Robotic, IOT and write all about them. So we have nice quote "Learning and Sharing"

Next Post
SENSOR ARUS ACS712

Mengatasi Sensor Arus ACS712 yang Tidak Stabil Pada Beban AC

setting 4G LTE Only

Setting 4G LTE Only di Android

alarm anti maling battrey

PROJECT ALARM ANTI MALING DENGAN SIM800L

  • Trending
  • Comments
  • Latest
tabel warna resistor

Kode Warna Resistor Seperti Resistor 1k dan Resistor 100k dan Cara Menghitung nya

Maret 29, 2018
manfaat mosfet

Pengertian MOSFET, Cara Kerja dan Manfaat nya

Mei 4, 2018
Alat Penambah Daya Listrik PLN Dirumah, Murah dan Berkualitas

Alat Penambah Daya Listrik PLN Dirumah, Murah dan Berkualitas

Februari 7, 2019
rangkaian paralel dan rangkaian seri

Rumus Rangkaian Seri dan Paralel pada Resistor Dalam Sistem Elektronika

Februari 7, 2018
alarm anti maling battrey

PROJECT ALARM ANTI MALING DENGAN SIM800L

0
sensor detak jantung atmega16

Projek Sederhana Sensor Detak Jantung denga Atmega

0
Modul GSM SIM800L

Testing SIM800 Dengan PuTTY Untuk Tugas Akhir

0
water flow sensor

BELAJAR WATER FLOW SENSOR DENGAN ATMEGA DAN CODEVISION

0
Jasa Desain PCB, Arduino Custome dan PCB lain

Jasa Desain PCB, Arduino Custome dan PCB lain

Oktober 23, 2019
ESP32 Lora Gateway Arduino dengan 2 Node Lora Uno di frequency 923Mhz

ESP32 Lora Gateway Arduino dengan 2 Node Lora Uno di frequency 923Mhz

Oktober 11, 2019
Cara Membuat Alat Pengukur Nilai Resistor Menggunakan Arduino

Cara Membuat Alat Pengukur Nilai Resistor Menggunakan Arduino

Oktober 2, 2019
Modul LoRa Arduino Dengan 3 Output Relay dan 3 Input Digital, LOS 10km-14km

Modul LoRa Arduino Dengan 3 Output Relay dan 3 Input Digital, LOS 10km-14km

September 13, 2019
ADVERTISEMENT
  • tabel warna resistor

    Kode Warna Resistor Seperti Resistor 1k dan Resistor 100k dan Cara Menghitung nya

    0 shares
    Share 0 Tweet 0
  • Pengertian MOSFET, Cara Kerja dan Manfaat nya

    0 shares
    Share 0 Tweet 0
  • Alat Penambah Daya Listrik PLN Dirumah, Murah dan Berkualitas

    0 shares
    Share 0 Tweet 0
  • Rumus Rangkaian Seri dan Paralel pada Resistor Dalam Sistem Elektronika

    0 shares
    Share 0 Tweet 0
  • Fungsi Transistor NPN dan PNP pada Rangkaian Elektronik

    0 shares
    Share 0 Tweet 0
Privasi & Cookie: Situs ini menggunakan cookie. Dengan melanjutkan menggunakan situs web ini, Anda setuju dengan penggunaan mereka.
Untuk mengetahui lebih lanjut, termasuk cara mengontrol cookie, lihat di sini:Kebijakan Cookie

Browse by Category

  • Arduino
  • Ebook
  • IOT
  • jasa
  • Komponen
  • PCB
  • Produk
  • program Arduino
  • Project
  • Rangkaian
  • Sensor
  • Tips
  • Uncategorized

Recent News

Jasa Desain PCB, Arduino Custome dan PCB lain

Jasa Desain PCB, Arduino Custome dan PCB lain

Oktober 23, 2019
ESP32 Lora Gateway Arduino dengan 2 Node Lora Uno di frequency 923Mhz

ESP32 Lora Gateway Arduino dengan 2 Node Lora Uno di frequency 923Mhz

Oktober 11, 2019
No Result
View All Result
  • Mikroavr
  • Arduino
    • program
    • Sensor
    • Project
  • IOT
  • Dasar
    • Rangkaian
  • Produk
  • About

© 2018 mikroavr.com All right reserved

Login to your account below

Forgotten Password?

Fill the forms bellow to register

All fields are required. Log In

Retrieve your password

Please enter your username or email address to reset your password.

Log In
Open chat
1
Hii...
Ada yang bisa di bantu?
Powered by