hice un codigo para medir un voltaje de un sensor de oxigeno que consta de 4 cables 2 para la alimentacion y 2 para que vaya al arduino (uno en la salida y otro a tierra), el sensor va de 0 a 1voltio y cuando hago la medida en el arduino me sale diferente que cuando lo hago con un voltimetro, nose si es el codigo o el sensor esta malogrado. les dejo mi codigo para que puedan revisarlo.
Por otro lado si la lectura de tu sensor esta en 6mv, te recuerdo quel arduino tiene un adc de 10 bits y que su resolución en 4.8 mv de modo que estarás leyendo 1 o 2 unidades del ADC.
Muy pobre la salida de ese sensor!! es practicamente 0.
5V/1024 = 4.88mV
1 paso 4.88mv
2 paso 9.76mV
Entre estos dos valores deberia darte los resultados el arduino
no entendi la ultima parte, probe mi sensor y me daba medidas mas altas cuando quitaba oxigeno (con el voltimetro) pero cuando lo mido con el arduino me da medidas mas bajas(80), una duda mas que tengo es si la funciojn map podria ayudar?
Veamos algo.
6mv a mi no me quitarían el sueño, pero otros valores muy grandes si.
Olvida el sensor y conecta un potenciometro entre gnd y 5V y con el cursor al pin Analogico que mides.
Compara las lecturas que llegan al pin analogico con el tester/multimetro y comenta.
hice las pruebas con el voltimetro y el potenciometro y lo que me dio fue lo siguiente:
en la posicion minima del potenciometro la lectura del voltimetro es de 0.005V en el arduino me da 7(no se cual sea la unidad)
en la posicion media es de 2.51V, en el arduino da 550
en la pos final es 4.47V, en arduino da 973.
es aqui donde no comprendo por que dan valores tan distintos , bueno espero que puedas ayudarme.
saludos
te dejo el codigo simple que hice para hacer la lectura
int pot=14,val_pot=0;
void setup() {
// put your setup code here, to run once:
pinMode(pot,INPUT);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
val_pot=analogRead(pot);
Serial.print(val_pot);
Serial.print("\n");
delay(1000);
}
int pot = 14;
int val_pot;
float tension;
void setup() {
// put your setup code here, to run once:
pinMode(pot,INPUT);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
val_pot = analogRead(pot);
tension = val_pot * 5.0 /1023.0;
Serial.print("Adc =");
Serial.print(val_pot);
Serial.print(" Tension=");
Serial.println(tension);
delay(1000);
}
El adc del arduino es de 10 bits o sea 2^10 = 1024 pasos
Tiene una referencia por defecto de 5V quiere decir que cuando lea lo máximo que es 1023 corresonderá a 5V y 0 obviamente será 0 V.
Entonces para convertir el valor del adc a tensión hay que multiplicar x 5 y dividir x 1023
En el código, te agrego la conversión a tensión para que compares con el voltímetro.
traduciendo
007 => 0.034V contra 0.005V error = 0,029V
550 => 2.688V contra 2.51V error = 0,178V
973 => 4.755V contra 4.47V error = 0,285V
Pongamos las cosas en claro, el ADC no es la gran cosa, pero no es malo. Sin embargo estas lecturas no son nada buenas. El error se debería mantener puede aumentar pero no incrementarse del modo que se lee.
el error esta por ahi no varia mucho, ahora lo que quiero saber es como he de leer los datos que deseo con el sensor de oxigeno, tengo que hacer ese producto (multiplicar por 5 y dividir)?
arduino siempre me dara medidas diferentes cuando intente leer voltages? acaso mi placa esta fallada... es arduino mega.
Bien de ser así vamos a usar la referencia interna del Arduino UNO de 1.1V para que se pueda leer mejor la salida del sensor.
int pot = 14;
int val_pot;
float tension;
void setup() {
analogReference(INTERNAL); // ATMEGA328P con 1.1V de referencia para el AD
// put your setup code here, to run once:
pinMode(pot,INPUT);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
val_pot = analogRead(pot);
tension = val_pot * 1.1 /1023.0; // deberías leer la tensión de referencia
Serial.print("Adc =");
Serial.print(val_pot);
Serial.print(" Tension=");
Serial.println(tension);
delay(1000);
}
he puesto 1.1 pero no necesariamente la referencia tiene ese valor. La manera correcta es hacer una medición para ver que tensión tiene tu referencia interna.
Este es el procedimiento, usando el arduino sin nada mas conectado de esta manera.
hola ! hice el procedimiento y el valor de la tension fue 1.068v, coloque ese valor en la formula que me diste, volvi a medir (girar) el potenciometro y fue lo siguiente:
hola yo habia colocado el valor de 1.068 en la formula que diste tension=val_pot*1.068/1023 ahora el sketch que me das, para empezar no me daba valores solo me daba simbolos extraños como si fuera un signo de interrogacion (????) ... luego modifique el serial.begin (38400) por serial.begin(9600) y serial.println por serial.print y me da un valor de 214, este valor es correcto ?
estoy confundido con respecto a los sketch, pense que el sketch servia solo para medir el voltaje de referencia, es asi o erre en algo?
Perdona IIOzII estas cosas no son fáciles. Requieren de cierto procedimiento de tu parte.
Un sketch te da un valor y el otro es para usarlo con regularidad.
Si tienes caracteres raros es porque estas con los BAUDIOS incorrectos. Eso no tiene mucha ciencia.
Terminal y programa a los mismos BAUDIOS.
Si te haces tanto problema olvida la calibración y usa 1.1Voltios y listo. Adelante y luego si quieres ajustarlo vuelve a esto.
Tal vez te llevé por un lado que exige demasiado.
Simplifica las cosas para probar que tu sensor funciona bien, y luego si requieres mejor precisión de lectura vuelve a este tema.
Hola, bueno si la verdad que el primer sketch lo entiendo es para "calibrar" el arduino verdad? pero el segundo sketch ?
lo que veo en el segundo sketch es que tomas el valor de "calibración" del arduino lo reemplazas en el valor (value) y luego multiplicas y ya... lo que no entiendo es para que sirve ese valor, a mi me sale 214, pero revise todo esas lineas y no veo en que parte haces la lectura de la tensión del sensor, lo cual necesito.
es verdad que parece complicado pero si me dices algunas cosas del ultimo sktech que mandaste me ayudaría mucho a entenderlo mejor.