MaFbNGNbNaV8MWZ4MaJ8LGt5yTUfATofA6YbyaV=
Teknologi Terkini: Kontrol Otomatis Posisi Panel Surya dengan Sensor Cahaya dan Servo Motor

Teknologi Terkini: Kontrol Otomatis Posisi Panel Surya dengan Sensor Cahaya dan Servo Motor

Arduino,C,Controller,Learning,Pembahasan,Programming Language,How To,

Program Arduino di atas merupakan implementasi kendali servo motor berdasarkan pembacaan nilai dari empat sensor LDR (Light Dependent Resistor). Program ini menyajikan sistem yang secara otomatis menyesuaikan posisi dua servo motor (servo horizontal dan servo vertikal) berdasarkan perbedaan intensitas cahaya yang diterima oleh sensor LDR. Berikut adalah penjelasan detailnya:
#include <Servo.h>
//defining Servos
Servo servohori;
int servoh = 0;
int servohLimitHigh = 160;
int servohLimitLow = 20;

Servo servoverti; 
int servov = 0; 
int servovLimitHigh = 160;
int servovLimitLow = 20;
//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 () 
 {
  servohori.attach(10);
  servohori.write(0);
  servoverti.attach(9);
  servoverti.write(0);
  delay(500);
 }

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

  if (avgtop < avgbot)
  {
    servoverti.write(servov +1);
    if (servov > servovLimitHigh) 
     { 
      servov = servovLimitHigh;
     }
    delay(10);
  }
  else if (avgbot < avgtop)
  {
    servoverti.write(servov -1);
    if (servov < servovLimitLow)
  {
    servov = servovLimitLow;
  }
    delay(10);
  }
  else 
  {
    servoverti.write(servov);
  }
  
  if (avgleft > avgright)
  {
    servohori.write(servoh +1);
    if (servoh > servohLimitHigh)
    {
    servoh = servohLimitHigh;
    }
    delay(10);
  }
  else if (avgright > avgleft)
  {
    servohori.write(servoh -1);
    if (servoh < servohLimitLow)
     {
     servoh = servohLimitLow;
     }
    delay(10);
  }
  else 
  {
    servohori.write(servoh);
  }
  delay(50);
}

Penjelasan Program:

Deklarasi dan Menghubungkan Servo Motor:

   - Program menggunakan pustaka Servo untuk mengontrol dua servo motor, yaitu `servohori` (horizontal) dan `servoverti` (vertikal).

Deklarasi dan Menghubungkan Sensor LDR:

   - Program mendefinisikan empat pin untuk sensor LDR, masing-masing untuk sudut atas kiri (`ldrtopl`), atas kanan (`ldrtopr`), bawah kiri (`ldrbotl`), dan bawah kanan (`ldrbotr`).

Setup Routine (`setup()`):

   - Menghubungkan servo motor dengan pin yang sesuai dan mengatur posisi awal.

Loop Routine (`loop()`):

   - Membaca nilai sensor LDR dan menyimpannya dalam variabel.
   - Menghitung rata-rata intensitas cahaya untuk kelompok atas, bawah, kiri, dan kanan.
   - Menggerakkan servo vertikal dan horizontal berdasarkan perbandingan intensitas cahaya.
   - Memberikan jeda antar iterasi loop untuk menghindari respons yang terlalu cepat.

Komentar

Contact Us via Whatsapp