Kelelawar hewan nocturnal, yang berkeliaran di malam
hari...meski berada dikegelapan, kelelawar dapat terbang bebas tanpa menabrak
penghalang didepannya,, kelelawar dapat menghindari penghalang didepannya
karena kelelawar dapat mengeluarkan gelombang ultrasonic, yang jika ada
penghalang maka gelombang tersebut akan dipantulkan kembali dan diterima oleh
telinga kelelawar yang lebar, sehingga kelelawar dapat menghindar secara
spontan ketika didepannya ada penghalang.
Gambar 1. Prinsip kerja pengukuran
jarak benda
Karakteristik
Sensor Ultrasonic PING Paralax
Ultrasonik, sebutan untuk jenis suara diatas batas
suara yang bisa didengar manusia. Seperti diketahui, telinga manusia hanya bisa
mendengar suara dengan frekuensi 20 Hz sampai 20KHz. Lebih dari itu hanya
beberapa jenis binatang yang mampu mendengarnya, seperti kelelawar dan lumba-lumba.
Lumba-lumba bahkan memanfaatkan ultrasonik untuk mengindera benda-benda di laut.
Dengan cara mengirimkan sebuah suara dan mengitung lamanya pantulan suara
tersebut maka dapat diketahui jarak kapal selam dengan benda tersebut.
Mula-mula suara dibunyikan, kemudian dihitung lama waktu sampai terdengar suara
pantulan. Jarak dapat dihitung dengan mengalikan kecepatan suara dengan waktu pantulan.
Kemudian hasilnya dibagi 2. Misalnya lama waktu pantulan adalah 1 detik, maka jaraknya
adalah (344,424m/detik x 1 detik)/2 = 172m.
Ping))) Ultrasonic Range Finder, adalah modul
pengukur jarak dengan ultrasonic buatan Paralax Inc. yang didesain khusus untuk
teknologi robotika. Dengan ukurannya yang cukup kecil (2,1cm x 4,5cm), sensor
seharga 350 ribu rupiah ini dapat mengukur jarak antara 3 cm sampai 300 cm. Keluaran
dari Ping))) berupa pulsa yang lebarnya merepresentasikan jarak. Lebar pulsanya
bervariasi dari 115 uS sampai 18,5 mS.
Gambar 2. Sensor ultrasonic PING)))
Paralax
Pada dasanya, Ping))) terdiri dari sebuah chip
pembangkit sinyal 40KHz, sebuah speaker ultrasonik dan sebuah mikropon
ultrasonik. Speaker ultrasonik mengubah sinyal 40 KHz menjadi suara sementara
mikropon ultrasonik berfungsi untuk mendeteksi pantulan suaranya. Pada modul Ping)))
terdapat 3 pin yang digunakan untuk jalur power supply (+5V), ground dan
signal. Pin signal dapat langsung dihubungkan dengan mikrokontroler tanpa
tambahan komponen apapun.
Ping))) mendeteksi objek dengan cara mengirimkan
suara ultrasonik dan kemudian “mendengarkan” pantulan suara tersebut. Ping)))
hanya akan mengirimkan suara ultrasonik ketika ada pulsa trigger dari
mikrokontroler (Pulsa high selama 5uS). Suara ultrasonik dengan frekuensi sebesar
40KHz akan dipancarkan selama 200uS. Suara ini akan merambat di udara dengan
kecepatan 344.424m/detik (atau 1cm setiap 29.034uS), mengenai objek untuk
kemudian terpantul kembali ke Ping))). Selama menunggu pantulan, Ping))) akan
menghasilkan sebuah pulsa. Pulsa ini akan berhenti (low) ketika suara pantulan
terdeteksi oleh Ping))). Oleh karena itulah lebar pulsa tersebut dapat
merepresentasikan jarak antara Ping))) dengan objek.
Berdasarkan
Datasheet
Jarak = (Lebar Pulsa/29.034uS)/2 (dalam
cm)
Jarak = (Lebar Pulsa x 0.034442)/2 (dalam
cm)
Karena
1/29.034 = 0.34442
Berdasarkan Perhitungan Kalibrasi Bolabot Institute
Jarak = Lebar Pulsa * 0.020+0.252(dalam
cm)
Nilai tersebut berbeda dengan nilai datasheet, sehingga penulis menyarankan untuk melakukan kalibrasi ulang jika akan menggunakan sensor ultrasonik PING))) agar lebih teliti.
Desain Robot Penghindar Halangan Sensor ultrasonik
Berikut adalah desain robot BOLABOT TECHNO ROBOTIC INSTITUTE (www.bolabot.com)menggunakan Proteus:
Gambar 3. Desain robot avoider
ultrasonic dengan ATMega 16 dan LCD
Program CV AVR Robot Avoider Ultrasonic
Menggunakan Mikrokontroler ATMega 16 dan LCD 16x2
Menggunakan Mikrokontroler ATMega 16 dan LCD 16x2
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date :
13/08/2013
Author :
Company :
Comments:
Chip type
: ATmega16
Program type
: Application
AVR Core Clock frequency: 12,000000 MHz
Memory model
: Small
External RAM size
: 0
Data Stack size
: 256
*****************************************************/
#include <mega16.h>
// Alphanumeric LCD Module functions
#include <alcd.h>
#include
<delay.h>
#include
<stdio.h>
#include <stdlib.h>
unsigned int
hitung;
float jarak;
unsigned char
data[16];
void RF1(void)
{
unsigned int i=0;
hitung=0;
DDRA.0=1;
PORTA.0=1;
delay_us(5);
PORTA.0=0;
DDRA.0=0;
PORTA.0=1;
while(PINA.0==0){i++; if(i>=10000)
break;}
while(PINA.0==1){hitung++;
if(hitung>=10000) break;}
PORTA.0=0;
delay_ms(10);
}
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
}
// Declare your global variables here
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;
DDRB=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=Out Func4=Out Func3=In
Func2=In Func1=In Func0=In
// State7=T State6=T State5=0 State4=0 State3=T
State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x30;
// 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: 11,719 kHz
// Mode: Fast PWM top=0x00FF
// OC1A output: Inverted
// OC1B output: Inverted
// 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=0xF1;
TCCR1B=0x0D;
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=0x01;
// 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 specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric
LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 1
// EN - PORTC Bit 2
// D4 - PORTC Bit 4
// D5 - PORTC Bit 5
// D6 - PORTC Bit 6
// D7 - PORTC Bit 7
// Characters/line: 16
lcd_init(16);
// Global enable interrupts
#asm("sei")
lcd_gotoxy
(2,0) ;
lcd_putsf
("== welcome ==") ;
lcd_gotoxy(2,1);
lcd_putsf("==To
Bolabot==");
delay_ms(1000);
DDRD.2=1; // OUTPUT MOTOR KIRI
DDRD.3=1; // OUTPUT MOTOR KIRI
DDRD.6=1; // OUTPUT MOTOR KANAN
DDRD.7=1; // OUTPUT MOTOR KANAN
PORTD.2=1;
PORTD.3=1;
PORTD.6=1;
PORTD.7=1;
//kecepatan
motor kiri
OCR1A=250;
//kecepatan
motor kiri
OCR1B=250;
while (1)
{
RF1();
// Persamaan konversi jarak hasil
kalibrasi
jarak = hitung*0.020+0.252;
sprintf(data,"%0.001f cm",
jarak);
lcd_clear();
lcd_gotoxy (0,0) ;
lcd_putsf ("==JARAK==") ;
lcd_gotoxy(0,1);
lcd_puts(data);
delay_ms(100);
if (jarak<=20)
{
PORTD.2=0;
PORTD.3=1;
PORTD.6=0;
PORTD.7=0;
delay_ms(1000);
PORTD.2=1;
PORTD.3=0;
PORTD.6=1;
PORTD.7=0;
}
else
{
PORTD.2=1;
PORTD.3=0;
PORTD.6=1;
PORTD.7=0;
}
}
}
Menggunakan Mikrokontroler ATMega 8 tanpa LCD
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project : Robot Avoider Ultrasonic
Version : I
Date : 2/18/2013
Author : Mada Sanjaya
WS, Ph.D
Company : Bolabot Techno Robotic Institute
Comments: -
Chip type
: ATmega8
Program type
: Application
AVR Core Clock frequency: 12.000000 MHz
Memory model
: Small
External RAM size
: 0
Data Stack size
: 256
*****************************************************/
#include <mega8.h>
#include <delay.h>
#include <stdio.h>
#include <stdlib.h>
unsigned int hitung;
float dutu;
void RF1(void)
{
unsigned int
i=0;
hitung=0;
DDRC.5=1;
PORTC.5=1;
delay_us(5);
PORTC.5=0;
DDRC.5=0;
PORTC.5=1;
while(PINC.5==0){i++; if(i>=10000) break;}
while(PINC.5==1){hitung++; if(hitung>=10000) break;}
PORTC.5=0;
delay_ms(10);
}
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
}
// Declare your global variables here
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=Out
Func1=Out Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=0
State1=0 State0=T
PORTB=0x00;
DDRB=0x06;
// 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=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
TCCR0=0x00;
TCNT0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 11.719 kHz
// Mode: Fast PWM top=0x00FF
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// 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=0xA1;
TCCR1B=0x0D;
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=0x00;
// 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;
DDRD.5=1; // definisi output ke motor kiri
DDRD.6=1; // definisi output ke motor kiri
DDRD.7=1; // definisi output ke motor kanan
DDRB.0=1; // definisi output ke motor kanan
PORTD.5=1;
PORTD.6=1;
PORTD.7=1;
PORTB.0=1;
while (1)
{
RF1();
dutu = hitung*0.020+0.252; // rumus jarak berdasarkan kalibrasi
sensor
if (dutu<=20) //jika jarak terhadap penghalang kurang
dari sama dengan 20 cm
{
OCR1A=100;
OCR1B=100;
PORTD.5=0;
PORTD.6=1;
PORTD.7=0;
PORTB.0=0;
delay_ms(1000);
OCR1A=100;
OCR1B=100;
PORTD.5=1;
PORTD.6=0;
PORTD.7=1;
PORTB.0=0;}
else{
OCR1A=100;
OCR1B=100;
PORTD.5=1;
PORTD.6=0;
PORTD.7=1;
PORTB.0=0;}
}
}
Realisasi Hardware Robot Avoider Ultrasonik PING)))
Berikut adalah video yang telah diunggah di youtube
ini pin SIGnya masuk kemana?
BalasHapusMaaf gambar yang dulu salah, karena diproteus gak ada sensor PING, untuk mikrokontroler AT Mega 16 gambar diatas, PIN SIGnya masuk ke PORT A.0 dan untuk mikrokontroler AT Mega 8 PIN SIGnya msuk ke PORT C.5 (Kalo gambar yang dulu kebalik sama ground)
BalasHapusSekian
Komentar ini telah dihapus oleh pengarang.
BalasHapusmohon maaf mas saya mau tanya , mas source code yang untuk
BalasHapus#include
#include
#include
#include
#include boleh minta nggak ? terimakasih .. kalo boleh tau email nya mas nya apa nya ? >.< mohon sekali untuk tugas besar Mikrokontrooler mas.. hehe
maksud saya include yang untuk include alcd.h
BalasHapusdan juga include delay.h
include stdio.h
#include , source code nya apa mas, terimakasih ... >.<
mau nanyak nie mas
BalasHapuskomponennya pakek apa aja mas,,,
mohon bantuan nya ya mas,,,,,
butuh banget mas.
Sensor PING nya bisa masuk ke port B ga ya? kan tidak perlu adc kan?
BalasHapusmas kaloq di tambain servo kayak wall e robot gimana?
BalasHapusMau nanya ni gun,,1. apakah sensor ultrasonik perlu diberi penguat utk pengukuran jarak?
BalasHapus2. bagaimana konversi jarak terhadap tegangannya?
terimakasih gun :)