Kamis, 17 Maret 2016

ROBOT PENGHINDAR HALANGAN

Deskripsi dan gambar rangkaianya menyusul......
Tapi bisa d amati dari code programnya, pin mana yang terhubung ke sensor ultrasonik, servo dan motor dc.
Bagian- bagian pada Robot ini:
  1. Sisteminimum mikrokontroler.
  2. Sensor Ultrasonik
  3. Servo Tower Pro MG90
Code Programnya:

#include(mega8.h)
#include(delay.h)
#include(stdio.h)
// Alphanumeric LCD Module functions
// Alphanumeric LCD functions
#include(alcd.h)

#define servox     PORTC.4
#define TRIGGER   PORTD.4
#define ECHO      PIND.5
unsigned char baris_1[16], baris_2[16];
long timer = 0, xTimer = 0;
float pulsa, jarak,jarak_kanan, jarak_kiri;

int a=0,i;
unsigned char servo;
unsigned char y;

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here

a++;
if(a==941)    
 { a=0;
   PORTC.4 =1;   
 }

if (24 { y=(char)a;  
   if(y==servo)    servox = 0;    
 }

}

// Timer1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Place your code here
xTimer++;
}

// Declare your global variables here


void bacaJarak() {
   TRIGGER = 1;         // Memberikan pulsa high selama 10 microseconds
   delay_us(10);
   TRIGGER = 0;
   while(ECHO == 0);    // Tunggu pulsa high dari sensor
   TCNT1 = 0;           // Nolkan timer
   xTimer = 0;          // Nolkan variabel xTimer
   while(ECHO == 1);    // Tunggu pulsa low dari sensor
   timer = TCNT1;       // Ambil data dari timer
   pulsa = (float)xTimer * 65535 * 0.5 + (float)timer * 0.5;   // Menghitung pulsa yang masuk dalam satuan microseconds
   jarak = pulsa / 29.034 / 2;   // Menghitung jarak dalam satuan centimeter
   lcd_clear();
   //sprintf(baris_1, "Pulsa = %5.2f ", pulsa);
   sprintf(baris_2, "Jarak = %3.2f ", jarak);
   lcd_gotoxy(0, 0);
   lcd_puts(baris_1);
   lcd_gotoxy(0, 1);
   lcd_puts(baris_2);
   delay_us(50);
}


void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// 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;
DDRB=0x00;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x10;
DDRC=0x1F;

// 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=0x20;
DDRD=0x10;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 16000.000 kHz
TCCR0=0x01;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 2000.000 kHz
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x02;
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
MCUCR=0x00;

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

// USART initialization
// USART disabled
UCSRB=0x00;

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

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

// 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 - PORTC Bit 0
// Characters/line: 16
lcd_init(16);
servo=64;          //90 der
delay_ms(5000);
// Global enable interrupts
#asm("sei")

while (1)
 {
 // Place your code here
  for(i=0;i<5 br="" i="">   {
    bacaJarak();
    //delay_ms(200);
   } 
  
   if(jarak>20)
   {
    while(jarak>20)
     {
      PORTC.0=1;PORTC.2=1;//maju
      delay_ms(100);
      PORTC.0=PORTC.1=PORTC.2=PORTC.3=0;
      for(i=0;i<5 br="" i="">       {
        bacaJarak();
       } 
     }
   }
  
  
   servo=25;          //180 der
   delay_ms(500);  
     
    for(i=0;i<5 br="" i="">      {
      bacaJarak();
      jarak_kanan=jarak;
      //delay_ms(200);
      }
    
    servo=108;         //0 der
    delay_ms(500);
    for(i=0;i<5 br="" i="">      {
      bacaJarak();
      jarak_kiri=jarak;
      //delay_ms(200);
      }
    
    servo=64;          //90 der
    delay_ms(500);
   
   
    if (jarak_kanan>jarak_kiri){PORTC.1=1;PORTC.2=1;delay_ms(250);PORTC.1=0;PORTC.2=0;delay_ms(1000);}
    else {PORTC.0=1;PORTC.3=1;delay_ms(250);PORTC.0=0;PORTC.3=0;delay_ms(1000);}
    
     
    }
}


vidionya


Rabu, 16 Maret 2016

APLIKASI VB UNTUK KONTROL 2 LAMPU (LED) ATAULEBIH

Tampilan Visual Basicnya
Tool Box yang digunakan:
  1. Frame
  2. Shape
  3. Check Box
  4. Combo Box
  5. Command Button
  6. MSComm
 Code Program:
Private Sub Check1_Click()
If Check1.Value = 1 Then
Shape1.FillColor = vbRed
MSComm1.Output = "a"
Else
Shape1.FillColor = &H40&
MSComm1.Output = "1"
End If
End Sub

Private Sub Check2_Click()
If Check2.Value = 1 Then
Shape2.FillColor = vbRed
MSComm1.Output = "b"
Else
Shape2.FillColor = &H40&
MSComm1.Output = "2"
End If
End Sub

Private Sub cmdconnect_Click()
MSComm1.CommPort = Val(Combo1.Text)
MSComm1.Settings = "9600,n,8,1"
MSComm1.PortOpen = True
MsgBox "Koneksi Berhasil !", vbInformation, "Sukses"
Frame1.Enabled = True
Combo1.Enabled = False
cmdconnect.Enabled = False
End Sub

Private Sub cmdexit_Click()
End
End Sub

Private Sub Form_Load()
For Port = 1 To 20
Combo1.AddItem Port
Next Port
Frame1.Enabled = False
MSComm1.Settings = "9600,n,8,1"
End Sub

Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
End Sub


Vidionya

Kamis, 03 September 2015

ULTRASONIK HC SR04







Pin TRIG pada sensor dihubungkan pada pin PORTC.4 pada mikrokontroler, sedangkan pin OUT dihubungkan pada pin PORTC.5 pada mikrokontroler. Pin TRIG digunakan untuk memberikan sinyal trigger agar gelombang ultrasonik dapat dipancarkan, sedangkan pin ECHO merupakan pin keluaran yang akan mengeluarkan pulsa yang mempresentasikan jarak sensor dengan benda. LCD digunakan untuk menampilkan besaran pulsa dan jarak yang terukur oleh sensor tersebut.
Untuk memulai membuat program, seperti biasa buat project baru dengan bantuan code wizard. Kali ini kita membutuhkan sebuah timer untuk menghitung lebarnya pulsa yang keluar dari pin ECHO. Oleh karena itu kita setting dahulu pengaturan timer. Kali ini yang akan kita gunakan adalah Timer 1 dengan mode sebagai timer biasa. Kali ini besarnya nilai clock untuk timer yang digunakan adalah 2MHz. Selain itu kita juga harus mengaktifkan mode overflow interrupt pada timer. Untuk lebih jelasnya pengaturan dari Timer1 dapat 


Setelah mengkonfigurasi Timer1, selanjutnya kita konfigurasi pin untuk interface ke LCD dan sensor. Kali ini kita gunakan PORTD untuk jalur data ke LCD, sedangkan sensor nantinya terhubung pada PORTC.4 dan PORTC.5. Pengaturan lebih jelasnya dapat dilihat pada gambar di bawah ini.


Algoritma untuk pembacaan sensor ultrasonik dapat dijelaskan seperti berukut ini.
1. Keluarkan pulsa 10us pada pin PORTC.4 (TRIG sensor)
2. Hitung lebar pulsa high pada pin PORT.5 (ECHO)
3. Konversi lebar pulsa ke satuan jarak(cm)
4. Tampilkan ke LCD
Untuk lebih jelasnya dapat dilihat pada source code di bawah ini.
#include (mega8.h)
#include (delay.h)
#include (stdio.h)   
// Alphanumeric LCD Module functions
#include
#define TRIGGER   PORTC.4
#define ECHO      PINC.5
unsigned char baris_1[16], baris_2[16];
long timer = 0, xTimer = 0;
float pulsa, jarak;
// Timer1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Place your code here
   xTimer++;
}
void bacaJarak() {
   TRIGGER = 1;         // Memberikan pulsa high selama 10 microseconds
   delay_us(10);
   TRIGGER = 0;
   while(ECHO == 0);    // Tunggu pulsa high dari sensor
   TCNT1 = 0;           // Nolkan timer
   xTimer = 0;          // Nolkan variabel xTimer
   while(ECHO == 1);    // Tunggu pulsa low dari sensor
   timer = TCNT1;       // Ambil data dari timer
   pulsa = (float)xTimer * 65535 * 0.5 + (float)timer * 0.5;   // Menghitung pulsa yang masuk dalam satuan microseconds
   jarak = pulsa / 29.034 / 2;   // Menghitung jarak dalam satuan centimeter
   lcd_clear();
   sprintf(baris_1, “Pulsa = %5.2f “, pulsa);
   sprintf(baris_2, “Jarak = %3.2f “, jarak);
   lcd_gotoxy(0, 0);
   lcd_puts(baris_1);
   lcd_gotoxy(0, 1);
   lcd_puts(baris_2);
   delay_us(300);
}
// Declare your global variables here
void main(void)
{
// Port C initialization
// Func6=In Func5=In Func4=Out Func3=In Func2=In Func1=In Func0=In
// State6=T State5=P State4=0 State3=T State2=T State1=T State0=T
PORTC=0×20;
DDRC=0×10;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 2000.000 kHz
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0×00;
TCCR1B=0×02;
TCNT1H=0×00;
TCNT1L=0×00;
ICR1H=0×00;
ICR1L=0×00;
OCR1AH=0×00;
OCR1AL=0×00;
OCR1BH=0×00;
OCR1BL=0×00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0×04;
// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS – PORTD Bit 0
// RD – PORTD Bit 1
// EN – PORTD Bit 2
// D4 – PORTD Bit 4
// D5 – PORTD Bit 5
// D6 – PORTD Bit 6
// D7 – PORTD Bit 7
// Characters/line: 16
lcd_init(16);
lcd_clear();
// Global enable interrupts
#asm(“sei”)
while (1)
      {
      // Place your code here
      bacaJarak();
      delay_ms(100);
      }
}
Pada program diatas dapat dilihat bahwa pada saat terjadi interrupt timer maka variabel xTimer akan increment. Variabel ini yang nantinya digunakan untuk perhitungan timer bersama dengan isi register TCNT1. Pada fungsi bacaJarak perhitungan lebar pulsa high berada pada baris berikut.
pulsa = (float)xTimer * 65535 * 0.5 + (float)timer * 0.5;   // Menghitung pulsa yang masuk dalam satuan microseconds
Karena kita menggunakan frekuensi clock 2MHz untuk clock timernya, maka dapat dihitung setiap 1 pulsa memiliki periode 0.5 microseconds. Sehingga untuk menghitung total pulsa high dapat mengalikan nilai xTimer * 65535 (karena 16 bit) * 0.5 + TCNT1 * 0.5. Setelah besar lebar pulsa kita ketahui kita dapat mengkonversi ke dalam satuan jarak(cm) dengan rumus perhitungan
jarak = pulsa / 29.034 / 2;   // Menghitung jarak dalam satuan centimeter
Nilai 29.034 tersebut adalah konstanta untuk kecepatan gelombang ultrasonik. Karena terjadi pemantulan gelombang, maka jarak yg ditempuh oleh gelombang tersebut adalah 2 kali dari jarak sensor ke benda. Oleh karena itu kita harus membagi lagi dengan 2, sehingga besarnya nilai jarak sama dengan jarak sensor dengan benda pemantul. Karena pada program kita nantinya akan menampilkan bilangan berkoma (float) pada lcd, maka kita harus mengatur terlebih dahulu pada bagian compiler. Klik Project => Configure, kemudian pilih pada bagian berikut. Ganti bagian (s)printf Features menjadi float, width, precision.

 Sensor ultrasonik dapat di aplikasikan untuk alat pengukur tinggi badan



vidionya ada di sini

Selasa, 01 September 2015

SIMUALASI VISUAL BASIC UNTUK ON/OFF LED


Bagi temen-temen yang butuh reverensi komunikasi serial menggunakan vb, biar cepet lngsung ja ke tkp
video tutorialnya bias di download disini dan disina

Kamis, 30 April 2015

KOMUNIKASI SERIAL BIT BANGING













Komunikasi serial UART biasanya menggunakan pin Tx dan Rx dalam komunikasinya. Tp kita bisa menggunakan setiap pin pada mikrokontroler dalam komunikasi serial, terutama pada bagian Rx-nya. Dalam artikel ini komunikasi serial digunakan untuk mengirimkan data adc ic atmega 8 dari pembacaan sensor suhu LM35 di kirimkan ke IC atmega32 kemudian ditampilkan di lcd.
Rangkaian simulasinya:


 Vidionya:
Untuk programnya bisa di download di sini