Followers

Showing posts with label Led. Show all posts
Showing posts with label Led. Show all posts

Lighting Up Model Aircraft

This circuit provides aircraft modellers with extremely realistic beacon and marker lights at minimum  outlay. The project ’s Strobe out-put (A) provides four brief pulses repeated periodically for the wing  (white strobe) lights. In addition the Beacon output (B) gives a double pulse to drive a red LED for indicating the aircraft’s active operational status. On the proto-type this is usually a red rotating  beacon known as an Anti-Collision Light (ACL). The circuit is equally useful for road vehicle modellers, who can use it to flash headlights and blue emergency lights.

Download Skema :

Lighting Up Model Aircraft

Password : asinan

All signals are generated by a 4060 14-stage binary counter and some minimal output selection logic. Cycle time is determined by the way the internal oscillator is con-figured (resistor and capacitor on pins 9/10) and can be varied within quite broad limits. High-efficiency LEDs are your first choice for the indicators connected to the Bea-con and Strobe outputs (remember to fit series resistors appropriate to the operating voltage Ub and the current specified for the LED used).
The sample circuit is for operating voltages between 5 and 12 V. Cur- rent flow through the two BS170 FET devices must not exceed 500 mA.

Flashing Lights for Planes and Helicopters

There are two sorts of lights on aircraft: red or white flashing lights, which are called ‘anti-collision lights’, and steady lights, red on the tip of the left wing, green on the tip of the right wing, and white at the tail, called ‘position lights’, which enable an observer to see if the aircraft is approaching or going away. On the tip of each wing, in addition to the steady lights, there may also be flashing white strobe lights. The position light simulator given here takes a few liberties with the real position lights, making them flash (it’s more fun!) and using a little trick to simulate the strobe effect.


 Download Skema :

Flashing Lights for Planes and Helicopters

Password : asinan

PIC Digital Clock Timer


Note: There is a bug in this program that prevents the alarm from working if the minutes are set to zero. So, an alarm setting of 8:59 or 6:01 will work but 6:00 will not. The bug can be fixed by adding a program line to call the alarm routine after the hours are incremented.

Current listing in the interrupt section is:

           call        Alarm
           movlw       d'60'
           xorwf       MINUTES,0
           btfss       STATUS,2        ; Check for 60 minutes
           goto        Done            ; Jump out if not 60
           clrf        MINUTES
           incf        HOURS,f


New listing should be:

           call        Alarm
           movlw       d'60'
           xorwf       MINUTES,0
           btfss       STATUS,2        ; Check for 60 minutes
           goto        Done            ; Jump out if not 60
           clrf        MINUTES
           incf        HOURS,f
           call        Alarm           ; New line added here
This clock timer uses a PIC16F628 microcontroller to display 3 and 1/2 digit time and control an external load. The clock includes a calendar with leap year and optional daylight savings adjustments. The timer output can be set from 1 to 59 minutes and manually switched on and off. The clock also has a correction feature that allows an additional second to be added every so many hours to compensate for a slightly slow running oscillator. The oscillator uses a common 32.768 KHz watch crystal and the frequency can be adjusted slightly with the 24pF capacitor on the right side of the crystal. On bootup, the display should read 2:56 AM and other data can be displayed by toggling the advance switch (D). Each time the (D) switch is closed and opened, the display will advance to the next data. The order of displayed data and bootup values is as follows:
Time       --------------------------------------------- (2:56)
Alarm      --------------------------------------------- (6:30)
Calendar   --------------------------------------------- (3:07)
Weekday (Sunday=1), Seconds ---------------------------- (1:Seconds)
AM/PM (Alarm)  (AM=0/PM=1), Timer Duration ------------- (0:45)
AM/PM (Time)   (AM=0/PM=1), Daylight Savings Disabled -- (0:00)
Year  (1 to 4)            , Error Correction  ---------- (2:18)


There are 7 displays that advance each time the 'D' switch is toggled.
To make adjustments, set the RA5 switch to the "B" position and then
toggle the E and F switches to advance the data in the hours or minutes
digits. Then toggle the "D" switch to move to the next data. After the
7th display, it will go back to the top and display the current time.
Or, just press the time switch 'C' to get to the top at anytime.
When done setting everything up, set the RA5 switch to the "A"
position so the data cannot be accendentally changed. You can still view
everything with the "D" advance key, but the E an F switches will just
turn on or off the alarm at RB7. I use it with an external transistor to
switch on and off a radio.

The 'Daylight savings' setting (in the 6th display in the minutes digits)
is used to enable daylight savings time adjustments, one hour ahead on the
2nd sunday in March, and one hour behind on the first sunday in November.
The entry will be either 0, 1, or 3.

0 = Daylight savings time disabled (default).
1 = Savings time enabled and current time is standard time.
3 = Savings time enabled and current time is daylight savings time.

The last 2 entries on the list (Year and Correction) is for the
current year (1 to 4) (4 = Leapyear) so today's setting (2006) will
be 2 since leapyear will be on year 4 which is 2 years from now.
The correction setting will add a second every so many hours
for fine adjustment to the oscillator frequency. My setting
is 18 which adds a second every 18 hours. It's pretty accurate
and only loses 3 seconds a month. You probably want to run it
for a couple weeks to figure out what correction is needed for
the crystal you have.

Switch functions:

RA0         (C switch)         =  Display Time
RA1         (D switch)         =  Advance to next data (alarm, calendar, etc)
RA2, RA3    (E and F switch)   =  Advance hours and minutes (in setup mode).
RA2, RA3    (E and F switch)   =  Toggle alarm output on/off (in run mode)
RA5 in the 'B' position (open) =  Setup Mode



;------------Program Listing, Clock.asm - REV 1 - 11/08/06 --------- LIST P=16F628 ; Device number (PIC16F628) ERRORLEVEL -224 ; suppress annoying message because of tris ERRORLEVEL -302 ; suppress message because of page change ;--------------------- Configuration --------------------------------- _BODEN_OFF equ H'3FBF' ; Brown out detection off _CP_OFF equ H'3FFF' ; Code protection off _PWRTE_ON equ H'3FF7' ; Power-on reset enabled _WDT_OFF equ H'3FFB' ; Watch dog timer off _LVP_OFF equ H'3F7F' ; Low Voltage programming off _INTRC_OSC_NOCLKOUT equ H'3FFC' ; Use Internal RC Oscillator _MCLRE_OFF equ H'3FDF' ; Use RA5 as functional input __CONFIG _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _PWRTE_ON & _LVP_OFF & _BODEN_OFF & _MCLRE_OFF ;--------------------- Define Variables ------------------------------- INDF equ 00h FSR equ 04h CMCON equ 1Fh ; Comparator Control Address INTCON equ 0Bh ; Interrupt control register OPTION_REG equ 81h ; Option register STATUS equ 03h ; Status register TRISA equ 85h ; I/O control for port A TRISB equ 86h ; I/O control for port B PORTB equ 06h ; Address of port B PORTA equ 05h ; Address of port A PC equ 02h ; Program counter COUNTER equ 20h ; Addresses 20H-7FH = general RAM HOURS equ 21h ; These 20 addresses for display MINUTES equ 22h HOURS_A equ 23h MINUTES_A equ 24h MONTH equ 25h DAYS equ 26h WEEKDAY equ 27h SECONDS equ 28h AMPM_A equ 29h TIMER_LIMIT equ 2ah AMPM equ 2bh DAYLIGHT equ 2ch YEAR equ 2dh CORRECTION equ 2eh TEMP equ 35h ; Value passed to Digits routine TENS equ 36h ; Value returned from Digits routine TEMPW equ 37h ; Used in interrupt to save w SWITCH equ 38h ; Value returned from switches STATUS_SAVE equ 39h ; Interrupt (save status) TEMP1 equ 3ah ; Part of delay routine ALARM equ 3bh ; Alarm on/off (bit 7 set =on) ; BLANK equ 3ch ; Not used LIMIT equ 3dh ; Increments every hour to (correction) TEMP_SAVE equ 3eh ; Saves a copy of TEMP TIMER equ 3fh AMPM_LED equ 40h ;--------------------- Program Starts here -------------------------- goto INIT ;--------------------- Interrupt routine to update time ------------- org 0x04 movwf TEMPW ; Save w swapf STATUS,0 ; Get status register into w movwf STATUS_SAVE ; Save status register bcf STATUS,5 ; Go to bank 0 (00) incf SECONDS,f ; Advance seconds movlw d'60' xorwf SECONDS,0 btfss STATUS,2 ; Check for 60 seconds goto Done ; Jump out if not 60 clrf SECONDS incf MINUTES,f call Alarm movlw d'60' xorwf MINUTES,0 btfss STATUS,2 ; Check for 60 minutes goto Done ; Jump out if not 60 clrf MINUTES incf HOURS,f call Daylight call Add_Second ; Compensate for slow oscillator movlw d'13' xorwf HOURS,0 btfss STATUS,2 ; Check for 13 hours goto Noon ; Jump out if not 13 clrf HOURS incf HOURS,f ; Set hours to 1:00 Noon movlw d'12' xorwf HOURS,0 btfss STATUS,2 ; Check for 12 hours goto Done ; Jump out if not 12 incf AMPM,f bcf AMPM,1 ; Clear Bit 1 to stop overflow btfsc AMPM,0 ; AM = Bit 0 clear Goto Done incf DAYS,f movfw MONTH call Table xorwf DAYS,0 ; Check for Days = Limit btfss STATUS,2 goto WeekDay clrf DAYS incf DAYS,f incf MONTH,f movlw d'13' xorwf MONTH,0 btfss STATUS,2 ; Check for new year goto WeekDay clrf MONTH incf MONTH,f incf YEAR,f movlw d'5' xorwf YEAR,0 btfss STATUS,2 goto WeekDay clrf YEAR incf YEAR,f WeekDay incf WEEKDAY,f movlw d'8' xorwf WEEKDAY,0 btfss STATUS,2 ; Check for new week goto Leap clrf WEEKDAY incf WEEKDAY,f ; Set weekday to 1 = Sunday Leap movlw d'2' xorwf MONTH,0 btfss STATUS,2 goto Done movlw d'29' xorwf DAYS,0 btfss STATUS,2 goto Done movlw d'4' xorwf YEAR,0 btfsc STATUS,2 goto Done movlw d'3' movwf MONTH clrf DAYS incf DAYS,f Done bcf INTCON,2 swapf STATUS_SAVE,0 movwf STATUS swapf TEMPW,f swapf TEMPW,0 retfie ;--------------------- End Interrupt Procedure ---------------------- INIT ; Initialize variables bsf STATUS,5 ; Select memory bank 1 (01) bcf STATUS,6 ; Select memory bank 1 (01) movlw b'00000000' movwf TRISB ; Set port B as output movlw b'01110000' ; movwf TRISA ; Set port A as output, RA4,5,6=Input bsf OPTION_REG,5 ; Select Timer0 (TOCS=1) bcf OPTION_REG,3 ; Assign prescaler to timer0 bcf OPTION_REG,0 ; Set prescaler to 128 bcf STATUS,5 ; Reset to bank 0 bcf STATUS,0 ; Clear carry bit bcf STATUS,2 ; Clear zero flag bcf STATUS,1 ; bsf INTCON,5 ; Enable timer0 interrupt bcf INTCON,2 ; Clear interrupt flag bsf INTCON,7 ; Enable global interrupt movlw 07h movwf CMCON ; Comparators off movlw d'2' movwf HOURS ; Initialize hours to 2 movlw d'56' movwf MINUTES ; Inititlize minutes to 56 movlw d'6' movwf HOURS_A ; Initialize alarm hours to 6 movlw d'30' movwf MINUTES_A movlw d'3' movwf MONTH ; Initialize Month to March, 7 movlw d'7' movwf DAYS movlw d'1' movwf WEEKDAY ; Initialize weekday to Sunday (1) clrf SECONDS clrf AMPM ; Initialize AMPM to AM movlw d'45' movwf TIMER_LIMIT ; Initialize alarm timer to 45 clrf AMPM_A clrf DAYLIGHT ; Turn off daylight savings time movlw d'2' movwf YEAR ; Set year to 2 (Leap year=4) movlw d'18' movwf CORRECTION ; Add 1 second every 18 hours clrf ALARM ; Turn off alarm clrf TIMER clrf LIMIT clrf AMPM_LED movlw h'21' movwf FSR ; Address pointer points to Hours movlw d'15' movwf SWITCH goto Main Array ; Data for 7 segment digits addwf PC,1 retlw b'01000000' ; "0" retlw b'01111001' ; "1" retlw b'00100100' ; "2" retlw b'00110000' ; "3" retlw b'00011001' ; "4" retlw b'00010010' ; "5" retlw b'00000010' ; "6" retlw b'01111000' ; "7" retlw b'00000000' ; "8" retlw b'00010000' ; "9" Table ; Days per month plus 1 addwf PC,1 retlw d'00' ; Unused line retlw d'32' ; Jan retlw d'30' retlw d'32' retlw d'31' retlw d'32' ; May retlw d'31' retlw d'32' retlw d'32' retlw d'31' retlw d'32' retlw d'31' retlw d'32' ; December Main ; ------------ Main Loop ---------------------- call Display ; Display data call Read_Port ; Check for switch closed movlw d'14' ; Check for time switch closed xorwf SWITCH,0 btfss STATUS,2 goto Set_Time movlw h'21' movwf FSR Set_Time movlw d'46' ; Check for time switch and RA5 closed xorwf SWITCH,0 btfss STATUS,2 goto Increment_Display movlw h'21' movwf FSR Increment_Display movlw d'13' xorwf SWITCH,0 btfss STATUS,2 goto Function ; Function key not hit (13) call Wait ; Wait for switch to open call Increment_Pointer Function movlw d'45' xorwf SWITCH,0 btfss STATUS,2 goto Increment_100s ; Function key not hit (13) call Wait ; Wait for switch to open call Increment_Pointer Increment_100s ; On plus RA5 = 32 + 11 = 43 movlw d'43' xorwf SWITCH,0 btfss STATUS,2 goto Increment_10s call Wait incf INDF,f movlw d'13' ; Rollover at 12 xorwf INDF,0 btfsc STATUS,2 clrf INDF Increment_10s ; RA5 + alarm off = 39 movlw d'39' xorwf SWITCH,0 btfss STATUS,2 goto Alarm_Toggle call Wait incf FSR,f incf INDF,f movlw d'60' ; Rollover at 60 xorwf INDF,0 btfsc STATUS,2 clrf INDF movlw h'28' ; Check for Seconds display xorwf FSR,0 btfsc STATUS,2 clrf SECONDS ; Zero seconds decf FSR,f Alarm_Toggle movlw d'7' ; Alarm Off xorwf SWITCH,0 btfsc STATUS,2 bcf ALARM,7 movlw d'11' ; Alarm On xorwf SWITCH,0 btfss STATUS,2 goto Main bsf ALARM,7 clrf TIMER goto Main ;--------------------- End of Main Loop ------------------------------ Output ; Write data to port B call Array iorwf ALARM,0 movwf PORTB return Delay ;------------------------ Delay ---- about 600 uS ------------ movlw d'25' Delay_0 movwf TEMP1 Delay_1 movwf COUNTER Delay_2 decfsz COUNTER,f goto Delay_2 decfsz TEMP1,f goto Delay_1 return Digits ; Converts value in TEMP to 2 single digits - TENS and TEMP clrf TENS movlw d'10' Loop incf TENS,f subwf TEMP,f btfss STATUS,0 goto Ones goto Loop Ones decf TENS,f addwf TEMP,f return Read_Port ; Look to see if switch is closed movlw d'127' movwf PORTA iorwf ALARM,0 ; add alarm bit movwf PORTB ; Set port B to high level bsf STATUS,5 ; Select bank 1 (01) movlw b'01111111' movwf TRISA ; Set port A as input, RA7=output movlw b'00111111' movwf TRISA ; Set RA6 to output bcf STATUS,5 ; Return to bank 0 (00) bcf PORTA,6 ; Low level on RA6 movlw d'10' call Delay_0 ; Wait movfw PORTA ; Read the pins movwf SWITCH bsf STATUS,5 ; Select Bank 1 movlw b'01111111' movwf TRISA ; Set port A to input movlw b'01110000' movwf TRISA ; Set porta,0,1,2,3 to output bcf STATUS,5 ; Return to Bank 0 movlw b'00101111' ; RA5 is normally 0 andwf SWITCH,f ; Switch returns value 0 to 47 return Alarm incf TIMER,f movfw TIMER_LIMIT ; Default is 45 minutes xorwf TIMER,0 btfsc STATUS,2 bcf ALARM,7 movfw HOURS xorwf HOURS_A,0 btfss STATUS,2 return movfw MINUTES xorwf MINUTES_A,0 btfss STATUS,2 return movfw AMPM xorwf AMPM_A,0 btfss STATUS,2 return bsf ALARM,7 clrf TIMER return Add_Second incf LIMIT,f movfw CORRECTION xorwf LIMIT,0 btfss STATUS,2 return incf SECONDS,f clrf LIMIT return Daylight ;----------------------- Daylight savings adjustment btfss DAYLIGHT,0 ; Bit 0 set = Daylight enabled return movlw d'1' ; Check for Sunday xorwf WEEKDAY,0 btfss STATUS,2 return movlw d'3' ; Adjust daylight at 3AM xorwf HOURS,0 btfss STATUS,2 return btfsc AMPM,0 ; Adjust daylight if AM return movlw d'3' xorwf MONTH,0 btfss STATUS,2 goto MinusHour btfss DAYS,3 ; Bit 3 must be set for 2nd Sunday return btfsc DAYLIGHT,1 ; Bit 1 set = Correction done (March) return incf HOURS,f bsf DAYLIGHT,1 ; Correction done return MinusHour ;---------- Subtract 1 hour on 1st Sunday in November movlw d'11' xorwf MONTH,0 btfss STATUS,2 return btfss DAYLIGHT,1 ; Bit 1 set = Do Correction return decf HOURS,f bcf DAYLIGHT,1 ; Bit 1 clear = Correction done return Display ; -------------------- Display Data ----------------------- clrf AMPM_LED ; AMPM off movlw h'21' xorwf FSR,0 btfss STATUS,2 goto $ +3 btfsc AMPM,0 bsf AMPM_LED,7 ; Add AMPM light (time) movlw h'23' xorwf FSR,0 btfss STATUS,2 goto $ +3 btfsc AMPM_A,0 bsf AMPM_LED,7 ; Add AMPM light (alarm) movfw INDF ; Get 100s data movwf TEMP call Digits btfss TENS,0 goto Ones_Hours movfw TENS ; Light 10s Hours LED call Output movlw d'14' iorwf AMPM_LED,0 ; Add AMPM light if time or alarm movwf PORTA call Delay Ones_Hours movfw TEMP call Output movlw d'13' iorwf AMPM_LED,0 ; Add AMPM light if time or alarm movwf PORTA call Delay incf FSR,f movfw INDF movwf TEMP call Digits movfw TENS call Output movlw d'11' iorwf AMPM_LED,0 ; Add AMPM light if time or alarm movwf PORTA call Delay movfw TEMP call Output movlw d'7' iorwf AMPM_LED,0 ; Add AMPM light if time or alarm movwf PORTA call Delay decf FSR,f return Wait ; Wait until switches are open call Display call Read_Port movlw d'15' ; Switches open in run mode xorwf SWITCH,0 btfsc STATUS,2 return movlw d'47' ; Switches open in program mode xorwf SWITCH,0 btfsc STATUS,2 return goto Wait Increment_Pointer incf FSR,f ; Increment Pointer 2 steps incf FSR,f movlw h'2f' xorwf FSR,0 btfss STATUS,2 return movlw h'21' movwf FSR ; Set Pointer to Time display return end -------------------------Compiled HEX code -------------------------- :0200000059287D :08000800B700030EB9008312DA :10001000A80A3C302806031D5328A801A20A122171 :100020003C302206031D5328A201A10A2E212621BD :100030000D302106031D1E28A101A10A0C30210646 :10004000031D5328AB0AAB102B185328A60A25080A :1000500097202606031D3C28A601A60AA50A0D30F6 :100060002506031D3C28A501A50AAD0A05302D066D :10007000031D3C28AD01AD0AA70A08302706031D61 :100080004328A701A70A02302506031D53281D3067 :100090002606031D532804302D0603195328033068 :1000A000A500A601A60A0B11390E8300B70E370E64 :1000B0000900831603130030860070308500811616 :1000C0008111011083120310031183108B160B1181 :1000D0008B1707309F000230A1003830A200063095 :1000E000A3001E30A4000330A5000730A600013095 :1000F000A700A801AB012D30AA00A901AC01023074 :10010000AD001230AE00BB01BF01BD01C001213006 :1001100084000F30B800A528820740347934243495 :1001200030341934123402347834003410348207F5 :10013000003420341E3420341F3420341F34203443 :1001400020341F3420341F3420344E21FA200E3046 :100150003806031DAD28213084002E303806031DDB :10016000B328213084000D303806031DB9287E21C4 :1001700089212D303806031DBF287E2189212B308F :100180003806031DC9287E21800A0D300006031998 :10019000800127303806031DD9287E21840A800A71 :1001A0003C30000603198001283004060319A80119 :1001B0008403073038060319BB130B303806031DC0 :1001C000A528BB17BF01A5288C203B04860008008A :1001D0001930BA00A000A00BEB28BA0BEA280800DF :1001E000B6010A30B60AB502031CF728F228B60396 :1001F000B50708007F3085003B04860083167F30FA :1002000085003F308500831205130A30E920050878 :10021000B80083167F3085007030850083122F3040 :10022000B8050800BF0A2A083F060319BB132108B6 :100230002306031D080022082406031D08002B08BE :100240002906031D0800BB17BF010800BD0A2E08C0 :100250003D06031D0800A80ABD0108002C1C08006B :1002600001302706031D080003302106031D080086 :100270002B18080003302506031D4529A61D08007C :10028000AC180800A10AAC1408000B302506031DA9 :100290000800AC1C0800A103AC100800C00121300C :1002A0000406031D55292B18C01723300406031D0F :1002B0005B292918C0170008B500F020361C6629F4 :1002C0003608E4200E3040048500E8203508E4209C :1002D0000D3040048500E820840A0008B500F020B5 :1002E0003608E4200B3040048500E8203508E4207F :1002F000073040048500E820840308004E21FA20DE :100300000F303806031908002F303806031908008B :100310007E29840A840A2F300406031D0800213038 :04032000840008004D :02400E00103F61 :00000001FF

Digital Clock with Timer and Solar Panel Regulator

This is a combination digital clock timer and solar panel charge controller used to maintain a deep cycle battery from a solar panel. The timer output is used to control a 12 volt load for a 32 minute time interval each day. Start time is set using 9 dip switches and ends 32 minutes later. The 32 minute duration is set by selecting the 5th bit (2^5 = 32) of a 4040 binary counter (pin 2). The timer also has a manual toggle switch so the load can be manually switched on or off and automatically shuts off after 32 minutes. The time duration can be longer or shorter (8,16,32,64,128,256 minutes etc.) by selecting the appropriate bit of the counter. The timer circuit is shown in the lower schematic just above the regulator. The basic clock circuit (top schematic below) is similar to the binary clock (on another page) and uses 7 ICs to produce the 20 digital bits for 12 hour time, plus AM and PM. A standard watch crystal oscillator (32,768) is used as the time base and is divided down to 1/2 half second by the 4020 binary counter. One half of a 4013 data latch is used to divide the 1/2 second signal by 2 and produce a one second pulse that drives the seconds counter (74HC390 colored purple). The minutes are advanced by decoding 60 seconds (40 + 20) and then resetting the seconds counter to 0 and at the same time advancing the minutes counter. The same procedure is used to advance the hours. The second half of the 4013 latch is used to indicate AM or PM and is toggled by decoding 13 hours and resetting the hours to 0 and then advancing the hours to "one".
The clock display circuit is shown in the second drawing below and uses 6 more ICs to decode the binary data and drive four seven segment LED displays. The 10s of hours digit is driven with a single 3904 transistor. Two multiplexer circuits (4053) are used to manually select either minutes or seconds for the right two display digits. The two switches shown between the 4053s and below the left 4053 are both part of one DPDT switch which selects either seconds or minutes for the 1X and 10X digits. This switch is shown in the seconds position and the hours digits are blanked with a low signal on pin 4 of the 4511. The display can also be toggled on and off (totally blank) using a set/reset latch made from a couple 74HC00 NAND gates. A momentary DPDT switch is used to control the latch and toggle the display on or off. The second pole of this switch is used on the upper drawing (connected to the run/stop switch) to set the hours and minutes. Thus this same switch performs both functions of blanking the display and setting the time. The run/stop switch is shown in the normal running mode and supplies a low signal to a NAND gate which prevents accidental setting the time while the clock is running. The run/stop switch also turns on the display (through the diode D2) when in the stop position. The procedure for setting the clock would be to set the (run/stop) switch the stop position and the (seconds/minutes) switch to the minutes position. Then toggle the momentary switch to set minutes and hours of the current time plus one minute. The clock can then be started with the run/stop switch at precisely the right time (+/- 0.5 seconds).
The voltage regulator in the lower drawing maintains the battery at 13.6 volts and also supplies the clock and timer circuits with 4.3 volts. The charge LED indicator only comes on when the regulator is supplying max charge to the battery. When the battery voltage reaches 13.6 the regulator reduces the current to whatever is necessary to maintain the voltage and the charge indicator will turn off. The unit I built also included a battery condition indicator (voltmeter using 4 LEDs) to indicate the battery condition so that a failure of the regulator would be indicated by the charge indicator LED turned off and less than 4 LEDs lit on the voltmeter. The 4 LED battery condition indicator is shown on another page.

Basic Clock Circuit Clock Display Circuit
Clock Timer Circuit
Voltage Regulator (13.6 volts)

Led 220v / 25 led


Led 220v / 50 led


LAMPU HEMAT ENERGI



"BIKIN SENDIRI LAMPU HEMAT ENERGI"

Kali ini saya mo posting tentang elektronika, gak melulu tentang Imu Komputer. Serius ne sob, bukan ngerjain. Lagi walking-walking eh gak sengaja mampir ke ne website dapet atikel menarik, langsung aja dehh timbul niat berbagi ama yang laen. BIKIN SENDIRI LAMPU HEMAT ENERGI. Lampu ini menggunakan Lampu LED sebagai komponen utamanya. Selain harganya murah dan berumur panjang, lampu LED hanya butuh tegangan yg kecil. Saat ini banyak lampu mobil atau motor yg sudah memakai LED sebagai pengganti bolam, kemudian lampu senter juga sudah memakai LED, juga terdapat pada lampu emergency yang sudah mulai mengganti TL/NEON dengan LED yang nyalanya lebih lama dan tidak kalah terang.
LANGKAH 1
Komponen yang diperlukan :
- 30 buah lampu LED Extra bright White


lampu LED ini sekarang sering di pake buat lampu senter. Beli di toko elektro banyak, tanya aja bli lampu LED buat lampu senter om... ( walahh nglanturrr dah )
- 3 buah papan PCB
kalo saya mending bli papan PCB yang belubang, so gak usah nglubangin lagi, cuman nanti penampilannya kurang sedap di pandang mata ( sedap?? emang makanan?? ). Biar lebih menarik, bisa bli PCB polos alias blum d lubangi, cuman entar jadi bikin lubangnya sediri.
- 1 buah Kondenser ukuran 0.22uF / 400 Volts.
- 1 buah Resistor ukuran 1K - 1/2 Watt.
Buat jalur dan lubang-lubang pada papan PCB untuk lampu LED, seperti gambar di bawah.





















LANGKAH 2
Solder dan rangkai komponen pada papan PCB, seperti pada gambar di bawah.
Pasang kaki-kaki lampu LED, kali panjang = + (plus) dan Kaki pendek = -(minus).



































LANGKAH 3

Cari lampu PLC yg sudah mati neonnya ganti dengan rangkaian LED, rangkailah seperti gambar di bawah.



















LANGKAH 4
Hubungkan dengan kabel hingga semua komponen terangkai seperti gambar di bawah.



















LANGKAH 5
Jadi deh, biar lebih terang tambahkan cover dari botol air minum bekas, seperti gambar dibawah.
















Strobe Light

The way that this circuit works is as follows. The AC line voltage is rectified by D1 and D2 which connects to a voltage doubler circuit made up of the two 22uf capacitors. The Flash Freq. Pot and the 10uf capacitor charge up which triggers the Diac and causes the triac to turn on. This allows the trigger transformer T1 to send a very High Voltage to the flash tube and lighting it. The flash timing is adjusted by the flash freq. pot.

Police Lights an LED Project

This circuit uses a 555 timer which is setup to both runn in an Astable operating mode. This generates a continuous output via Pin 3 in the form of a square wave. When the timer's output changes to a high state this triggers the a cycle on the 4017 4017 decade counter telling it to output the next sequential output high. The outputs of the 4017 are connected to the LEDs turning them on and off.

Schematic
Police Lights and LED Project

Parts List

1x - NE555 Bipolar Timer
1x - 4017 Decoded Decade
6x - 1N4148 Diode
1x - 1K Resistor (1/4W)
1x - 22K Resistor (1/4W)
2x - 4.7K Resistor (1/4W)
6x - 470 Resistor (1/4W)
1x - 2.2µF Electrolytic Capacitor (16V)
2x - BC547 NPN Transistor
2x - LED (Blue)
2x - LED (Red)

Simple Emergency Light

This is an automatic emergency lamp with day light sensing, means it senses darkness/night and turns ON automatically. Similarly it senses day light and turns OFF automatically. A simple emergency lamp which does not require any special equipment; even a multimeter to assemble and use. Any individual who can do a good quality soldering must be able to build this circuit successfully.

This can be easily accommodated in the defunct two 6 watt tube National Emergency Lamp or any PL tube type emergency lamp. The difference will be in the working; it will work non stop for more than 8 hours. Deep discharge is taken care by the LED characteristic and over charge protection is taken care by the fixed voltage regulator.This uses a simple 3Pin fixed regulator which has a built in current limiting circuit.

Simple Emergency Light Circuit Diagram:
Circuit Project: Simple Emergency Light Circuit

The only required adjustment is the preset which has to be set to ensure the LEDs just light up (it should be left at that position). The 5mm LDR is just mounted on top of the emergency light as shown in the photograph. LDR is used to avoid it lighting up during day time or when the room lights are ON. 2 LEDs are used in series; the dropping resistance is avoided and 2 LEDs light up with current that is required for a single LED,  by which energy is saved to a great extent.

This particular circuit has been kept so simple for people who has limited access to components or in other words this is an emergency light that you can build with minimum components. In addition to circuit diagram, He has shared photographs of the prototype he made in National emergency light and a PCB design.

Nite Rider Lights

As a keen cyclist I am always looking for ways to be seen at night. I wanted something that was a novelty and would catch the motorists eye. So looking around at my fellow cyclists rear lights, I came up with the idea of 'NITE-RIDER'. NINE extra bright LED's running from left to right and right to left continuously. It could be constructed with red LEDs for use on the rear of the bike or white LED's for an extra eye catcher on the front of the bike. All IC's are CMOS devices so that a 9V PP3 battery can be used, and the current drawn is very low so that it will last as long as possible.


Circuit Project: Nite Rider Lights

Parts
1 555 timer IC4.
1 4027 flip flop IC1.
2 4017 Decade Counter IC2 and IC3.
3 4071 OR gate IC5, IC6 and IC7.
1 470 Ohm resistor 1/4 watt R3.
2 10K resistors 1/4 watt R1 and R2.
1 6.8UF Capasitor 16V C1.
9 Super brght LED's 1 to 9.
1 9V PP3 Battery.
1 single pole switch SW1.
1 Box.

How This Circuit Works.

IC4, C1, R1 and R2 are used for the clock pulse which is fed to both the counters IC2 and IC3 Pin 14. IC1 is a Flip Flop and is used as a switch to enable ether IC2 or IC3 at pin 13. IC7a detects when ether IC2 or IC3 has reached Q9 of the counter pin 11. IC5, IC6 and IC7a protects the outputs of the counters IC2 and IC3 using OR gates which is then fed to the Anodes of the LED's 1 to 9.

Touch Sensitive Light Dimmer

With IC SLB0586A from Siemens you can build a simple touch light dimmer circuit that will allow you to adjust the lamp intensity. Together with a TIC206D triac, it enables smooth regulation of light intensity from a bulb of 10W – 400W. A coil of 100µH/5A is required to suppress switching noise.

The voltage supply is obtained through R2, C2, D1 and C3 and is about 5.3V below the network potential. The touch sensor that is used to drive the IC is connected at pin 5 through two 4.7MΩ resistors, R5 and R6, in order to ensure user security.

In the adjustable touch lamp schematic we can see three selection connection , for selecting one of three modes of the IC. When the B connection is used, the light will always be ON at the last level that we used. With A or C connection the light will be ON at the minimum intensity. With B or C, the purpose of regulation is reversed with each use.

Schematic of the adjustable light with touch sensor
Circuit Project: Touch light dimmer circuit

When the sensor is touched for a short period of time (50 – 400 ms), the lamp will be ON or OFF. If the sensor is touched for a longer period of time it will start the regulation process. Warning! This touch light dimmer circuit has some points where lethal 220V is present, please do not try this project if you are not qualified.

16 Stage Bi-Directional LED Sequencer

The bi-directional sequencer uses a 4 bit binary up/down counter (CD4516) and two "1 of 8 line decoders"74HC138 or 74HCT138) to generate the popular "Night Rider" display. A Schmitt Trigger oscillator provides the clock signal for the counter and the rate can be adjusted with the 500K pot. Two additional Schmitt Trigger inverters are used as a SET/RESET latch to control the counting direction (up or down).

Be sure to use the 74HC14 and not the 74HCT14, the 74HCT14 may not work due to the low TTL input trigger level. When the highest count is reached (1111) the low output at pin 7 sets the latch so that the UP/DOWN input to the counter goes low and causes the counter to begin decrementing. When the lowest count is reached (0000) the latch is reset (high) so that the counter will begin incrementing on the next rising clock edge.


Circuit Project: 16 Stage Bi-Directional LED Sequencer

The three lowest counter bits (Q0, Q1, Q2) are connected to both decoders in parallel and the highest bit Q3 is used to select the appropriate decoder. The circuit can be used to drive 12 volt/25 watt lamps with the addition of two transistors per lamp as shown below in the section below titled "Interfacing 5 volt CMOS to 12 volt loads".

12V Operated White LED Driver (For Upto 30 LEDs)

While we have now published quite a few LED driver circuits, to date we have not published a design to drive a bunch of high-brightness white LEDs. Such a circuit is now quite desirable as the price of white LEDs has fallen and you can have a handful for not a lot of dollars.


White LED Driver circuits diagrams

However, white LEDs do present a problem because they need a higher drive voltage than monochromatic types such as red, green, orange etc. Instead of around 1.8V to 2V or thereabouts, they normally require more than 3V to produce their rated brightness. In fact, if you are driving a bunch of them you need to drive them all at constant current otherwise their individual brightness tends to vary markedly.

However, if you only have a 12V supply available, you can only put two or maybe three LEDs in series together with a constant current source and this leads to poor efficiency. The approach in this circuit is to boost the 12V supply to something around 21V and this means that we can have groups of five LEDs, each in series with their own current source transistors.

White LED Driver circuits diagrams

The result is a single PC board with the drive circuitry and 30 white LEDs. It can be used for lighting in caravans and recreational vehicles, emergency lighting or whatever application you can think of. Current drain is around 190mA at 12V. Now let’s have a look at the circuit of Fig.1. It uses just one IC (a 4093 quad NAND Schmitt trigger gate package), a few transistors and diodes, 30 white LEDs and not much else.

So where is the familiar boost converter circuit? Answer: there isn’t one or least not one with an inductor switched by a Mosfet. Instead, there is a charge pump inverter, comprising IC1c, transistors Q2 & Q3, Schottky diodes D1 & D2 and a few capacitors. It works as follows:

IC1c is connected as an inverter oscillator and its running frequency of about 30kHz is determined mainly by the 6.8kΩ resistor between pins 8 & 10 together with the 4.7nF capacitor at pin 8. This produces a rectangular waveform (not quite square but pretty close) at pin 10 to drive complementary switching transistors Q2 & Q3. The waveform at their commoned emitters drives a diode pump consisting of two 100μF capacitors and Schottky diodes D1 & D2.

RS flipflop

Oscillator IC1c is controlled by an RS (Reset/Set) flipflop comprising the two NAND gates IC1a & IC1b and this is controlled by pushbutton switches S1 and S2. Normally, this has its pin 4 low and pins 1 & 6 are pulled high via 470kΩ resistors. Momentarily closing S1 (ON) pulls pin 6 low, causing the flipflop to change state so that pin 4 now goes high to enable IC1c which now oscillates at 30kHz. The 30kHz waveform produced by transistors Q2 & Q3 drives the diode pump referred to earlier and this develops about 21V to drive the LED columns.

White LED Driver circuits diagrams

Each column of five white LEDs is driven by its own current source transistor which has a 33Ω emitter resistor. The bases of all six current source transistors (Q4-Q9) are driven from pin 4 of IC1b via a 6.8kΩ resistor and clamped to a maximum of +1.2V by diodes D3 & D4. Subtract the 0.6V between the base and emitter of each transistor and you are left with 0.6V across each 33Ω resistor, thus setting the LED drive current to 18mA.

Switching the circuit off is accomplished by pushing the OFF switch, S2. This momentarily pulls pin 1 low to toggle the RS flipflop, thus causing pin 4 to go low. This disables IC1c, Q2 & Q3 and also turns off the current source transistors. Note that there is an interesting wrinkle to this drive circuit, because there is no On/Off switch. This means that the current source transistors must be turned off otherwise they would continue to draw current from the 12V supply even when the circuit is nominally off. The current path may not be obvious but it is via the boost circuit’s diodes, D1 & D2.

Auto on/off

As well as using the pushbutton switches S1 & S2 to turn the circuit on and off, there is also a facility to automatically turn the circuit on and off depending on ambient light levels. Links L1 & L2 can be used to provide Auto On and Auto Off respectively and these features can be used separately or together.

An LDR (light dependent resistor) is used to monitor the ambient light level. When light falls upon it, it pulls the base of Q1 low, causing pins 12 & 11 of IC1d to go low and its pin 11 to go high. When darkness falls (or the room lights go out), the process is reversed. Depending on whether you have one or both links connected, you can use the pushbuttons to turn the circuit on and off and have it turn on and/off automatically as well.

Q1 also drives a red high brightness LED (LED1) at very low current, via a 470kΩ resistor. This is a bit of a gimmick but it does have the benefit of showing that this part of the circuit is working, if you have to trouble-shoot it. Pins 1 & 2, 5 & 6 and 8 & 9 of IC1 on the circuit are all swapped. The PC board overlay diagram is correct.

LED Torch Using MAX660

This is a simple LED torch circuit based on IC MAX660 from MAXIM semiconductors. The MAX 660 is a CMOS type monolithic type voltage converter IC. The IC can easily drive three extra bright white LEDs.The LEDs are connected in parallel to the output pin 8 of the IC. The circuit has good battery life. The switch S1 can be a push to ON switch.

Circuit Diagram with Parts list.


 LED Torch using MAX660

Notes.
  • Assemble the circuit on a general purpose PCB.
  • The IC must be mounted on a holder.
  • The circuit can be powered from two torch cells connected in series.
  • The capacitors C1 and C2 must be Tantalum type.
  • The diodes D1 to D3 must be of 1N4148.

Mains Operated LED Circuit


Here is a simple and powerful LED circuit that can be operated directly from the AC 100 volt to AC 230 Volts mains supply. The circuit can be used as mains power locator or night lamp etc.. The resistor R1,R2 and capacitor C1 provides necessary current limiting. The circuit is sufficiently immune against voltage spikes and surges.

Circuit's pictures:

 220_Volt_AC_Powered_LED_Circuit_Diagram_Schematic_Circuit_Diagram

Front View of 220 Volt AC Operated LED Circuit


Circuit diagram:

 220_Volt_AC_Powered_LED_Circuit_Diagram_Schematic_Circuit_Diagram

Mains Operated LED Circuit Diagram

Parts:

D1 = 1N4007
D2 = 1N4007
D3 = 1N4007
D4 = 1N4007
R2 = 1M-1/2W
R1 = 470R-1/2W
C1 = 220nF-275vAC
D5 = 5mm. Blue LED

Features:
  1. Small in size!
  2. Blue LED operated on mains voltage
  3. Suited for mains indicator or other pilot lamps
  4. For safety guidance, stairs, corridors…
  5. Special X2 safety capacitor
  6. 100Vac to 240Vac 50Hz or 60Hz Operated
  7. Dimensions: 28x18mm / 1.10 x 0.71"

Note:
  • Only for use inside a cabinet
  • The capacitor C1 can be polyester type.
  • Also white LED can be used in this circuit.
  • Assemble the circuit on a general purpose PCB.

Safety and Hazard WARNINGS:

This circuit operates on a lethal power voltage. Mount the circuit in a protective cabinet prio to applying AC Power. Do not modify the circuit - Wait 10 minutes before touching the circuit after disconnecting the AC Power. This circuit is not intended for children.

Luxury Car Interior Light

This circuit is much more modest, but certainly still worth the effort. It provides a high quality interior light delay. This is a feature that is included as standard with most modern cars, although the version with an automatic dimmer is generally only found in the more expensive models. With this circuit it is possible to upgrade second hand and mid-range models with an interior light delay that slowly dims after the door has been closed. The dimming of the light is implemented by means of pulse-width modulation. This requires a triangle wave oscillator and a comparator.

Completed Project:
 completed Luxury Car Interior Light Circuit Diagram
Two opamps are generally required to generate a good triangle wave, but because the waveform doesn’t have to be accurate, we can make do with a single opamp. This results in the circuit around IC1.A, a relaxation oscillator supplying a square wave output. The voltage at the inverting input has more of a triangular shape. This signal can be used as long as we do not put too much of a load on it. The high impedance input of IC1.B certainly won’t cause problems in this respect. This opamp is used as a comparator and compares the voltage of the triangular wave with that across the door switch. When the door is open, the switch closes and creates a short to the chassis of the car.

Parts Layout:
parts layout Luxury Car Interior Light Circuit Diagram
The output of the opamp will then be high, causing T1 to conduct and the interior light will turn on. When the door is closed the light will continue to burn at full strength until the voltage across C2 reaches the lower side of the triangle wave (about 5 V). The comparator will now switch its output at the same rate of the triangle wave (about 500 Hz), with a slowly reducing pulse width, which results in a slowly reducing brightness of the interior light. R8 and C3 protect the circuit from voltage spikes that may be induced by the fast switching of the light. The delay and dimming time can be adjusted with R6 and C2. Smaller values result in shorter times. You can vary the dimming time on its own by adjusting R1, as this changes the amplitude of the triangle wave across C1.

Circuit diagram:Luxury Car Interior Light Circuit Diagram
Luxury Car Interior Light Circuit Diagram

R7 limits the discharge current of C2; if this were too big,it would considerably reduce the lifespan of the capacitor. There is no need to worry about reducing the life of the car battery. The circuit consumes just 350 µA when the lamp is off and a TLC272 is used for the dual opamp. A TL082 will take about 1 mA. These values won’t discharge a normal car battery very quickly; the self-discharge is probably many times higher. It is also possible to use an LM358, TL072 or TL062 for IC1. R8 then needs to have a value between 47 Ω and 100 Ω. Since T1 is always either fully on or fully off, hardly any heat is generated.

At a current of 2 A the voltage drop across the transistor is about 100 mV, giving rise to a dissipation of 200 mW. This is such a small amount that no heatsink is required. The whole circuit can therefore remain very compact and should be easily fitted in the car, behind the fabric of the roof for example.

Resistors:
R1,R2,R6 = 120kΩ
R3,R4 = 100kΩ
R5 = 470Ω
R7 = 100Ω
R8 = 220Ω
Capacitors:
C1 = 10nF
C2 = 100µF-25V
C3 = 10µF-25V
Semiconductors:
T1 = BUZ10
IC1 = TLC272CP

Mains Powered White LED Lamp

Did it ever occur to you that an array of white LEDs can be used as a small lamp for the living room? If not, read on. LED lamps are available ready-made, look exactly the same as standard halogen lamps and can be fitted in a standard 230-V light fitting. We opened one, and as expected, a capacitor has been used to drop the voltage from 230 V to the voltage suitable for the LEDs. This method is cheaper and smaller compared to using a transformer. The lamp uses only 1 watt and therefore also gives off less light than, say, a 20 W halogen lamp. The light is also somewhat bluer. The circuit operates in the following manner: C1 behaves as a voltage dropping ‘resistor’ and ensures that the current is not too high (about 12 mA).

Mains Operated White LED Lamp Circuit
The bridge rectifier turns the AC voltage into a DC voltage. LEDs can only operate from a DC voltage. They will even fail when the negative voltage is greater then 5 V. The electrolytic capacitor has a double function: it ensures that there is sufficient voltage to light the LEDs when the mains voltage is less than the forward voltage of the LEDs and it takes care of the inrush current peak that occurs when the mains is switched on. This current pulse could otherwise damage the LEDs. Then there is the 560-ohm resistor, it ensures that the current through the LED is more constant and therefore the light output is more uniform.

White LED Lamp Circuit Diagram
There is a voltage drop of 6.7 V across the 560-Ω resistor, that is, 12 mA flows through the LEDs. This is a safe value. The total voltage drop across the LEDs is therefore 15 LEDs times 3 V or about 45 V. The voltage across the electrolytic capacitor is a little more than 52V. To understand how C1 functions, we can calculate the impedance (that is, resistance to AC voltage) as follows: 1/(2π·f·C), or: 1/ (2·3.14·50·220·10-9)= 14k4. When we multiply this with 12 mA, we get a voltage drop across the capacitor of 173 V. This works quite well, since the 173-V capacitor voltage plus the 52-V LED voltage equals 225 V. Close enough to the mains voltage, which is officially 230 V.

Circuit diagram:Mains Powered White LED Lamp Circuit Diagram
Mains Powered White LED Lamp Circuit Diagram

Moreover, the latter calculation is not very accurate because the mains voltage is in practice not quite sinusoidal. Furthermore, the mains voltage from which 50-V DC has been removed is far from sinusoidal. Finally, if you need lots of white LEDs then it is worth considering buying one of these lamps and smashing the bulb with a hammer (with a cloth or bag around the bulb to prevent flying glass!) and salvaging the LEDs from it. This can be much cheaper than buying individual

Two Flashing LEDS


Here is the circuit diagram of Two Flashing LED's for different applications (such as model construction), and recreational. Having adjustable flashing speed with two potentiometers. It is the collection of a few active and passive components. This circuit is very easy to built ( a good idea for beginners ) and can be build on a general purpose pcb or on a veroboard. The complete picture and schematic of this project is shown below


Picture of the project:
Screenshoot of two flashing led


Circuit diagram:
Two Flashing Leds Circuit Schematic Diagram
Two Flashing LEDs Circuit Diagram


Parts:

R1-R2 = 1K
R3-R4 = 10K
P1-P2 = 250K
C1-C2 = 10uF-25v
Q1-Q2 = BC547B
D1-D2 = Red-Green LED
B1 = 9 volt battery

A Bedside Lamp Timer

The purpose of this circuit is to power a lamp or other appliance for a given time (30 minutes in this case), and then to turn it off. It is useful when reading at bed by night, turning off the bedside lamp automatically in case the reader falls asleep... After turn-on by P1 pushbutton, the LED illuminates for around 25 minutes, but then it starts to blink for two minutes, stops blinking for two minutes and blinks for another two just before switching the lamp off, thus signaling that the on-time is ending. If the user want to prolong the reading, he/she can earn another half-hour of light by pushing on P1. Turning-off the lamp at user's ease is obtained by pushing on P2.

Circuit diagram:
 bedside 220 volt ac lamp timer schematic circuit diagram

Parts:

Resistors
R1 = 1K
R2 = 4K7
R3 = 10M
R4 = 1M
R5 = 10K

Capacitors
C1 = 470µF-25V
C2-C4100nF-63V

Semiconductors
C1 = 470µF-25V
C2-C4 = 100nF-63V
D1-D4 = 1N4002
D5 = 5mm. Red LED
IC1 = CD4012
IC2 = CD4060
Q1 = BC328
Q2 = BC547

Miscellaneous
P1,P2 = SPST Pushbuttons
T1 = 9+9 Volt Secondary 1VA Mains transformer
RL1 = 10.5V 470 Ohm Relay with SPDT 2A 220V switch
PL1 = Male Mains plug
SK1 = Female Mains socket

Circuit operation:

Q1 and Q2 form an ALL-ON ALL-OFF circuit that in the off state draws no significant current. P1 starts the circuit, the relay is turned on and the two ICs are powered. The lamp is powered by the relay switch, and IC2 is reset with a positive voltage at pin 12. IC2 starts oscillating at a frequency set by R4 and C4. With the values shown, pin 3 goes high after around 30 minutes, turning off the circuit via C3. During the c6 minutes preceding turn-off.

The LED does a blinking action by connections of IC1 to pins 1, 2 & 15 of IC2. Blinking frequency is provided by IC2 oscillator at pin 9. The two gates of IC1 are wired in parallel to source more current. If required, a piezo sounder can be connected to pins 1 & 14 of IC1. Obviously, timings can be varied changing C4 and/or R4 values.






Cpm Affiliation : the cpm advertising network


make cash





 

Hobby Elektronik Copyright © 2011 -- Template created by Acakadut -- Powered by Firman Wahyudi