Go Down

Topic: Código para Arduino UNO enviar impulsos de sensor hall a Excel? (Read 2458 times) previous topic - next topic

tiocede

Llevo varios días leyéndolo y no encuentro ninguna solución

Alguien me puede ayudar a escribir el código para Arduino UNO para que envíe los impulsos del sensor a una hoja Excel a través del puerto serie (NetComm.ocx). soy muy novato

Gracias por anticipado.


tiocede

#2
Jan 02, 2013, 07:28 pm Last Edit: Jan 02, 2013, 07:43 pm by tiocede Reason: 1
Gracias Igor R por tu interés

Ya había leído este Post tuyo, y se sacado algunas enseñanzas; pero no me vale.
Te explico que yo lo que pretendo es enviar un impulso digital (High) a Excel que manda mi sonda magnética (Efecto Hall) y no un valor numérico como en tu ejemplo.

He realizado el siguiente código, que funciona la parte de enviar los impulsos a Excel por el puerto serie; pero tiene mucho ruido y los pulsos son aleatorios y realmente no es reflejo del los pulsos que genera la sonda.

// digital pin 2 has a pushbutton (interruptor magnético efecto hall) attached to it. Give it a name:
int Sonda = 2;

// the setup routine runs once when you press reset:
void setup() {
  Serial.begin(19200);       // initialize serial communication at 19200 bits per second:
  pinMode(Sonda, INPUT);     // make the Sonda´s pin an input:
}
// the loop routine runs over and over again forever:
void loop() {
  // read the input pin:
  int buttonState = digitalRead(Sonda);
  // print out the state of the button:
  Serial.println(buttonState);
  delay(1);        // delay in between reads for stability
}

La sonda tiene dos cables (1 contacto). Un cable le conecto al pin 2 y el otro 3,3 V   de la placa ARDUINO

¿Que estoy haciendo mal?

Igor R

#3
Jan 02, 2013, 11:25 pm Last Edit: Jan 02, 2013, 11:29 pm by Igor R Reason: 1
Puedes mandar un valor númerico (1 u 0), puedes mandar un texto, etc... Eso es lo menos. Cuando leas los datos desde Excel, tienes que procesarlos adecuadamente. Por cierto, High y Low están definidos internamente como un 1 y un 0.

Para saber cómo conectar tu sensor, necesitas dar más información.... Normalmente los sensores hall suelen ser de 3 pines y los de 2 pines son inductivos.
He visto algunos de 2, por ejemplo en sondas utilizadas en velocidad de ruedas de coches, que son un poco especiales. En éstos últimos,necesitas alimentar y sacar la señal de un pin (con resistencia de pull up) y el otro a masa, pero son menos comunes.
Si es un sensor inductivo, necesitarás adaptar la señal.
Pero vaya, hay muchos estilos... es por ponerte ejemplos.

La mejor manera sería usar interrupciones. Tienes multitud de ejemplos, busca en google/foro por tacómetro.

Saludos,


Igor

tiocede

He conseguido lo que buscaba con el siguiente código basado en un ejemplo de dominio publico.
Voy a experimentar con el por si necesitará corregir/mejorar.

Quote

/*
 Estado detección de cambios (detección de bordes)
    
 A menudo, no es necesario conocer el estado de una entrada digital todo el tiempo,
 pero usted sólo tiene que saber cuando la entrada cambia de un estado a otro.
 Por ejemplo, usted quiere saber cuando un botón de OFF a ON. Esto se llama detección de cambio de estado,
 o la detección de bordes  
 
 Este ejemplo muestra cómo detectar cuando cambia el pulsador de apagado a encendido  y de encendido a apagado.  
 
 El circuito:
 * pulsador (sonda) conectado al pin 2 de +5 V
 * 10K resistor conectado a la clavija 2 desde masa
 * LED conectado entre el pin 13 y tierra (o utilizar el built-in LED en
   la mayoría de las placas Arduino)
 
 creado 27 de septiembre 2005
 modificado 30 de agosto 2011 por Tom Igoe

 Este código de ejemplo está en el dominio público.  
 http://arduino.cc/en/Tutorial/ButtonStateChange
 
 adapatado a sonda magnetica  el 02/01/2013 por tiocede
 */

// Constante que no va a cambiar:
const int sondaPin = 2;      // el pin a la que la sonda esta  conectado
const int ledPin = 13;       // el pin a que se conecta el LED

// Variables que cambian de valor:
int buttonPushCounter = 0;   // contador para el número de pulsaciones
int buttonState = 0;         // estado actual de la sonda
int lastButtonState = 0;     // estado anterior de la sonda

void setup() {
  pinMode(sondaPin, INPUT);  // inicia el pin de la sonda como entrada
  pinMode(ledPin, OUTPUT);   // inicia el pin del LED como salida
  Serial.begin(19200);       // inicia las comunicaciones serie a 19200 baudios
}

void loop() {
  buttonState = digitalRead(sondaPin);   //lee el pin de entrada de la sonda
 
  if (buttonState != lastButtonState) { // compara el estado de la sonda con el estado anterior
    if (buttonState == HIGH) {          // si el estado ha cambiado incremta el contador
      buttonPushCounter++;              // si el estado actual es HIGH entonces pasa de OFF a ON e incremeta el contador
      Serial.println(buttonState);      // envio estado por el puerto serie con salta de linea
      delay(5);                         // retrado entre lecturas de sonda para estabilidad
    } 
    else {
      // Serial.println("off");         // no hace nada si el estado actual de la sonda es LOW  entonces pasa de ON a OFF
    }
  }
  lastButtonState = buttonState;        // guarda el estado actual como ultimo estado para la proxima pasada del bucle

  if (buttonPushCounter % 4 == 0) {     // el modulo funcion da el resto de la division de dos numeros
    digitalWrite(ledPin, HIGH);         // enciende el LED cada cuatro pusos de la sonda
  } else {                              // permite averiguar de forma visual que se reciben pulsos
   digitalWrite(ledPin, LOW);
  }
  
}



Con esto consigo que mi hoja de calculo "Excel" cuente los impulsos que me manda la sonda

Go Up