• Arduino
    • Sensor
    • program Arduino
  • Project
  • Produk
  • IOT
Jumat, Juni 20, 2025
mikroavr.com
No Result
View All Result
  • Login
  • Arduino
    • Sensor
    • program Arduino
  • Project
  • Produk
  • IOT
  • Arduino
    • Sensor
    • program Arduino
  • Project
  • Produk
  • IOT
No Result
View All Result
mikroavr
No Result
View All Result
Home Arduino

Sensor Arus Listrik ACS712 30A dengan ATMEGA

Jimmi Sitepu by Jimmi Sitepu
Januari 20, 2020
0 0
0
sensor arus listrik acs712

sensor arus listrik acs712

2
SHARES
23.4k
VIEWS
Share on FacebookShare on Twitter

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.

READ ALSO

Membaca Sensor URM14 RS485 dengan ESP32 Arduino

4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

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

Cara Termudah monitoring listrik 3phase

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.

Cara Termudah Monitoring Listrik 3 phase

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
Share2Tweet
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

Jimmi Sitepu

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

Related Posts

sensor URM14 Arduino
ESP32

Membaca Sensor URM14 RS485 dengan ESP32 Arduino

Juli 7, 2022
4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega
Arduino

4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

Juni 13, 2022
Tutorial Menggunakan Weather Station DFRobot SEN0186 dengan Arduino ESP32
Arduino

Tutorial Menggunakan Weather Station DFRobot SEN0186 dengan Arduino ESP32

Maret 9, 2022
ethernet arduino
Arduino

Arduino Ethernet Tutorial, Project dengan Arduino Uno dan Mega

Februari 24, 2022
solder i2c arduino lcd
Arduino

Tutorial Program Arduino Lcd i2c dan Library nya

Februari 24, 2022
tft lcd arduino shield
Arduino

Tutorial Mudah TFT lcd Arduino untuk Membuat Jam Digital

Februari 24, 2022
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

Please login to join discussion

Tulisan Terbaru

sensor URM14 Arduino

Membaca Sensor URM14 RS485 dengan ESP32 Arduino

Juli 7, 2022
4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

Juni 13, 2022
Mendapatkan Waktu Akurat dengan NTP GPS

Mendapatkan Waktu Akurat dengan NTP GPS

Mei 8, 2022
Custome GPS Logger Arduino dengan Akeses Internet SIM7600 4G

Custome GPS Logger Arduino dengan Akeses Internet SIM7600 4G

April 14, 2022
Tutorial Menggunakan Weather Station DFRobot SEN0186 dengan Arduino ESP32

Tutorial Menggunakan Weather Station DFRobot SEN0186 dengan Arduino ESP32

Maret 9, 2022
ethernet arduino

Arduino Ethernet Tutorial, Project dengan Arduino Uno dan Mega

Februari 24, 2022

Browse by Category

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

Recent News

sensor URM14 Arduino

Membaca Sensor URM14 RS485 dengan ESP32 Arduino

Juli 7, 2022
4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

Juni 13, 2022
  • About US
  • Blog
  • MIKROAVR

© 2020 mikroavr.com - Learning and sharing.

Welcome Back!

Sign In with Google
OR

Login to your account below

Forgotten Password?

Retrieve your password

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

Log In

Add New Playlist

No Result
View All Result
  • About US
  • Blog
  • MIKROAVR

© 2020 mikroavr.com - Learning and sharing.