PROYECTO TUBOS MIDI [ayuda]

Que tal a todos recurro a uds ya que no es mucha la informacion que he encontrado en la red, para capturar la variacion de presion estoy usando unos sensores de presion MPX10D estos tienen una salida diferencial v+ y v- estoy usando el diseño del documento AN1668 de motorola y pues los AO que uso son los LM358.

el montaje es el siguiente:

en donde R+S1 = 1K, R+S2 = 100, Vref = que a mi parecer es el Aref de la tarjeta arduino, R1 = 39K, R2 = 100, R3 = 100, R4 = 39K, Vout_fs = lo conecto a A0 (entrada análoga de la tarjeta arduino).

el codigo es el siguiente :

 byte s1;

void setup ...
void loop:

s1 = analogRead(A0)/8;
  if (s1 > 0) {
    notes(158,57,s1);
}
  if (s1 == 0) {
    notes(142,57,0);        
} 
}
void notes(int cmd, int note, int velocity){
 Serial.println(velocity);
delay(1000);     
}

en este caso el único valor que me interesa es el del velocity, pero pues tengo un problema viendo el monitor de arduino el sensor me envía datos sin aplicarle presión; estoy buscando que me envié ceros al no aplicarle presión y datos variables según la presión que se le aplique.... no se que hacer ya he probado muchas cosas, recurro a vuestra ayuda

gracias!

En esa co figuración de amplificación diferencial indica que a la salida tienes un offset de 0,66 V. Lo tienes que restar en el código de Arduino.

ya lo intente pero aun asi el problema persiste

Sólo se me ocurre que saques por el monitor los valores que estás leyendo por la entrada analógica Y los pongas aquí a ver si vemos algo.

bueno aqui unas capturas de los datos que salen en el monitor sin aplicar presion (al no aplicar presion el dato sea 0)... la idea es que al aplicar presion los datos que me arroje el monitor oscilen entre 1 y 127 correspondientes al velocity del midi.

gracias

s1 lo tienes declarado como byte. Prueba sólo este código (con s1 declarado como int) para ver las lecturas reales de la entrada analógica. Mira lo que saca por el monitor cundo no ejerces fuerza sobre el sensor y cuando hace mucha fuerza (a ver si satura).

int s1 = 0;

void setup() {
 Serial.begin(9600);
}

void loop() {
  s1 = analogRead(A0);
  Serial.println(s1);
  delay(200);
}

pues la variable la declare como byte para que me diera datos del 0 al 255 .... pero aun así no logro que se quede quieto el monitor siguen saliendo datos como en la captura pasada sin estar aplicando presión sobre el mp10d =(

Ya sé tu idea con lo de byte. Pero lo que hay que hacer es leer una entrada analógica en una variable int y después tratarla como se necesite. Puede convertirse a otro tipo de variable o para tu caso lo que habrá que hacer es mapear los valores para que el rango de lectura 0 - 1023 pase a tener un rango 0 - 127 que es el que quieres. Este mapeo se hace fácilmente con la función map() http://arduino.cc/en/Reference/Map.

Por otra parte haz la prueba que te he dicho antes, con el código que te he puesto captura las lecturas del monitor cuando no ejerces fuerza sobre el sensor y cuando sí la haces (muy fuerte para ver el rango de valores que está teniendo). Y pones aquí las lecturas.

no entiendo lo del map ... como veo esos valores?

Fase 1: comprobar las lecturas de la entrada analógica, en rango de medida y estabilidad. Para ello sube el código que he puesto y copias las lecturas del monitor sin ejercer fuerza sobre el sensor y después ejerciendo mucha fuerza.

En función de los resultados irán las siguientes fases entre las que estará la del mapeo.

mmm solo me salen ceros aplico presion y no pasa nada :frowning:

Hola,
lo del map es como una regla de tres: si la lectura de arduino va de 0 a 1024 ( 10 bits), y tú quieres medir un rango de 0-255, sacas la proporción.

Y si no es indiscreción: ¿que son los "tubos midi"?

curo la idea es adaptar un tubo cualquiera para que me sirva como controlador midi para esto el byte caracterisco sera el del velocity, pero pues no he tenido suerte con estos por que sin aplicar presion me envia datos y al aplicar presion no pasa nada =(

mrjtwo a ver si nos centramos un poco, en dos mensajes seguidos has puesto

mmm solo me salen ceros aplico presion y no pasa nada :frowning:

y

sin aplicar presion me envia datos y al aplicar presion no pasa nada

Sin aplicar presión, ¿qué lecturas da? ¿Y aplicando presión? En cualquier caso tiendo a pensar que tienes mal el circuito de amplificación. Deberías poner un esquema con todas las conexiones que has hecho y valores de resistencias y alimentaciones.

Por otro lado empiezo a pensar que "tubos" tiene en Colombia algún otro significado ya que con la explicación que has dado de lo que son los "tubos MIDI" al menos yo no me he enterado de nada.

cheyenne ... el circuito amplificador esta bien explicado y todo con resistencias al inicio del tema

Sí, ya lo había visto pero como no funciona vete a saber lo que está mal. Por ejemplo pones

Vref = que a mi parecer es el Aref de la tarjeta arduino

No sé exactamente a qué te refieres con eso y si has hecho algún tipo de conexión.

Y al final, ¿qué lecturas te da???

si a vref conecto el aref de la tarjeta arduino ... asi lo he tenido conectado todo este tiempo y sigue el problema que comentaba anteriormente ... al quitar el aref solo salen ceros aun aplicando presion

Podías aclarar lo que son los "tubos MIDI", la verdad que tenía curiosidad.

Si al desconectar Aref obtienes valores cero, ¿qué estabas obteniendo con Aref conectado? Si te daba algo podría ser cuestión de que necesita más ganancia la etapa.

Si en verdad no te recibe nada en la entrada de Arduino el fallo claramente tiene que estar en le electrónica. ¿Qué alimentaciones has puesto? Me refiero a Arduino, al sensor y al resto de la electrónica. ¿Tienen todos la misma? ¿Son distintas? En ese caso, ¿tienes unidas las masas?

Con eso repasaré el esquema y las características del sensor.

pues son varios tubos pero estoy comenzando con uno ... el proyecto consiste en hacer un controlador midi a base de la variacion de presion que se ejerce al ejecutar presion sobre los sensores que estan ubicados al final del tubo ... alimento al circuito con la tajeta arduino 5v y gnd

¿Alimentas el sensor también desde Arduino y la patilla 1 del sensor a GND de Arduino?

Sólo veo que el esquema que utilizas es para el sensor MPX2010 y tú en realidad estás usando el MPX10. Tu sensor tiene un poco más de sensibilidad y un offset importante (el MPX2010 no tiene offset). Esto tendría que hacer que con el montaje que haces te diera valores de salida más altos. No sé el rango de presiones que usas ni el que admite el sensor (no me refiero numéricamente si no en la práctica a cuánto equivale) pero podría saturarse la salida. Lo que pasa es que creo que no obtenías ninguna salida. Sólo se me ocurre que compruebes bien el circuito sin estar conectado a Arduino y que compruebes la tensión de salida con un polímetro a ver qué es lo que hay ahí.