Step 16: Take it Out on the Road

You should be ready to hit the road. Don't let the awesomeness of your new bike speedometer distract you from road hazards!
<p>Made it, not exactly the same but still working. Great!!</p>
<p>can anyone explain the purpose of the reed counter ? </p>
<p>Hello,</p><p>i am workind on something similar, he differences are:</p><p>- i have a line follower sensor on digital pin 2</p><p>- i have a black and white stripe with 20 mm between 2 white stripes</p><p>- i need the output on the serial monitor, and not on the lcd.</p><p>i have put up a sketch, but i have some issues with the time.</p><p>i need to:</p><p>- 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</p><p>can someone help me?</p><p>i have this sketch until now:</p><p>// Constante:</p><p>const int buttonPin = 2; // pinul digital pentru senzorul de linie</p><p>// Variabile:</p><p>int buttonPushCounter = 0; // counter numar impulsuri (1 sau 0)</p><p>int buttonState = 0; // starea actuala a senzorului de linie (1 sau zero)</p><p>int lastButtonState = 0; // starea anterioara a senzorului de linie (1 sau zero)</p><p>long time = 0;</p><p>void setup() {</p><p> // inititalizeaza intrarea pentru senzorul de linie:</p><p> pinMode(buttonPin, INPUT);</p><p> // initializeaza comunicatia seriala:</p><p> Serial.begin(115200);</p><p> Serial.println(&quot;________________________&quot;);</p><p> Serial.println(&quot;Program test&quot;);</p><p> Serial.println(&quot;________________________&quot;);</p><p>}</p><p>void loop() {</p><p> // citeste intrarea senzorului de linie:</p><p> buttonState = digitalRead(buttonPin);</p><p> time = 0; </p><p> // compara starea butonului actuala cu cea anterioara</p><p> if (buttonState != lastButtonState) {</p><p> // if the state has changed, increment the counter</p><p> if (buttonState == HIGH) {</p><p> // if the current state is HIGH then the button</p><p> // wend from off to on:</p><p> buttonPushCounter++;</p><p> time++;</p><p> }</p><p>Serial.print(&quot;Deplasare [mm]: &quot;);</p><p>Serial.println(buttonPushCounter*20);</p><p> Serial.print(&quot;Timp [s]: &quot;);</p><p> time = millis();</p><p> //prints time since program started</p><p> Serial.println(time/1000);</p><p> Serial.print(&quot;Viteza [mm/s]: &quot;);</p><p> Serial.println((buttonPushCounter*20)/(time/1000));</p><p> Serial.println(&quot;________________________&quot;);</p><p> // Delay a little bit to avoid bouncing</p><p> delay(1);</p><p> }</p><p> // save the current state as the last state,</p><p> //for next time through the loop</p><p> lastButtonState = buttonState;</p><p> time = 0;</p><p>}</p>
<p>can anyone explain the purpose of the reed counter and max reed counter? is it the max time for one rotation or something to that effect? </p>
<p>Hi Amanda, very helpful tutorial! Question for you... I'm trying to use this for measuring speed and distance of my son's hamster wheel. And will try to use a light sensor and LED to measure the revolutions of the wheel (no wires for the hamster to chew). For now just testing the code with a pushbutton switch to simulate RPMs. The radius of the wheel is 4.25 inches. With low RPMs (between 1 and 2 revs per second), I get a fixed speed of 15.02mph. Higher revs start to give me fluctuating speeds as expected. When RPMs drop to 0, it shows a speed of 0.002 mph (never 0.00). Any suggestions on how to fix it? Thanks in advance!</p>
<p>What things should i change to use it in km/h? And whats that 56.8 in the code?</p>
<p>Hi, have you figured out what 56.8 is? I also want to use it in km/h, but don't have no idea what this is.</p>
<p>1 inch/second is 0.0568 mph therefore 1 inch/millisecond = 56.8 mph</p>
<p>Hi, have you figured out what 56.8 is? I also want to use it in km/h, but don't have no idea what this is.</p>
<p>I've tried using this code to measure windspeed on an anemometer for a project of mine. it's a rotating magnet and a reed switch so it's the same principle. The reed test works fine. i've changed the radius (0.87 inches) to fit with my windspeed sensor. However when i upload the code, the serial port view just gives me 0's for MPH for the first reading then a steady steam of 28.21 MPH. Any ideas?</p>
<p>Did you manage to work this out in the end b3nz1? I'm doing similar.</p>
<p>I had the same problem. What i found was that my reed switch was dong one of 3 things; 1.chattering when the magnet was passed over it. To fix this I just increased the maxreedcounter value to 150 or 200ms. The original 100ms wasnt enough to sstop the second switch cycle induced when the switch left the magnetic field. 2. If i passed the magnet too slowly over the switch the switch would stay closed for more then 1 sample cycle, so the maximum speed reading would output. ;so eithur move the magnet faster over the switch or find a mag with a more concentrated field. 3. My first reed switch was normally closed, my own stupitidy there... get one thats n/o. goodluck</p><p>have u found out what that 56.8 value is? im tryna chang the code and lost where that comes from.</p>
<p>hi,have you figured out what the 56.8 value is? I am also doing a similar project, but I want to show the speed in km per hour. I have changed something, but still have no idea what 56.8 is.</p>
<p>Hello Amanda! Im trying to do something similar to your project, but I would like to use a hall effect sensor as it can be used at higher frequencies, how would the code change to accomodate the Hall Effect sensor?</p>
<p>for me the code is not correct. The pulse should be captured when reedVal and reedcounter=maxreedcounter not when reedcounter=0</p>
<p>Hi Amanda, I have a problem with your's code on my stationary bike. Speed calculated by arduino is very low (sth like 1 - 5 km/h max) and I don't know what is wrong :/ I changed only radius for 0.12 m (this is radius of my stationary bike wheel). Is that any problem with fact then my bike have a belt drive ? Something like this electronics.stackexchange.com/questions/140063/measure-the-speed-of-a-stationary-bike-with-belt-drive ? Please help!</p>
<p>A little late, but FYI the wheel size should be in Inches not meters</p>
<p>Hi Amanda</p><p>Great instructable! I'm trying to use the same principles in a slightly different project in which I am importing a library what already uses the Timer1 interrupt - what would be the implications of using Timer 2 as the interrupt in the code to measure the speed of the wheel in terms of accuracy of measurement? And is it simply a case of amending the timer setup to use TCCR2A etc.?</p>
<p>Hello! <br><br>Can anyone share code for this but with classic display? I dont have experience with programming so i need some help. Thanks for helping.</p>
<p>hi</p><p>which other lcd is available to use?</p>
<p>I have a similar code. Initially, I was using the capacitive sensor technique but I realized that it is severely affected by external conditions. I am thinking of using the reed switch. For measuring distances, has anyone faced problems with the reed switch method ?</p>
<p>I have a similar code. Initially, I was using the capacitive sensor technique but I realized that it is severely affected by external conditions. I am thinking of using the reed switch. For measuring distances, has anyone faced problems with the reed switch method ?</p>
<p>I have a similar code. Initially, I was using the capacitive sensor technique but I realized that it is severely affected by external conditions. I am thinking of using the reed switch. For measuring distances, has anyone faced problems with the reed switch method ?</p>
<p>hahaha amazing!! Thanks for sharing!</p>
hello..<br> <br> im using this LCD<br> <a href="http://www.engineersgarage.com/electronic-components/16x2-lcd-module-datasheet" rel="nofollow">http://www.engineersgarage.com/electronic-components/16x2-lcd-module-datasheet</a><br> <br> is there anything i have to modify?
<p>this lcd does not support serial communication, you can get it to work, but you will have to read the datasheet and make some changes to the code.</p>
<p>Could you please help me with the code for this LCD display??? Please (Serial communication 16x2 display) Thank You</p>
<p>See this article:<br>http://www.instructables.com/id/Connecting-an-LCD-to-the-Arduino/</p>
<p>Hi. Can I still use the code for reed if I change the reed switch to hall effect sensor? Because my reed switch can't get accurate mph(double / triple of the actual speed) when the speed is slow</p>
but it does work when it's fast?
<p>When it get faster, the reed switch works fine when the speed increase even the result i get doesn't show a linear increment when i increase the voltage by 0.5 each time (I am using a DVD player motor with disc taped on it to act as the bike tyre) and it break down after 47mph. </p>
<p>How would you change the final speed code to also display the distance travelled along with the speed?</p>
<p>I thought of the same thing. But I would have used a hall effect sensor and a standalone Atmega 8. Not everyone has an arduino for every project</p>
<p>Thank you so much for posting this project. I'm building something similar to this and I came across this project of yours while looking for some additional ideas. It provided a lot of much needed inspiration. Best wishes to you... </p>
<p>Amazing! sorry I curious, may I get a picture of proteus simulation <br>project? I really want to know how it does work very nice. Thanks in <br>advance.</p>
<p>Your design will help out tremendously. Our design includes controls for a flywheel that will help stabilize a bicycle at slow velocities, and it is extremely important to get a very accurate forward velocity of the bike at slow velocities. Instead of using one magnet, my idea is to use multiple magnets equally spaced around the tire to get a more accurate angular velocity of the wheel. I would like to first ask for your help on modifying your code to include reading multiple magnets with one switch. Help modifying your code at all will be greatly appreciated. Love the instructable.</p>
if your magnates are spaced evenly around the wheel then you'll just need to divide the speed calculation by the number of magnets to get the right speed for your setup. Sounds cool, post a pic when you're done!
<p>Hello, </p><p>I was just wondering about the code for radius. Would it not be better to put in the radius on the wheel of where the reed switch is, vs. just the radius of the wheel? That way the speed is much more accurate? </p>
<p>***like where the magnet on the wheel is? (I'm using a hall effect sensor for my project)***</p>
<p>the reed switch is used to measure rpm, so it doesn't matter where it is on the wheel when we measure it. The radius of the wheel is used to calculate the distance the bike travels per rotation.</p>
Good! <br>Miss I have a problem with your project when I compile I get the first line goes to zero in the other 47.68 without placing the magnet I can failicar the correct scheme reed switch assembly
<p>does it work after you spin the wheel?</p>
Awesome instructable. I am working on a similar speedometer for my motorcycle. I was wondering, which would be better to use, a magnetic reed switch like you did or a hall effect sensor. I have a feeling that the reed switch might not be fast enough to sense the front wheel spinning at 60 - 70 MPH. Any suggestions?
I think the hall effect sensor will be better, the reed switch is mechanical and will eventually break down.
I have the same problem. It also shows 56.84 when bike goes very slow. <br>Anyone can help with code? Amanda? :-)

About This Instructable




Bio: I'm a grad student at the Center for Bits and Atoms at MIT Media Lab. Before that I worked at Instructables, writing code for ... More »
More by amandaghassaei:OTCA Metapixel - Conway's Game of Life"9 Degrees of Freedom" IMUTwitter Controlled Pet Feeder
Add instructable to: