Laporan inovasi ini disusun guna memenuhi tugas Science Technology Olympiad
(STO) pada On Job Training PT. PLN (Persero) Angkatan 53 di
Unit Induk Pembangunan Interkoneksi Sumatera Jawa
Mengetahui,
Mentor Co-Mentor
Deputy Manager Assisten Engineering
Unit Induk Pembangunan ISJ Unit Induk Pembangunan ISJ
i
KATA PENGANTAR
Puji syukur kehadirat Tuhan Yang Maha Esa yang telah melimpahkan
rahmat dan hidayah-Nya sehingga penulis dapat menyelesaikan laporan Science
Technology Olympiad (STO) dengan judul Sensor Pendeteksi Kemiringan Tower
(SEKTOR) sebagai evaluasi akhir dalam program On the Job Training (OJT)
berbasis project dan risiko untuk Diklat Prajabatan S1/D3 PT. PLN (Persero)
Angkatan 53 di UIP Interoneksi Sumatera Jawa. Ucapan terimakasih penulis
sampaikan kepada :
Penulis
ii
ABSTRAK
Tower roboh merupakan salah satu kendala yang terdapat dalam tower
Saluran Udara Tegangan Tinggi (SUTT) maupun Saluran Udara Tegangan Ekstra
Tinggi (SUTET). Tower roboh dapat menyebabkan kerugian berupa gangguan
sistem transmisi, korban jiwa maupun finansial. Kerugian akibat tower roboh
dapat dikurangi dengan mengetahui kondisi tower yang berpotensi akan roboh.
Untuk mengetahui kondisi tower tersebut, Science Technology Olympiad (STO)
ini akan membuat alat untuk mendeteksi tingkat kemiringan tower yang mampu
memberikan informasi mengenai status keadaan tower yang kemudian
dinamakan dengan SEKTOR. Pembuatan alat ini bertujuan untuk mengetahui
tingkat kemiringan tower secara realtime, dan membuat alat dengan sistem
smart sensor wireless. Hasil pembutan SEKTOR ini adalah alat yang ampu
bekerja untuk mengetahui tingkat kemiringan tower.
iii
DAFTAR ISI
iv
BAB V PENUTUP .......................................................................................... 15
5.1Kesimpulan........................................................................................... 15
5.2 Saran ............................................................................................... 15
DAFTAR PUSTAKA ....................................................................................... 16
LAMPIRAN .................................................................................................. 17
v
DAFTAR GAMBAR
vi
DAFTAR TABEL
vii
BAB I
PENDAHULUAN
1
Tujuan dari penelitian ini adalah :
1. Membuat alat yang dapat memberikan early warning system kondisi
tower.
2. Mengetahui pergerakan dan tingkat kemiringan tower secara periodik.
3. Membuat alat dengan sistem wireless report.
1.4 Metodologi
Untuk mencapai tujuan dari penelitan ini, penulis menerapkan metode
sebagai berikut :
Mulai
Integrasi Modul
Pemrograman
Konstruksi
Casing
Pengujian
Alat
Selesai
2
BAB II
LANDASAN TEORI
2.1.2 MPU-6050
MPU-6050 adalah chip IC invense yang di dalamnya terdapat sensor
accelerometer dan gyroscop yang sudah terintegrasi. Alat ini dapat
mengukur kecepatan, perpindahan sudut dan tempat.
3
2.1.3 Transmiter Data (Simcom SIM900)
Simcom SIM900 merupakan pengolah sinyal atrau transmitter yang
dapat digunakan sebagai pengirim data yang diolah oleh mikrokontroler
kepada nomor SIM yang penerima. Dngan adanya Simcom SIM900, sensor
dapat berfungsi sebagai Automatic Data Acquisition System yang mengirim
data secara berkelanjutan dan wireless.
4
2.1.5 Solar Charge Controller
Solar Charge Controller adalah peralatan elektronik yang digunakan
untuk mengatur arus searah yang diisi ke baterai dan diambil dari baterai
ke beban. Solar Charge Controller mengatur overcharging dan kelebihan
voltase dari panel surya. Jadi tanpa komponen ini, baterai akan rusak oleh
overcharging dan ketidakstabilan tegangan.
5
2.2 Pembanding SEKTOR
2.2.1 Inclinometer
Inclinometer berupa tabung panjang berisi sensor acceloremeter dan
gyroscope yang ditanam kepada lereng untuk mengukur pergerakan lateral
dan menentukan lokasi slip surface. Instalasi inclinometer pada lereng
menggunakan beberapa metode seperti borehole, grouting, backfilling.
Inclinometer menggunakan sistem akuisisi data otomatis dimana
pengukuran dilapangan akan menyusun grafik pergerakan lereng terhadap
ketinggian. Namun dengan intrikasi sensor dan metode instalasi yang
digunakan pada inclinometer, biayanya menjadi sangat tinggi.
6
BAB III
PEMBAHASAN
7
SEKTOR akan memberitahu pergerakan kemiringan tower kepada user
dengan SMS melalui modul GSM yang terpasang pada alat. Kategori pergerakan
kemiringan tower bisa saja berbeda setiap tower tergantung pada perhitungan
engineer. Info pergerakan kemiringan tower akan diberitahukan secara berkala
sebulan sekali selagi masih dalam batas aman. Namun apabila pergerakan
kemiringan tower telah mencapai batas siaga maka sensor akan memberikan
early warning kepada user melalui sms. Apabila kondisi kemiringan tower telah
mencapai batas bahaya maka SEKTOR akan memberikan early warning kepada
user melalui sms sehingga dapat segera dilakukan pengecekan dan tindakan
preventif jika memungkinkan.
8
3.3.2 Pemrograman
Setelah sensor dapat beroperasi, dilakukan pemrograman pada
software Arduino Uno agar masing-masing komponen dapat berfungsi
sesuai dengan desai sensor yang sudah ditetapkan.
9
3.4 Cara Kerja SEKTOR
10
Cara kerja SEKTOR akan dijelaskan sebagai berikut:
11
BAB IV
12
6. SEKTOR merupakan alat pendeteksi pergerakan kemiringan tower yang
jauh lebih mudah di pasang dibandingkan dengan alat-alat lainnya. Hal
ini disebabkan SEKTOR cukup dengan hanya mengukur pergerakan
kemiringan tower.
7. Sifat SEKTOR sebagai wireless report dimana pengolahan data dilakukan
secara otomatis, dan pengiriman data dilakukan secara praktis tanpa
kabel.
13
Berikut merupakan tindakan yang dapat dilakukan untuk
menanggulangi risiko tersebut :
14
BAB V
PENUTUP
5.1 Kesimpulan
Dari SEKTOR yang telah dibuat, dapat disimpulkan bahwa:
5.2 Saran
Dari SEKTOR, diperlukan pengembangan kembali berupa :
15
DAFTAR PUSTAKA
16
LAMPIRAN
1. Lampiran 1 : Pemrograman
////////////////////////////////////////////////////////////GS
M////////////////////////////////////////////////////////////
#include <SoftwareSerial.h>
SoftwareSerial mySerial(6, 7);
////////////////////////////////////////////////////////////
Ultrasonic////////////////////////////////////////////////////////
////
//////////////////////////////////////////////////////////
Time and Date counting
////////////////////////////////////////////////////////star
ting interval
// timer untuk dapetin nilai yaw yang stabil
unsigned long timer; // the timer
boolean timedOut = false; // set to true when timer fired
unsigned long start_interval = 30000; // tunggu 30 detik
////////////////////////////////////////////////////////////
IMU////////////////////////////////////////////////////////////
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
// Arduino Wire library is required if I2Cdev
I2CDEV_ARDUINO_WIRE implementation is used in I2Cdev.h
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
#include "Wire.h"
#endif
MPU6050 mpu;
17
uint16_t fifoCount; // count of all bytes currently in
FIFO
uint8_t fifoBuffer[64]; // FIFO storage buffer
// orientation/motion vars
Quaternion q; // [w, x, y, z] quaternion
container
VectorInt16 aa; // [x, y, z] accel sensor
measurements
VectorInt16 aaReal; // [x, y, z] gravity-free
accel sensor measurements
VectorInt16 aaWorld; // [x, y, z] world-frame
accel sensor measurements
VectorFloat gravity; // [x, y, z] gravity
vector
float euler[3]; // [psi, theta, phi] Euler angle
container
float ypr[3]; // [yaw, pitch, roll]
yaw/pitch/roll container and gravity vector
void setupIMU(){
// join I2C bus (I2Cdev library doesn't do this
automatically)
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
Wire.begin();
TWBR = 24; // 400kHz I2C clock (200kHz if CPU is
8MHz)
#elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
Fastwire::setup(400, true);
#endif
mpu.initialize();
18
mpuIntStatus = mpu.getIntStatus();
dmpReady = true;
// get expected DMP packet size for later comparison
packetSize = mpu.dmpGetFIFOPacketSize();
} else {
int
sms_count_bahaya=0,Fire_Set,sms_count_siaga=0,sms_count_period=0;
float setdistance;
float setyaw = 0;
float setpitch = 0;
float setroll = 0;
float deldistance;
float delyaw;
float delpitch;
float delroll;
float sumdistance;
float oldd = 0;
float newd = 0;
long prevmillis = 0;
long interval = 1000;
int count = 0;
int count2 = 0;
int count3 = 0;
int MAX_COUNT = 24;
void setup()
{
mySerial.begin(9600);
Serial.begin(115200);
setupIMU();
delay(500);
} // end of our setup program
void loop()
{
//unsigned long currmillis = millis();
//get new seconds from system time
19
timer = millis();
timecounting(); //incrementing time
wait(); //waiting to stabilize IMU
//runUS(); //get ultrasonic data
runIMU(); //get IMU data
if (secs == 59) {
timecount = timecount + 1;
Serial.println(timecount);
}
//sumdistance = deldistance - 140*sin(delroll); // pitch
isPeriod(); //check for periodically report
if (delroll> abs(60)) {
SetBahaya();
//Serial.println("set bahaya");
}
else if((delroll >= abs(30)) && (delroll <= abs(60))) {
SetSiaga();
//Serial.println("set siaga");
}
else if(delpitch> abs(60)) {
SetBahaya();
//Serial.println("set bahaya");
}
else if((delpitch >= abs(30)) && (delpitch <= abs(60))) {
SetSiaga();
//Serial.println("set siaga");
}
void timecounting() {
secs = (millis()/milliDivSecs)%60;
// divide by 1000 and mod by 60 gives seconds from
milliseconds
// to incrementing minute because second > 59
if(secs == 0){
mins = mins+1;
//timecount = timecount +1;
updateMin();
}
}
20
timedOut = true; // don't do this again
}
}
void runIMU(){
// reset so we can continue cleanly
mpu.resetFIFO();
fifoCount -= packetSize;
mpu.dmpGetQuaternion(&q, fifoBuffer);
mpu.dmpGetGravity(&gravity, &q);
mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
mpu.dmpGetAccel(&aa, fifoBuffer);
mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);
yaw = ypr[0]*360/phi;
pitch = ypr[2]*360/phi;
roll = ypr[1]*360/phi;
delyaw = abs(yaw-setyaw);
delpitch = abs(pitch-setpitch);
delroll = abs(roll-setroll);
deldistance = abs(distance-setdistance);
Serial.print("ypr\t");
Serial.print(yaw);
Serial.print("\t");
Serial.print(roll);
Serial.print("\t");
Serial.print(pitch);
Serial.print("\t");
Serial.println(distance);
Serial.print("setypr\t");
Serial.print(setyaw);
Serial.print("\t");
Serial.print(setroll);
Serial.print("\t");
Serial.print(setpitch);
Serial.print("\t");
Serial.println(setdistance);
Serial.println(secs);
Serial.print("deltaypr\t");
Serial.print(delyaw);
Serial.print("\t");
Serial.print(delroll);
Serial.print("\t");
21
Serial.print(delpitch);
Serial.print("\t");
}
void isPeriod() {
if (timecount == 4) {
SetPeriod ();
timecount = 0;
sms_count_period=0;
}
void SetBahaya()
{
while(sms_count_bahaya<1) //Number of SMS Alerts to be sent
{
SendTextBahaya(); // Function to send AT Commands to GSM
module
}
}
void SetSiaga()
{
while(sms_count_siaga<1) //Number of SMS Alerts to be sent
{
SendTextSiaga(); // Function to send AT Commands to GSM
module
}
}
void SetPeriod()
{
while(sms_count_period<1) //Number of SMS Alerts to be sent
{
SendTextPeriod(); // Function to send AT Commands to GSM
module
}
}
void SendTextPeriod()
{
Serial.println("send sms period");
mySerial.println("AT+CMGF=1"); //To send SMS in Text
Mode
delay(1000);
mySerial.println("AT+CMGS=\"+6282139734677\"\r"); //
change to the phone number you using
delay(1000);
mySerial.print("sms periodik ");//the content of the
message
mySerial.print("sdut1/sdut2 ");//the content of the
message
// mySerial.print(deldistance);//the content of the message
// mySerial.print("/");//the content of the message
mySerial.print(delroll);//the content of the message
mySerial.print("/");//the content of the message
22
mySerial.print(delpitch);//the content of the message
mySerial.print("/");//the content of the message
// mySerial.print(velo);//the content of the message
// mySerial.println(" cm/s");//the content of the message
delay(100);
mySerial.println((char)26);//the stopping character
delay(5000);
sms_count_period++;
}
void SendTextSiaga()
{
Serial.println("send sms siaga");
mySerial.println("AT+CMGF=1"); //To send SMS in Text
Mode
delay(1000);
mySerial.println("AT+CMGS=\"+6282139734677\"\r"); //
change to the phone number you using
delay(1000);//sms saefi +6282139734677
mySerial.println("status siaga ");//the content of the
message
mySerial.print("sdut1/sdut2 ");//the content of the
message
// mySerial.print(deldistance);//the content of the message
// mySerial.print("/");//the content of the message
mySerial.print(delroll);//the content of the message
mySerial.print("/");//the content of the message
mySerial.print(delpitch);//the content of the message
mySerial.print("/");//the content of the message
// mySerial.print(velo);//the content of the message
// mySerial.println(" cm/s");//the content of the message
delay(100);
mySerial.println((char)26);//the stopping character
delay(5000);
sms_count_siaga++;
}
void SendTextBahaya()
{
Serial.println("send sms bahaya");
mySerial.println("AT+CMGF=1"); //To send SMS in Text
Mode
delay(1000);
mySerial.println("AT+CMGS=\"+6282139734677\"\r"); //
change to the phone number you using
delay(1000);
mySerial.println("status bahaya ");//the content of the
message
mySerial.print("sdut1/sdut2 ");//the content of the
message
// mySerial.print(deldistance);//the content of the message
// mySerial.print("/");//the content of the message
mySerial.print(delroll);//the content of the message
mySerial.print("/");//the content of the message
mySerial.print(delpitch);//the content of the message
mySerial.print("/");//the content of the message
// mySerial.print(velo);//the content of the message
// mySerial.println(" cm/s");//the content of the message
delay(100);
23
mySerial.println((char)26);//the stopping character
delay(5000);
sms_count_bahaya++;
}
void updateDays(){
//display days - needs fixing for 30 or 31 days a
month
if(days> 7){
//reset to 1
days = 1;
}
}
24
2. Lampiran 2 : Dokumentasi
25
26