Show Posts
Pages: [1]
1  Using Arduino / Sensors / Newbie regarding speedometer sensor(reed switch) and arduino coding on: February 23, 2011, 02:13:34 am
Currently i am troubleshooting a project regarding using electro-luminscent wire to display out the speed together with the speedometer sensor(reed switch). It's done by previous patch of students who has already completed, thats what my teacher told me. when the teacher pass it to me, the sensor wire have loosen. There are 2 wires for the sensor.

The question is i don't know where should i connect the sensor.

The arduino board which i am using was arduino duemilanove AT328.


Below are the coding..
#define onesPins
#define tensPins

int oldOnes = -1;
int oldTens = -1;

int x;

int sleepms = 5;
volatile int sensorState = LOW;  // toggled by the interrupt routine.

unsigned long thisTime, lastTime;
float wci = (27.0 * PI);  // "wci" is wheel circumfrence (inches) = pi * diameter
int spinTime;
double gSpeed;
int foo = (1000.0 * 3600.0) / 63360.0; // miliseconds per hour divided by inches per mile.

unsigned long fartTime = 0;
int fartState = 0;

void setup()
{
  int p;
  for (p = 1; p <= 9 ; p += 2)  {
    pinMode(onesPins(p), OUTPUT);
  }
  for (p = 0; p < 7; p++) {
    pinMode(tensPins(p), OUTPUT);
  }

    // wait for interrupts on pin 3.
  attachInterrupt(1, spoke_int, RISING);
 
  thisTime = millis(); 
  gSpeed = 0;
 
  //Serial.begin(19200);
  good_morning();
  sensorState = LOW;
}

void loop()
{
  byte speedmph;
   
  speedmph = checkSpeed();
 
  if (speedmph > 0)  {
     displaySpeedInLights(speedmph);

  } else {
    fartAround();
  }
  delay(sleepms);
}

/* this takes an integer between 0 and 79, and
   picks which pins to turn on.  it sets the result
   in the global array newPinState.
*/

void displaySpeedInLights(int myspeed)  {
 
  //Serial.print("speed = ");
  //Serial.print(myspeed);
  //Serial.print("\n");
 
  // special case for zero speed: all lights off.
  if (myspeed == 0)  {
    all_off();
    return;
  }
 
  // integer math working for us, for once.
  // we will have to double-check that the rounding goes the right way.
 
  // we only disply the even speeds, so decrement by 1 if even.
  myspeed = (((myspeed + 1) / 2 ) * 2) - 1;
 
  int tens = myspeed / 10;
  int ones = myspeed - (tens * 10);
 
  if (oldOnes != ones)  {
      if (oldOnes >= 0) {
        digitalWrite(onesPins(oldOnes), LOW);
      }
      digitalWrite(onesPins(ones), HIGH);
      oldOnes = ones;
  }
 
  if (oldTens != tens)  {
      if (oldTens >= 0) {
        digitalWrite(tensPins(oldTens), LOW);
      }
      digitalWrite(tensPins(tens), HIGH);
      oldTens = tens;
  }
}


int checkSpeed() {
  double mySpeed;
  // was the sensor pinged since we last checked?
  if (sensorState == HIGH) {
    // detected!  blink.
    //ledState = !ledState;
    //digitalWrite(ledPin, ledState);
   
    lastTime = thisTime;
    thisTime = millis();
    // TODO: deal with wraparound of millis() .
    spinTime = thisTime - lastTime;
 
    /*
    * wci is thousandths of an inch,
    * spinTime is thousandths of a second.
    * so wci/spintime is inches per second.
    * we want miles per hour.
    *
    * in case you were wondering:
    * 1 mile = 63 360 inches
    * 1 hour = 3 600  seconds
    *
    */

    // multiplication is communitive, right?
    mySpeed = wci / spinTime ;
    //speed = ((wci / spinTime) * 3600.0) / 63360.0;
   
   // Serial.print("Speed = ");
    //Serial.print(speed * 1000.0, DEC);
    //Serial.println(" milimiles/hour");
    //Serial.print(" inches/seconds = ");
    //Serial.print(speed * 1000.0 * 3600.0, DEC);
    //Serial.print(" inches/hour = ");
    //Serial.print((speed * 1000.0 * 3600.0) / 63360.0, DEC);
    //Serial.print(" miles/hour = ");
    //Serial.print(speed * foo, DEC);
    //Serial.print(" miles/hour\n");
   
    sensorState = LOW;
    gSpeed = mySpeed;
  } else if ((millis() - lastTime) > 7000){
    gSpeed = mySpeed = 0;
  } else {
    mySpeed = gSpeed;
  }
  //return (gSpeed * foo);
  // kph version: 1.61 kilometers per mile
  return (gSpeed * foo * 1.61);
}

// display some wacky attention-grabbing thing when we're not moving
void fartAround() {
 
  //Serial.print("Farting around\n");
  if (millis() - fartTime > 1000)  {
      // change state!
      fartState = !fartState;
      fartTime = millis();
  }
 
  if (fartState == 1) {
    // light up 23 for now.
    displaySpeedInLights(23);
    //good_morning();
  } else {
    all_off;
  }
}

// the interrupt routine
void spoke_int() {
  sensorState = HIGH;
}


// a little wake-up test.
void good_morning() {
  byte p;
  //Serial.print("Good morning!\n");
  for (p = 1; p <= 9 ; p += 2)  {
    digitalWrite(onesPins(p), HIGH);
    delay(100);
    digitalWrite(onesPins(p), LOW);
  }
 
  for (p = 0; p < 7; p++) {
    digitalWrite(tensPins(p), HIGH);
    delay(100);
    digitalWrite(tensPins(p), LOW);
  }
 
}

void all_off() {
    digitalWrite(0,LOW);
    digitalWrite(1,LOW);
    digitalWrite(2,LOW);
    digitalWrite(4,LOW);
    digitalWrite(5,LOW);
    digitalWrite(6,LOW);
    digitalWrite(7,LOW);
    digitalWrite(8,LOW);
    digitalWrite(9,LOW);
    digitalWrite(10,LOW);
    digitalWrite(11,LOW);
    digitalWrite(12,LOW);
    oldOnes = -1;
    oldTens = -1;
}
2  Using Arduino / Project Guidance / Re: Newbie regarding speedometer sensor(reed switch) and arduino coding on: February 22, 2011, 08:56:52 pm
This is the circuit digram which are related to this project.
3  Using Arduino / Project Guidance / Newbie regarding speedometer sensor(reed switch) and arduino coding on: February 22, 2011, 08:53:40 pm
Currently i am troubleshooting a project regarding using electro-luminscent wire to display out the speed together with the speedometer sensor(reed switch). It's done by previous patch of students who has already completed, thats what my teacher told me. when the teacher pass it to me, the sensor wire have loosen. There are 2 wires for the sensor.

The question is i don't know where should i connect the sensor.

The arduino board which i am using was arduino duemilanove AT328.


Below are my coding might kno .

#define onesPins
#define tensPins

int oldOnes = -1;
int oldTens = -1;

int x;

int sleepms = 5;
volatile int sensorState = LOW;  // toggled by the interrupt routine.

unsigned long thisTime, lastTime;
float wci = (27.0 * PI);  // "wci" is wheel circumfrence (inches) = pi * diameter
int spinTime;
double gSpeed;
int foo = (1000.0 * 3600.0) / 63360.0; // miliseconds per hour divided by inches per mile.

unsigned long fartTime = 0;
int fartState = 0;

void setup()
{
  int p;
  for (p = 1; p <= 9 ; p += 2)  {
    pinMode(onesPins(p), OUTPUT);
  }
  for (p = 0; p < 7; p++) {
    pinMode(tensPins(p), OUTPUT);
  }

    // wait for interrupts on pin 3.
  attachInterrupt(1, spoke_int, RISING);
 
  thisTime = millis(); 
  gSpeed = 0;
 
  //Serial.begin(19200);
  good_morning();
  sensorState = LOW;
}

void loop()
{
  byte speedmph;
   
  speedmph = checkSpeed();
 
  if (speedmph > 0)  {
     displaySpeedInLights(speedmph);

  } else {
    fartAround();
  }
  delay(sleepms);
}

/* this takes an integer between 0 and 79, and
   picks which pins to turn on.  it sets the result
   in the global array newPinState.
*/

void displaySpeedInLights(int myspeed)  {
 
  //Serial.print("speed = ");
  //Serial.print(myspeed);
  //Serial.print("\n");
 
  // special case for zero speed: all lights off.
  if (myspeed == 0)  {
    all_off();
    return;
  }
 
  // integer math working for us, for once.
  // we will have to double-check that the rounding goes the right way.
 
  // we only disply the even speeds, so decrement by 1 if even.
  myspeed = (((myspeed + 1) / 2 ) * 2) - 1;
 
  int tens = myspeed / 10;
  int ones = myspeed - (tens * 10);
 
  if (oldOnes != ones)  {
      if (oldOnes >= 0) {
        digitalWrite(onesPins(oldOnes), LOW);
      }
      digitalWrite(onesPins(ones), HIGH);
      oldOnes = ones;
  }
 
  if (oldTens != tens)  {
      if (oldTens >= 0) {
        digitalWrite(tensPins(oldTens), LOW);
      }
      digitalWrite(tensPins(tens), HIGH);
      oldTens = tens;
  }
}


int checkSpeed() {
  double mySpeed;
  // was the sensor pinged since we last checked?
  if (sensorState == HIGH) {
    // detected!  blink.
    //ledState = !ledState;
    //digitalWrite(ledPin, ledState);
   
    lastTime = thisTime;
    thisTime = millis();
    // TODO: deal with wraparound of millis() .
    spinTime = thisTime - lastTime;
 
    /*
    * wci is thousandths of an inch,
    * spinTime is thousandths of a second.
    * so wci/spintime is inches per second.
    * we want miles per hour.
    *
    * in case you were wondering:
    * 1 mile = 63 360 inches
    * 1 hour = 3 600  seconds
    *
    */

    // multiplication is communitive, right?
    mySpeed = wci / spinTime ;
    //speed = ((wci / spinTime) * 3600.0) / 63360.0;
   
   // Serial.print("Speed = ");
    //Serial.print(speed * 1000.0, DEC);
    //Serial.println(" milimiles/hour");
    //Serial.print(" inches/seconds = ");
    //Serial.print(speed * 1000.0 * 3600.0, DEC);
    //Serial.print(" inches/hour = ");
    //Serial.print((speed * 1000.0 * 3600.0) / 63360.0, DEC);
    //Serial.print(" miles/hour = ");
    //Serial.print(speed * foo, DEC);
    //Serial.print(" miles/hour\n");
   
    sensorState = LOW;
    gSpeed = mySpeed;
  } else if ((millis() - lastTime) > 7000){
    gSpeed = mySpeed = 0;
  } else {
    mySpeed = gSpeed;
  }
  //return (gSpeed * foo);
  // kph version: 1.61 kilometers per mile
  return (gSpeed * foo * 1.61);
}

// display some wacky attention-grabbing thing when we're not moving
void fartAround() {
 
  //Serial.print("Farting around\n");
  if (millis() - fartTime > 1000)  {
      // change state!
      fartState = !fartState;
      fartTime = millis();
  }
 
  if (fartState == 1) {
    // light up 23 for now.
    displaySpeedInLights(23);
    //good_morning();
  } else {
    all_off;
  }
}

// the interrupt routine
void spoke_int() {
  sensorState = HIGH;
}


// a little wake-up test.
void good_morning() {
  byte p;
  //Serial.print("Good morning!\n");
  for (p = 1; p <= 9 ; p += 2)  {
    digitalWrite(onesPins(p), HIGH);
    delay(100);
    digitalWrite(onesPins(p), LOW);
  }
 
  for (p = 0; p < 7; p++) {
    digitalWrite(tensPins(p), HIGH);
    delay(100);
    digitalWrite(tensPins(p), LOW);
  }
 
}

void all_off() {
    digitalWrite(0,LOW);
    digitalWrite(1,LOW);
    digitalWrite(2,LOW);
    digitalWrite(4,LOW);
    digitalWrite(5,LOW);
    digitalWrite(6,LOW);
    digitalWrite(7,LOW);
    digitalWrite(8,LOW);
    digitalWrite(9,LOW);
    digitalWrite(10,LOW);
    digitalWrite(11,LOW);
    digitalWrite(12,LOW);
    oldOnes = -1;
    oldTens = -1;
}
4  Using Arduino / Programming Questions / Re: expected unqualified-id before '{' on: February 14, 2011, 01:59:45 am
Bump
Pages: [1]