TUGAS 3 KULIAH MIKRO (UAS)
|
Senin, 31 Desember 2018
TUGAS 3 (UAS)
APLIKASI SUN TRACKER
1. Tujuan [Kembali]
- Praktikan dapat mengoperasikan mikrokontroller arduino
- Praktikan dapat mengkombinasikan beberapa sensor dan komponen lainnya sehingga dapat digunakan sebagai alat
- Praktikan dapat mengaplikasikan sensor dan mikrokontroller dalam kehidupan sehari-hari
2. Alat dan Bahan [Kembali]
Alat dan bahan yang digunakan yaitu :
- LDR
- Arduino UNO
- Motor Servo
- Solar Panel
- 100k ohm resistor
- Metal Strip
- Connecting wires
3. Landasan Teori [Kembali]
A. Arduino
Arduino adalah mikrokontroller single-board yang bersifat open-source.Untuk saat ini, arduino merupakan mikrokontroller yang laris di pasaran. Selain karena harganya yang murah dan mudah digunakan, sifat open-source pada arduino membuat arduino berkembang sangat cepat. Selain itu, tutorial dan forum diskusi tentang arduino sangat banyak. Dari proyek sederhana hingga proyek yang rumit. Sehingga arduino menjadi pilihan utama dari berbagai pihak untuk membuat sebuah sistem automasi.
B. LDR
LDR (Light Dependent Resistor) merupakan salah satu komponen resistor yang nilai resistansinya akan berubah-ubah sesuai dengan intensitas cahaya yang mengenai sensor ini. LDR juga dapat digunakan sebagai sensor cahaya. Perlu diketahui bahwa nilai resistansi dari sensor ini sangat bergantung pada intensitas cahaya. Semakin banyak cahaya yang mengenainya, maka akan semakin menurun nilai resistansinya. Sebaliknya jika semakin sedikit cahaya yang mengenai sensor (gelap), maka nilai hambatannya akan menjadi semakin besar sehingga arus listrik yang mengalir akan terhambat.
Umumnya Sensor LDR memiliki nilai hambatan 200 Kilo Ohm pada saat dalam kondisi sedikit cahaya (gelap), dan akan menurun menjadi 500 Ohm pada kondisi terkena banyak cahaya. Tak heran jika komponen elektronika peka cahaya ini banyak diimplementasikan sebagai sensor lampu penerang jalan, lampu kamar tidur, alarm dan lain-lain.
LDR berfungsi sebagai sebuah sensor cahaya dalam berbagai macam rangkaian elektronika seperti saklar otomatis berdasarkan cahaya yang jika sensor terkena cahaya maka arus listrik akan mengalir(ON) dan sebaliknya jika sensor dalam kondisi minim cahaya(gelap) maka aliran listrik akan terhambat(OFF). LDR juga sering digunakan sebagai sensor lampu penerang jalan otomatis, lampu kamar tidur, alarm, rangkaian anti maling otomatis menggunakan laser, sutter kamera otomatis, dan masih banyak lagi yang lainnya.
Prinsip kerja LDR sangat sederhana tak jauh berbeda dengan variable resistor pada umumnya. LDR dipasang pada berbagai macam rangkaian elektronika dan dapat memutus dan menyambungkan aliran listrik berdasarkan cahaya. Semakin banyak cahaya yang mengenai LDR maka nilai resistansinya akan menurun, dan sebaliknya semakin sedikit cahaya yang mengenai LDR maka nilai hambatannya akan semakin membesar.
GRAFIK RESPON SENSOR LDR
GRAFIK RESPON SENSOR LDR
C. Solar Panel
Panel surya berfungsi untuk melewati efek fotolistrik dimana bahan-bahan tertentu menciptakan aliran listrik saat matahari bersinar di atasnya. Panel surya sendiri terdiri dari kristal silikon di mana setiap setengah didopin menjadi dopan yang berbeda untuk menghasilkansebuah semikonduktor. Ketika matahari muncul di permukaan, panelsurya menyediakan energi yang dibutuhkan untuk semikonduktoruntuk menghasilkan arus searah (DC).
D. Motor Servo
Motor servo adalah sebuah perangkat atau aktuator putar (motor) yang dirancang dengan sistem kontrol umpan balik loop tertutup (servo), sehingga dapat di set-up atau di atur untuk menentukan dan memastikan posisi sudut dari poros output motor. motor servo merupakan perangkat yang terdiri dari motor DC, serangkaian gear, rangkaian kontrol dan potensiometer. Serangkaian gear yang melekat pada poros motor DC akan memperlambat putaran poros dan meningkatkan torsi motor servo, sedangkan potensiometer dengan perubahan resistansinya saat motor berputar berfungsi sebagai penentu batas posisi putaran poros motor servo.
Ada dua jenis motor servo, yaitu motor servo AC dan DC. Motor servo AC lebih dapat menangani arus yang tinggi atau beban berat, sehingga sering diaplikasikan pada mesin-mesin industri. Sedangkan motor servo DC biasanya lebih cocok untuk digunakan pada aplikasi-aplikasi yang lebih kecil. Dan bila dibedakan menurut rotasinya, umumnya terdapat dua jenis motor servo yang dan terdapat di pasaran, yaitu motor servo rotation 180⁰ dan servo rotation continuous.
- Motor servo standard (servo rotation 180⁰) adalah jenis yang paling umum dari motor servo, dimana putaran poros outputnya terbatas hanya 90⁰ kearah kanan dan 90⁰ kearah kiri. Dengan kata lain total putarannya hanya setengah lingkaran atau 180⁰.
- Motor servo rotation continuous merupakan jenis motor servo yang sebenarnya sama dengan jenis servo standard, hanya saja perputaran porosnya tanpa batasan atau dengan kata lain dapat berputar terus, baik ke arah kanan maupun kiri.
Prinsip kerja motor servo
Motor servo dikendalikan dengan memberikan sinyal modulasi lebar pulsa (Pulse Wide Modulation / PWM) melalui kabel kontrol. Lebar pulsa sinyal kontrol yang diberikan akan menentukan posisi sudut putaran dari poros motor servo. Ketika lebar pulsa kendali telah diberikan, maka poros motor servo akan bergerak atau berputar ke posisi yang telah diperintahkan, dan berhenti pada posisi tersebut dan akan tetap bertahan pada posisi tersebut. Jika ada kekuatan eksternal yang mencoba memutar atau mengubah posisi tersebut, maka motor servo akan mencoba menahan atau melawan dengan besarnya kekuatan torsi yang dimilikinya (rating torsi servo). Namun motor servo tidak akan mempertahankan posisinya untuk selamanya, sinyal lebar pulsa kendali harus diulang setiap 20 ms (mili detik) untuk menginstruksikan agar posisi poros motor servo tetap bertahan pada posisinya.
4. Cara Kerja Rangkaian [Kembali]
Cara kerja rangkaian yaitu :
- 4 LDR dan 4 resistor 100KΩ terhubung dalam mode pembagi tegangan dan output diberikan ke 4 pin input Analog Arduino (A0,A1,A2,A3).
- Input PWM dari dua motor servo diberikan dari pin digital 9 dan 10 dari Arduino.
- LDR digunakan sebagai sensor cahaya utama. Dua motor servo dipasang pada struktur yang menahan panel surya. Program untuk Arduino diunggah ke mikrokontroler.
- LDR merasakan jumlah sinar matahari yang jatuh pada mereka. Empat LDR dibagi menjadi atas, bawah, kiri dan kanan.
- Untuk pelacakan timur-barat, nilai analog dari dua LDR teratas dan dua LDR bawah akan dibandingkan dan jika kumpulan LDR teratas menerima lebih banyak cahaya, servo vertikal akan bergerak ke arah tersebut.
- Jika LDR bawah menerima lebih banyak cahaya, servo bergerak ke arah itu. Untuk defleksi sudut panel surya, nilai analog dari dua LDR kiri dan dua LDR kanan dibandingkan. Jika set kiri LDR menerima lebih banyak cahaya daripada set yang tepat, servo horizontal akan bergerak ke arah itu. Jika rangkaian LDR yang tepat menerima lebih banyak cahaya, servo bergerak ke arah itu.
5. Listing Program [Kembali]
#include <Servo.h>
//defining Servos //didefinisikan sebagai servo
Servo servohori; //deklarasi servo horizontal
int servoh = 0; //sudut servo horizontal dimulai dari 0 derajat
int servohLimitHigh = 160; //batas sudut servo horizontal high 160 derajat
int servohLimitLow = 20; //batas sudut servo horizontal low 20 derajat
Servo servoverti; //deklarasi servo vertikal
int servov = 0; //sudut servo vertikal dimulai dari 0 derajat
int servovLimitHigh = 160; //batas sudut servo vertikal high 160 derajat
int servovLimitLow = 20; //batas sudut servo vertikal low 20 derajat
//Assigning LDRs
int ldrtopl = 2; //top left LDR green
int ldrtopr = 1; //top right LDR yellow
int ldrbotl = 3; // bottom left LDR blue
int ldrbotr = 0; // bottom right LDR orange
void setup () //nilai awal
{
servohori.attach(10); //servo horizontal pada pin 10 arduino
servohori.write(0);
servoverti.attach(9); //servo vertikal pada pin 9 arduino
servoverti.write(0);
delay(500);
Serial.begin(9600);
}
void loop()
{
servoh = servohori.read();
servov = servoverti.read();
//capturing analog values of each LDR
int topl = analogRead(ldrtopl);
int topr = analogRead(ldrtopr);
int botl = analogRead(ldrbotl);
int botr = analogRead(ldrbotr);
// calculating average
int avgtop = (topl + topr) / 2; //average of top LDRs
int avgbot = (botl + botr) / 2; //average of bottom LDRs
int avgleft = (topl + botl) / 2; //average of left LDRs
int avgright = (topr + botr) / 2; //average of right LDRs
Serial.print(avgtop);
Serial.print(" ");
Serial.print(avgbot);
Serial.print(" ");
Serial.print(avgleft);
Serial.print(" ");
Serial.print(avgright);
Serial.println(" ");
delay(1000);
if (avgtop < avgbot) //rata-rata ldr bagian atas kecil dari rata-rata ldr bagian bawah
{
servoverti.write(servov +10); //sudut servo vertikal +10 derajat
if (servov > servovLimitHigh) //jika servo vertikal besar dari batas sudut servo vertikal high
{
servov = servovLimitHigh; //maka servo vertikal sama dengan batas sudut servo vertikal high
}
delay(10);
}
else if (avgbot < avgtop) //rata-rata ldr bagian bawah kecil dari rata-rata ldr bagian atas
{
servoverti.write(servov -10); //sudut servo vertikal -10 derajat
if (servov < servovLimitLow) //jika servo vertikal kecil dari batas sudut servo vertikal low
{
servov = servovLimitLow; // //maka servo vertikal sama dengan batas sudut servo vertikal high
}
delay(10);
}
else
{
servoverti.write(servov);
}
if (avgleft > avgright)
{
servohori.write(servoh +10);
if (servoh > servohLimitHigh)
{
servoh = servohLimitHigh;
}
delay(10);
}
else if (avgright > avgleft)
{
servohori.write(servoh -10);
if (servoh < servohLimitLow)
{
servoh = servohLimitLow;
}
delay(10);
}
else
{
servohori.write(servoh);
}
delay(50);
}
//defining Servos //didefinisikan sebagai servo
Servo servohori; //deklarasi servo horizontal
int servoh = 0; //sudut servo horizontal dimulai dari 0 derajat
int servohLimitHigh = 160; //batas sudut servo horizontal high 160 derajat
int servohLimitLow = 20; //batas sudut servo horizontal low 20 derajat
Servo servoverti; //deklarasi servo vertikal
int servov = 0; //sudut servo vertikal dimulai dari 0 derajat
int servovLimitHigh = 160; //batas sudut servo vertikal high 160 derajat
int servovLimitLow = 20; //batas sudut servo vertikal low 20 derajat
//Assigning LDRs
int ldrtopl = 2; //top left LDR green
int ldrtopr = 1; //top right LDR yellow
int ldrbotl = 3; // bottom left LDR blue
int ldrbotr = 0; // bottom right LDR orange
void setup () //nilai awal
{
servohori.attach(10); //servo horizontal pada pin 10 arduino
servohori.write(0);
servoverti.attach(9); //servo vertikal pada pin 9 arduino
servoverti.write(0);
delay(500);
Serial.begin(9600);
}
void loop()
{
servoh = servohori.read();
servov = servoverti.read();
//capturing analog values of each LDR
int topl = analogRead(ldrtopl);
int topr = analogRead(ldrtopr);
int botl = analogRead(ldrbotl);
int botr = analogRead(ldrbotr);
// calculating average
int avgtop = (topl + topr) / 2; //average of top LDRs
int avgbot = (botl + botr) / 2; //average of bottom LDRs
int avgleft = (topl + botl) / 2; //average of left LDRs
int avgright = (topr + botr) / 2; //average of right LDRs
Serial.print(avgtop);
Serial.print(" ");
Serial.print(avgbot);
Serial.print(" ");
Serial.print(avgleft);
Serial.print(" ");
Serial.print(avgright);
Serial.println(" ");
delay(1000);
if (avgtop < avgbot) //rata-rata ldr bagian atas kecil dari rata-rata ldr bagian bawah
{
servoverti.write(servov +10); //sudut servo vertikal +10 derajat
if (servov > servovLimitHigh) //jika servo vertikal besar dari batas sudut servo vertikal high
{
servov = servovLimitHigh; //maka servo vertikal sama dengan batas sudut servo vertikal high
}
delay(10);
}
else if (avgbot < avgtop) //rata-rata ldr bagian bawah kecil dari rata-rata ldr bagian atas
{
servoverti.write(servov -10); //sudut servo vertikal -10 derajat
if (servov < servovLimitLow) //jika servo vertikal kecil dari batas sudut servo vertikal low
{
servov = servovLimitLow; // //maka servo vertikal sama dengan batas sudut servo vertikal high
}
delay(10);
}
else
{
servoverti.write(servov);
}
if (avgleft > avgright)
{
servohori.write(servoh +10);
if (servoh > servohLimitHigh)
{
servoh = servohLimitHigh;
}
delay(10);
}
else if (avgright > avgleft)
{
servohori.write(servoh -10);
if (servoh < servohLimitLow)
{
servoh = servohLimitLow;
}
delay(10);
}
else
{
servohori.write(servoh);
}
delay(50);
}
6. Flowchart [Kembali]
7. Video [Kembali]
8. Link [Kembali]
- Simulasi Proteus <Link Download>
- Listing Program <Link Download>
- Video <Link Download>