Monitoring Arus dan Tegangan 3 Fasa RST ARDUINO
Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat memonitoring arus dan tegangan 3 fasa RST dengan menggunakan sensor tegangan ZMPT101B dan arus SCT-013. alat ini menggunakan Arduino Mega dan interface LCD 16x2.untuk lebih jelasnya berikut adalah koding dan komponennya.
a. Komponen
b. Program Arduino IDE
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //i2C LCD Library
LiquidCrystal_I2C lcd(0x27, 16, 2);
// 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);
float tegangan,tegangan2,tegangan3;
float arus,arus2,arus3;
unsigned int i,i2,i3,i4,i5,i6;
unsigned int z,z2,z3,z4,z5,z6;
int vin,vin2,vin3,vin4,vin5,vin6;
void setup() {
lcd.begin();
lcd.clear();
lcd.noCursor();
// 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
Serial.begin(9600);
}
void loop()
{
// zmpt101b tegangan
//==================================
z = 0;
// capture the values to memory
for(i=0;i<300;i++) {
start_times[i] = micros();
values[i] = analogRead(A0);
if (values[i] >= z) {
z = values[i];
}
stop_times[i] = micros();
}
vin = z ;
z = 0;
tegangan = (vin - 559.9) / 0.413 ;
tegangan = tegangan + 80.0;
if (tegangan < 0){
tegangan = 0;
}
//================================
//==================================
z2 = 0;
// capture the values to memory
for(i2=0;i2<300;i2++) {
start_times[i2] = micros();
values[i2] = analogRead(A1);
if (values[i2] >= z2) {
z2 = values[i2];
}
stop_times[i2] = micros();
}
vin2 = z2 ;
z2 = 0;
tegangan2 = (vin2 - 559.9) / 0.413 ;
tegangan2 = tegangan2 + 80.0;
if (tegangan2 < 0){
tegangan2 = 0;
}
//================================
//==================================
z3 = 0;
// capture the values to memory
for(i3=0;i3<300;i3++) {
start_times[i3] = micros();
values[i3] = analogRead(A2);
if (values[i3] >= z3) {
z3 = values[i3];
}
stop_times[i3] = micros();
}
vin3 = z3 ;
z3 = 0;
tegangan3 = (vin3 - 559.9) / 0.413 ;
tegangan3 = tegangan3 + 80.0;
if (tegangan3 < 0){
tegangan3 = 0;
}
//================================
// sct-013 arus
//=================================
// capture the values to memory
for(i4=0;i4<300;i4++) {
start_times[i4] = micros();
values[i4] = analogRead(A3);
if (values[i4] >= z4) {
z4 = values[i4];
}
stop_times[i4] = micros();
}
arus = (z4 - 500.0) / 100.0;
if (arus < 0) {
arus = 0;
}
z4 = 0;
//==============================
//=================================
// capture the values to memory
for(i5=0;i5<300;i5++) {
start_times[i5] = micros();
values[i5] = analogRead(A4);
if (values[i5] >= z5) {
z5 = values[i5];
}
stop_times[i5] = micros();
}
arus2 = (z5 - 500.0) / 100.0;
if (arus2 < 0) {
arus2 = 0;
}
z5 = 0;
//==============================
//=================================
// capture the values to memory
for(i6=0;i6<300;i6++) {
start_times[i6] = micros();
values[i6] = analogRead(A5);
if (values[i6] >= z6) {
z6 = values[i6];
}
stop_times[i6] = micros();
}
arus3 = (z6 - 500.0) / 100.0;
if (arus3 < 0) {
arus3 = 0;
}
z6 = 0;
//==============================
lcd.setCursor(0, 0);
lcd.print(tegangan,0);
lcd.print("/");
lcd.print(tegangan2,0);
lcd.print("/");
lcd.print(tegangan3,0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(arus,1);
lcd.print("/");
lcd.print(arus2,1);
lcd.print("/");
lcd.print(arus3,1);
lcd.print(" ");
delay(200);
}
c. VIDEO HASILNYA
No comments:
Post a Comment