Translate

Cara Mengakses Dust Sensor GP2Y1010A Bascom AVR

Cara Mengakses Dust Sensor GP2Y1010A Bascom AVR


          Pada kesempatan kali ini akan dibahs mengenai bagaimana cara mengakses sensor debu atau dust sensor yang bernama GP2Y1010A, sensor ini sangatlah bagus untuk mendeteksi partikel kecil seperti debu, partikel rokok atau yang lainnya, sensor ini bekerja dengan menggunakan sebuah detektor yang mana detektor tersebut telah dilengkapi dengan amplifier sehingga tegangan keluaran dari sensor ini cukup bisa dibaca, range pengukuran yaitu 0 volt sampai 3,75 volt. berikut adalah penjelasan tentang skematik dan programnya.


1. Minimum System ATMega8



2. Cara Mengakses dan Meng-koneksikan ke mikrokontroller



 



3. Cara konversi tegangan ke dust density

- Masukkan nilai dari grafik diatas sehingga seperti pada tabel berikut.

     volt    dust density ( mg / m3 )
0.8 0
1.1 0.05
1.4 0.1
1.6 0.17
2.2 0.23
2.5 0.28
2.8 0.34
3.4 0.39
3.5 0.45
3.75 0.54

 - Kemudian pilih persamaan garis liniear dan akan didapatkan rumusnya





 4. Program Bascom AVR

$regfile = "m8def.dat"
$crystal = 8000000

Config Lcdpin = Pin , Rs = Portd.6 , E = Portd.4 , Db4 = Portb.1
Config Lcdpin = Pin , Db5 = Portb.2 , Db6 = Portd.2 , Db7 = Portd.3
Config Lcd = 16 * 2

Config Adc = Single , Prescaler = 64 , Reference = Avcc
Config Single = Scientific , Digits = 2

Dim Dataadc As Word
Dim V1 As Single
Dim V2 As Single
Dim Vol As String * 5
Dim Dustval As Single

Ddrb.0 = 1
Portb.0 = 1

Cls
Cursor Off

Start Adc

Do

'aktif low
'GP2Y1010AU0F_SAMPLEDELAY should be 280us to perform the correct reading
'this delay should consider that ADC conversion takes 13 ADC clock cycles
'ADCtime(s) = (1/ADCclock)*13 = (1/FCPU/ADCprescaler)*13
' es (1/(8000000/64))*13 = 0.000104s = 104us
'so to perform reading at correct time
'280 - (1/FCPU/ADCprescaler)*13*1000000   , 1000000 is the conversion factor from s to us
' es. 280 - 104 = 176

Portb.0 = 0                                                 'on
Waitus 176

Dataadc = Getadc(0)
Waitus 40

Portb.0 = 1                                                 'off
Waitus 9680

V1 = Dataadc * 5
V2 = V1 / 1023
Vol = Fusing(v2 , "#.##")

'y = 0.166x - 0.129

Dustval = V2 * 0.166
Dustval = Dustval - 0.129

If V2 < 0.8 Then
Dustval = 0
Elseif V2 > 3.6 Then
Dustval = 0.5
End If

Lowerline
Lcd "Dust= " ; Dustval ; " mg/m3 "

Upperline
Lcd "VOLT= " ; Vol
Waitms 80

Loop




5. Video Hasilnya









Membuat Jam Digital RTC 7Segment Bascom avr

Membuat Jam Digital RTC 7Segment Bascom avr

    


        Pada kesempatan kali ini akan dibahs mengenai bagaimana cara membuat jam digital sendiri dengan interface 7 segment, sebenarnya membuat alat ini tidaklah sulit namun memerlukan ketelitian dalam menyolder karena banyaknya jumper pada pcb, alat ini menggunakan RTC Ds1307 yang berfungsi agar saat mikrokontroller tidak diberi supply, jam digital masih menyala, sehingga saat dihidupkan kembali dengan memberikan vcc pada mikrokontroller jam yang tertera telah up to date atau waktu sekarang, berikut adalah skematik dan programnya.

1. Minimum System ATMega8

 

2. Skematik 7Segment Interface



3. Program Bascom AVR

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

Config Sda = Portc.4
Config Scl = Portc.5

Const Ds1307w = &HD0
Const Ds1307r = &HD1

Dim _sec As Byte
Dim _min As Byte
Dim _hour As Byte
Dim _day As Byte
Dim _month As Byte
Dim _year As Byte
Dim _weekday As Byte

Dim Sa(3) As String * 2
Dim Sb(3) As String * 2

Declare Sub Getdatetime
Declare Sub Settime
Declare Sub Getsec
Declare Sub Disptime
Declare Sub Dispdate
Declare Sub Format_00
Declare Sub Setdate
Declare Sub Subset

Dim I As Byte
Dim Flagset As Bit                                          '0 = Waktu, 1 = Tanggal
Dim Flagreset As Bit
Dim Line1 As String * 1

Dim Weekday As Byte
Dim Jam_puluhan As Integer
Dim Jam_satuan As Integer
Dim Min_puluhan As Integer
Dim Min_satuan As Integer
Dim Sec_puluhan As Integer
Dim Sec_satuan As Integer

Dataout Alias Portd.6
Clocke Alias Portd.7

Dim Datas As Byte
Dim Jeda As Integer
Dim Clearseg As Integer

Clearseg = 20000
Jeda = 100

Ddrd.2 = 1
Ddrd.3 = 1
Ddrd.4 = 1
Ddrd.5 = 1

Ddrc.0 = 1
Ddrc.1 = 1

Ddrc.2 = 1
Ddrc.3 = 1

Portc.2 = 1
Portc.3 = 1

Ddrb.0 = 0
Ddrb.1 = 0
Ddrb.2 = 0

Tombolup Alias Pinb.2
Tomboldown Alias Pinb.1
Tombolselect Alias Pinb.0

'_sec = 00
'_hour = 14
'_min = 36
'Settime

'_day = 12
'_month = 3
'_year = 12
'Setdate

I = 13
Line1 = Chr(13)

Do

Getdatetime
'Upperline
'Dispdate
'Lowerline
'Disptime
'Print Line1 ; Sb(1) ; ":" ; Sb(2) ; ":" ; Sb(3);
'Waitms 200


'Mencari angka Puluhan
_hour = _hour Mod 100
Jam_puluhan = _hour / 10

'Mencari angka Satuan
Jam_satuan = _hour Mod 10

'Mencari angka Puluhan
_min = _min Mod 100
Min_puluhan = _min / 10

'Mencari angka Satuan
Min_satuan = _min Mod 10

'Mencari angka Puluhan
_sec = _sec Mod 100
Sec_puluhan = _sec / 10

'Mencari angka Satuan
Sec_satuan = _sec Mod 10


Portc.0 = 1
Portc.1 = 0
Portd.2 = 0
Portd.3 = 0
Portd.4 = 0
Portd.5 = 0

Clocke = 0
Clocke = 1
Datas = Lookup(jam_puluhan , Data7seg)
Shiftout Dataout , Clocke , Datas , 0 , 8 , 0
Clocke = 0

Waitus Jeda


Portc.0 = 0
Portc.1 = 1
Portd.2 = 0
Portd.3 = 0
Portd.4 = 0
Portd.5 = 0

Clocke = 0
Clocke = 1
Datas = Lookup(jam_satuan , Data7seg)
Shiftout Dataout , Clocke , Datas , 0 , 8 , 0
Clocke = 0

Waitus Jeda


Portc.0 = 0
Portc.1 = 0
Portd.2 = 1
Portd.3 = 0
Portd.4 = 0
Portd.5 = 0

Clocke = 0
Clocke = 1
Datas = Lookup(min_puluhan , Data7seg)
Shiftout Dataout , Clocke , Datas , 0 , 8 , 0
Clocke = 0

Waitus Jeda


Portc.0 = 0
Portc.1 = 0
Portd.2 = 0
Portd.3 = 1
Portd.4 = 0
Portd.5 = 0

Clocke = 0
Clocke = 1
Datas = Lookup(min_satuan , Data7seg)
Shiftout Dataout , Clocke , Datas , 0 , 8 , 0
Clocke = 0

Waitus Jeda


Portc.0 = 0
Portc.1 = 0
Portd.2 = 0
Portd.3 = 0
Portd.4 = 1
Portd.5 = 0

Clocke = 0
Clocke = 1
Datas = Lookup(sec_puluhan , Data7seg)
Shiftout Dataout , Clocke , Datas , 0 , 8 , 0
Clocke = 0

Waitus Jeda


Portc.0 = 0
Portc.1 = 0
Portd.2 = 0
Portd.3 = 0
Portd.4 = 0
Portd.5 = 1

Clocke = 0
Clocke = 1
Datas = Lookup(sec_satuan , Data7seg)
Shiftout Dataout , Clocke , Datas , 0 , 8 , 0
Clocke = 0

Waitus Jeda

Portc.0 = 0
Portc.1 = 0
Portd.2 = 0
Portd.3 = 0
Portd.4 = 0
Portd.5 = 0

Waitus Clearseg


Loop

Sub Getdatetime:

I2cstart                                                    ' Generate start code
I2cwbyte Ds1307w                                            ' send address

I2cwbyte 0                                                  ' start address in 1307

I2cstart                                                    ' Generate start code
I2cwbyte Ds1307r                                            ' send address

I2crbyte _sec , Ack
I2crbyte _min , Ack                                         ' MINUTES
I2crbyte _hour , Ack                                        ' Hours
I2crbyte _weekday , Ack                                     ' Day of Week
I2crbyte _day , Ack                                         ' Day of Month
I2crbyte _month , Ack                                       ' Month of Year
I2crbyte _year , Nack                                       ' Year

I2cstop

_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
End Sub

Sub Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)

I2cstart                                                    ' Generate start code
I2cwbyte Ds1307w                                            ' send address
I2cwbyte 0                                                  ' starting address in 1307
I2cwbyte _sec                                               ' Send Data to SECONDS
I2cwbyte _min                                               ' MINUTES
I2cwbyte _hour                                              ' Hours
I2cstop

End Sub

Sub Setdate

_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)

I2cstart                                                    ' Generate start code
I2cwbyte Ds1307w                                            ' send address
I2cwbyte 4                                                  ' starting address in 1307
I2cwbyte _day                                               ' Send Data to SECONDS
I2cwbyte _month                                             ' MINUTES
I2cwbyte _year                                              ' Hours
I2cstop

End Sub

Sub Dispdate
Sa(1) = Str(_day)
Sa(2) = Str(_month)
Sa(3) = Str(_year)
Format_00
Lcd "Date: " ; Sb(1) ; "-" ; Sb(2) ; "-" ; Sb(3)
End Sub

Sub Disptime
Sa(1) = Str(_hour)
Sa(2) = Str(_min)
Sa(3) = Str(_sec)
Format_00
Lcd "Time: " ; Sb(1) ; ":" ; Sb(2) ; ":" ; Sb(3)
End Sub

Sub Format_00
For I = 1 To 3 Step 1
Sb(i) = Format(sa(i) , "00")
Next I
End Sub


Data7seg:
Data &B11000000                                             '0
Data &B11111001                                             '1
Data &B10100100                                             '2
Data &B10110000                                             '3
Data &B10011001                                             '4
Data &B10010010                                             '5
Data &B10000010                                             '6
Data &B11111000                                             '7
Data &B10000000                                             '8
Data &B10010000                                             '9



4. Cara Penggunaan Alat

          Saat pertama download program sertakan baris berikut dan isikan waktu dan tanggal pertama yang akan ditampilkan oleh jam digital:

_sec = 00
_hour = 14
_min = 36
Settime

_day = 12
_month = 3
_year = 12
Setdate

        Kemudian download-kan lagi ke mikrokontroller tanpa kode tersebut atau berikan tanda ' seperti berikut ini

'_sec = 00
'_hour = 14
'_min = 36
'Settime

'_day = 12
'_month = 3
'_year = 12
'Setdate

       Hal itu berfungsi agar saat dilakukan reset atau tidak ada supply tegangan, jam digital tidak kembali ke nilai awal atau ke nilai saat dimasukkan nilai. 


Mau Pesan PCB 7Segment interfacenya atau Sistem Minimumnya ? Please Contact Me..............






Mengakses WP3A MicroSD Voice Control Module

Mengakses WP3A MicroSD Voice Control Module


 

        Pada kesempatan yang sangat spesial kali ini akan dibahas mengenai bagaimana cara mengakses voice control module WP3A buatan bengkel elektro, modul ini bisa dibilang cukup bagus untuk mengolah file suara / lagu yang berformat .wav (8 bit, mono, 8-44,1khz), modul ini bisa digunakan untuk waiting machine seperti di bank atau untuk bel sekolah / pabrik. untuk mengakses modul ini  diperlukan beberapa komponen yaitu minimum system ATMega16, dan empat buah tombol push button sebagai kendalinya. berikut fitur dan skematik lengkapnya.

Fitur:
1. Membaca file wav (8 bit, mono, 8-44.1 kHz) yang tersimpan didalam memori microSD        (terformat FAT32 maksimal 2GB) dan membangkitkan sinyal audio untuk file wav tersebut.
2. Sinyal audio berbentuk sinyal PCM (Pulse Code Modulation) 5V puncak ke puncak. Sinyal
audio ini dapat dikirim secara langsung ke headphone, speaker aktif atau audio amplifier.
3. Setelah diberi catu daya, secara otomatis memutar (membaca dan membangkitkan sinyal
audio) untuk file-file wav yang ada didalam memory microSD. 
4. Dapat dikontrol oleh host (mikrokontroler atau komputer) dengan cara mengirimkan
instruksi melalui komunikasi serial UART (TTL, 19200 bps, 8 bit data, tanpa parity). 
5. Instruksi yang disediakan meliputi: play, stop, next, previous, pause, resume, repeat, change
volume, make play-list, play the list, get list of wav file, dll.



Skematik




PROGRAM BASCOM AVR

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

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

Tombolnext Alias Pind.2
Tombolback Alias Pind.3
Tombolselect Alias Pind.4
Tombolstop Alias Pind.5

Config Tombolnext = Input
Config Tombolback = Input
Config Tombolselect = Input
Config Tombolstop = Input


Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portd.5 = 1


'Kirim beberapa Enter
Print Chr(13) ; Chr(13) ; Chr(13);
Waitms 100
'kirim stop
Print "t" ; Chr(13);
Waitms 100
'seting single step
Print "g" ; Chr(13);
Waitms 100
'volume
Print "v8" ; Chr(13);
Waitms 100

Cls
Cursor Off

Do


If Tombolnext = 0 Then
Upperline
Lcd "next"
Print "f" ; Chr(13);
Waitms 200
End If

If Tombolback = 0 Then
Upperline
Lcd "back"
Print "b" ; Chr(13);
Waitms 200
End If

If Tombolselect = 0 Then
Upperline
Lcd "select"
Print "lhujan.wav" ; Chr(13);
Waitms 200
End If

If Tombolstop = 0 Then
Upperline
Lcd "stop"
Print "g" ; Chr(13);
Waitms 100
Print "t" ; Chr(13);
Waitms 200
End If



Loop