Introduction: Building a Turbo Sound Effect Circuit for Your Non Turbo Car
This instructable is about building a turbo sound effect circuit for your non-turbo car, motorbike, bicycle or house whatever you like. What it does is to play a continuous sampled sound with the pressing of an electrical switch ( might in someway be connected to the gas pedal of the vehicle ) and play an other sound sample when the switch is depressed.
The first sound is the revving up of the turbo turbine and the second sound is the chufff sound of the blow off valve.
Though both of the sounds are recorded via the onboard microphone system, you can record and use any sound you like. The sounds in my videoclip for instance, are sounds that i've produced orally :)
The first sound is the revving up of the turbo turbine and the second sound is the chufff sound of the blow off valve.
Though both of the sounds are recorded via the onboard microphone system, you can record and use any sound you like. The sounds in my videoclip for instance, are sounds that i've produced orally :)
Step 1:
The main components of the system are
pic 16F628a microcontroller
APR9600 sound recorder & player chip
sanyo LA4440 25w audio amplifier IC
and an car alarm horn speaker.
battery holder
and several other small electronic components, complete list can be found at following steps.
The horn speaker is normally fed with 12V DC and produces the known alternating alarm sound while running. Some of them has got extra features like a speech amplifier and ability to produce extra warning sounds. If there is an amplifier in the horn, then it can be used instead of the LA4440 chip.
pic 16F628a microcontroller
APR9600 sound recorder & player chip
sanyo LA4440 25w audio amplifier IC
and an car alarm horn speaker.
battery holder
and several other small electronic components, complete list can be found at following steps.
The horn speaker is normally fed with 12V DC and produces the known alternating alarm sound while running. Some of them has got extra features like a speech amplifier and ability to produce extra warning sounds. If there is an amplifier in the horn, then it can be used instead of the LA4440 chip.
Step 2: Circuit Schematic
The circuit schematic is straightforward, I'll not try to give information about assembling and testing circuits, there should be lots of instructables and information on the web.
The proteus file as well as the circuit schematic in meta file format is included below.
The proteus file as well as the circuit schematic in meta file format is included below.
Attachments
Step 3: PCB
I designed a pcb which is in a shape to fit my ABS plastic case at hand, you might either design a new pcb or use my design. Proteus layout file can be downloaded below.
Attachments
Step 4: Video
There are even faker turbos on the market, some of them are really funny. I guess mine does a much better job. To show my device while working, I' ve tried to embed a video to the instructable but didnt be able to, the page keeps giving me error messages when i try to use the "Embed Video" tab. Here is the address of the working fake turbo device, in my former car; Ford Ka.
http://www.youtube.com/watch?v=WZt4jCmQcm0
I'd appreciate if someone from instructables.com can do the embedding for me. thanks for reading and vote for me ;) :D
Step 5: The Code in CCS C.
#include <16F628a.h>
#fuses INTRC_IO,WDT,NOPROTECT, NOBROWNOUT, NOLVP, NOMCLR, NOPUT
#use delay(clock=4000000)
//#use rs232(baud=9600, xmit=PIN_A3, rcv=PIN_A4)
//#define use_portb_lcd TRUE
//#include <lcd.c> // LCD routine
// define
//==========================================================================
#define m1 pin_a1 //playback/record (low = record ; high = playback)
#define m2 pin_a0 //end of message (pulse low at the end of each message)
#define m3 pin_a7 //power down (high to place devide in standby mode)
#define m4 pin_a6 //chip enable (low to enable device)
#define m5 pin_b7 //bit-8 of address pin
#define m6 pin_b6 //bit-9 of address pin
#define m7 pin_b5
#define m8 pin_b4
#define chip_on output_low( pin_a2 )
#define chip_off output_high( pin_a2 )
#define rec_on output_low( pin_a3 )
#define rec_off output_high( pin_a3 )
#define busy !input(pin_a5)
#define gazpedal !input(pin_b0)
#define anfi_on output_high(pin_a4)
#define anfi_off output_low(pin_a4)
#define delsur 500
// function prototype (every function must have a function prototype)
//==========================================================================
void turbin1(){
rec_off;
delay_ms(50);
anfi_on;
delay_ms(150);
chip_on;
delay_ms(50);
output_low(m1);
delay_ms(100);
output_high(m1);
while ( busy ); // wait
anfi_off;
chip_off;
delay_ms(100);
}
void turbin2(){
rec_off;
delay_ms(50);
anfi_on;
delay_ms(150);
chip_on;
delay_ms(50);
output_low(m2);
delay_ms(100);
output_high(m2);
while ( busy ); // wait
anfi_off;
chip_off;
delay_ms(100);
}
void turbin3(){
rec_off;
delay_ms(50);
anfi_on;
delay_ms(150);
chip_on;
delay_ms(50);
output_low(m3);
delay_ms(100);
output_high(m3);
while ( busy ); // wait
anfi_off;
chip_off;
delay_ms(100);
}
void turbin4(){
rec_off;
delay_ms(50);
anfi_on;
delay_ms(150);
chip_on;
delay_ms(50);
output_low(m4);
delay_ms(100);
output_high(m4);
while ( busy ); // wait
anfi_off;
chip_off;
delay_ms(100);
}
/*void record (int16 address) //this function is to start record operation at the given address
{ //the address range is from 0 to 600 representing 0 to 60 second
unsigned char temp;
output_low(pd); //activate ISD
delay_ms(150); //short delay
output_low(pr); //select record mode(0=rec, 1=play)
output_d(address); //set the address value for bit0 to bit 7
temp=address>>8;
if((temp&0x01)==0) output_low(a8);
else output_high(a8); //set the address bit 8
if((temp&0x02)==0) output_low(a9);
else output_high(a9); //set the address bit 9
delay_ms(10); //short delay
output_low(ce); //start record
while(!input(tusrec));
}
void play (int16 address) //this function is to start playback operation at the given address
{ //the address range is from 0 to 600 representing 0 to 60 second
unsigned char temp;
output_low(pd); //activate ISD
anfiac;
delay_ms(100); //short delay
output_high(pr); //select playback mode(0=rec, 1=play)
output_d(address); //set the address value for bit0 to bit 7
temp=(address>>8);
if((temp&0x01)==0) output_low(a8);
else output_high(a8); //set the address bit 8
if((temp&0x02)==0) output_low(a9);
else output_high(a9); //set the address bit 9
delay_ms(10); //short delay
output_low(ce); //start play
while(input(eom));
anfikapa;
}
void stop (void) //this function is to stop the ISD2560 operation
{
output_high(ce); //stop operation
delay_ms(10); //short delay
output_high(pd); //deactivate ISD 2560
delay_ms(100); //short delay
}
*/
// main function (main function of the program)
//==========================================================================
void main(void)
{
setup_comparator (NC_NC_NC_NC);
setup_wdt(WDT_2304MS);
anfi_off;
chip_off;
while(TRUE){
restart_wdt();
if (gazpedal){
turbin1();
turbin2();
turbin3();
turbin4();
}
}
}
#fuses INTRC_IO,WDT,NOPROTECT, NOBROWNOUT, NOLVP, NOMCLR, NOPUT
#use delay(clock=4000000)
//#use rs232(baud=9600, xmit=PIN_A3, rcv=PIN_A4)
//#define use_portb_lcd TRUE
//#include <lcd.c> // LCD routine
// define
//==========================================================================
#define m1 pin_a1 //playback/record (low = record ; high = playback)
#define m2 pin_a0 //end of message (pulse low at the end of each message)
#define m3 pin_a7 //power down (high to place devide in standby mode)
#define m4 pin_a6 //chip enable (low to enable device)
#define m5 pin_b7 //bit-8 of address pin
#define m6 pin_b6 //bit-9 of address pin
#define m7 pin_b5
#define m8 pin_b4
#define chip_on output_low( pin_a2 )
#define chip_off output_high( pin_a2 )
#define rec_on output_low( pin_a3 )
#define rec_off output_high( pin_a3 )
#define busy !input(pin_a5)
#define gazpedal !input(pin_b0)
#define anfi_on output_high(pin_a4)
#define anfi_off output_low(pin_a4)
#define delsur 500
// function prototype (every function must have a function prototype)
//==========================================================================
void turbin1(){
rec_off;
delay_ms(50);
anfi_on;
delay_ms(150);
chip_on;
delay_ms(50);
output_low(m1);
delay_ms(100);
output_high(m1);
while ( busy ); // wait
anfi_off;
chip_off;
delay_ms(100);
}
void turbin2(){
rec_off;
delay_ms(50);
anfi_on;
delay_ms(150);
chip_on;
delay_ms(50);
output_low(m2);
delay_ms(100);
output_high(m2);
while ( busy ); // wait
anfi_off;
chip_off;
delay_ms(100);
}
void turbin3(){
rec_off;
delay_ms(50);
anfi_on;
delay_ms(150);
chip_on;
delay_ms(50);
output_low(m3);
delay_ms(100);
output_high(m3);
while ( busy ); // wait
anfi_off;
chip_off;
delay_ms(100);
}
void turbin4(){
rec_off;
delay_ms(50);
anfi_on;
delay_ms(150);
chip_on;
delay_ms(50);
output_low(m4);
delay_ms(100);
output_high(m4);
while ( busy ); // wait
anfi_off;
chip_off;
delay_ms(100);
}
/*void record (int16 address) //this function is to start record operation at the given address
{ //the address range is from 0 to 600 representing 0 to 60 second
unsigned char temp;
output_low(pd); //activate ISD
delay_ms(150); //short delay
output_low(pr); //select record mode(0=rec, 1=play)
output_d(address); //set the address value for bit0 to bit 7
temp=address>>8;
if((temp&0x01)==0) output_low(a8);
else output_high(a8); //set the address bit 8
if((temp&0x02)==0) output_low(a9);
else output_high(a9); //set the address bit 9
delay_ms(10); //short delay
output_low(ce); //start record
while(!input(tusrec));
}
void play (int16 address) //this function is to start playback operation at the given address
{ //the address range is from 0 to 600 representing 0 to 60 second
unsigned char temp;
output_low(pd); //activate ISD
anfiac;
delay_ms(100); //short delay
output_high(pr); //select playback mode(0=rec, 1=play)
output_d(address); //set the address value for bit0 to bit 7
temp=(address>>8);
if((temp&0x01)==0) output_low(a8);
else output_high(a8); //set the address bit 8
if((temp&0x02)==0) output_low(a9);
else output_high(a9); //set the address bit 9
delay_ms(10); //short delay
output_low(ce); //start play
while(input(eom));
anfikapa;
}
void stop (void) //this function is to stop the ISD2560 operation
{
output_high(ce); //stop operation
delay_ms(10); //short delay
output_high(pd); //deactivate ISD 2560
delay_ms(100); //short delay
}
*/
// main function (main function of the program)
//==========================================================================
void main(void)
{
setup_comparator (NC_NC_NC_NC);
setup_wdt(WDT_2304MS);
anfi_off;
chip_off;
while(TRUE){
restart_wdt();
if (gazpedal){
turbin1();
turbin2();
turbin3();
turbin4();
}
}
}
Step 6: Bill of Materials
Bill Of Materials
=================
Design: D:\PICC\2009\FAKE_TURBO\circuit\faketurbo.DSN
Doc. no.: <NONE>
Revision: <NONE>
Author: <NONE>
Created: 22/11/08
Modified: 08/06/09
QTY PART-REFS VALUE
--- --------- -----
Resistors
---------
1 R1 39k
4 R2,R10,R16,R17 10k
3 R3,R5,R13 100k
3 R4,R14,R15 470
1 R6 220k
3 R7-R9 47k
1 R11 47R
1 R12 500k
Capacitors
----------
5 C1,C6,C7,C9,C16 100n
1 C2 4.7uF
2 C3,C4 1000u
2 C5,C8 22u
4 C10,C11,C15,C17 68u
1 C12 47n
1 C13 1u
1 C14 220u
Integrated Circuits
-------------------
1 U1 PIC16F628A
1 U2 7805
Transistors
-----------
1 Q1 3205
Diodes
------
1 D1 MEM
1 D2 1N4002
1 D3 LD1
1 D4 LD2
Miscellaneous
-------------
1 APR1 APR9600
1 J1 12V DC
1 J2 SWITCH
1 J3 Hoparlor
1 J4 SANYO LA4440
1 MIC1 MICROPHONE
1 SW1 tus1
1 SW2 tus2
=================
Design: D:\PICC\2009\FAKE_TURBO\circuit\faketurbo.DSN
Doc. no.: <NONE>
Revision: <NONE>
Author: <NONE>
Created: 22/11/08
Modified: 08/06/09
QTY PART-REFS VALUE
--- --------- -----
Resistors
---------
1 R1 39k
4 R2,R10,R16,R17 10k
3 R3,R5,R13 100k
3 R4,R14,R15 470
1 R6 220k
3 R7-R9 47k
1 R11 47R
1 R12 500k
Capacitors
----------
5 C1,C6,C7,C9,C16 100n
1 C2 4.7uF
2 C3,C4 1000u
2 C5,C8 22u
4 C10,C11,C15,C17 68u
1 C12 47n
1 C13 1u
1 C14 220u
Integrated Circuits
-------------------
1 U1 PIC16F628A
1 U2 7805
Transistors
-----------
1 Q1 3205
Diodes
------
1 D1 MEM
1 D2 1N4002
1 D3 LD1
1 D4 LD2
Miscellaneous
-------------
1 APR1 APR9600
1 J1 12V DC
1 J2 SWITCH
1 J3 Hoparlor
1 J4 SANYO LA4440
1 MIC1 MICROPHONE
1 SW1 tus1
1 SW2 tus2