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
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
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.
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.
/*
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
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