Bienvenida al curso

1

Enlaces del taller IoT

2

Qu茅 aprender谩s sobre el desarrollo de hardware con Arduino

Introducci贸n al hardware libre

3

驴Qu茅 es Arduino y qu茅 placas hay?

4

驴C贸mo se desarrolla el Hardware?

5

驴Cu谩l es el software para dise帽o mec谩nico?

6

Elecci贸n del software a utilizar

7

Limitaciones de Arduino y qu茅 es el hardware libre

8

Reto 1: Para un proyecto de IoT, 驴Cu谩l tarjeta Arduino utilizar铆as?

9

驴C贸mo funciona el Curso de Desarrollo de Hardware con Arduino?

10

Lista de Materiales o Componentes a Utilizar

Sensores, Actuadores y Procesadores

11

Sensores, actuadores y procesadores

12

Diferentes tipos de sensores seg煤n la salida

13

Diferentes tipos de sensores seg煤n la aplicaci贸n

14

Diferentes tipos de actuadores

Introducci贸n a la electr贸nica

15

Diferencias entre electricidad y electr贸nica

16

Tipos de componentes electr贸nicos

17

M谩s tipos de componentes electr贸nicos

18

Limitando la corriente para evitar quemar un led

Manos a la obra

19

Puertos de un arduino y sus funciones

20

Qu茅 es un protoboard

21

Estructura general de un programa en Arduino y hello world con un LED

22

Variables y Constantes Globales

23

Manejo de librer铆as y funciones

24

Manejo de valores anal贸gicos: uso del potenci贸metro

25

Uso del monitor serial

26

PWM y se帽ales anal贸gicas

27

Un control de color RGB e intensidad lum铆nica para una lampara de mesa

28

Uso de push buttons

29

Monitor de temperatura con Arduino (uso de LM35 y un lcd 16x2)

30

Continuando con el monitor de temperatura con Arduino

31

Finalizando con el monitor de temperatura con Arduino

32

Reto: Crea tu sem谩foro con Arduino

Automatizaci贸n de procesos

33

C贸mo generar movimiento y uso de motores

34

C贸mo generar movimiento y servomotores

35

Agregando un potenciom茅tro para controlar la posici贸n del Servomotor

36

Robot evasor de obst谩culos

37

Continuando con el Robot evasor de obst谩culos

38

Terminando con el Robot evasor de obst谩culos

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Adquiere por un a帽o todos los cursos, escuelas y certificados por un precio especial.

Antes: $249

Currency
$219/a帽o

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Comprar ahora

Termina en:

0D
5H
43M
28S

Finalizando con el monitor de temperatura con Arduino

31/38
Recursos

Ahora que tenemos la lectura de la temperatura, vamos a mostrarla sin necesidad de tener conectado el Arduino a nuestra Computadora.

Aportes 40

Preguntas 10

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Si tienes el display LCD1602 con m贸dulo I2C

I2C es un puerto y protocolo de comunicaci贸n serial. El m贸dulo I2C es usado para reducir el n煤mero de cables para conectar el display. De los 4 pines que tiene los que nos interesan son el SDA y SCL que ir谩n conectados en los SDA y SCL del arduino en la parte de comunicaci贸n. En mi caso est谩n en los pines 20(SDA) y 21(SCL) ya que es un mega 2560.
Yo instale esta librer铆a para mi sketch: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library

el display con modulo I2C:

conexi贸n SDA y SCL:

Sketch

// librer铆a para LCD1602 (LCD 16 caracteres 2 l铆neas) con m贸dulo I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>


// definimos el objeto lcd
// en la direcci贸n 0x27, le especificamos que son 16 caracteres y 2 l铆neas
LiquidCrystal_I2C lcd(0x27, 16, 2);


//libreria DHT sensor library Adafruit
#include "DHT.h" 

#define DHTPIN 2     // pin usado para recibir la medici贸n
#define DHTTYPE DHT11   // impirtante verificar que sea el sensor que estamos usando
 
// Inicializamos el sensor DHT11
DHT dht(DHTPIN, DHTTYPE);


void setup() {
  // Inicializamos comunicaci贸n serie
  Serial.begin(9600);
 
  // Inicializamos el sensor DHT
  dht.begin();

  // Inicializamos el LCD,
  lcd.begin();
  
}

void loop() {

  // Esperamos 2 segundos entre cada medida del sensor
  delay(2000);

 
  // Leemos la humedad relativa
  float h = dht.readHumidity();
  // Leemos la temperatura en grados cent铆grados (por defecto)
  float t = dht.readTemperature();
  // Leemos la temperatura en grados Fahrenheit
  float f = dht.readTemperature(true);
 
  // Comprobamos si ha habido alg煤n error en la lectura
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Error obteniendo los datos del sensor DHT11");
    return;
  }
 
  // Calcular el 铆ndice de calor o sensaci贸n t茅rmica en Fahrenheit
  float hif = dht.computeHeatIndex(f, h);
  // Calcular el 铆ndice de calor o sensaci贸n t茅rmica en grados cent铆grados
  float hic = dht.computeHeatIndex(t, h, false);


  //mensajes LCD
  lcd.clear(); // limpiamos LCD
  
  lcd.setCursor (0, 0); // vamos al inicio de la linea 1
  lcd.print("Humedad: ");
  lcd.print(h);
  
  lcd.setCursor (0, 1); // vamos al inicio de la linea 2
  lcd.print("Temp: ");
  lcd.print(t);
  

  //mensajes Serial 
  Serial.print("Humedad: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperatura: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  Serial.print("Sensaci贸n T茅rmica: ");
  Serial.print(hic);
  Serial.print(" *C ");
  Serial.print(hif);
  Serial.println(" *F");
 
}

Circuito

No es mucho, pero es trabajo honesto:

#include <LiquidCrystal.h>

int tempC;
const int sensorTemp = A0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup()
{
  Serial.begin(9600);
  lcd.begin(16, 2);
}

void loop()
{
 tempC = analogRead(sensorTemp);
 tempC = map(tempC, 20, 358, -40, 125);
 Serial.println(tempC);
 lcd.setCursor(0, 0);
 lcd.print("Temperatura:");
 lcd.setCursor(0, 1);
 lcd.print(tempC);
 lcd.setCursor(4, 1);
 lcd.print("grados C");
 delay(1000);
 lcd.clear();
  
}```

M茅tanle a los servers de streaming, a cada rato se pausan los videos, y no es mi internet.

#include <LiquidCrystal.h>

LiquidCrystal lcd (7,6,5,4,3,2);

#include <DHT.h>
#include <DHT_U.h>

int SENSOR = 8;
int TEMPERATURA;
int HUMEDAD;
int temperatura_inicial;
int temperatura_final;
int delta_temperatura;

DHT dht (SENSOR, DHT11);

void setup() 
{
  lcd.begin (16,2);
  dht.begin ();
  Serial.begin (9600);
}

void loop() 
{
  TEMPERATURA = dht.readTemperature();
  HUMEDAD = dht.readHumidity();
  temperatura_final = TEMPERATURA;
  delta_temperatura = temperatura_final - temperatura_inicial;

  if (temperatura_inicial < temperatura_final)
  {
    lcd.setCursor (0,0);
    lcd.print ("Subiendo");
    lcd.setCursor (0,1);
    lcd.print (TEMPERATURA);
  }
  else if (temperatura_inicial > temperatura_final)
  {
    lcd.setCursor (0,0);
    lcd.print ("Bajando");
    lcd.setCursor (0,1);
    lcd.print (TEMPERATURA);
  }
  else
  {
    lcd.setCursor (0,0);
    lcd.print ("Se mantiene");
    lcd.setCursor (0,1);
    lcd.print (TEMPERATURA);
  }
  delay (1000);
  lcd.clear();

  temperatura_inicial = temperatura_final;
  Serial.println ("inicial es:");
  Serial.println (temperatura_inicial);
  Serial.println ("final es:");
  Serial.println (temperatura_final);
  Serial.println ("diferencia es:");
  Serial.print (delta_temperatura);
  Serial.println (" 掳C");```

Utilizando el sensor de temperatura en un proyecto que hice de un Invernadero Inteligente: https://www.youtube.com/watch?v=mtfQvV8-1qY

Saludos

Mi respuesta al reto


Decidi dividir el codigo en funciones

#include<LiquidCrystal.h>
int tempC;
int valorAnterior = 0;
const int sensorTemp = A0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
Serial.begin(9600);
lcd.begin(16,2);
}

int celcius(int lecturaSensor){
  int temp = lecturaSensor;
  temp = temp * 0.48828125;
  return temp;
}


void primeraLinea(int tempC){
  lcd.setCursor(0,0);
  lcd.print("Temp:");
  lcd.setCursor(7,0);
  lcd.print(tempC);
}


void comparador(int valorActual){
  int diferencia = valorAnterior - valorActual;
  Serial.print(diferencia);
  lcd.setCursor(0,1);
  
  if (diferencia > 3) {
     lcd.print("Aumentando");
  }
  else if (diferencia < -3) {
    lcd.print("Disminuyendo");
  }
  else {
    lcd.print("Estable");
  }
  
}


void loop() {

  tempC = celcius(analogRead(sensorTemp));
  primeraLinea(tempC);
  comparador(tempC);
  delay(1000);
  valorAnterior = tempC;
  lcd.clear();
}
<#include <FastIO.h>
#include <I2CIO.h>
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal_SR.h>
#include <LiquidCrystal_SR2W.h>
#include <LiquidCrystal_SR3W.h>

int tempC;
const int sensorTemp = A0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  lcd.begin(20, 4);
}

void loop() {
  // put your main code here, to run repeatedly:
  tempC = analogRead(sensorTemp);
  tempC = tempC*0.34;
  Serial.println(tempC);
  lcd.setCursor(0,0);
  lcd.print("Temperatura");
  lcd.setCursor(0,1);
  lcd.print(tempC);
  
  if (tempC < 30){
    lcd.setCursor(0,3);
    lcd.print(":'v");
    }
  else{
    lcd.setCursor(0,3);
    lcd.print("Huele a carnitas");
    }

  delay(1000);
  lcd.clear();
  
}> 

![](

Les comparto mi c贸digo bien documentado para su entendimiento, aunque para controlar el LC uso la interfaz I2C,

/*
 * Sensor de temperatura LM35 con pantalla con LCD 16x2
 * Acortes.co
*/
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>  


float tempC; // Variable para almacenar el valor obtenido del sensor (0 a 1023)
int pinLM35 = A0; // Variable del pin de entrada del sensor (A0)
LiquidCrystal_I2C lcd(0x27, 16, 2);  //Establece la direccion del LCD 0x27 de 16 caracteres y 2 lineas


void setup() 
{
  // Configuramos el puerto serial a 9600 bps
  Serial.begin(9600);
  lcd.init();   //Inicializa la pantalla 
  lcd.backlight();

}

void loop() 
{
  // Con analogRead leemos el sensor, recuerda que es un valor de 0 a 1023
  tempC = analogRead(pinLM35); 
   
  // Calculamos la temperatura con la f贸rmula
  tempC = (5.0 * tempC * 100.0)/1024.0; 

  // Envia el dato al puerto serial
  Serial.print(tempC);
  // Salto de l铆nea
  Serial.print("\n");
  //Enviamos el dato al LCD
  lcd.clear();
  lcd.setCursor(0,0);  //Posici贸n Caracter 1,Fila 1 para el texto
  lcd.print ("*  Temperatura *");
  lcd.setCursor(4,1);   //Posici贸n Caracter 5,Fila 2 para el valor 
  lcd.print(tempC);
  lcd.setCursor(11,1); //Posici贸n Caracter 12,Fila 2 para la C
  lcd.print("C");
  
  // Esperamos un tiempo para repetir el loop
  delay(2000);
}

ayuda por favor
he revisado las conexiones , el programa y no me funciona
tambien cambie el display y no quiere funcionar
dentro del programa envie un blink al pin 13 para revisar que no sea falla del arduino y el led 13 prende y apaga correctamente pero el mensaje en el display no sale y el display brilla y da contraste correctamente
alguna sugerencia??

![](

<#include<LiquidCrystal.h>
int tempC;
int tempU = 0;
String tempV = "CONSTANT";
const int sensorTemp  = A0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
lcd.begin(16, 2);
}

void loop() {
  // put your main code here, to run repeatedly:
tempC = analogRead(sensorTemp);
tempC = tempC*0.48828125;

if (tempU == tempC){
  tempV = "CONSTANT";
  tempU = tempC;
}else if (tempU>tempC){
  tempV = "DOWN";
  tempU = tempC;
}else{
  tempV = "UP";
  tempU = tempC;
}

Serial.println(tempC);
Serial.println(tempV);
Serial.println(tempU);
lcd.setCursor(0,0);
lcd.print("Temperatura:");
lcd.setCursor(0,1);
lcd.print(tempC);
lcd.setCursor(4,1);
lcd.print(tempV);
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temperature:");
lcd.setCursor(0,1);
lcd.print(tempC);
lcd.setCursor(4,1);
lcd.print(tempV);
delay(1000);
lcd.clear();
}>

Logr茅 hacer el reto pero me qued贸 una duda: en el loop de mi c贸digo, est谩 declarado

  temp_anterior = temp;

al final del mismo. O sea, despu茅s de los if. Si pongo esta misma parte antes de declarar el valor de temp, funciona igual. Pero si lo pongo entre el valor de _temp _y los _if _solo marca Temperatura estable 驴Alguno sabe por qu茅?

Lo configur茅 para que diga cu谩ndo la temperatura est谩 estable y cuando sube o baja, y diga la diferencia entre la actual y la anterior.

Tambi茅n, al principio, marca que temp_anterior vale 0.0 pero despu茅s toma el valor que le corresponde 驴es as铆?

#include <DHT.h>
#include <DHT_U.h>
#include <LiquidCrystal.h>

const int temp_pin = 9;
DHT dht(temp_pin, DHT11);

float temp, temp_anterior, diferencia;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() 
{
  dht.begin();
  lcd.begin(16, 2);
}

void loop() 
{
  temp = dht.readTemperature();
  diferencia = temp - temp_anterior;
  
  if(temp == temp_anterior)
  {
    lcd.setCursor(0,0);
    lcd.print("Temp. estable");
    lcd.setCursor(0,1);
    lcd.print(temp);
  }
  
  if(temp > temp_anterior)
  {
    lcd.setCursor(0,0);
    lcd.print("Temp. subiendo");
    lcd.setCursor(0,1);
    lcd.print(temp);
    lcd.print("-");
    lcd.print(temp_anterior);
    lcd.print("=");
    lcd.print(diferencia);
  }
  
  if(temp < temp_anterior)
  {
    lcd.setCursor(0,0);
    lcd.print("Temp. bajando");
    lcd.setCursor(0,1);
    lcd.print(temp);
    lcd.print("-");
    lcd.print(temp_anterior);
    lcd.print("=");
    lcd.print(diferencia);
  }
  
  delay(3000);
  lcd.clear();

  temp_anterior = temp;
}




驴C贸mo conectar un display LCD?

Me aparece el error 鈥淟iquidCrystal鈥 does not a name type
Ayuda D:

jajaj Tambi茅n queme mi potenci贸metro

En el reto declare una variable int para almacenar la temperatura anterior y compara con la nueva, deacuerdo a la evaluacion regresa un string y esta se muestra en el LCD, estoy usando un LCD 1602A con comunicacion I2C

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

int tempC;
int tempAnterior=0;
const int sensorTemp=A0; //Entrada analogica del sensor
LiquidCrystal_I2C lcd(0x27, 16, 2); //Uso Biblioteca LiquidCrystal I2C by Frank de Brabander

void setup() {
  Serial.begin(9600); //establece una comunicacion serial
  //Revisar que el LCD funcione bien
  lcd.init(); // Inicializar el LCD
  lcd.backlight(); //Encender la luz de fondo.
  lcd.setCursor(0, 0); //colocamos el cursor en la posici贸n columna, fila (0,0)
  lcd.print("LM35 Y DISPLAY "); // Escribimos el Mensaje en el LCD.
  delay(1000);
  lcd.clear(); //limpiamos la pantalla para agregar nuevo mensaje
}

String reto(){ //Compara la temp nueva con la anterior
  String reultado="";
  if(tempC<tempAnterior){
    reultado= "bajando";
  }
  if(tempC>tempAnterior){
    reultado= "subiendo";
  }
  if(tempC==tempAnterior){
    reultado= "igual";
  }
  tempAnterior=tempC;//Guardamos la temp actual para una futura comparacion
  return reultado;
}

void loop() {
  tempC=analogRead(sensorTemp)*0.48828125;
  Serial.println(tempC); //muestra en la consola el valor de la variable

  lcd.setCursor(0, 0); //colocamos el cursor en la posici贸n columna, fila (0,0)
  lcd.print("Temperatura:"); // Escribimos el Mensaje en el LCD.
  lcd.setCursor(0, 1); //En la segunda fila
  lcd.print(tempC); //Se imprime la temperatura
  lcd.setCursor(3, 1);

  //Uso delo reto
  lcd.print("Temp."+reto());

  delay(1000);
  lcd.clear(); //limpiamos la pantalla para agregar nuevo mensaje  
}

Ni siquiera mostr贸 un diagrama. Para los que no sabemos nada de esto, esto es peor que un rompecabezas.

Mi ardunio no carga los skechets y ya no puedo seguir con mi protecto pero se los quiero compartir. Lo pienso imprementar para llevar los datos de mi cultivo de hidroponia. Pienso actualizarlo e implementar un esp8266 y una App
Adjunto Foto De Un cultivo Hidropinico Sencillo()
Adjunto foto de mi arduino

Que chevere esa interaccion entre entrada analoga y salida digital

Esto parece m谩s un tutorial mal tutorial de youtube que un curso de platzi

As铆 quedo mi proyecto de temperatura

no logro subir las fots de mis proyectos 馃槮

Planeo agregarle una alarma para cuando llegue a niveles cr铆ticos, pero mientras aqu铆 est谩 el desaf铆o cambia de idioma a ingl茅s y espa帽ol

#include<LiquidCrystal.h>
int tempC;
const int sensor = A0;
int beftemp;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  Serial.begin(9600); 
  lcd.begin(16, 2);
}

void loop() {
  beftemp = tempC;
  
  tempC = analogRead(sensor);
  tempC = tempC*.48828125;
  Serial.println(tempC);
  varTemp();
  lcd.clear();

  
}

void varTemp(){
  if(tempC==beftemp){
    lcd.setCursor(0,0);
    lcd.print("Temp estable");
    lcd.setCursor(0,1);
    lcd.print(tempC);
    lcd.setCursor(2,1);
    lcd.print("Grados C");
    delay(1000);
    
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Stable temp");
   
    lcd.setCursor(0,1);
    lcd.print(tempC);
    lcd.setCursor(2,1);
    lcd.print("Grades C");
    delay(1000);
    lcd.clear();
  }

  else if(tempC>beftemp){
    lcd.setCursor(0,0);
    lcd.print("Aumento de temp");
    lcd.setCursor(0,1);
    lcd.print(tempC);
    lcd.setCursor(2,1);
    lcd.print("Grados C");
    delay(1000);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Temp rise");
    lcd.setCursor(0,1);
    lcd.print(tempC);
    lcd.setCursor(2,1);
    lcd.print("Grades C");
    delay(1000);
    lcd.clear();
  }

  else{
    lcd.setCursor(0,0);
    lcd.print("Bajando temp");
    lcd.setCursor(0,1);
    lcd.print(tempC);
    lcd.setCursor(2,1);
    lcd.print("Grados C");
    delay(1000);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Lowering temp");
    lcd.setCursor(0,1);
    lcd.print(tempC);
    lcd.setCursor(2,1);
    lcd.print("Grades C");
    delay(1000);
    lcd.clear();
  }

}

Se debe de tomar en cuenta el tama帽o de las variables para evitar errores de desbordamiento:

#include <LiquidCrystal.h>

unsigned long currentTemperature = 0;     // LM35 2 a 150 掳C
unsigned int pastTemperature = 0;
const int temperatureSensor = A0;


LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  // put your setup code here, to run once:
  lcd.begin(16, 2);
}

void loop() {
  // put your main code here, to run repeatedly:
  currentTemperature = analogRead(temperatureSensor);

  currentTemperature = currentTemperature * 500 >> 10;              // 1706 bytes

  char temperatureString[17];
  sprintf(temperatureString, "Temperatura:%d C", currentTemperature);

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(temperatureString);
  
  lcd.setCursor(0, 1);
  if(currentTemperature > pastTemperature)
    lcd.print("En aumento");
  else if(currentTemperature < pastTemperature)
    lcd.print("En descenso");
  else
    lcd.print("Estable");
    
  pastTemperature = currentTemperature;
  delay(1000);
}
#include <LiquidCrystal.h>

int tempC;
int temperatura1;
int temperatura2;
const int sensorTemp= A0;
LiquidCrystal lcd(12,11,5,4,3,2);

void setup() {
  lcd.begin(16,2);
}

void loop() {
  tempC = analogRead(sensorTemp);
  tempC = tempC * 0.48828125;
  temperatura1 = tempC;
  lcd.setCursor(0,0);
  lcd.print("Temperatura: ");
  lcd.setCursor(0,1);
  lcd.print(tempC);
  delay(500);
  if(temperatura1 > temperatura2)
  {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Aumenta");
    delay(500);
  } else if (temperatura2 > temperatura1)
  {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Disminuye");
    delay(500);
  }
  temperatura2 = temperatura1;
  lcd.clear();

}```

Buenas noches compa帽eras y compa帽eros!

Les comparto el proyecto prototipado y el c贸digo.

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <DHT.h>

#define DHTPIN 2 //Pin digital para sensor
#define DHTTYPE DHT11 //Sensor DHT11

float temp;
float hum;
float tempNow = 0; 

LiquidCrystal_I2C lcd(0x3f,16,2); //Crear el objeto lcd  direcci贸n  0x3F y 16 columnas x 2 filas
DHT dht(DHTPIN, DHTTYPE); // Crear objeto dht con los parametros antes definidos

void setup() 
{
  Serial.begin(9600);
  dht.begin(); //Inicializa sensor
  lcd.init();  // Inicializar el LCD
  lcd.backlight();  //Encender la luz de fondo
  

}

void loop() 
{
  hum= dht.readHumidity(); //Humedad Relativa
  temp = dht.readTemperature(); //De 0掳C a 100掳C
  
  lcd.setCursor(0,0);
  lcd.print("Temp:");
  lcd.setCursor(5,0);
  lcd.print(temp); // En esta parte mostramos la primer lectura
  lcd.setCursor(10,0);
  lcd.print(char(223)); // Simbolo de 掳 en ASCII
   lcd.setCursor(11,0);
  lcd.print("C");

  lcd.setCursor(0,1);
  lcd.print("Humedad:"); // Ya que el DHT11 lo trae incorporado, demosle uso
  lcd.setCursor(8,1);
  lcd.print(hum);
  lcd.setCursor(13,1);
  lcd.print("%");

  

  if (temp > tempNow) // Condici贸n si la temperatura sube
  { 
    lcd.clear(); 
    lcd.print("Temp:");
    lcd.setCursor(5,0);
    lcd.print(temp);
    lcd.setCursor(10,0);
    lcd.print(char(223));
    lcd.setCursor(11,0);
    lcd.print("C - Subiendo");
    tempNow = temp; // Almacenamos la temperatura "actual" 
  }
  else if (temp < tempNow) // Condici贸n si la temperatura sube
  {
    lcd.clear();
    lcd.print("Temp:");
    lcd.setCursor(5,0);
    lcd.print(temp);
    lcd.setCursor(10,0);
    lcd.print(char(223));
    lcd.setCursor(11,0);
    lcd.print("C - Bajando");
    tempNow = temp; // Almacenamos la temperatura "actual" 
  }
  else
  
  lcd.scrollDisplayLeft(); 
 
  delay(1000);
}

Algunas salvedades:

  • El sensor es un DHT11, las librer铆as las consegu铆 en guithub

  • El display LCD usa el bus I2C, las librer铆as tambien las consegui en guithub.
    Espero les sea de utilidad!

Buenos d铆as compa帽eras y compa帽eros!

Les comparto el proyecto realizado en tinkercad, junto con una lista de materiales y el c贸digo. M谩s adelante subir茅 la versi贸n 鈥渞eal鈥 donde usar茅 algunos componentes distintos.


float tempC; // Para almacenar temp en 掳C
int sensRead; // Para alamcenar la lectura analogica (0 a 1023) del sensor
const int sensor = A0;

LiquidCrystal lcd(12,11,5,4,3,2);
  
void setup()
{
  Serial.begin(9600);
  lcd.begin(16,2);
}

void loop()
{
  sensRead = analogRead(sensor);
  tempC = map(sensRead,0,1023,0,5000); // Uso de funcion MAP para transformar valores analaogico a mV
  tempC = (tempC-500)/10; // El datasheet del sensor TMP36 (no LM35) muestras que esta es la formula correcta para obtener el valor en 掳C

  
  lcd.setCursor(0,0);
  lcd.print("Temperatura:");
  lcd.setCursor(0,1);
  lcd.print(tempC);
  delay(1000);
}

Algunas salvedades:

  • El sensor es un TMP36 no LM35, el valor de temperatura se calcula distinto
  • Use una resitencia de 160ohms para el led de retroiluminaci贸 ya que el voltaje directo es muy alto

Espero les sea de utilidad!

![](

#include<LiquidCrystal.h>
int tempC;
int tempU = 0;
String tempV = "CONSTANT";
const int sensorTemp  = A0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
lcd.begin(16, 2);
}

void loop() {
  // put your main code here, to run repeatedly:
tempC = analogRead(sensorTemp);
tempC = tempC*0.48828125;

if (tempU == tempC){
  tempV = "CONSTANT";
  tempU = tempC;
}else if (tempU>tempC){
  tempV = "DOWN";
  tempU = tempC;
}else{
  tempV = "UP";
  tempU = tempC;
}

Serial.println(tempC);
Serial.println(tempV);
Serial.println(tempU);
lcd.setCursor(0,0);
lcd.print("Temperatura:");
lcd.setCursor(0,1);
lcd.print(tempC);
lcd.setCursor(4,1);
lcd.print(tempV);
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temperature:");
lcd.setCursor(0,1);
lcd.print(tempC);
lcd.setCursor(4,1);
lcd.print(tempV);
delay(1000);
lcd.clear();
}

<code>
```



[](https://www.youtube.com/watch?v=s0012kx21K8)


https://www.youtube.com/watch?v=s0012kx21K8


#include<LiquidCrystal.h>
int tempC;
int tempU = 0;
String tempV = 鈥淐ONSTANT鈥;
const int sensorTemp = A0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
lcd.begin(16, 2);
}

void loop() {
// put your main code here, to run repeatedly:
tempC = analogRead(sensorTemp);
tempC = tempC*0.48828125;

if (tempU == tempC){
tempV = 鈥淐ONSTANT鈥;
tempU = tempC;
}else if (tempU>tempC){
tempV = 鈥淒OWN鈥;
tempU = tempC;
}else{
tempV = 鈥淯P鈥;
tempU = tempC;
}

Serial.println(tempC);
Serial.println(tempV);
Serial.println(tempU);
lcd.setCursor(0,0);
lcd.print(鈥淭emperatura:鈥);
lcd.setCursor(0,1);
lcd.print(tempC);
lcd.setCursor(4,1);
lcd.print(tempV);
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(鈥淭emperature:鈥);
lcd.setCursor(0,1);
lcd.print(tempC);
lcd.setCursor(4,1);
lcd.print(tempV);
delay(1000);
lcd.clear();
}

https://www.youtube.com/watch?v=s0012kx21K8

![](``
#include<LiquidCrystal.h>
int tempC;
int tempU = 0;
String tempV = 鈥淐ONSTANT鈥;
const int sensorTemp = A0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
lcd.begin(16, 2);
}

void loop() {
// put your main code here, to run repeatedly:
tempC = analogRead(sensorTemp);
tempC = tempC*0.48828125;

if (tempU == tempC){
tempV = 鈥淐ONSTANT鈥;
tempU = tempC;
}else if (tempU>tempC){
tempV = 鈥淒OWN鈥;
tempU = tempC;
}else{
tempV = 鈥淯P鈥;
tempU = tempC;
}

Serial.println(tempC);
Serial.println(tempV);
Serial.println(tempU);
lcd.setCursor(0,0);
lcd.print(鈥淭emperatura:鈥);
lcd.setCursor(0,1);
lcd.print(tempC);
lcd.setCursor(4,1);
lcd.print(tempV);
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(鈥淭emperature:鈥);
lcd.setCursor(0,1);
lcd.print(tempC);
lcd.setCursor(4,1);
lcd.print(tempV);
delay(1000);
lcd.clear();
}

Para el ejercicio propuesto hay que comparar la temperatura a lo largo del tiempo y si es menor a la anterior la temperatura baja, si es mayor sube. Espero les sirva.

驴Qu猫 pasa si usamos el modulo de LCD?
Tendriamos que hacer modificaciones en el codigo o ajustar los componentes.

Si usaras una interfaz i2c para lcd鈥 Ser铆a mejor.

Listo
Mi programa obtiene una referencia de la temperatura cada cierto tiempo (estaria bueno obtener el valor a cierta hora del d铆a para comparar), despues de esto compara el valor.

#include <LiquidCrystal.h>

int tempC = 0;
const int pinAnalog = A0;
int tempActual = 0;
int constant = 120;
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);//(Enable, Enable)

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  lcd.begin(16, 2);
  regTempActual();
}

void loop() {
  // put your main code here, to run repeatedly:
  tempC = analogRead(pinAnalog)* 0.488228125;
  
  if(tempActual<tempC)
  {
    lcd.clear();
    //Serial.println(tempC);
    lcd.setCursor(0,0);
    lcd.print("Temp Subiendo");
    lcd.setCursor(0,1);
    lcd.print(tempC);
    lcd.setCursor(9,1);
    lcd.print("Ref:");
    lcd.setCursor(13,1);
    lcd.print(tempActual);
    delay(500);
  }
  else if(tempActual > tempC)
  {
    lcd.clear();
    //Serial.println(tempC);
    lcd.setCursor(0,0);
    lcd.print("Temp Bajando");
    lcd.setCursor(0,1);
    lcd.print(tempC);
    lcd.setCursor(9,1);
    lcd.print("Ref:");
    lcd.setCursor(13,1);
    lcd.print(tempActual);
    delay(500);
  }
  else
  {
    lcd.clear();
    //Serial.println(tempC);
    lcd.setCursor(0,0);
    lcd.print("Temp Ambiente");
    lcd.setCursor(0,1);
    lcd.print(tempC);
    lcd.setCursor(9,1);
    lcd.print("Ref:");
    lcd.setCursor(13,1);
    lcd.print(tempActual);
    delay(500);
  }

  constant = constant - 1;
  //Serial.println(constant);
  if(constant == 0)
  {
    constant = 120;
    regTempActual();
  }
  
}

int regTempActual()
{
  tempActual = (analogRead(pinAnalog)* 0.488228125);
  return tempActual;
}```

Con el siguiente LCD no hay necesidad de tantas conexiones https://www.adafruit.com/product/772, adem谩s es azul 馃槂

No tenia sensor de temperatura asi que lo complete con la practica pasada.

yo he montado alcoholimetro con pantalla LCD 馃檪馃檪 https://www.youtube.com/watch?v=7w9ziw0N2T0

Mas sencillo el display lcd 1602 con el modulo I2c. Ahorra mucho cable.