A B C D

My Stats

Sabtu, 03 Maret 2012

Digital Stopwatch

Akhirnya setelah lama ga posting di blog saya niatkan hari ini untuk posting lagi,, :D
yang akan saya bahas adalah, digital stop watch, menggunakan ATMEGA 32 , LCD 16*2.


Seperti biasa, kode pemrograman di tulis dalam bahasa basic dan di compile, kemudian hasil dari copiler tersebut (hex Code) di inputkan ke dalam proteus simulator,

konfigurasi rangkaian nya seperti gambar di bawah ini,
Kode Pemrograman :

'===============================================================================
'Program : Digital Stopwatch using M32 and LCD display 16*2 Monochrome
'Date : 03-March-2012
'Size : 9% of M32 Capacity flash ROM
'Requested : Dewi Nurazizah S (Budak baong minta program)
'Uploaded : 03-March-2012
'===============================================================================
'Micro chip declaration=========================================================
$regfile = "m32def.dat"
$crystal = 12000000

'port I/O Configuration=========================================================
Config Porta = Input
Config Portc = Output 'used as LCD output

Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.0 , Rs = Portc.1
Config Lcd = 16 * 2

'Dimension variable and Constant================================================
Dim Lap As Byte
Dim Perdetik As Byte
Dim Detik As Byte
Dim Menit As Byte
Dim Jam As Byte
Dim Stopwatch As String * 11
Dim Perdetik$ As String * 2
Dim Detik$ As String * 2
Dim Menit$ As String * 2
Dim Jam$ As String * 2
Dim Lap$ As String * 2
Dim Huruf As String * 1
Dim Eja As Byte
Dim I As Byte
Dim Lap_mem As Byte

Const Delay_huruf = 100 'Please adjust this number for delay
Const Delay_counter = 100 'please adjust this number for delay counter

Dim Text(2) As String * 16

Text(1) = " Stop Watch "
Text(2) = "Dewi Nurazizah S"

'Aliasing pin with real name====================================================
Mulai Alias Pina.0
Tambah Alias Pina.1
Kurang Alias Pina.2
'Berhenti Alias Pina.3
Reset_pin Alias Pina.4

'Setting value==================================================================
Perdetik$ = "00"
Detik$ = "00"
Menit$ = "00"
Jam$ = "00"
Lap$ = "00"

Perdetik = 0
Detik = 0
Menit = 0
Jam = 0
Lap = 0

Cursor Off
Cursor Noblink
Cls
'Fisrt Subroutine ==============================================================
Gosub Welcome

Cursor Off
Cursor Noblink
Cls

'Reset Display =================================================================
Reset_sub:
Locate 1 , 1
Lcd "Time:"
Locate 1 , 12
Lcd "|Lap:"
Locate 2 , 12
Lcd "| 00"
Stopwatch = Jam$ + ":" + Menit$ + ":" + Detik$ + ":" + Perdetik$
Locate 2 , 1
Waitms 10
Lcd Stopwatch
Waitms 10

'Setting Input for Laps Number==================================================
While Mulai = 1 Or Lap = 0 'it will stays looping as long as the laps number is zero
If Tambah = 0 And Kurang = 1 Then
Incr Lap
Lap$ = Str(lap)
If Lap < 10 Then
Locate 2 , 15
Lcd "0" ; Lap$
Else
Locate 2 , 15
Lcd Lap$
End If
Waitms 100 'adjust this number compared with actual counter (example: watch)
Elseif Tambah = 1 And Kurang = 0 Then
Decr Lap
Lap$ = Str(lap)
If Lap < 10 Then
Locate 2 , 15
Lcd "0" ; Lap$
Else
Locate 2 , 15
Lcd Lap$
End If
Waitms 100
End If

If Mulai = 0 And Lap = 0 Then
For I = 1 To 3
Cls
Waitms 100
Locate 1 , 1
Lcd "..Please Enter.."
Locate 2 , 1
Lcd "..Laps Number..."
Waitms 300
Next 1
Cls
Locate 1 , 1
Lcd "Time:"
Locate 1 , 12
Lcd "|Lap:"
Locate 2 , 12
Lcd "| 00"
Stopwatch = Jam$ + ":" + Menit$ + ":" + Detik$ + ":" + Perdetik$
Locate 2 , 1
Waitms 10
Lcd Stopwatch
Waitms 10
End If

Wend

Lap_mem = Lap
Lap = 0
Locate 2 , 15
Lcd "00"

'Interrupts Enabling for Laps detector (infra red sensor) and Stop Button=======
Enable Interrupts
Enable Int0
Enable Int1
Config Int0 = Falling
Config Int1 = Falling
On Int0 Tulis
On Int1 Selesai

'Main Program =================================================================
Do
Locate 2 , 1
Lcd Jam$
While Jam < 100
Locate 2 , 4
Lcd Menit$
While Menit < 60
Locate 2 , 7
Lcd Detik$
While Detik < 60
Locate 2 , 10
Lcd Perdetik$
While Perdetik < 100
Perdetik$ = Str(perdetik)
If Perdetik < 10 Then
Locate 2 , 11
Lcd Perdetik$
Else
Locate 2 , 10
Lcd Perdetik$
End If
Waitms 1
Incr Perdetik
Wend
Incr Detik
Perdetik = 0
Perdetik$ = "00"
Detik$ = Str(detik)
If Detik < 10 Then
Locate 2 , 8
Lcd Detik$
Else
Locate 2 , 7
Lcd Detik$
End If
Wend
Incr Menit
Detik = 0
Detik$ = "00"
Menit$ = Str(menit)
If Menit < 10 Then
Locate 2 , 5
Lcd Menit$
Else
Locate 2 , 4
Lcd Menit$
End If
Wend
Incr Jam
Menit = 0
Menit$ = "00"
Jam$ = Str(jam)
If Jam < 10 Then
Locate 2 , 2
Lcd Jam$
Else
Locate 2 , 1
Lcd Jam$
End If
Wend

Loop

End 'end program

'Sub Routine ===================================================================
Tulis:
Incr Lap
Lap$ = Str(lap)
If Lap < 10 Then
Locate 2 , 16
Lcd Lap$
Else
Locate 2 , 15
Lcd Lap$
End If
If Lap = Lap_mem Then
Goto Selesai
End If
Return

Welcome:
Locate 1 , 1
For I = 1 To 16
Huruf = Mid(text(1) , I , 1)
Lcd Huruf
Waitms Delay_huruf
Next I
Locate 2 , 1
For I = 1 To 16
Huruf = Mid(text(2) , I , 1)
Lcd Huruf
Waitms Delay_huruf
Next I
Wait 2
Return

Selesai:
Locate 1 , 1
Lcd "Total :"
Waitms 10
While Reset_pin = 1
Perdetik$ = "00"
Detik$ = "00"
Menit$ = "00"
Jam$ = "00"
Lap$ = "00"

Perdetik = 0
Detik = 0
Menit = 0
Jam = 0
Lap = 0
Wend
Goto Reset_sub

Ide pemrograman :
Smua data di pipsahkan menjadi 4 bagian,
1. perdetik (menghitung detik di bagi dalam 100 hitungan)
2. detik
3. menit
4. jam

karena rangkaian ini tidak menggunakan external clock source untuk meghitung delay waktunya, maka semua penghitungan "perdetik" membebankan counter / clock internal dari mikro tersebut. yang di hasilkan oleh crystal dengan frequency 12 MHz,
maka dari itulah, kita tidak bisa menuliskan 1ms utuk delay yang sebenarnya selama 1 mili second. tapi ya kita harus mencoba dengan cara mencocokan dengan nilai 1 detik yang sebenarnya dengan cara mengatur jumlah delay yang ada pada tiap siklus "perdetik" got it? :D

pada awal memulai program akan ada welcome text yang di tampilkan di LCD, ini hanya pemanis sekaligus eksistensi diri saat tugas di kumpulkan hehehe..


Note: nama saya Bukan Dewi ya.. -_____-" itu nama adek kelas yang "minta tolong" di bikinin program nya..

oke, nanuts.. alias lanjut!

setelah welcome text display akan di reset dan masuk ke mode standby penghitungan, apaila langsung di tekan "start" button, akan keluar kode error :



itu disebabkan karna jumlah lap yang akan di lalui belum di tentukan,
jadi,, isilah terlebih dahulu jumlah lap nya, kemudian start..

saat Laps yang di tentukan sudah di lalui, maka stopwatch ini akan berhenti secara otomatis dan menunjukan total waktu yang terhitung dari mulai Lap-1 sampai lap terakhir.



bagi yang ingin mendownload full dokumen nya,

klik Disini

Continue reading...

Rabu, 22 Juni 2011

Alat Pengukur Jarak Tempuh

ini posting saya yang ke 2 di bulan ini, hehe.. biasa lah orang sibuk *sok :).
kali ini saya akan membahas mengnai alat pengukur jarak. sistem ini banyak digunakan di berbagai aplikasi. salah satunya adalah speedometer. beberapa informasi yang didapat yaitu :
1. jarak yang telah ditempuh
2. kecepatan.

Sensor
Sensor yang digunakan pada alat ini adalah photo dioda, dengan pronsip pemantulan cahaya antara permukaan hitam dan putih pada sebuah bidang yang di putar, maka sensor ini memberikan sinyal informasi.




rangkaian diatas adalah rangkaian dari sensor encoder yang banyak di jual di pasaran. 2 sinyal dari pin A dan B adalah sinyal output sensor, pada alat kali ini hanya akan digunakan satu pin input. karena fungsi lain penggunaan pin A dan B adalah untuk mendapatkan informasi arah putar.

secara mekanikal, penempatan sensor ada pada gambar di bawah ini.
w


output dari sensor ini adalah kombinasi pulsa On dan OFF saat photo dioda dihadapkan pada permukaan yang berbeda warna, yaitu hitam dan putih. jumlah pola hitam dan putih ini dapat diatur tergantung dengan kebutuhan pengguna, salah satu pertimbangannya adalah resolusi alat.
contoh :
keliling Roda = 30 inch
jumlah pola = 300
maka resolusi = 30 / 300 = 0.1 inch

artinya, pengukuran jarak terkecil yang dapat di baca oleh alat ini adalah 0,1 inch. jadi apabila roda berputar kurang dari 0.1 inch, maka jarak tidak dapat diukur.

gambar di bawah adalah output pulsa yang dihasilkan apabila roda diputar dengan kecepatan konstan. sinyal inilah yang akan dijadikan input ke mikrokontroler.


alat pendukung lain yang dibutuhkan :
1. LCD character 16*2
2. Sistem minimum
3. sensor

diagram interkoneksi ada pada gambar dibawah :



push button pada rangkaian diatas adalah push button simulasi yang mensimulasikan sinyal On Of dari encoder.

Pemrograman :

'======================Deklarasi Chip
$regfile = "m32def.dat"
$crystal = 12000000

'satu putaran ada 300 sinyal
'jarak 1 sinyal ke sinyal yang lain 0.1 inch
'satu keliling = 30 inch
'============================= konfigurasi Lcd
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , Rs = Portc.0 , E = Portc.1
Config Lcd = 16 * 2

'============================== konfigurasi input dan output
Config Portc = Output

'=============================== aktifasi interrupt
Config Int0 = Falling
Enable Int0
Enable Interrupts
On Int0 Hitung

Dim Jumlah_signal As Byte
Dim Jarak As Single
Cursor Off
Cursor Noblink
Cls

Jumlah_signal = 0

Do
Locate 1 , 1
Lcd "jarak Tempuh :"
Locate 2 , 1
Lcd Fusing(jarak , "#.##") ; " inch "
Waitms 10
Loop
End

'=================================== subroutine interrupt
Hitung:
Jumlah_signal = Jumlah_signal + 1
Jarak = 0.1 * Jumlah_signal
Return

ide pemrograman :
pin interrupt akan membaca sinyal input dengan mode falling artinya sinyal yang akan di baca adalah edge trigger positive atau sinyal transisi dari 1 ke 0.
jumlah sinyal yang masuk akan terus di baca dan dihitung.
setiap loop jumlah sinyal tersebut dikalikan dengan resolusi yaitu

jarak = jumlah sinyal yang terbaca * 0.1 inch

download full project disini



Continue reading...

Selasa, 21 Juni 2011

Thermometer Digital 4 Units

posting saya kali ini adalah mengenai thermometer digital, banyak sensor / transduser yang dapat digunakan pada project kali ini, diantarnya, LM35, RTD, dll. pemilihan sensor suhu tersebut tergantung pada aplikasinya, beberapa pertibangannya adalah :

1. Range
2. Linearity
3. Resolusi
4. Kecepatan respon

gambar dibawah adalah rangkaian simulasi untuk menguji program. terdiri dari 1 unit ATMega 16, crystal 12MHz , LCD 16*2, 4 Push Button yang mewakili 4 satuan suhu yaitu : celcius, Kelvin, Reamur, Fahrenheit.



Potensiometer linear yang di pasang pada porta.0 adalah simulasi output dari pengondisi sinyal transducer. karena reference yang di gunakan adalah AVCC yang berarti nilai maksimum adalah +5V, maka nilai tegangan maksimum yang dapat dijadikan input porta.0 adalah 0 sampai +5V. porta.0 adalah port input untuk ADC (Analog to Digital Converter)

Coding untuk thermometer digital :

$regfile = "m16def.dat"
$crystal = 12000000

Config Porta = Input
Config Portc = Output

Config Adc = Single , Prescaler = Auto , Reference = Avcc

Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.0 , Rs = Portc.1
Config Lcd = 16 * 2

C Alias Pina.1
K Alias Pina.3
R Alias Pina.5
F Alias Pina.7

Dim Nilai As Integer
Dim Kode As Byte
Dim Suhu As Single

'kode 0 = celcius
'kode 1 = Kelvin
'Kode 2 = Reamur
'kode 3 = Fahrenheit


Cls
Cursor Off
Cursor Noblink

Start Adc
Do
Nilai = Getadc(0)
'asumsi nilai ADC 0-1023 ==> suhu dari 0-100 celcius
'nanti kalau kurang cocok diatur lagi gain nya,

Suhu = Nilai / 1023
Suhu = Suhu * 100

If Pina.1 = 0 Then
Kode = 0
Elseif Pina.3 = 0 Then
Kode = 1
Elseif Pina.5 = 0 Then
Kode = 2
Elseif Pina.7 = 0 Then
Kode = 3
End If

If Kode = 0 Then
Locate 1 , 1
Lcd "Celcius "
Locate 2 , 1
Lcd "Suhu = " ; Fusing(suhu , "#.##") ; "'C "
Waitms 10
Elseif Kode = 1 Then
Locate 1 , 1
Lcd "Kelvin "
Locate 2 , 1
Suhu = Suhu + 237.15
Lcd "Suhu = " ; Fusing(suhu , "#.##") ; "'K "
Waitms 10
Elseif Kode = 2 Then
Locate 1 , 1
Lcd "Reamur "
Locate 2 , 1
Suhu = Suhu * 0.8
Lcd "Suhu = " ; Fusing(suhu , "#.##") ; "'R "
Waitms 10
Elseif Kode = 3 Then
Locate 1 , 1
Lcd "Fahrenheit "
Locate 2 , 1
Suhu = Suhu * 1.8
Suhu = Suhu + 32
Lcd "Suhu = " ; Fusing(suhu , "#.##") ; "'F "
Waitms 10
End If
Loop
End

ide pemrograman :

dalam coding di atas, saya mengasumsikan bahwa nilai ADC 0 - 1023 mewakili pembacaan suhu dari 0 celcius - 100 celcius. maka rumus dasar menjadi

suhu = (nilai ADC (yang terbaca) / 1023) * 100

contoh :
nilai ADC yang terbaca 500
maka suhu yang terbaca adalah = 48.87 Celcius

semua pengukuran di ubah ke dalam satuan celcius,
setelah itu apabila ada push button yang di aktifkan (celcius,Kelvin,Reamur,Fahrenheit) maka kode satuan akan memiliki nilai sesuai dengan jenis satuan yang dipilih. pada pemrograman kali ini saya kodekan menjadi :

'kode 0 = celcius
'kode 1 = Kelvin
'Kode 2 = Reamur
'kode 3 = Fahrenheit

proses konversi satuan menggunakan rumus :

Celcius ==> Kelvin = Celcius + 237.15
Celcius ==> Reamur = Celcius * 0.8
Celcius ==> Fahrenheit = ( Celcius * 1.8 ) + 32

download project dan simulasi disini



Continue reading...

Rabu, 09 Maret 2011

Alat Pengukur Tinggi Badan

Sensor ultrasonic banyak digunakan di berbagai perangkat pengukur jarak. sebagai contoh di dunia robotika sensor ini digunakan sebagai indra utama untuk navigasi robot. sebagai contoh tipe ultra sonic yang banyak digunakan adalah tipe SRF, dan PING
pada perinsipnya sensor jarak ultra sonic menggunakan prinsip kerja yang sama, yaitu pngirim sinyal dan penerima sinyal (transmitter and receiver). sensor ini bekerja pada frequency 40 Khz.

seperti yang telah di jelaskan bahwa sensor ultra sonic memiliki transmitter dan receiver. transmitter memancarkan gelombang suara dengan frekwensi 40KHz. gelombang tersebut akan mengarah pada sebuah objek di depan sensor dan kemudian di pantulkan kembali ke receiver.

Transmitter ultrasonic memancarkan gelombang suara setelah diinputkan firing pulse (pulsa trigger) dengan periode tertentu. berdasarkan datasheet, untuk sensor ultra sonic tipe SRF-04 dibutuhkan firing pulse dengan periode = 10us.

alat pengukur tinggi badan adalah salah satu alat yang pernah dirancang dan di realisasikan pembuatannya. ide dasar sistem kerja alat tersebut ada pada gambar dibawah:


sebagai contoh sensor di posisikan di atas kepala dengan ketinggian 200 cm / 2 meter. maka jarak yang akan terbaca (d) oleh sensor, merupakan nilai pengurang untuk mendapatkan tinggi badan:

tinggi badan = 200 cm - jarak terbaca (d).

Komponen yang digunakan untuk membuat alat ini :
Ultra Sonic SRF-04
LCD 16*2
Sistem Minimum ATMega 8535/16/32

Gambar dibawah adalah diagram Koneksi Alat pengukur tinggi badan.


download document (source code, DSN file dan Datasheet) disini
Continue reading...

Selasa, 28 September 2010

Prinsip kerja motor servo standard dan motor servo continous

Tadi pagi ada teman saya mampir ke kostan. dia nanya-nanya tentang prinsip kerja servo dan programnya. katanya sih untuk persiapan test kerja, coz beberapa syaratnya mengetahui kerja servo dan PLC. untuk itulah saya ingin share sedikit pengetahuan yang saya punya tentang servo, yang saya dapatkan sewaktu kuliah.



Apa itu motor servo???

Motor servo adalah sebuah motor dengan sistem closed feedback di mana posisi dari motor akan diinformasikan kembali ke rangkaian kontrol yang ada di dalam motor servo. Motor ini terdiri dari motor dc, rangkaian gear , potensio meter dan rangkaian kontrol.


Untuk mengoperasikannya yaitu dengan memberikan Pulsa digital tertentu pada motor ini. secara teori, gambar lebar pulsa di bawah ini merupakan pulsa pengatur sudut servo standard.


Pada dasarnya penggunaan servo itu menggunakan cara yang sama (yaitu dengan memberikan lebar pulsa tertentu). hanya salah satu perbedaannya yaitu pada sudut putarnya. untuk servo standard, sudut putarnya adalah 180 derajat yang dapat dioperasikan dalam dua arah (clock wise / counter clock wise). Gambar diatas adalah lebar pulsa yang dibutuhkan untuk mengoperasikan motor servo standard. pulsa diatas harus diberikan secara terus menerus, agar motor servo mempertahankan posisinya sesuai dengan pulsa yang diberikan

'##################

Sedangkan untuk jenis servo continous putaran yang dapat dilakukan adalah 360 derajat. untuk mengatur arah putarannya yaitu dengan membedakan lebar pulsa saat kondisi ON (logic "1") sepeti gambar di bawah ini.


'Contoh Program:
$regfile = "m8535.dat"
$crystal=12000000

config porta= output

do
porta.1=1 <---- mengeluarkan logic "1"
waitms 1 <---- waktu dapat diubah sesuai dengan timing diagram yang di butuhkan
porta.1=0 <---- Mengeluarkan logic "0"
waitms 19
loop
end

Continue reading...
 

Followers

Link Exchange

<a href="http://benfanyprojects.blogspot.com/" target="_blank">Benfany's project</a>