Pages: [1] 2 3   Go Down
Author Topic: Donde esta el error...  (Read 3388 times)
0 Members and 1 Guest are viewing this topic.
Argentina
Offline Offline
Full Member
***
Karma: 1
Posts: 104
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola gente, quiero hacer un termómetro con 4 o 5 sondas distintas, todas a distinta entrada analógica y en el monitor quiero ver las temperaturas de cada una.
Soy bien tronco en programación lo hago todo medio en forma intuitiva hice este código
Code:
const int analogInPin = A0; // Analog input pin that the potentiometer is attached to
const int analogInPin1 = A1;

int sensorValue = 0;
int sensorValue1 = 0;
int outputValue = 0;
int outputValue1 = 0;

void setup() {
 // initialize serial communications at 9600 bps:
 Serial.begin(9600);
 //pinMode (13, OUTPUT);
}
void loop() {
 
  // read the analog in value:
 sensorValue = analogRead (analogInPin/1024)*4.9; // convierte a mV
 sensorValue1 = analogRead (analogInPin1/1024)*4.9;
 // map it to the range of the analog out:
 outputValue = map(sensorValue, 0, 1023, 0, 255);
 outputValue1 = map(sensorValue1, 0, 1023, 0, 255);
 // change the analog out value:
 //analogWrite(analogOutPin, outputValue);
int temperatura = (-.54054*sensorValue+375.675);
int temperatura1 = (-.54054*sensorValue1+375.675);

 // print the results to the serial monitor:
 Serial.print("Temp0 = " );
 //Serial.print (sensorValue);
 Serial.print (" ");
 Serial.print(temperatura);
 //Serial.print(sensorValue);
 Serial.print(" Temp1 = ");
 //Serial.print (sensorValue1);
 Serial.print (" ");
 Serial.println(temperatura1);
// wait 1 seconds before the next loop
 delay(1000);
}

Esta solo para 2 sondas, pero solo me lee la primera, en la columna donde debe aparecer la tempertura de la segunda sonda parece copiar el dato de la primera (mismo valor)
Desde ya gracias por las respuestas
Logged


Miami/Florida
Offline Offline
Sr. Member
****
Karma: 14
Posts: 338
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mirando rapidamente, este es uno de los problemas.

int temperatura = (-.54054*sensorValue+375.675);
int temperatura1 = (-.54054*sensorValue1+375.675);

int son numeros enteros y estas multiplicando etc por constants de puntos flotantes

float  temperatura = (-.54054*sensorValue+375.675);
float temperatura1 = (-.54054*sensorValue1+375.675);

A no ser que pretendas convertir el resultado en un numero entero; pero en ese caso:

int temperatura = int(-.54054*sensorValue+375.675);
int temperatura1 = int(-.54054*sensorValue1+375.675);

pierdes la precision flotante de las variables.

En realidad no tengo idea de que son esas constantes (-0.54054 y 375.675)?????

Podrias aclarar?

Suerte.
Logged

Perseverance is 90% of the solution. The remaining 10% is more perseverance.

Offline Offline
Sr. Member
****
Karma: 8
Posts: 252
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No estoy seguro pero....

sensorValue = analogRead (analogInPin/1024)*4.9; // convierte a mV

analogInPin vas a ser un valor entre 0 y 1023, dividirlo por 1024, sólo te devolverá 0 porque int sensorValue = 0;

prueba llamando "float" y no "int"

Sino usa la función "map"
Logged

My 3x3x3 Led Cube

[url=http://arduino.cc/forum/index.php/topic,1642

Argentina
Offline Offline
Full Member
***
Karma: 1
Posts: 104
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola, gracias por las respuestas tan veloces, tal parece que no es el error, he puesto el float y ahora me da el resultado con dos decimales, pero siguen siendo ambos valores iguales, por ejemplo si toco con los dedos la sonda de A0 ésta empieza a aumentar su valor de temperatura y en el monitor lo refleja pero el valor de la sonda 2 conectada a A1 se copia el valor, la sonda 2 directamente no responde a los cambios, el valor en el monitor es el de la sonda A0.
Los números que multiplican son la función que me convierte los mV en grados celcius. Estoy usando simples diodos 1N4148 como sensores son muy lineales a los cambios
Logged


Argentina
Offline Offline
Full Member
***
Karma: 1
Posts: 104
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola, gracias por las respuestas tan veloces, tal parece que no es el error, he puesto el float y ahora me da el resultado con dos decimales, pero siguen siendo ambos valores iguales, por ejemplo si toco con los dedos la sonda de A0 ésta empieza a aumentar su valor de temperatura y en el monitor lo refleja pero el valor de la sonda 2 conectada a A1 se copia el valor, la sonda 2 directamente no responde a los cambios, el valor en el monitor es el de la sonda A0.
Los números que multiplican son la función que me convierte los mV en grados celcius. Estoy usando simples diodos 1N4148 como sensores son muy lineales a los cambios
Logged


Offline Offline
God Member
*****
Karma: 7
Posts: 635
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Estás leyendo siempre la misma entrada ya que (analogInPin/1024) al ser int siempre es cero.

sensorValue = analogRead (analogInPin/1024)*4.9; // convierte a mV

En su lugar creo que lo que quieres hacer es

sensorValue = (analogRead (analogInPin)/1024)*4.9; // convierte a mV
Logged


Offline Offline
Sr. Member
****
Karma: 8
Posts: 252
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

El código entero está mal... ¿De dónde lo tomaste?

Al menos, creo que será mejor, explica exactamente que quieres lograr y te ayudamos con un código nuevo, porque ahora que sigo leyendo...

outputValue = map(sensorValue, 0, 1023, 0, 255);

Pero primero sensorValue pasó por la conversión anterior, dónde en el mejor de los casos, lo que te devuelve es un 4.9 y nunca 1023, entonces ese mapeo entre 0 y 1023, realmente solo será entre 0 y 4.9

¿Qué sonda usas? A ver si veo las especificaciones de la misma y te puedo ayudar con cual sería el mejor código para interpretar las temperaturas desde ellas...
Logged

My 3x3x3 Led Cube

[url=http://arduino.cc/forum/index.php/topic,1642

Argentina
Offline Offline
Full Member
***
Karma: 1
Posts: 104
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Este código es el mismo que uso para una sola sonda y funciona, puede estar mal pero para una sola anda.
La sonda es muy simple

Ahora estoy preparando un práctico para mis alumnos de calor y temperatura y quiero tener 4 sondas y que cada una me de de su temperatura simultaneamente.
Hice los cambios que me indicaron, pero el problema persiste, solo lee la sonda que esta en A0, la otra sonda no trabaja, aunque caliente el diodo con un soplete.

La primera sonda responde a los cambios de temperatura perfectamente. La segunda no anda y en el monitor se copia la lectura de la otra, no entiendo nada.
American2020 lo mio es muy básico por eso meto las de andar.
Logged


Offline Offline
God Member
*****
Karma: 7
Posts: 635
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La verdad es que son unas cuantas cosas las que tienes que cambiar, si dices que las has cambiado pon el código que tienes ahora.

Pon el código que usas que dices sí te funciona para una sonda. Prueba sobre ese código a cambiar la entrada A0 por la A1 a ver si te funciona. Si no funciona hay que investigar por qué. Si funciona, amplía el código a las dos entradas.
Logged


Offline Offline
Sr. Member
****
Karma: 8
Posts: 252
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

¿Y la sonda A0 cambia si la calientas o la enfrías? Osea, estaba realmente a 39º mientras hacías la prueba.

Intenta copiarte el código, y borrarle todo, menos la lectura que recibes desde los inputs, y manda esos valores al monitor Serial, para ver si los que imprimes para A0 varían de los que son para A1

Luego si sigue agregando el resto del código, con las ecuaciones y demás, y ve haciendo Serial.print de cada dato obtenido, para poder controlar en que momento tu código hace que ambos resultado por algún motivo pasen a ser iguales.

Y si, pega el código actual, el que te tiró esos resultados, el que ya tienes con los valores como "float"
Logged

My 3x3x3 Led Cube

[url=http://arduino.cc/forum/index.php/topic,1642

Argentina
Offline Offline
Full Member
***
Karma: 1
Posts: 104
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

El código tal cual esta ahora
Code:
const int analogInPin = A0;
const int analogInPin1 = A1;

int sensorValue = 0;
int sensorValue1 = 0;


void setup() {
 // initialize serial communications at 9600 bps:
 Serial.begin(9600);
 //pinMode (13, OUTPUT);
}
void loop() {
 
  // read the analog in value:
 sensorValue = (analogRead (analogInPin/1024)*4.9); // convierte a mV
 sensorValue1 = (analogRead (analogInPin1/1024)*4.9);
 // map it to the range of the analog out:
 //outputValue = map(sensorValue, 0, 1023, 0, 255);
 //outputValue1 = map(sensorValue1, 0, 1023, 0, 255);
 // change the analog out value:
 //analogWrite(analogOutPin, outputValue);
float temperatura = (-.54054*sensorValue+375.675); // convierte a grados
float temperatura1 = (-.54054*sensorValue1+375.675);

 // print the results to the serial monitor:
 
 Serial.print ("sensorValue ");
 Serial.print (sensorValue);
 Serial.print(" AnalogInPin  = " );
 Serial.print(analogInPin );
 Serial.print("  Temp0 = " );
 Serial.print(temperatura);
 Serial.print("  ");
 Serial.print (" sensorValue1 ");
 Serial.print(sensorValue1);
 Serial.print(" AnalogInPin1  = " );
 Serial.print(analogInPin1 );
 Serial.print("  ");
 Serial.print("  Temp1 = ");
 Serial.println(temperatura1);
// wait 1 seconds before the next loop
 delay(1000);
}

esto me tira el monitor:


La sonda que esta en A0 trabaja, cuando la caliento aumenta la temperatura, la sonda que esta en A1 si la caliento no modifica nada en el monitor, no anda. Una cosa curiosa, cuando caliento la sonda de A0 varía la temperatura de "Temp" pero tambien me modifica el valor de "Temp1" y el sensorValue1 que adopta los valores de  Temp y sensorValue.
Logged


Argentina
Offline Offline
Full Member
***
Karma: 1
Posts: 104
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La fotico que no salió
Logged


Offline Offline
God Member
*****
Karma: 7
Posts: 635
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

No has hecho el cambio que te indiqué.
Logged


Offline Offline
Sr. Member
****
Karma: 8
Posts: 252
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

El error está acá.

sensorValue = (analogRead (analogInPin/1024)*4.9); // convierte a mV

Prueba algo como


 sensorValue = ((analogRead (analogInPin)/1024)*4.9); // convierte a mV

Creo que ya te lo había sugerido eso. Con el código como lo tienes, lo que esta haciendo es (analogRead (analogInPin/1024) que sería (analogRead (0/1024) Osea, lee pin 0, pero para pin1 tambien da 0 y te lee cero, en otras palabras, estás dividiendo antes de tiempo.

Y ahí entonces, me da la sensación que lo que estas haciendo es, el valor que llega, multiplicado por 4.9, y nunca se divide.

Supongamos que la lectura que recibes es 500. que se multiplica por 4.9

float temperatura1 = (-.54054*sensorValue1+375.675);

float temperatura1 = (-.54054*2450+375.675); Esto sería igual a -949.32

Supongamos que el valor que recibes es 500 y lo divides en 1024, y luego por 4.9 quedaría así

float temperatura1 = (-.54054*2.39+375.675); Esto da 374,11

De ahí que te digo, que nos digas que sonda usas, y de donde sacas que la ecuación que hay que hacer es  (-.54054*sensorValue1+375.675);

Si fuera así, tomando simplemente el valor recibido, entonces obtendríamos esto

(-.54054*500+375.675); Daría 105.40

Esta última sería la más lógica, pero no es la que estás usando.

No entiendo...







Logged

My 3x3x3 Led Cube

[url=http://arduino.cc/forum/index.php/topic,1642

Argentina
Offline Offline
Full Member
***
Karma: 1
Posts: 104
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Guauu!!! Cheyenne tiene razón, solo anda en la entrada A0, en cualquiera otra no responde!! no creo que este frita la placa (espero porque solo tengo una) alguna idea?
Logged


Pages: [1] 2 3   Go Up
Jump to: