Translate

CARA MENGAKSES SENSOR ARUS ACS712 / TRAFO CT ARUS ATAU SENSOR TEGANGAN ZMPT101B DAN CARA MENGAMBIL / SAMPLING SINYAL SINUS DENGAN ARDUINO

CARA MENGAKSES SENSOR ARUS ACS712 / TRAFO CT ARUS ATAU SENSOR TEGANGAN ZMPT101B DAN CARA MENGAMBIL / SAMPLING SINYAL SINUS DENGAN ARDUINO



          Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara men-sampling sinyal sinus agar diambil hanya V peak saja atau tegangan tertinggi saja, aplikasi teknik ini dipakai untuk sensor arus ac misal trafo CT arus, sensor ACS712 dan sensor tegangan AC ZMPT101B, yang perlu diperhatikan yaitu output sensor adalah DC namun bentuk sinyal adalah sinus, maka dari itu harus menggunakan metode sampling untuk mengaksesnya, karena kalau hanya ADC maka akan berubah-ubah nilainya. alangkah baiknya output dari sensor ini diberikan kapasitor untuk meredam noise, biasanya kapasitor 2200uF/50v atau sejenisnya. untuk lebih jelasnya berikut skema dan programnya.




a. ARDUINO MEGA




b. Sensor ARUS ACS712




c. Sensor Tegagan ZMPT101B




d. TRAFO CT ARUS





e. Program ARDUINO Sampling Sinyal SINUS

//kecepatan sampling 116uS
//pengambilan sampling sebanyak 300 data
//diambil tegangan tertinggi dari sinyal sinus yang didapat

 // Arrays to save our results in
unsigned long start_times[300];
unsigned long stop_times[300];
unsigned long values[300];


// Define various ADC prescaler
const unsigned char PS_16 = (1 << ADPS2);
const unsigned char PS_32 = (1 << ADPS2) | (1 << ADPS0);
const unsigned char PS_64 = (1 << ADPS2) | (1 << ADPS1);
const unsigned char PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

// Setup the serial port and pin 2
void setup() {
  Serial.begin(9600);


  // set up the ADC
  ADCSRA &= ~PS_128;  // remove bits set by Arduino library

  // you can choose a prescaler from above.
  // PS_16, PS_32, PS_64 or PS_128
  ADCSRA |= PS_128;    // set our own prescaler to 64

}


void loop() { 
  unsigned int i;
  unsigned int z;
  z = 0;
   
  // capture the values to memory
  for(i=0;i<300;i++) {
    start_times[i] = micros();
    values[i] = analogRead(8);             
 
  if (values[i] >= z) {
  z = values[i]; 
  }
 
    stop_times[i] = micros();


  }

//rumus ini didapat dari hasil linierisasi atau regresi linier
//untuk menjadikan dataadc menjadi satuan yg diinginkan
  float vout = (z - 332.3) / 9.933;
 
  // print out the results

 
  Serial.println("\n\n--- Results ---");
  for(i=0 ; i<300 ;i++ ) {
 
    Serial.print(values[i]);
    Serial.print(" ");
    Serial.print(z);
    Serial.print(" ");
    Serial.print(" ");
    Serial.print(vout);
    Serial.print(" ");
    Serial.print(" ");   
    Serial.print(" elapse = ");
    Serial.print(stop_times[i] - start_times[i]);
    Serial.print(" us\n");
  }

z = 0;

}





f. VIDEO HASILNYA











No comments:

Post a Comment