PENGAMAN PARKIR MOBIL MENGGUNAKAN SENSOR JARAK BERBASIS MIKROKONTROLER
PEMBUATAN DAN PEMBAHASAN
A.
Landasan Teori
1. Mikrokontroler
a.
Pengertian Mikrokontroler
Mikrokontroler adalah salah satu bagian dasar suatu sistem
komputer. Meskipun mempunyai bentuk yang jauh lebih kecil dari suatu komputer
pribadi dan komputer mainframe,
mikrokontroler dibangun dari elemen-elemen dasar yang sama. Secara sederhana,
komputer akan menghasilkan output spesifik
berdasarkan input yang diterima dan
program yang dikerjakan. (http://mikrokontroler.tripod.
com/6805/bab1.htm)
Seperti umumnya komputer,
mikrokontroler sebagai alat yang mengerjakan perintah-perintah yang diberikan
oleh manusia. Artinya, bagian terpenting dan utama dari suatu sistem
komputerisasi adalah program itu sendiri yang dibuat oleh seorang programmer. Program ini memerintahkan komputer untuk melakukan
jalinan yang panjang dari aksi-aksi sederhana untuk melakukan tugas yang lebih
kompleks yang diinginkan oleh programmer.
Sistem dengan mikrokontroler
umumnya menggunakan piranti
input yang jauh lebih kecil seperti saklar atau keypad kecil.
Hampir semua input mikrokontroler
hanya dapat memproses sinyal input
digital dengan tegangan yang sama dengan tegangan logika dari sumber.
Tegangan positif sumber umumnya adalah 5 volt. Padahal dalam dunia nyata
terdapat banyak sinyal analog atau
sinyal dengan tegangan level yang bervariasi. Karena itu ada piranti input yang mengkonversikan sinyal analog menjadi sinyal digital sehingga komputer bisa mengerti
dan menggunakannya. Ada beberapa
3
mikrokontroler yang dilengkapi dengan piranti konversi ini,
yang disebut dengan ADC, dalam satu rangkaian terpadu.
Mikrokontroler ATMega8535 merupakan
salah satu mikrokontroler buatan AVR yang memiliki fasilitas–fasilitas yang
cukup lengkap, diantaranya :
1) Flash adalah
suatu jenis Read Only Memory yang
biasanya diisi dengan program hasil buatan manusia yang harus dijalankan oleh
mikrokontroler.
2) RAM
(Random Acces Memory) merupakan
memori yang membantu CPU untuk penyimpanan data sementara dan pngolahan data
ketika program sedang running.
3) EEPROM
(Electrically Erasable Programmable Read
Only Memory) adalah memori untuk penyimpanan data secara permanen oleh
program yang sedang running.
4) Port
I/O adalah kaki untuk jalur keluar atau masuk sinyal sebagai hasil keluaran
ataupun masukan bagi program.
5) Timer adalah
modul dalam hardware yang bekerja
untuk menghitung waktu / pulsa.
6) UART
(Universl Asynchronous Receive Transnit) adalah
jalur komunikasi data khusus secara serial asynchronous.
7) PWM
(Pulse Width Modulation) adalah
fasilitas untuk membuat modulasi pulsa.
8) ADC
(Analog to Digital Converter) adalah
fasilitas untuk dapat menerima sinyal analog
dalam range tertentu untuk
kemudian dikonversi menjadi suatu nilai digital
dalam range tertentu.
9) SPI
(Serial Peripheral Interface) adalah
jalur komunikasi data khusus secara serial synchronous.
10) ISP
(In System Programming) adalah
kemampuan khusus mikrokontroler untuk dapat diprogram langsung dalam sistem
rangkaiannya dengan membutuhkan jumlah pin yang minimal.
b.
Mikrokontroler ATMega8535
Seperti yang telah dijelaskan
sebelumnya, ATMega8535 memiliki fasilitas yang cukup lengkap. Dari kapasitas
memori program dan memori data yang cukup besar, interupsi, timer / counter, PWM, USART, TWI, analog comparator, EEPROM internal dan juga ADC internal semuanya ada dalam ATMega8535.
Selain itu kemampuan kecepatan eksekusi yang lebih tinggi
menjadi alasan bagi banyak orang untuk lebih memilih menggunakan mikrokontroler
jenis AVR daripada mikrokontroler pendahulunya yaitu keluarga MCS-51. Dengan
demikian sangatlah tepat untuk mempelajari mikrokontroler keluarga AVR dengan
ATMega8535. (Bejo 2008: 10)
Mikrokontroler ATMega8535 merupakan
salah satu mikrokontroler buatan AVR yang memiliki bagian–bagian, diantaranya :
1) Fitur ATMega8535
Berikut ini adalah
fitur-fitur yang dimiliki oleh ATMega8535 :
a)
130 macam intruksi, yang hampir
semuanya dieksekusi dalam satu siklus clock.
b) 32 x 8 bit register serba guna.
c)
Keceptan mencapai 16 MIPS dengan clock 16 MHz.
d)
8 Kbyte Flash memori, yang memiliki fasilitas In-System Programming.
e)
512 Byte internal EEPROM.
f)
512 Byte SRAM.
g)
Programming Lock, fasilitas untuk mengamankan kode program.
h)
2 buah timer /
counter 8 bit dan 1 buah timer / counter 16 bit.
i)
4 channel
output PWM.
j)
8 channel ADC 10-bit.
k)
Serial USART.
l)
Master / Slave SPI serial interface.
m)
Serial TWI atau 12C.
n)
On-Chip Analog Comparator.
2)
Konfigurasi PIN ATMega8535
PIN adalah kaki-kaki
dari sebuah IC. Gambar 1. menunjukkan konfigurasi PIN ATMega8535
Gambar 1. Konfigurasi PIN ATMega8535 (Sumber: datasheet
ATMega8535)
Konfigurasi PIN ATMega 8535 pada Gambar
1 terdapat susunan masing-masing kaki mikrokontroler ATMega8535. Tabel.1
menerangkan tentang susunan dari masing-masing kaki mikrokontroler ATMega8535.
Tabel 1. Susunan
kaki ATMega8535
PIN
|
KETERANGAN
|
1-8
|
Port B, merupakan Port I/O 8 bit dua arah (bit-directional) dengan resistor pull-up internal. Selain sebagai Port
I/O 8 bit Port B juga dapat
difungsikan secara individu sebagai
berikut :
PB7 : SCK (SPI Bus Serial Clock)
PB6 : MISO (SPI
Bus Mater Input / Slave Output) PB5 : MOSI (SPI Bus Master Output / Slave Input) PB4 : SS (SPI Slave Select Input)
PB3 : AIN1 (Analog Comparator Negatif Input) OC0 (Output Compare Timer / Counter 0)
PB2 : AIN0 (Analog Comparator Positif Input) INT2 (External Interrupt 2 Input)
PB1 : T1 (Timer / counter 1
External Counter Input)
PB0 : T0 (USART External Clock
Input / Output)
|
9
|
RESET, merupakan pin reset
yang akan bekerja bila diberi
pulsa rendah (aktif low)
selama minimal 1.5 µs
|
10
|
VCC, catu daya digital
|
11
|
GND, Ground untuk catu
daya digital
|
12
|
XTAL2, merupakan output dari penguat oscillator
pembalik
|
13
|
XTAL1, merupakan input ke penguat oscillator pembalik
dan input ke internal clock.
|
14-21
|
Port D, merupakan Port I/O 8 bit dua arah (bi-directional) dengan resistor pull-up internal. Selain sebagai Port
I/O 8 bit Port D juga dapat
difungsikan secara individu sebagai berikut :
PD7 : OC2 (Output
Compare Timer / Counter 2) PD6 : ICP1 (Timer / Counter 1 input Capture)
PD5 : OC1A (Output Compare A
Timer / Counter 1)
|
|
PD4 : OC1B (Output
Compare B Timer / Counter 1) PD3 : INT1 (External Interupt 1 Input)
PD2 : INT0 (External
Interupt 0 Input) PD1 : TXD (USART
transmit)
PD0 : RXD (USART receive)
|
22-29
|
Port C, merupakan Port I/O 8 bit dua arah
(bi-directional) dengan resistor pull-up internal.
Selain sebagai Port I/O 8 bit 4bit Port C juga dapat difungsikan secara
individu sebagai berikut :
PC7 : TOC2 (Timer
Ocillator 2) PC6 : TOC1 (Timer
Ocillator 1)
PC1 :
SDA (Serial Data Input / Output, I²C)
PC0 :SCL (Serial Clock, I²C)
|
30
|
AVCC, merupakan catu daya yang digunakan untuk
masukan analog ADC yang
terhubung ke Port A
|
31
|
GND, Ground untuk catu
daya analog
|
32
|
AREF, merupakan tegangan
referensi analog untuk ADC
|
33-40
|
Port A, merupakan Port I/O 8 bit dua arah (bi-directional) dengan resistor pull-up internal. Selain sebagai Port
I/O 8 bit Port A juga dapat berfungsi sebagai masukan 8 channel
ADC
|
1)
Arsitektur ATMega8535
Mikrokontroler ATMega8535 memiliki
arsitektur Harvard, yaitu memisahkan memori untuk kode program dan memori untuk
data sehingga dapat memaksimalkan unjuk kerja dan paralelisme.
Instruksi-instruksi dalam memori program dieksekusi dalam satu alur tunggal,
dimana pada saat satu instruksi dikerjakan instruksi berikutnya sudah diambil (pre – fetched) dari memori program.
Konsep inilah yang memungkinkan instruksi–instruksi dapat
dieksekusi dalam setiap satu siklus clock.
32 x 8 bit register serba guna digunakan untuk mendukung operasi pada Aritmetic Logic Unit (ALU) yang dapat
dilakukan dalam satu siklus. Enam dari register
serba guna dapat digunakan sebagai tiga buah register pointer 16 bit pada mode pengalamatan tak langsung untuk
mengambil data pada ruang memori data.
Hampir semua perintah AVR memiliki format16
bit (word). Setiap alamat memori
program terdiri dari instruksi 16 bit atau 32 bit. Selain register serba guna, terdapat register
lain yang terpetakan dengan teknik memory
mapped I/O selebar 64 Byte. Beberapa register
ini digunakan untuk fungsi khusus antara lain sebagai register kontrol Timer / Counter, Interupsi, ADC, USART, SPI, EEPROM dan fungsi I/O lainnya. Register – register ini menepati memori pada alamat 0x20h – 0x5Fh. Gambar
arsitektur ATMega8535 terlihat pada Gambar 2
Gambar 2. Arsitektur ATMega8535 (Sumber: datasheet
ATMega8535)
1. Sensor Ultrasonik
a. Pengertian
DT-SENSE
ULTRASONIC merupakan modul pengukur jarak non-kontak
yang sangat mudah dihubungkan dengan berbagai sistem berbasis mikrokontroler.
Untuk memicu dan membaca data pengukuran dengan DT-SENSE ULTRASONIC hanya memerlukan 1 buah pin mikrokontroler.
Sebuah modul DT-SENSE ULTRASONIC terdiri
dari sebuah Ultrasonik Ranger dan
dapat dihubungkan dengan 2 buah sensor
Infrared Ranger . Ultrasonik Ranger menghasilkan pulsa
atau data keluaran yang
menyatakan jarak yang ditempuh oleh sinyal tersebut sebelum menyentuh sebuah obyek dan memantul kembali. Keluaran analog dari
sensor Infrared Ranger diubah oleh
modul DT-SENSE ULTRASONIC AND INFRARED RANGER
menjadi berbentuk pulsa (Modul Sensor Ultrasonik).
b. Prinsip Kerja Sensor
Ultasonik
Prinsip kerja sensor ultrasonik yaitu
Sinyal ultrasonik yang dibangkitkan akan dipancarkan dari pemancar (transmitter) ultrasonik. Ketika sinyal
mengenai benda penghalang, maka sinyal ini dipantulkan, dan diterima oleh
penerima (receiver) ultrasonik.
Sinyal yang diterima oleh rangkaian receiver
dikirimkan ke rangkaian mikrokontroler, seperti pada Gambar 3.
Gambar 3. Prinsip kerja sensor ultrasonik (Sumber: Ping
Ultrasonic Sensor Overview)
1.
Perencanaan pembuatan perangkat lunak (sofwere)
Pembuatan flow chart dimaksudkan untuk memudahkan pembuatan program, karena
dengan flow chart bisa diketahui alur
kerja alat. Gambar 4. menunjukkan gambar diagram dasar kerja alat
Gambar 4. Flow chart dasar kerja alat
1.
Perancangan Pembuatan perangkat keras (hardware)
Langkah pertama dalam perancangan hardware adalah membuat desain skema
rangkaian serta menentukan alat dan bahan yang akan digunakan
a. Perancangan
Pembuatan Perangkat Mikrokontroler
Gambar 5. Skema Rangkaian Sistem Minimum Mikrokontroler
1) Alat yang digunakan
a)
Spidol Permanent
b)
Bor dan mata bor
c)
Palu
d)
Cutter
e)
Tang potong
f)
Penggaris
g)
Solder
h)
Toolset lengkap
2)
Komponen yang diperlukan:
a)
Resisrtor 100? ¼ W. 8 buah
b)
Resisrtor 330? ¼ W. 1 buah
c) Led ½
W..........................................9
buah
d) IC ATmega 8535……………..…...1 buah
e) IC LM 7805…………………..…...1 buah
f) Kristal
11.059200Mhz……...…..…1 buah
g) Capasitor 1000uf/16v………….… 1 buah
h) Capasitor 30
pf................................2 buah
i) Conektor
2pin..................................1 buah
j) Conektor
6pin..................................1 buah
k) Sakelar Push
On..............................4 buah
l) Dioda
IN 4002.................................1 buah
m) Transistor
BD139............................1 buah
n) Buzzer 5 Volt.................................1 buah
Keterangan Gambar 6.b:
a,b : Kapasitor 30 j
c : Konektor 6 pin
d
: Resistor 330 ?
¼ W
e
: Led
f
: Konektor 2 pin
g
: Dioda 1 A
h
: Kapasitor 100µF/16V
b.
Perancangan Pembuatan Downloader
Gambar 7. ISP Programer
interface Type Kanda Sistem STK200+/300
1) Alat yang digunakan
a)
Spidol Permanent
b)
Bor dan mata bor
c)
Palu
d)
Cutter
e)
Tang potong
f)
Penggaris
g)
Solder
h)
Toolset lengkap
2)
Daftar Komponen:
a) Resistor 4K7? ¼ W....................... 4 buah
b) Resistor 100? ¼ W........................ 5 buah
c) Resistor 1K? ¼ W......................... 4 buah
d) Resistor
330 ? ¼ W........................ 1 buah
e) IC 74LS541 + soket....................... 1 buah
f) Led ¼ W....................................... 1
buah
g) Conektor DB 25 pin........................ 1 buah
h) Conektor 6 pin............................... 2 buah
Gambar 8 . a. Layout PCB downloader
b. Tata letak
komponen
Keterangan Gambar
8.b:
a,b,c,d : Resistor 4K7? ¼ W e,f,g,h,q : Resistor 1K? ¼ W
i.j.k.l.m :
Resistor 100? ¼W q :
Resistor 330 ? ¼ W
n :
IC 74LS541 + soket
o,p : Conektor 6 pin
c.
d.
Prosedur Pembuatan
1)
Menyiapkan alat-alat yang akan digunakan
2)
Menggambar jalur
Teknik yang digunakan adalah teknik
sablon setrika. Langakah pertama adalah menggambar lay out PCB seperti pada
gambar 5a dan 7a. Gambar tersebut di foto kopi di kertas transparan (mika) dan
selanjutnya gambar disetrika di atas papan PCB sampai gambar tersebut menempel
di papan PCB. Pada saat akan melakukan setrika kita harus membersihkan papan
PCB terlebih dahulu agar gambar dapat menempel dengan sempurna
3)
Pelarutan Papan PCB
Gambar di papan PCB yang telah selesai
dibuat kemudian dilarutkan dengan cairan ferridclorida
(FhCl) untuk menghilangkan lapisan tembaga yang tidak tertutup gambar. Pada
saat melakukan pelarutan wadah yang digunakan harus selalu di goyang-goyang.
4) Pelubangan Papan PCB
Proses pelubangan adalah untuk membuat
tempat memasang komponen yang akan digunakan.
5)
Memasang Komponen ke Papan PCB
Pemasangan komponen harus sesuai dangan
tata letak yang telah ditentukan sebelumnya. Untuk lebih jelasnya dapat melihat
gambar 5b dan gambar 7b.
6) Menyolder
Untuk menghasilkan hasil solderan yang
baik sebaiknya menggunakan mata solder yang bersih dan lancip agar mempermudah
dalam penyolderan. Hasil solderan yang baik adalah lancip dan mengkilap.
7) Pemotongan Kaki Komponen
Pemotongan kaki komponen dilakukan
untuk meratakan kaki komponen agar menjadi rapi
A.
Pengujian
Berdasarkan sumber Ary Darmadji, majalah AutoBild tanggal
2-5 Agustus 2003 edisi 7-suplemen (
http://library.monx007) jarak aman
parkir adalah 1 meter terhadap pembatas parkir. Namun kali ini kita menentukan
sendiri jarak yang akan dibuat simulasi pengaman parkir sesuai keinginan.
misaalnya dengan membuat jarak aman 40cm untuk bagian belakang dan 30cm untuk
bagian depan. Tabel 2. Adalah hasil pengujian alat pengaman parkir
Tabel 2. hasil pengujian
alat pengaman parkir
Pengujian
Ke.
|
Depan (diharapkan
30cm)
|
Belakang(diharapkan
40cm)
|
Kanan
(cm)
|
Kiri
(cm)
|
Kanan
(cm)
|
Kiri
(cm)
|
1
|
31,0
|
30,6
|
41,2
|
41,2
|
2
|
30,8
|
30,8
|
41,2
|
41,3
|
3
|
30,8
|
30,7
|
41,3
|
41,3
|
4
|
30,8
|
30,8
|
41,2
|
41,2
|
5
|
30,8
|
30,6
|
41,1
|
41,2
|
6
|
30,6
|
30,8
|
41,2
|
41,2
|
7
|
30,6
|
30,7
|
41,0
|
41,2
|
8
|
30,8
|
30,8
|
41,2
|
41,2
|
9
|
31,0
|
30,8
|
41,3
|
41,2
|
10
|
30,8
|
30,8
|
41,3
|
41,2
|
jumlah
|
308
|
307,4
|
412
|
412,2
|
A.
Pembahasan
Berdasarkan hasil pengujian alat terjadi ketidak cocokan antara hasil
percobaan dengan hasil yang di inginkan, sehingga terjadi selisih antara harga sebenarnya dengan harga yang
ditunjukan. Setelah melakukan pengukuran sebanyak 10 kali maka akan di cari
nilai rata-rata dengan menggunakan persamaan sebagai berikut:
Dimana:
|
|
X
|
|
= nilai rata-rata hasil
pengukuran
|
X1, X2,
n
|
Xn
|
= hasil pengukuran yang dilakukan
= banyaknya pengukuran
|
Dengan menggunakan persamaan diatas dan
berdasarkan data pada table 2. Maka akan di dapatkan nilai rata-rata untuk tiap
sensornya
dan berikut adalah video simulasinya
E. KODINGAN
/********************************************* This
program was produced by the
CodeWizardAVR V1.24.0 Standard
Automatic
Program Generator
Chip type : ATmega8535
Program
type : Application Clock frequency : 12.000000 MHz Memory model :
Small External SRAM size : 0
Data Stack size : 128
*********************************************/
#include <mega8535.h>
#include <delay.h>
#define buzzer1 PORTC.0 #define buzzer2 PORTC.0 #define buzzer3 PORTC.0 #define buzzer4 PORTC.0
#define sw_4 PINC.4 #define sw_3 PINC.5 #define sw_2 PINC.6 #define sw_1 PINC.7
#define led_1 PORTA.1 #define led_2 PORTA.0 #define led_3 PORTA.6 #define led_4 PORTA.7
#define led_akt1 PORTA.2 #define led_akt2 PORTA.3 #define led_akt3 PORTA.5 #define led_akt4 PORTA.4
typedef unsigned int uint16_t;
unsigned int counter;
uint16_t US,tinggi;
//
Alphanumeric LCD Module functions
#asm
.equ lcd_port=0x18 #endasm
#include <lcd.h>
// Declare your global variables here
void sendData()
{
unsigned char Posisi;
tinggi=US;
Posisi=0; lcd_gotoxy(Posisi,0); lcd_putchar('j');
lcd_gotoxy(Posisi+1,0);
lcd_putchar('a');
lcd_gotoxy(Posisi+2,0);
lcd_putchar('r'); lcd_gotoxy(Posisi+3,0); lcd_putchar('a');
lcd_gotoxy(Posisi+4,0); lcd_putchar('k');
lcd_gotoxy(Posisi+5,0);
lcd_putchar(' '); lcd_gotoxy(Posisi+6,0); lcd_putchar('='); lcd_gotoxy(Posisi+7,0); lcd_putchar(' ');
lcd_gotoxy(Posisi+8,0);
lcd_putchar((tinggi/1000)%10 + 0x30 );
lcd_gotoxy(Posisi+9,0);
lcd_putchar((tinggi/100)%10 + 0x30 ); lcd_gotoxy(Posisi+10,0);
lcd_putchar((tinggi%100)/10 + 0x30 ); lcd_gotoxy(Posisi+11,0); lcd_putchar(','); lcd_gotoxy(Posisi+12,0); lcd_putchar((tinggi%10) + 0x30 ); lcd_gotoxy(Posisi+13,0);
lcd_putchar(' ');
lcd_gotoxy(Posisi+14,0);
lcd_putchar('c'); lcd_gotoxy(Posisi+15,0); lcd_putchar('m');
}
void menu
(void)
{
menu1:
if (!sw_1)
{
delay_ms(100);
goto pos1;
}
if (!sw_2)
{
delay_ms(100);
goto pos2;
}
if (!sw_3)
{
delay_ms(100);
goto pos3;
}
if (!sw_4)
{
delay_ms(100);
goto pos4;
}
goto
menu1; pos1:
led_1=1;
goto baca_sensor1;
goto pos1;
pos2: led_2=1;
goto baca_sensor2;
goto pos2;
pos3: led_3=1;
goto baca_sensor3;
goto pos3;
pos4: led_4=1;
goto baca_sensor4;
goto pos4;
baca_sensor1:
#define SIG_out PORTD.0 #define SIG_in PIND.0 #define SIG_dir DDRD.0 #define ready PIND.1
SIG_dir = 1; // set SIG pin as output
SIG_out = 0; //
delay_us(50); // send start pulse
SIG_out = 1; //
SIG_dir = 0; // set SIG pin as input
TCNT1=0;
counter=0;
while
(SIG_in && counter<30000) // wait for return pulse
counter++;
TCCR1B=0x02; // start timer (timer period = 2uS)
while ((!SIG_in)
&& !(TIFR&0x80)); //TIFRx80 :bit
overflow:bit ini tidak
// selalu
sama letaknya di setiap UC AVR
TCCR1B=0x00; // stop timer
US =
TCNT1; // save timer value to variable US
US = US/14; // convert to
milimeters
//sendData();
if
(US<=300){buzzer1=1;led_akt1=1;delay_ms(5000);buzzer1=0;led_akt1=0; delay_ms(5000);}
else {buzzer1=0;led_akt1=0;}
/////////////////////////
if (!sw_1)
{
delay_ms(100);
goto mati1;
}
if (!sw_2)
{
delay_ms(100);
goto pos2;
}
if (!sw_3)
{
delay_ms(100);
goto pos3;
}
if (!sw_4)
{
delay_ms(100);
goto pos4;
}
//////////////////////////
delay_ms(500);
goto baca_sensor1;
/************/
mati1: led_1=0;
led_akt1=0; menu();
goto mati1;
/************/
baca_sensor2:
#define SIG_out PORTD.2 #define SIG_in PIND.2 #define SIG_dir DDRD.2 #define ready PIND.3
SIG_dir = 1; // set SIG pin as output
SIG_out = 0; //
delay_us(50); // send start pulse
SIG_out = 1; //
SIG_dir = 0; // set SIG pin as input
TCNT1=0;
counter=0;
while
(SIG_in && counter<30000) // wait for return pulse
counter++;
TCCR1B=0x02; // start timer (timer period = 2uS)
while ((!SIG_in)
&& !(TIFR&0x80)); //TIFRx80 :bit
overflow:bit ini tidak
// selalu
sama letaknya di setiap UC AVR
TCCR1B=0x00; // stop timer
US =
TCNT1; // save timer value to variable US
US = US/14; // convert to
milimeters
//sendData();
if
(US<=300){buzzer2=1;led_akt2=1;delay_ms(5000);buzzer2=0;led_akt2=0; delay_ms(5000);}
else{buzzer2=0;led_akt2=0;}
////////////////////////////////////
if (!sw_1)
{
delay_ms(100);
goto pos1;
}
if (!sw_2)
{
delay_ms(100);
goto mati2;
}
if (!sw_3)
{
delay_ms(100);
goto pos3;
}
if (!sw_4)
{
delay_ms(100);
goto pos4;
}
////////////////////////////////////
delay_ms(500);
goto baca_sensor2;
/************/
mati2: led_2=0;
led_akt2=0; menu();
goto mati2;
/************/
baca_sensor3:
#define SIG_out PORTD.4 #define SIG_in PIND.4 #define SIG_dir DDRD.4 #define ready PIND.5
SIG_dir = 1; // set SIG pin as output
SIG_out = 0; //
delay_us(50); // send start pulsea /
SIG_out = 1; //
SIG_dir = 0; // set SIG pin as input
TCNT1=0;
counter=0;
while
(SIG_in && counter<30000) // wait for return pulse
counter++;
TCCR1B=0x02; // start timer (timer period = 2uS)
while ((!SIG_in)
&& !(TIFR&0x80)); //TIFRx80 :bit
overflow:bit ini tidak
// selalu
sama letaknya di setiap UC AVR
TCCR1B=0x00; // stop timer
US =
TCNT1; // save timer value to variable US
US = US/14; // convert to
milimeters
//sendData();
if
(US<=400){buzzer3=1;led_akt3=1;delay_ms(5000);buzzer3=0;led_akt3=0; delay_ms(5000);}
else {buzzer3=0;led_akt3=0;}
////////////////////////////
if (!sw_1)
{
delay_ms(100);
goto pos1;
}
if (!sw_2)
{
delay_ms(100);
goto pos2;
}
if (!sw_3)
{
delay_ms(100);
goto mati3;
}
if (!sw_4)
{
delay_ms(100);
goto pos4;
}
////////////////////////////
delay_ms(500);
goto
baca_sensor3;
/************/
mati3:
led_3=0; led_akt3=0; menu();
goto mati3;
/************/
baca_sensor4:
#define SIG_out PORTD.6 #define SIG_in PIND.6
#define SIG_dir DDRD.6 #define ready PIND.7
SIG_dir = 1; // set SIG pin as output
SIG_out = 0; //
delay_us(50); // send start pulse
SIG_out = 1; //
SIG_dir = 0; // set SIG pin as input
TCNT1=0;
counter=0;
while
(SIG_in && counter<30000) // wait for return pulse
counter++;
TCCR1B=0x02; // start timer (timer period = 2uS)
while ((!SIG_in)
&& !(TIFR&0x80)); //TIFRx80 :bit
overflow:bit ini tidak
// selalu
sama letaknya di setiap UC AVR
TCCR1B=0x00; // stop timer
US =
TCNT1; // save timer value to variable US
US = US/14; // convert to
milimeters
//sendData();
if
(US<=400){buzzer4=1;led_akt4=1;delay_ms(5000);buzzer4=0;led_akt4=0; delay_ms(5000);}
else {buzzer4=0;led_akt4=0;}
//////////////////////////////////
if (!sw_1)
{
delay_ms(100);
goto pos1;
}
if (!sw_2)
{
delay_ms(100);
goto pos2;
}
if (!sw_3)
{
delay_ms(100);
goto pos3;
}
if (!sw_4)
{
delay_ms(100);
goto mati4;
}
//////////////////////////////////
delay_ms(500);
goto baca_sensor4;
/************/
mati4:
led_4=0; led_akt4=0; menu();
goto mati4;
/************/
}
void main(void)
{
// Declare
your local variables here
//
Input/Output Ports initialization
// Port A
initialization
PORTA=0x00; DDRA=0xFF;
// Port B
initialization
PORTB=0x00; DDRB=0x00;
// Port C
initialization
PORTC=0xF0; DDRC=0x01;
// Port D
initialization
PORTD=0xBF; DDRD=0x55;
//
Timer/Counter 0 initialization
// Clock
source: System Clock
// Clock
value: Timer 0 Stopped
// Mode:
Normal top=FFh
// OC0
output: Disconnected
TCCR0=0x00;
TCNT0=0x00; OCR0=0x00;
//
Timer/Counter 1 initialization
// Clock
source: System Clock
// Clock
value: Timer 1 Stopped
// Mode:
Normal top=FFFFh
// OC1A
output: Discon.
// OC1B
output: Discon.
// Noise
Canceler: Off
// Input
Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00; TCNT1H=0x00;
TCNT1L=0x00; OCR1AH=0x00;
OCR1AL=0x00; OCR1BH=0x00;
OCR1BL=0x00;
//
Timer/Counter 2 initialization
// Clock
source: System Clock
// Clock
value: Timer 2 Stopped
// Mode:
Normal top=FFh
// 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;
// Analog
Comparator initialization
// Analog
Comparator: Off
// Analog
Comparator Input Capture by Timer/Counter 1: Off
// Analog
Comparator Output: Off
ACSR=0x80; SFIOR=0x00;
// LCD
module initialization
lcd_init(16);
led_1=0; led_2=0;
led_3=0; led_4=0;
menu();
while (1)
{
// Place
your code here
};
}
DAFTAR PUSTAKA
Arikunto, Suharsimi.
2002. Dasar – dasar evaluasi pendidikan. Jakarta : PT. RinekaCipto.
Bejo, Agus. 2008. C&AVR Rahasia Kemudahan Bahasa C dalam
Mikokontroler ATMega8535. Yogyakarta : GRAHA ILMU.
Budiharto, Widodo. 2007. Panduan Praktikum Mikrokontroler AVR ATMega16. Jakarta
: PT. Elex Media Komputindo.
Sugiharto, Agus.
2002. Penerapan Dasar Tranduser Dan Sensor. Yogyakarta : Kanisius.