Pages: [1]   Go Down
Author Topic: Problema para leer temperatura y luz  (Read 2331 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tengo 2 resistencias NTC y LDR y estos codigos:

Quote
int valorldr = 5;
int pinldr = 5;

 
void setup(){
  Serial.begin(9600);
  int valorldr = analogRead(pinldr);
  int lluminositatV = (valorldr * 5 / 1023);
}

void loop(){
int valorldr = analogRead(pinldr);
Serial.println("Luz:");
Serial.println( valorldr );

int luminosidadV = (valorldr * 5 / 1023);
Serial.println("Luminosidad en voltioss del divisor de tension. ");
Serial.println(luminosidadV);
delay(2000);

}

Quote
int sensorTemp = 5;
int Temperatura = analogRead(sensorTemp);
int TemperaturaV = (Temperatura * (5 / 1023));

void setup() {
  Serial.begin(9600);
int sensorTemp = 5;
int Temperatura = analogRead(sensorTemp);
int TemperaturaV = (Temperatura * (5 / 1023));
}

void loop(){
Temperatura = analogRead(sensorTemp);
Serial.println("Temperatura leida [ de 0 a 1023] ");
Serial.println(Temperatura);
TemperaturaV = Temperatura * 5 / 1023 ;
Serial.println("Temperatura en voltios del divisor de tension. ");
Serial.println(TemperaturaV);
delay(2000);


}


En la LDR si le acerco el flash del movil Luz baja a 850 mas o menos.
La NTC no consigo que se mueva.
No se si el codigo esta bien.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Otra pregunta, he seguido esta guia (http://www.hacktronics.com/Tutorials/arduino-character-lcd-tutorial.html) y todo me funciona bien. Si el pin 13 siempre envia 5 V (HIGH) a la LCD puedo conectar la LCD a 5V del arduino directamente? Necesito una resistencia?
« Last Edit: December 07, 2012, 10:50:41 am by DaviidPR » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola DaviidPR yo tambien soy bastante nuevo en esto la verdad, pero creo que la forma de escribir el codigo no es la correcta (espero que no te moleste), podrias mirar los ejemplos que vienen en el IDE, de los ejemplos analogicos.

Te he escrito como lo haría yo el programa pero no se si es lo que quieres, con lo que te he puesto te dara el valor del NTC y del LDR, pero no se cual es la conversion q tienes que usar, he utilizado la que tu has puesto en tu código (el valor obtenido x 5 y todo / 1023). Espero haberte ayudado aunque sea solo un poco, yo no he probado el codigo, pruebalo. Si no te sirve todo, espero que te servira parte.

Un saludo a todos.

Fermg


Quote

int ntc=A0; // declaras el ntd
int ldr=A1;
int valor_ntc=0; // variable para guardar el dato del NTC
int valor_ldr=0;  // variable para guardar el dato del LDR

void setup()
{
   Serial.begin(9600);   // abrimos la comunicación Serial
   pinMode(ntc,INPUT); // esto realmente no hace falta pero yo siempre lo pongo
   pinMode(ldr,INPUT);  // no hace falta por ser un aentrada analógica.
}

void loop()
{
  valor_ntc= analogRead(ntc);       // guardamos el valor del NTC en una variable
  Serial.write("Temperatura: ");    // escribimos por serial
  Serial.write((valor_ntc*5)/1023); // calculamos el valor del NTC
  valor_ldr = analogRead(ldr);        // Guardamos el valor del LDR
  Serial.write("Luz :");                 
  Serial.write((valor_ldr*5)/1023);
  delay(1000);                             // esperamos para no saturar el serial
}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gracias, yo diria que ahora funciona, he acomodado los pins a como yo los tengo conectados en lugar de Serial.write he puesto Serieal.println para que me escriba cada cosa en una linea distinta y quedó asi:

Code:
int ntc = 5; // declaras el ntd
int ldr = 0;
int valor_ntc=0; // variable para guardar el dato del NTC
int valor_ldr=0;  // variable para guardar el dato del LDR

void setup()
{
   Serial.begin(9600);   // abrimos la comunicación Serial
   pinMode(ntc,INPUT);
   pinMode(ldr,INPUT);
   
}

void loop()
{
  valor_ntc= analogRead(ntc);       // guardamos el valor del NTC en una variable
  Serial.println("Temperatura: ");    // escribimos por serial
  Serial.println((valor_ntc*5)/1023); // calculamos el valor del NTC
 
  valor_ldr = analogRead(ldr);        // Guardamos el valor del LDR
  Serial.println("Luz :");                 
  Serial.println((valor_ldr*5)/1023);
  delay(1000);                             // esperamos para no saturar el serial
}

lo conecto todo y el serial monitor muestra esto:

Quote
Temperatura:
4 (supongo que a temperatura ambiente)
Luz :
0(con la luz actual)

Y

Quote
Temperatura:
4 (supongo que a temperatura ambiente)
Luz :
2(con el dedo encima de la resistencia)

La NTC me da 10kΩ en un vaso con hielo y 1800 Ω en agua caliente

sabeis como convertir esos numeros a grados celsius y a porcentaje de luminosidad?
« Last Edit: December 07, 2012, 05:05:25 pm by DaviidPR » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola de nuevo,me alegro poderte haber ayudado, mi pregunta es para que quieres cambiar la luz me refiero a multiplicar por 5 y todo eso? es que no para q te vale, lee el valor del LDR y ya esta no? quiero decir de 0-1023 y listo, y pruebas dandole con una luz directa q valor te da y luego tapandolo el otro valor y con eso juegas para poder hacer lo q quieras.

un saludo
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

He leido en un trabajo que :
Quote
A continuación vemos otra variable(luminosidadV = luminosidad * 5 / 1023), que esta viene precedida por un cálculo. Cómo hemos visto anteriormente en el punto 4.1.1., hemos hablado que el *Arduino tiene un funcionamiento de *cero a cinco voltios. Para medir estos voltios lee este voltaje y lo transforma en un número comprendido entre el 0 y 1023.
Por lo tanto, como queremos leer el voltaje utilizamos la siguiente fórmula:

Voltaje= (lectura arduino*5)/1023

Así pues nos mostrará el voltaje y lo asignaremos a la variable *lluminositatV.

Luego hace lo mismo para la resistencia NTC.

Gracias por la ayuda smiley
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Para que quieres leer el voltage? Es que la verdad no lo entiendo muy bien, con el dato que te da el analogRead (0-1023) ya puedes hacer lo que quieras o por lo menos eso creo yo, si comentas que es lo que quieres hacer te podríamos ayudar un poco mejor.

un saludo
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

tengo esto con la NTC y la LDR y el Vout conectado a 2 entradas analogicas lo que quiero conseguir es que arduino lea los valores los transforme en temperatura y porcentaje de luminosidad y los muestre por una pantalla LCD
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Por si a alguien le sirve: http://miqueridopinwino.blogspot.com.es/2012/07/como-utilizar-un-termistor-o-sensor-de.html

El codigo que da me a funcionado, pero en lugar de tener :

 (Ground) ---- (10k-Resister) -------|------- (Thermistor) ---- (+5v)
                                                |
                                        Analog Pin 0

Yo tenia la resistencia y el termistor cambiados y me leia 33ºC normal y -90ºC cuando le daba con la estufa, pensaba  que daba igual el orden pero puesto como en el esquema los datos son mas realistas.

Ahora solo necesito ver como pasar la luz a un porcentaje.
 
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola para que te de la temperatura solo tienes que aplicar la for,ula que tenias puesta o eso es lo que pone en el ejemplo de Arduino Academy o Arduteka ahora mismo, es el valor de Vout = Vin/1023*la lectura de la entrada analógica, y el LDR no se como se hace, pero lo que quieres es sacarlo por el LCD no? pues solo tienes que poner lcd.print() y listo , y si lo quieres poner en algún otro sitio que no sea en el comienzo de la pantalla lo único que tienes que hacer es ponet set.cursor(0,0) y listo.
el 0,0 son el primer numero las filas 0-1  y el segundo las columnas. 0-15, bueno según que LCD tengas claro pensando que tienes un 16 x 2.

un saludo

Fermg
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hola de nuevo se me ocurre que para el porcentaje de luz porque no haces un mapeo del valor? me explico si sabes cual es el valor maximo que te da Ej 1023 y el minimo 125 por decir algo porque no mapeasel valor con la opcion map y ya esta no? si te da 1023 sera el 100% y si te da 125 sera el 0% y el resto te lo mapeara.

haber si te vale pero yo mucho más no te voy a poder ayudar porque mucho más no se, lo más seguro es que aprendamos los dos.

valor_ldr = map(valor_ldr, 125,1023, 0 ,100).

entonces lo que te saldra el porcentaje no?

espero servirte de ayuda y no volverte loco.

Fermg
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Me vale muchas gracias smiley-grin smiley-lol

Una ultima cosa , he seguido esta guia (http://www.hacktronics.com/Tutorials/arduino-character-lcd-tutorial.html) y todo me funciona bien. Si el pin 13 siempre envia 5 V (HIGH) a la LCD puedo conectar la LCD a 5V del arduino directamente? Necesito una resistencia? esque tengo entendido que el pin 13 llevaba una resistencia integrada o algo parecido.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aupa, yo lo tengo conectado directamente a los 5v cómo dices tú, y funciona bien, espero q pongas una foto para ver como queda ok?
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 72
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

DaviidPR, lo que tienes esta bien para ver que funciona, pero para pasar esos valores a unidades estandar tienes que trabajar un poco aún el código.

La luz no puede medirse de 0 a 100%. 0% damos por hecho que es oscuridad total (Cosa que por otro caso es imposible), pero que valor seria 100%? una bombilla? un halógeno? la luz del sol?. Para eso tienes que buscar documentación sobre el LDR que estás usando y convertir los valores del sensor en unidades conocidas, lumenes, luxes, candelas, etc....

Y para la temperatura lo mismo, hay que pasarla a grados Kelvin, Fahrenheit, Celsius.... Pero en el caso de una NTC no es tan sencillo como escalar los valores ya que los valores recibidos no son lineares. Tienes que buscar documentación por el foro. Busca como "NTC arduino", ademas creo que en el Playground hay varios ejemplos. Si no te aclaras, pregunta.
Logged

Offline Offline
Newbie
*
Karma: 2
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Al final de la página 24 hay una formula de conversión valor resistencia - temperatura:
https://www.dropbox.com/sh/wimmkqkbzbnyi0b/IGiwwPO0nq/Microcontroladores/Arduino/Manuales/Grupo%20Sabika%20-%20Ejercicios%20resueltos%20arduino.pdf
Logged

Fácil, sencillo y para toda la familia.

Pages: [1]   Go Up
Jump to: