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
Ijin Coba Gan... sangat bermanfaat, Thanks
ReplyDelete