DIY SPEEDOMETER AND ODOMETER

71,246

191

34

About: We are two electronic hobbyist aiming to unleash the capability of arduino

Intro: DIY SPEEDOMETER AND ODOMETER

Hey guys, this a instructable of how to make a bike speedometer.Yeah,you read it right the one that we use in car but only for 10$ .Well the first this for you to know is that this is the collaborated project of Mr_DIY_Electrician and paurushthemaker .So back to topic our project is all about a speedometer which has 3 modes as follow:-

Speedometer(for speed) and odometer(for distance)

Task1.-Cover 20 miles

Task2-Achieve 30mph speed

And yes one more thing is that this is a arduino speedometer so there is no limitation for imagination. Let's Get Started.........

Step 1: HOW IT WORKS

The working of a project is simple. It is also very important to understand it for making the project. Basically the apparatus consists of the reed switch or the magnetic switch mounted on the frame of the cycle and a magnet mounted on the one of the spokes. As the wheel rotates the magnet triggers the switch every rotation. The signal go to the arduino which counts the no of rotation and finds the distance covered(you have to pre enter the diameter of your cycle). The arduino also measures the time and calculates the speed. The output from the arduino then goes to the lcd where it is shown in miles per hour (you can convert it if you want).

Step 2: MATERIALS REQUIRED

The full project would cost you about 5$-10$ depending on the place you live in. The cycle speedometer also would require moderate soldering skills and an afternoon. so without any further ado the materials for the build are --:

1. The arduino board - i got Rs.330 which is around 5$ but to programme the pro mini you will also need to have an arduino uno or an usb to ttl adapter (how to program an arduino pro mini with an uno) or if you don't have it then use an arduino micro or an arduino uno.

2.Arduino 16x2 lcd (Rs150 or 2.3 $)

3.7805 voltage regulator (increases the control over the contrast no major difference -optional)

4. 2x switches for backlight and on off (optional)

5.220 ohm resistor

6. trimer pot 10k ohm

7.female headers and male headers if you want the reed switch to be detachable

8. reed switch

9.wire

10. a momentary switch to change the modes

11. 0.1uf capacitor to reduce the debounce of the button

12.10k ohm resistor

The tools you would require are

1. soldering iron

2.solder

3. enclosure

4. cutting tool like the dremel to cut out holes in the enclosure to mount he lcd and stuff

5. hot glue or any adhesive to mount the various components.

Step 3: THE CODE

Before moving on to the electronics it would be good to flash the code so that you don't need to struggle between wires afterwards

flash the given code on the arduino but DON'T FORGET TO SET IN THE DIAMETER OF YOUR CYCLE.

the code can be downloaded below

Step 4: THE ELECTRONICS

The wiring diagram can be found above also I have mentioned it down

LCD -ARDUINO

1 - GND

2 VCC

3 VIPER PIN OF THE POT (ends to vcc and gnd and center to pin 3 of lcd)

4 13

5 gnd

6 12

7 --

8 --

9 --

10 --

11 11

12 10

13 9

14 8

15 VCC

16 GND

Also

a 220 ohm resistor is to be connected between pin 2 of the arduino and ground(pull down)

the momentary switch is connected to pin two and vcc

a 0.1 uf capacitor between the two terminals of the switch to reduce the debounce

the reed switch to vcc and A0

a resistor between A0 and gnd (pull down)

After connecting all this the wiring would be complete and now you can connect power and check if every thing is working

Step 5: THE ENCLOSURE

The enclosure can be a plastic box or a wooden , just that it should be sturdy and should have enough space.

After mounting the switches ,lcd,button and headers do check the working of the device also.

as far as possible try and make it waterproof because the cycle goes into the worst of the conditions.t

Step 6: TESTING AND TROUBLESHOOTING

Connect a 9v battery and test all three modes completely. Bring a magnet close to the reed switch and the speed and distance should increase.

If it is not so in your case then post your doubts and queries in the comments and i will answer them back as soon as possible...

Share

    Recommendations

    • Metalworking Contest

      Metalworking Contest
    • Tiny Home Contest

      Tiny Home Contest
    • Fix It! Contest

      Fix It! Contest

    34 Discussions

    0
    None
    kunal2906

    9 months ago

    i also have same problem either 47 or 0 mph

    so please help!!

    0
    None
    ok121

    2 years ago

    Hey guys,

    I copied and pasted the speedometer code onto my arduino, but get either binary results: it read either 0.0 mph or 47 mph. When it read 47pm, there was a long delay in the reading before the "speed" went back down to 0 mph.

    I installed simpler code just to test out the reed switch and it is reading the magnetic field correctly, so the issue isn't in the reed switch. I wonder if there's an issue with the code or the arduino setup.

    Have any of you guys also faced this similar issue? If so, how did you resolve?

    Thanks,

    John

    2 replies
    0
    None
    Aviral mishraok121

    Reply 9 months ago

    add a resister directly from A0 to the adjacent gnd of the arduino. i think this is becaue the ardunio is not able to receive analog signal from the reed switch.

    0
    None
    Md_1704ok121

    Reply 1 year ago

    i am facing similar kind of problem. The code does display intermediate values at lower rotational speed but at higher rotational speed it displays 47 mph constantly irrespective of the speed of the rotation.

    0
    None
    David10153

    1 year ago

    what Arduino did I you buy?

    0
    None
    CornelN1

    2 years ago

    Hello,

    i am workind on something similar, he differences are:

    - i have a line follower sensor on digital pin 2

    - i have a black and white stripe with 20 mm between 2 white stripes

    - i need the output on the serial monitor, and not on the lcd.

    i have put up a sketch, but i have some issues with the time.

    i need to:

    - start the counting every time the pin 2 changes (the sensor has moved) and count the millis until next pin 2 changes, and have the speed. at the end, if the pin 2 does not changes for 1 sec, the program stop's

    can someone help me?

    i have this sketch until now:

    // Constante:

    const int buttonPin = 2; // pinul digital pentru senzorul de linie

    // Variabile:

    int buttonPushCounter = 0; // counter numar impulsuri (1 sau 0)

    int buttonState = 0; // starea actuala a senzorului de linie (1 sau zero)

    int lastButtonState = 0; // starea anterioara a senzorului de linie (1 sau zero)

    long time = 0;

    void setup() {

    // inititalizeaza intrarea pentru senzorul de linie:

    pinMode(buttonPin, INPUT);

    // initializeaza comunicatia seriala:

    Serial.begin(115200);

    Serial.println("________________________");

    Serial.println("Program test");

    Serial.println("________________________");

    }

    void loop() {

    // citeste intrarea senzorului de linie:

    buttonState = digitalRead(buttonPin);

    time = 0;

    // compara starea butonului actuala cu cea anterioara

    if (buttonState != lastButtonState) {

    // if the state has changed, increment the counter

    if (buttonState == HIGH) {

    // if the current state is HIGH then the button

    // wend from off to on:

    buttonPushCounter++;

    time++;

    }

    Serial.print("Deplasare [mm]: ");

    Serial.println(buttonPushCounter*20);

    Serial.print("Timp [s]: ");

    time = millis();

    //prints time since program started

    Serial.println(time/1000);

    Serial.print("Viteza [mm/s]: ");

    Serial.println((buttonPushCounter*20)/(time/1000));

    Serial.println("________________________");

    // Delay a little bit to avoid bouncing

    delay(1);

    }

    // save the current state as the last state,

    //for next time through the loop

    lastButtonState = buttonState;

    time = 0;

    }

    0
    None
    JOANAHR

    2 years ago

    Hey guys, does anyone know what he meant by pin 2 for the momentary switch? is it from the LCD or pin 2 from Arduino?

    0
    None
    CălimanuL

    2 years ago

    hello i want to build an arduino that measures speed and a proximity sensor , something like i can set it in the car near to see how fast i am going , also i want to make a sensor that will tell me the distance between my hand and my sensor.

    what would i need to do that?

    0
    None
    BartoszH1

    2 years ago

    how to make it in km/h ?

    0
    None
    henrypulford

    3 years ago on Introduction

    Hi there thanks for the great instructable! I just wanted to know if it would be possible to add a startup message into the code so when the divice is first powered on it would say "Henrys Bike" for like 10 seconds - Thanks :-)

    2 replies

    In the beginning of the setup section on the code, put something like:
    lcd.print ("");
    delay (10000);
    lcd.clear ();


    The rest of the code goes below.

    0
    None
    ztaticz

    2 years ago

    Can anyone explain the purpose of the reedcounter and max reed counter?

    0
    None
    ok121

    2 years ago

    Hey guys,

    I copied and pasted the speedometer code onto my arduino, but get either binary results: it read either 0.0 mph or 47 mph. When it read 47pm, there was a long delay in the reading before the "speed" went back down to 0 mph.

    I installed simpler code just to test out the reed switch and it is reading the magnetic field correctly, so the issue isn't in the reed switch. I wonder if there's an issue with the code or the arduino setup.

    Have any of you guys also faced this similar issue? If so, how did you resolve?

    Thanks,

    John

    0
    None
    npitz

    2 years ago

    how to convert from MPH to KMH?

    what the meaning of value = 56.8 on equation below:

    "mph = (56.8*float(circumference))/float(timer);//calculate miles per hour"

    would you explain to me about "how it work" of your code?

    1 reply
    0
    None
    tiger12506npitz

    Reply 2 years ago

    I'm not the OP, but this is how:
    you provide r [in]

    1000 [cyc] * 60 [sec] * 60 [min] * [ft] * [mi]
    ---------------------------------------------
    12 [in] * 5280 [ft] * [sec] * [hr]

    = 56.81818...

    The 56.8 is just unit conversion from (circumference in inches per 1000Hz interrupt) to (miles per hr)

    To get kilometers per hour, just do one more unit conversion

    mi 1 km
    ----- * --------
    hr 0.621371

    In other words, change 56.8 in the code to 91.44 (still specifying radius in inches)
    (you'll have to change other magic values in the code too)

    To do it properly (specify radius in cm) you should redo the calculation similar to what I have done above, but starting from centimeters instead of inches. Left as an exercise to the reader.

    Here's the fancy name for what I've done in a wikipedia article.

    https://en.wikipedia.org/wiki/Dimensional_analysis


    in school we called it the "factor label method"

    0
    None
    DeanG2

    3 years ago on Introduction

    This is now housed in a plastic 3x5 card box, temporarily stuck to the bike with a couple of "repair straps" of metal from the big box store. This means my wife can know clock her workouts. I just have to repair the cracked vinyl seat and the front roller that cracked of the axle.

    0
    None
    DeanG2

    3 years ago on Introduction

    I had an exercise bike without a control head. It died years ago. The back bar under the seat is extra long so I sometimes trip over it. I was going to junk the thing until I found this article. The project is running, but is not in a housing yet. I'll post pictures of the unit and the installation. Thanks for saving us a TON on exercise equipment.

    1 reply
    0
    None
    PaurushTheMakerDeanG2

    Reply 3 years ago

    congratulations
    and thanks for the encouraging comments

    0
    None
    erik_montesdeoca

    3 years ago on Step 6

    Great Job ¿Do you know how to convert to energia code for msp430g launchpad o TI?