Introduction: Model Police Car
Step 1: Gathering the Necessities
-Plastic Model Car, preferably snap together. We used a 1:25 scale and that seemed to be a little on the small side (http://www.amazon.com/gp/product/B000JSNYU6/ref=oh_o00_s00_i00_details)
-3 Superbright red LEDs (http://www.sparkfun.com/products/528)
-3 Superbright blue LEDs (http://www.sparkfun.com/products/529)
-A small buzzer or speaker (http://www.sparkfun.com/products/7950 or http://www.sparkfun.com/products/9151)
-A small motor (http://www.sparkfun.com/products/10171)
-A Darlington transistor (http://www.sparkfun.com/products/312)
-A photodiode (http://uk.rs-online.com/web/p/photodiode/6655331/)
-A flashlight, preferably quite bright. Or possibly a laser pointer, experiment!
-Wire
-2 9V Batteries
-1/4 Watt Resistors: 6 330 ohm resistors for the LEDs, a 100 ohm resistor for the buzzer, a 10,000 ohm resistor for the photo diode.
-Perforated PVC sheet or printed circuit board: You can design and print your own circuit boards if you have the resources. It will make for a tidier interior of the car and an easier soldering process. You can also wire and solder to a perforated sheet of PVC.
-Solder and Soldering Iron
-Breadboard for testing setups
-An Arduino Uno
-The Arduino program
-Gears for your motor and axle?
-Multimeter for testing
-Paint and decorations for your car
If you can get a good gear ratio for your motor the the car will actually be able to drive. We found that the car was too heavy to drive at our current gear ratio, but ran out of time to change it. You may also need to consider getting your car lifted after all the circuitry is inside it. You could also use a larger model and a more powerful motor. Or really just a more powerful motor.
Step 2: Prepare the Car
With the snap together model cars it is relatively easy to remove all the interior parts and only assemble the base, the wheels and axles and the outside shell. Make sure the wheels and axles are working well and turn freely. Experiment with assembling the car using the minimum number of interior parts, you will need that space to work with.
For the lights on top of the car, take the outer shell of the car and drill 6 holes in the roof in a line. Use a drill press and a drill bit with a guage slightly less than than the size of the LEDs. Make sure to use mineral oil or another lubricant while drilling because the soft plastic heats up and starts to melt very fast. Clean the drill holes of excess plastic and then widen the holes a tiny bit by hand using the drill bit. Make sure the LEDs fit in tightly.
Take the base of the car and make sure your Arduino can fit comforably. At this point you will need to consider the location for your motor and how you will connect the axle to the motor. Our very kind machinist designed a pulley system for our axle and motor. We cut a section out of the base to allow room for the pulley around the axle and set the motor behind the Arduino between the back wheels. Make sure to leave room for a couple batteries because your ardunio and all the other components need a power source. You may have to lift the body a bit.
Step 3: Wiring the Lights
Put a resistor in series with each LED, then wire the three red LEDs in parallel with each other and the three blue LEDs in parallel with each other. Wire all the LEDs to a common ground, such as the ground of the battery. Make sure to wire the Arduino's ground to that ground as well.
This is the circuit diagram for our lights, Red Input and Blue Input imply a connection to one of the Arduino's digital ports. There will be a full circuit diagram for how to wire everything to the Arduino later on.
You could also opt to use 6 RGB LEDs and those can be very bright, so it may be a good option if you have them available. Wire them in the same manner as you would the single color LEDs, using only the pin of the color you want to light up. Or wire separately to both the red and blue pins and play with code for more complicated light sequences.
Step 4: Wiring the Speaker
The miniature speaker or buzzer is most likely not polarized, but check yours to make sure. It should also only require about 100 ohms of resistance, but again this will vary with your setup and specific parts.
Simply wire the resistor in series between the input and the speaker and the other side of the speaker to ground. See circuit diagram below.
We used a 9V battery and a 100 ohm resistor with our speaker.
Step 5: Wiring the Motor
The best description of this wiring is shown in the diagram below, but a short explanation will also be useful. When the photo diode is not sensing light there is no current flowing through it and thus no current flowing through the resistor so the reading at A0 should be high (~9V). When light activates the photo diode it starts drawing current and there will be a voltage drop across the resistor, causing the reading at A0 to go low (~0V). This change in reading will be interpreted through the Arduino and sent as a signal to the motor input. The Darlington transistor helps amplify the current so the motor can run.
Toy motors aren't usually polarized but the darlington transistor definitely is. Make sure you have it connected the right way, so the collector is attached to D7 and the emitter is attached to the far side of the motor.
Step 6: Putting It All Together
Step 7: Putting Everything in the Car
Step 8: The Code
CODE
/*
Motor, lights, and siren code with LED.
Drives a motor, lights and siren with input of LED light
circuit:
*one small motor
*small speaker
*six LED's
*one photodiode
Created 4-17-12
by Dalton Bolger and Dulcie Head
*/
// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations = 16;
int IR = A0;
int motor = 7;
int blueLed = A5;
int redLed = A4;
// creates the state for the lights and intializes the time
int ledState = LOW;
long previousMillis = 0;
// time in between flashes for the lights
long interval = 100;
void setup() {
pinMode(IR, INPUT);
pinMode(motor, OUTPUT);
pinMode(blueLed, OUTPUT);
pinMode(redLed, OUTPUT);
Serial.begin(9600);
}
// method to create the lights without having to use a delay
void runLights() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > interval){
previousMillis = currentMillis;
digitalWrite(A4, ledState);
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
digitalWrite(A5, ledState);
}
}
// run the sirens while flashing lights continuously
void lightsAndSirens() {
int melody = 550;
while (melody<1200) {
runLights();
// to calculate the note duration, take one second
// divided by the note type.
//e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
int noteDuration = 1000/noteDurations;
tone(8, melody, noteDuration);
melody = melody + 7;
// to distinguish the notes, set a minimum time between them.
// the note's duration + 30% seems to work well:
int pauseBetweenNotes = noteDuration * .5;
delay(pauseBetweenNotes);
// stop the tone playing:
noTone(8);
}
melody = 1200;
while (melody > 550) {
runLights();
int noteDuration = 1000/noteDurations;
tone(8, melody, noteDuration);
melody = melody - 7;
int pauseBetweenNotes = noteDuration * .5;
delay(pauseBetweenNotes);
noTone(8);
}
}
// if the appropriate light shows up, run the motor, sirens, and lights
void loop() {
int speeds = analogRead(IR)*1.5;
Serial.println(speeds);
if (speeds > 40 && speeds < 500) {
digitalWrite(motor, speeds);
lightsAndSirens();
}else {
analogWrite(redLed, LOW);
analogWrite(blueLed, LOW);
analogWrite(motor, LOW);
}
delay(5);
}
Our test run of the code: http://www.youtube.com/watch?v=-BTyNu-XDLA&feature=youtu.be
Step 9: Final Product
Dulcie Head and Dalton Bolger
Pomona College
Test Drive on Table: http://www.youtube.com/watch?v=FxSsUAD_-vc&feature=youtu.be
Test Back Wheels: http://www.youtube.com/watch?v=hbLg-QDK5a0&feature=youtu.be
Driving down an incline! http://www.youtube.com/watch?v=Kx1m3e634-0&feature=g-upl
Participated in the
Make It Real Challenge