• Tidak ada hasil yang ditemukan

Berdasarkan Penelitian yang telah dilaksanakan, dapat diperoleh kesimpulan sebagai berikut:

1. Bahwa system telah dapat mengikuti arah datangnya cahaya walaupun waktu respon pergerakan masih sedikit lama

2. Motor servo dapat berputar secara horizontal dan vertical. Dan putarannya bisa dikombinasikan sehingga berputar bersamaan seperti system gerak robotic.

3. Dapat dilihat daya yang lebih besar dihasilkan dari solar cell yang bergerak dinamis dengan penjejak matahari dibandingkan solar cell statis. Terbukti dari hasil penelitian pengukuran sensor arus. Selain itu system komunikasi pada modul kyl bekerja dengan sangat baik.

5.2 Saran

Adapun saran pada perancangan realisasi alat ini untuk kedepannya antara lain :

1. Diharapkan untuk pengembangan lebih lanjut dapat menggunakan servo yang lebih bagus dengan torsi yang besar sehingga dapat menggerakkan beban yang besar dan pergerakannya cepat.

2. Untuk kedepannya dapat diaplikasikan pada solar cell yang lebih besar sehingga daya yang didapat besar dan dapat digunakan langsung pada system.

3. Untuk penelitian kedepannya diharapkan pengujian dapat dilakukan langsung dengan cahaya matahari dan tidak menggunakan senter sebagai media cahaya agar lebih detail mengenai sebaran sinar matahari dan sudut datangnya sinar harus diperhitungkan.

DAFTAR PUSTAKA

Agfianto Eko Putra, 2002, ”Belajar Mikrokontroler AT89S51/52/653 Teori dan Aplikasi”, Edisi 2, Yogyakarta : Penerbit Gava Media.

Agfianto Eko Putra, 2002, ”Teknik Antarmuka Komputer, Konsep dan Aplikasi”, Edisi 1, Yogyakarta : Graha Ilmu.

Charles L. Philips, Royce D. Harbor, Sistem Kontrol, Penerbit PT Prenhallindo, Jakarta,

Endra Pirowarno, 1998, ” Mikroprocessor dan Interfacing”, Edisi 1, Yogyakarta : Penerbit Andi.

Paulus Andi Nalwan, 2003, ”Teknik Antarmuka dan Pemrograman Mikrokontroler AT89S51, Cetakan Pertama, Jakarta : PT Gramedia.

Retna Prasetia dan Catur Edi Widodo,Teori dan Praktek Interfacing Port Parallel & Port Serial Komputer dengan VB 6.0, Penerbit Andi Yogyakarta

Riyanto Sigit, 2007, ”Robotika, Sensor dan Aktuator”, Yogyakarta : Graha Ilmu Suhata, ST, VB Sebagai Pusat Kendali Peralatan Elektronik, Penerbit Elex Media

Komputindo, Jakarta, 2005.

Widodo Budiharto, 2007, ”Sistem Akuisisi Data”, Jakarta : Penerbit PT Elex Media Komputindo.

Wolfgang link, Pengukuran, pengendalian & pengaturan dengan PC, Penerbit Elex Media Komputindo, Jakarta, 1993

tracker dual axis selanjutnya dapat di lihat pada gambar sebagai berikut :

LAMPIRAN A ( Lanjutan )

Pada gambar B di bawah ini merupakan suatu form monitoring output perancangan solar tracker dual axis dapat di lihat pada form di bawah ini sebagai berikut :

LAMPIRAN B

Pada lampiran B ini terdapat 2 program,yaitu program yang ada di dalam mikrokontroller dengan menggunakan bahasa C sebagai pembaca data dari sensor LDR dan sensor Arus dan program VB yang di gunakan pada PC sebagai output data terakhir selanjutnya dapat di perhatikan program sebagai berikut :

Program Bahasa C ( Mikrokontroller )

/*****************************************************

This program was produced by the CodeWizardAVR V2.05.3 Standard Automatic Program Generator

© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com

Project : Version : Date : Author : iqbal

Company : ekstensi fisika USU Comments:

Chip type : ATmega8535 Program type : Application

AVR Core Clock frequency: 11,059200 MHz Memory model : Small

External RAM size : 0 Data Stack size : 128

*****************************************************/

#include <mega8535.h> #include <delay.h>

// I2C Bus functions #include <i2c.h>

// DS1307 Real Time Clock functions #include <ds1307.h>

// Alphanumeric LCD functions #include <alcd.h>

// Standard Input/Output functions #include <stdio.h>

unsigned int adc_data;

#define ADC_VREF_TYPE 0x40 #define ADC_samp 20

/* //komentar, tidak di eksekusi // ADC interrupt service routine

interrupt [ADC_INT] void adc_isr(void) {

// Read the AD conversion result adc_data=ADCW;

}

// Read the AD conversion result // with noise canceling

unsigned int read_adc(unsigned char adc_input) {

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);

// Delay needed for the stabilization of the ADC input voltage delay_us(10); #asm in r30,mcucr cbr r30,__sm_mask sbr r30,__se_bit | __sm_adc_noise_red out mcucr,r30 sleep cbr r30,__se_bit out mcucr,r30 #endasm return adc_data; } */

// Read the AD conversion result //rutin membaca adc

unsigned int read_adc(unsigned char adc_input) {

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);

// Delay needed for the stabilization of the ADC input voltage delay_us(10);

// Start the AD conversion ADCSRA|=0x40;

// Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10; return ADCW; }

// Declare your global variables here unsigned char x,y,buflcd[33];

unsigned char alamatI2C,temp1,temp2,temp3,temp4;

unsigned int intTOTAL, intADC, posx1, posx2, posy1, posy2; //float flHASIL, flMEAN;

signed int flHASIL, flMEAN,pulse; int a,pulsa;

//fungsi membaca nilai adc LDR

unsigned LDR(char flash *namaLDR,unsigned int numadc,unsigned int posx,unsigned int posy) { intTOTAL = 0; flHASIL = 0; for (x=0; x<ADC_samp; x++) { intADC = read_adc(numadc); intTOTAL = intTOTAL + intADC;

delay_ms(10); // 50 x 10 mS = 500 mS = 0.5 detik }

flMEAN = intTOTAL / ADC_samp; // nilai rata-rata flHASIL = (flMEAN * 0.48825125);

// if (numadc==5) flHASIL=flHASIL-100; if (flHASIL<=0) flHASIL=0;

printf("=%d \r \n",flHASIL); return flHASIL;

delay_ms(10); }

fungsi membaca nilai adc arus dan tegangan pada solar cell

unsigned solar_cell(unsigned int numadc) { intTOTAL = 0; flHASIL = 0; for (x=0; x<ADC_samp; x++) { intADC = read_adc(numadc); intTOTAL = intTOTAL + intADC;

delay_ms(10); // 50 x 10 mS = 500 mS = 0.5 detik }

flMEAN = intTOTAL / ADC_samp; // nilai rata-rata flHASIL = (flMEAN * 0.48825125); if (flHASIL<=0) flHASIL=0; //--- printf("=%d \n \r",flHASIL); return flHASIL; delay_ms(10); }

void servo(unsigned char servoNum, unsigned int pulse, unsigned char rate) {

i2c_start(); // Start Condition

i2c_write(alamatI2C); // Tulis ke modul SPC SERVO CONTROLLER i2c_write(0x02); // Perintah “Run Servo Motor”

i2c_write(servoNum); // Nomor Servo

i2c_write(pulse/256); // Lebar pulsa kontrol (MSB) i2c_write(pulse%256); // Lebar pulsa kontrol (LSB) i2c_write(rate); // Rate

i2c_stop(); // Stop Condition

delay_us(15); // delay 4 ms

i2c_start(); // Start Condition

temp1 = i2c_read(0);// Data Acknowledgement i2c_stop(); // Stop Condition

}

unsigned int read(unsigned char servoNum) {i2c_start(); // Start Condition

i2c_write(0xE0); // Tulis ke modul SPC SERVO CONTROLLER i2c_write(0x07); // Perintah “Read Servo Position”

i2c_write(servoNum); // Nomor Motor Servo i2c_stop(); // Stop Condition

delay_us(25); // delay 25 us i2c_start(); // Start Condition

i2c_write(0xE1); // Baca ke modul SPC SERVO CONTROLLER temp1 = i2c_read(1);// Data Acknowledgement

temp2 = i2c_read(1);// Enable/Disable temp3 = i2c_read(1);// Pulsa Kontrol (MSB) temp4 = i2c_read(0);// Pulsa Kontrol (LSB) i2c_stop(); // Stop Condition

pulse =(temp3*256)+temp4; return pulse; printf("=%d \n \r",pulse); } void main(void) {

// Declare your local variables here

// Input/Output Ports initialization // Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0x00;

DDRA=0x00;

// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00;

// Port C initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00;

DDRC=0x00;

// Port D initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00;

DDRD=0x00;

// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=0xFF // OC0 output: Disconnected TCCR0=0x00;

TCNT0=0x00; OCR0=0x00;

// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=0xFFFF // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off

// Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00;

OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00;

// Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=0xFF // OC2 output: Disconnected ASSR=0x00;

TCCR2=0x00; TCNT2=0x00; OCR2=0x00;

// External Interrupt(s) initialization // INT0: Off

// INT1: Off // INT2: Off MCUCR=0x00; MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00;

// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: Off

// USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA=0x00;

UCSRB=0x08; UCSRC=0x86; UBRRH=0x00; UBRRL=0x47;

// Analog Comparator initialization // Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80;

/*// ADC initialization

// ADC Clock frequency: 172,800 kHz // ADC Voltage Reference: AVCC pin // ADC High Speed Mode: Off

// ADC Auto Trigger Source: ADC Stopped ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x8E;

SFIOR&=0xEF;*/

// ADC initialization

// ADC Clock frequency: 86,400 kHz // ADC Voltage Reference: AVCC pin // ADC High Speed Mode: Off

// ADC Auto Trigger Source: Free Running ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0xA7; SFIOR&=0x0F; // SPI initialization // SPI disabled SPCR=0x00; // TWI initialization // TWI disabled TWCR=0x00;

// I2C Bus initialization // I2C Port: PORTC // I2C SDA bit: 0 // I2C SCL bit: 1 // Bit Rate: 100 kHz

// Note: I2C settings are specified in the

// Project|Configure|C Compiler|Libraries|I2C menu. i2c_init();

// DS1307 Real Time Clock initialization // Square wave output on pin SQW/OUT: Off // SQW/OUT pin state: 0

// Alphanumeric LCD initialization // Connections are specified in the

// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: // RS - PORTB Bit 0 // RD - PORTB Bit 1 // EN - PORTB Bit 2 // D4 - PORTB Bit 3 // D5 - PORTB Bit 4 // D6 - PORTB Bit 5 // D7 - PORTB Bit 6 // Characters/line: 16 lcd_init(16); alamatI2C = 0xE0; delay_ms(500); lcd_gotoxy(0,0); lcd_putsf("iqbal system"); lcd_gotoxy(0,1); lcd_putsf("solar_tracker"); lcd_clear();

a=b=600; //posisi awal motor servo servo(1,a,50);

delay_ms(1000); while (1)

{

solar_cell(0); //fungsi untk mendeteksi arus solar cell solar_cell(1); //fungsi untuk mendeteksi tegangan solar cell posx1=LDR("x1",4,0,0); //

posy1=LDR("y1",5,9,0); posy2=LDR("y2",6,9,1); posx2=LDR("x2",7,0,1);

//fungsi dibawah membandingkan nilai ldr x1-Vs-x2 dan ldr y1-vs-y2, jika posisi ldr sama, maka

//motor tidak akan bergerak

while((posy1==(posy2-10)|posy2==(posy1-10)& (posx1==(posx2-10)|posx2==(posx1- 10)))){#asm("nop")};

//jika nilai ldr y1-vs-y2 tidak sama, maka motor akan bergerak if (posy1<posy2)

{ a=a+5;

servo(1,a,10); pulsa=read(1); if (pulsa >=2499) {a=700;servo(1,a,50);delay_ms(1500);} } if (posy2<posy1) { a=a-5; servo(1,a,10);*/ if (a<=600) {a=2449;servo(1,a,50);delay_ms(500);} }

//jika nilai ldr x1-vs-x2 tidak sama, maka motor akan bergerak if (posx1<posx2) { b=b+5; servo(2,b,10); pulsa=read(2); if (pulsa >=2499) {b=700;servo(2,b,50);delay_ms(1500);} } if (posx2<posx1) { b=b-5; servo(1,b,10); if (b<=600) {b=2449;servo(1,b,50);delay_ms(500);} } delay_ms(50); } //end while } //end main

Program Visual Basic (VB 6,0)

Program ini untuk menampilan tegangan, arus, daya dan posisi solar cell dalam text box yang terpisah

Private Sub cmdConnect_Click() Dim port As Integer

On Error GoTo errcode

If MSComm1.PortOpen = False Then MSComm1.CommPort = 9 MSComm1.RThreshold = 1 MSComm1.InputLen = 100 MSComm1.Settings = 9600 & ",N,8,1" MSComm1.PortOpen = True cmdConnect.Enabled = False cmdDisconnect.Enabled = True End If Exit Sub errcode:

MsgBox "Port Salah !", vbOKOnly, "Peringatan" End Sub

Private Sub cmdDisconnect_Click() If MSComm1.PortOpen = True Then MSComm1.PortOpen = False End If

cmdConnect.Enabled = True cmdDisconnect.Enabled = False End Sub

Private Sub Form_Load() Timer1.Enabled = False cmdConnect.Enabled = True cmdDisconnect.Enabled = False End Sub

Private Sub MSComm1_OnComm() Dim buffer As String

Dim temp As String Dim pisah() As String Dim i As Integer

If MSComm1.CommEvent = comEvReceive Then buffer = MSComm1.Input

pisah = Split(buffer, Chr$(13)) On Error Resume Next

If buffer <> " " Then With Text1 .SelStart = Len(.Text) .SelText = buffer End With For i = 0 To 2 If i < 3 Then Text2(i).Text = CStr(pisah(i)) End If Next i Else buffer = " " End If End If

Text2(3).Text = Val(Text2(0).Text) * Val(Text2(1).Text) „menampilkan daya End Sub

Private Sub Timer1_Timer() MSComm1_OnComm End Sub

LAMPIRAN C

Foto Alat

Dokumen terkait