Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

31/05/2016 #1


tension de trabajo sonda entre 0,5 y 4,5, pero que 0,5 marque 0
Buenas a todos, estoy intentando hacer una automatizacion de un presostato mecanico a uno con arduino. Tengo esta una sonda de presion, que el foro no me deja insertar por ser nuevo, pero la compré en banggood y podeis verla si escribis
5V 0-1.2 MPa Pressure Transducer Sensor Oil Fuel Diesel Gas Water Air Sensor

el "problema" es que cuando no hay presion marca 0,5 voltios y cuando esté a maxima presion (sobre 12 bar y lo digo de memoria) llega a 4,5v. Me gustaria si sabeis algun truco, que no sea estilo de mostrar en display

Código:
if value<0,5 then value=0
esta parte la inicié asi
Código:
 presion_actual=analogRead(presion_actual_sonda)/90.00;
y luego, de una pagina de internet he probado este de abajo

Código:
  float sensorVoltage = analogRead(presion_actual_sonda);   // read the sensor voltage
  presion_actual2 = ((sensorVoltage-95)/210)*50;
    presion_actual=(presion_actual2/14.7058)-0.5;//convierte PSI en BAR y resta 0,5 para compensar error de cero
pero claro, si le quito el 0,5 depues me marca de menos siempre.
para poder explicarlo de fora más entendible, seria, si no recuerdo mal, una especie de offset, que la lectura fuera de 0,5 a 4,5, valor 0 y máximo respectivamente, y ahí me encallo. La verdad es que no es para nada importante este fallo o error, solo es que me gusatria que quedara lo máximo de bien y real.
Espero haber posteado bien, saludos y gracias. ...
31/05/2016 #2

Avatar de Nuyel

tiene algún código de referencia el sensor? por que sin saber los valores de transferencia no podría darte solución, solo se me ocurre que elimines el voltaje de offset usando
float sensorVoltage = analogRead(presion_actual_sonda) - 102;
102 en el ADC de 10bits a 5V corresponde a 498,5mV que seria lo mas cercano, si lo que quieres es ajustar Min =0=0.5V Max = 4,5V podrías usar map, nota que eso opera con enteros, tendrías que hacerlo usando el valor entero del analogRead para cambiarlo y luego ya realizas las otras operaciones.
31/05/2016 #3


gracias por responder. He encontrado eso que adjunto del foro de banggood, nada más y no creo que sriva de mucho, excepto confirmar lo que ya he indicado, que el margen de trabajo va de 0,5 a 4,5. Ya digo no es muy importante, solo es por cuestión de estetica, no sé si te puede ayudar. mañana probaré lo que indicas, de programación no sé mucho.
gracias de nuevo
Imágenes Adjuntas
Tipo de Archivo: jpg 20160117203448_95068.jpg (216,8 KB (Kilobytes), 18 visitas)
31/05/2016 #4
Moderador general

Avatar de Fogonazo

efect2000 dijo: Ver Mensaje
Buenas a todos, estoy intentando hacer una automatizacion de un presostato mecanico a uno con arduino. Tengo esta una sonda de presion, que el foro no me deja insertar por ser nuevo, . . . .
Lee esto:
¿ Como subir imágenes ?
31/05/2016 #5


hola, ¿cual es el problema de la imagen que he subido? en el primer mensaje queria insertar un link, concretamente el de banggood donde habia la sonda, pero al saltarme la "alarma" de que no me está permitido por tener pocos mensajes, no ha quedado bien escrito. Entiendo que es por la cita que muestras, y que corresponde al primer mensaje que no tenia estos datos, pues yo veo la imagen bien insertada
gracias
01/06/2016 #6


Hola, antes de seguir, indicar si voy bien por este camino. Googleando he encontrado lo del map y el problema de decimales, y he aplicado lo que hacian muchos, que expongo a continuacion (dejando aparte los nombres y tema espacios display).
entiendo por el map que significa (valor minimo in, valor maximo in, valor minimo out, valor maximo out) , ahora uso un potenciometro, pues es mas facil hacer las pruebas, luego entiendo que deberá ir
102,920,0,12

Código:
presion_actual=analogRead(presion_actual_sonda);//ejemplo de medida presion_actual=4,51
 
  presion_actualB = map(presion_actual*100, 0, 1020, 0, 12);  // debe ir  102,920,0,12
  
  entero=presion_actualB/100;
  decimal_floa=presion_actualB/100-entero;
  decimal=decimal_floa*100;
//----------------------------
 lcd.setCursor(12, 2);
  lcd.print(entero);  
  lcd.setCursor(14, 2);
  lcd.print(",");
  lcd.print(decimal);
irian por aqui los tiros?
gacias
01/06/2016 #7

Avatar de Sebastian1989

Yo usaría dos veces la función map, la primera ves para pasar el valor del ADC a mV y la segunda ves para pasa de mV a KPa, si usas mV y KPa no tendrás problemas trabajando solo con enteros.
01/06/2016 #8


hola, gracias por la respuesta. Ahora no sé proque, pero no me parece funcionar, no sé si antes lo he mirado mal o que......
ahora ya lo dejo, he estado haciendo muchas pruebas y con decimales no me sale, solo con entero parece que sí. Mañana sigo, o si veis y podeis decir qué tengo mal, se agradecerá. Gracias

Código:
 
  presion_actual = map(analogRead(presion_actual_sonda),0, 910, 0, 12);
   
  presion_actualB=presion_actual*100;
  presion_actualB = map(presion_actualB,102, 900, 0, 12);
  
  entero=presion_actualB;//100;
  decimal_floa=presion_actual-entero;
  decimal=decimal_floa;//*100;
//----------  
  lcd.print(entero);  
  lcd.print(",");
  lcd.print(decimal);
01/06/2016 #9

Avatar de Sebastian1989

No me quedo claro lo que trataste de hacer en tu código, lo que yo propongo es algo como esto:
Código:
presion_ADC=analogRead(presion_actual_sonda);//leo ADC, rango de 0 a 1023
presion_mV = map(presion_ADC,0, 1023, 0, 5000);//transformo a mV, rango de 0 a 5000mV(=5V)
presion_KPa = map(presion_mV,500, 4500, 0, 1200);//transformo a KPa, rango de 0 a 1200KPa(=1.2MPa)
02/06/2016 #10


muchas gracias, ahora sí que funciona

lo que tenia mal basicamente eran los números de máximos y mínimos, esta función ni sabía que existia y los ejemplos que encontré eran para salida a 255 para encender un led por salida pwm

una vez ya tengo la presion en kilopascales ya divido por 100 con (float) presion_KPa

Código:
 lcd.print(presion_KPa/100);
Yo estaba emperrado en trabajar con BAR, y por eso multipilicaba por 100 y despues dividia y sacaba dos numeros (copiado de ejemplos de temperatura con el mismo fin) en vez de poner 1200 como has puesto ni se me habia pasado por la cabeza
Muchisimas gracias

se puede cerrar el tema
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Arduino y Raspberry Pi

Cerrar
Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.