Problema para leer temperatura y luz

Tengo 2 resistencias NTC y LDR y estos codigos:

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);

}
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.

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?

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

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:

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:

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

Y

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?

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

He leido en un trabajo que :

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 :slight_smile:

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

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

Por si a alguien le sirve: Tecnología para un progreso sostenible: Como utilizar un termistor o sensor de temperatura con Arduino: Código para los NTC/PTC

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.

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

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

Me vale muchas gracias :smiley: XD

Una ultima cosa , he seguido esta guia (Arduino Character LCD Tutorial) 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.

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?

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.

Al final de la página 24 hay una formula de conversión valor resistencia - temperatura:

Buenas noches, tengo un problema con el código para mi Arduino.
esta bien, sin embargo el Arduino en la versión mas reciente no me carga, me genera el error (#include expects"filename" or < filename> #include <LiquidCrystal.h>).

descargue todas las librerías que aparecen en el programa pero no se que es lo que genera el error.

Quote

//Libreria y definicion de pines lcd
#include <LiquidCrystal.h>
LiquidCrystal lcd(1,2,4,5,6,7);
// Constantes
const int sensorlm35 = 0;
const int sensorldr = A1;
// Variables
int milivolts;
int resultadoluz = 0;
// Inicialización
void setup() {
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
lcd.begin(16,2); //dimensiones del lcd
lcd.print(" Temp: C");
lcd.setCursor(3,1);
lcd.print("Luz:");
}
// Ciclo infinito
void loop() {
// Lectura del sensor de temperatura
milivolts=(analogRead(sensorlm35));
float temperatura = ((5 * milivolts)*100)/1023;
delay(400);
float Centigrados = temperatura; // Resultado de temperatura
// Impresión en LCD temperatura
lcd.setCursor(6,0);
lcd.print(Centigrados);
// Condiciones para encendido de leds
if (temperatura < 22){ // Menor a 22° encendido led azul
digitalWrite(8,HIGH);
}
else
digitalWrite(8,LOW);
if (temperatura >28){ // Mayor a 28° encendido led rojo
digitalWrite(9,HIGH);
}
else
digitalWrite(9,LOW);
// Lectura sensor de luz
resultadoluz = analogRead(sensorldr);
// Impresion de luz en LCD
lcd.setCursor(9,1);
lcd.print(resultadoluz);
delay(300); }

HIlo cerrado.
A @rydiusgus lee las normas y crea un nuevo hilo con tu problema.
El código debe postearse usando etiquetas. No como simple texto como has hecho.