Translate

Membuat Alat Pendeteksi Warna dan Jarak

Membuat Alat Pendeteksi Warna dan Jarak



                Pada kesempatan kali ini akan dibahas mengenai bagaimana cara membuat alat dengan kombinasi dua sensor yaitu sensor TCS3200 dan HC-SRF04, sensor TCS3200 yaitu sensor warna yang menggunakan frekuensi sebagai outputnya, sehingga mengaksesnya menggunakan timer, kemudian sensor HC-SRF04 yaitu sensor jarak yang menggunakan ultrasonic, output dari sensor ini adalah lebar pulsa, pada alat ini timer 1 dan timer 0 digunakan semua, timer 0 untuk sensor HC-SRF04 dan timer 1 untuk sensor TCS3200.

1. Minimum Sytem





2. Sensor TCS3200



3. Sensor HC-SRF04



4. Program Bascom AVR

 $regfile = "m32def.dat"
$crystal = 11059200
$baud = 9600

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

Config Timer0 = Timer , Prescale = 256


Cursor Off
' **** inisialisasi penggunaan pin pada sensor warna
Config Portc = Output
Config Portd.6 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Config Portd.7 = Input
Portd.7 = 1
Outhz Alias Pind.7
S2 Alias Portd.6
S3 Alias Portd.2
S0 Alias Portd.3
S1 Alias Portd.4
Oe Alias Portd.5

Config Portb.0 = Output
Config Pinb.1 = Input

'*** inisialisasi frequensi
Dim Tanda1detik As Bit
Dim Frequensi As Word
Dim Fmerah As Word
Dim Fhijau As Word
Dim Fbiru As Word
Dim Fputih As Word

Portc = 255
' inisialisasi penggunaan timer 1/4 detik untuk penghitung frekuensi
Config Timer1 = Timer , Prescale = 256
Const Inisial = &HAE80                                      '5740
On Timer1 Timer1_isr                                        ' timer0 overflow interrupt
Tcnt1l = Low(inisial)
Tcnt1h = High(inisial)
Disable Timer1                                              ' aktifkan timer enable Ovf0
Enable Interrupts                                           ' aktifkan semua interup

S0 = 0
S1 = 1

Oe = 0

Declare Sub Cek_jarak

Dim Data_jarak As Word
Dim Data_jarak_olah As Word
Dim Data_jarak_fix As Word



Triger1 Alias Portb.0
Pecho1 Alias Pinb.1


Do
Cls

'*** deteksi putih
S2 = 1
S3 = 0
Frequensi = 0
Tanda1detik = 0
Tcnt1l = Low(inisial)
Tcnt1h = High(inisial)
Enable Timer1
Do
Bitwait Outhz , Set
Bitwait Outhz , Reset
Loop Until Tanda1detik = 1
Disable Timer1                                              ' aktifkan timer enable Ovf0

'*** deteksi putih
S2 = 1
S3 = 0
Frequensi = 0
Tanda1detik = 0
Tcnt1l = Low(inisial)
Tcnt1h = High(inisial)
Enable Timer1
Do
Bitwait Outhz , Set
Bitwait Outhz , Reset
Frequensi = Frequensi + 1
Loop Until Tanda1detik = 1
Disable Timer1                                              ' aktifkan timer enable Ovf0
Fputih = Frequensi

'*** deteksi merah
S2 = 0
S3 = 0
Frequensi = 0
Tanda1detik = 0
Tcnt1l = Low(inisial)
Tcnt1h = High(inisial)
Enable Timer1
Do
Bitwait Outhz , Set
Bitwait Outhz , Reset
Frequensi = Frequensi + 1
Loop Until Tanda1detik = 1
Disable Timer1                                              ' aktifkan timer enable Ovf0
Fmerah = Frequensi

'*** deteksi biru
S2 = 0
S3 = 1
Frequensi = 0
Tanda1detik = 0
Tcnt1l = Low(inisial)
Tcnt1h = High(inisial)
Enable Timer1
Do
Bitwait Outhz , Set
Bitwait Outhz , Reset
Frequensi = Frequensi + 1
Loop Until Tanda1detik = 1
Disable Timer1                                              ' aktifkan timer enable Ovf0
Fbiru = Frequensi

'*** deteksi hijau
S2 = 1
S3 = 1
Frequensi = 0
Tanda1detik = 0
Tcnt1l = Low(inisial)
Tcnt1h = High(inisial)
Enable Timer1
Do
Bitwait Outhz , Set
Bitwait Outhz , Reset
Frequensi = Frequensi + 1
Loop Until Tanda1detik = 1
Disable Timer1                                              ' aktifkan timer enable Ovf0
Fhijau = Frequensi


Call Cek_jarak
  Data_jarak = Data_jarak
  Data_jarak_olah = Data_jarak * 100
  Data_jarak_fix = Data_jarak_olah / 256

Cls
Cursor Off

Lowerline
Lcd "jarak = " ; Data_jarak_fix ; " cm "

Print Data_jarak_fix
Print Fmerah
Print Fbiru
Print Fhijau

'Lcd " R B G W "
'Locate 2 , 1
'Lcd Fmerah ; " "
'Locate 2 , 5
'Lcd Fbiru ; " "
'Locate 2 , 9
'Lcd Fhijau ; " "
'Locate 2 , 13
'Lcd Fputih ; " "

Locate 1 , 1
'*** Pengujian Bandingkan warna kuning
If Fmerah > 551 And Fmerah < 630 Then
If Fbiru > 221 And Fbiru < 300 Then
If Fhijau > 351 And Fhijau < 450 Then
Lcd "Warna kuning"
End If
End If
End If

If Fmerah > 201 And Fmerah < 320 Then
If Fbiru > 161 And Fbiru < 220 Then
If Fhijau > 251 And Fhijau < 295 Then
Lcd "Warna hijau"
End If
End If
End If

If Fmerah > 1000 And Fmerah < 1400 Then
If Fbiru > 450 And Fbiru < 550 Then
If Fhijau > 450 And Fhijau < 550 Then
Lcd "Warna merah"
End If
End If
End If

If Fmerah > 750 And Fmerah < 850 Then
If Fbiru > 380 And Fbiru < 459 Then
If Fhijau > 200 And Fhijau < 250 Then
Lcd "Warna Pink"
End If
End If
End If

If Fmerah > 750 And Fmerah < 850 Then
If Fbiru > 800 And Fbiru < 900 Then
If Fhijau > 700 And Fhijau < 800 Then
Lcd "Warna biru"
End If
End If
End If

If Fmerah > 40 And Fmerah < 80 Then
If Fbiru > 40 And Fbiru < 80 Then
If Fhijau > 30 And Fhijau < 80 Then
Lcd "Warna hitam"
End If
End If
End If

If Fmerah > 450 And Fmerah < 550 Then
If Fbiru > 650 And Fbiru < 730 Then
If Fhijau > 451 And Fhijau < 550 Then
Lcd "Warna putih"
End If
End If
End If

Wait 1
Loop


Sub Cek_jarak:
Reset Triger1
Waitus 10
Set Triger1
Waitus 20
Reset Triger1

Tcnt0 = 0
Bitwait Pecho1 , Set
Start Timer0

Do
If Pecho1 = 0 Then
Data_jarak = Tcnt0
Stop Timer0
Exit Do
End If

If Tifr.0 = 1 Then
Stop Timer0
Tifr.0 = 1
Data_jarak = &HFF
Exit Do
End If
Loop
Stop Timer0
Waitms 15
End Sub


Timer1_isr:                                                 ' untuk 1 kali interupsi/detik
Tcnt1l = Low(inisial)                                       ' inisialisasi spt ini
Tcnt1h = High(inisial)
Tanda1detik = 1
Toggle Portc.0
Return

End







 

1 comment: