Problema con control de temperatura con Arduino

#41
Así es, funciona como amplificador. Es una forma de calibrarlo para que tengas las lecturas más precisas.
Por eso en el microcontrolador sólo haces una operación, que es como un factor de calibración.

Estoy buscando mis apuntes de hace 10 años para tenerles una idea mas precisa.
 
Última edición por un moderador:
#42
Aqui esta el esquema del circuito y el codigo completo.

HTML:
#include <LiquidCrystal.h>

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

byte grado[8] = {
    B00010,
    B00101,
    B00010,
    B00000,
    B00000,
    B00000,
    B00000,
    B00000,
};

float temp;
int tmax = 20;

void setup() {
    analogReference(EXTERNAL);
    milcd.begin(16,2);
    milcd.createChar(0,grado);
    pinMode(7, INPUT);  //Boton 1
    pinMode(8, INPUT);  //Boton 2
    pinMode(10, OUTPUT);   //LED
}

void loop() {
    temp = float((analogRead(A1) * 1.31) / 10.23);   //Escalando a grados celcius
    
    milcd.setCursor(0,0);
    milcd.write("Tactual: ");
    
    milcd.print(temp);
    milcd.setCursor(14,0);
    milcd.print((char)0);
    milcd.write("C");
    
    if(digitalRead(7) == HIGH) {
        tmax++;
    }
    if(digitalRead(8) == HIGH) {
        tmax--;
        if(tmax < 0) {
            tmax = 0;
        }
    }
    
    if(temp >= tmax) {
    digitalWrite(10, HIGH);
    }
    else {
    digitalWrite(10, LOW);
    }
    
    milcd.setCursor(0,1);
    milcd.write("Tmax: ");
    milcd.print(tmax);
    milcd.print((char)0);
    milcd.write("C");
    
    delay(300);
    milcd.clear();
}
Recuerden, deben calcular el circuito de referencia y medir el voltaje, para cambiar la linea donde se calcula temp.

En mi circuito obtuve un voltaje de 1.31 de referencia.

Saludos.
 

Adjuntos

#43
La cosa es que un teclado 4x3 acoge demasiados pines digitales y quisiera saber si habrá algun integrado como un registro de desplazamiento que sea de paralelo a serial para así usar el teclado en un solo pin.

Estoy usando un Arduino UNO y ya habia hecho un tema de un control de temperatura. Como pueden observar, estoy usando un LCD 16x2, 1 LED y 2 botones en los pines digitales, y como pueden observar no hay un espacio especifico para un teclado ya que necesita 7 pines, pero quisiera usarlo en un solo pin.

Ahora, la pregunta es ¿Puede hacerse esto?. Espero que me puedan ayudar. Saludos:).
 
#45
Podes probar así..

Lo lees con un AnalogRead de unos de los pines del arduino

El único problema es que no podes leer 2 pulsadores al mismo tiempo.. Pero debería de andar yo no lo probé.
Ok eso ya lo he hecho, y como lo puedo apreciar tiene un problema potencial a cualquier minimo cambio de voltaje. Además de que utilizo una referencia de cerca de 1v en el pin AREF, lo que complica aun más las cosas. Saludos.
 
#47
Perfecto, aunque usa 3 pines pero es mejor que 7 pines. No tengo nociones de I2C pero investigare. Pero por si acaso me avisan si habra como les dije un registro de desplazamiento para hacer esto. Saludos:)
 
#50
Consulta: ¿Por qué no cambias la forma de poner el LCD con un 74C595?
Así sólo usas 3 pines para el LCD también. Digo, no sé, no leí mucho el post, sólo vi el ultimo diagrama.
Hay librerías para usarlo así.
 
Última edición por un moderador:
#52
Ok entiendo ese punto de cambiar el LCD a I2C para utilizar menos pines para este, pero tambien queria saber si se podia utilizar un sistema similar para la entrada de datos.

Tambien tengo una duda ¿Se pueden usar más de un dispositivo I2C en un mismo proyecto de arduino?

Saludos:).
 
#53
Ok entiendo ese punto de cambiar el LCD a I2C para utilizar menos pines para este, pero tambien queria saber si se podia utilizar un sistema similar para la entrada de datos.

Tambien tengo una duda ¿Se pueden usar más de un dispositivo I2C en un mismo proyecto de arduino?

Saludos:).
Totalmente el pcf8574 tenés tres pines para la dirección de datos
:D
Te recomiendo que leas este post. Tiene lo que nesecitas y mas sobre conexiones para tu arduino
https://www.forosdeelectronica.com/f47/aporte-pin-out-arduino-conexiones-133679/
 
Última edición:
#54
Ok entiendo ese punto de cambiar el LCD a I2C para utilizar menos pines para este, pero tambien queria saber si se podia utilizar un sistema similar para la entrada de datos.

Tambien tengo una duda ¿Se pueden usar más de un dispositivo I2C en un mismo proyecto de arduino?

Saludos:).
Hola... Un modulo I2C no reemplaza a tu display, simplemente, te permite enviar datos en serie desde el Arduino hacia el I2C, y luego este, los decodifica hacia la matriz del LCD. Con este modulo, empleas sólo dos salidas del Arduino para manejar tu display, así, te quedaran mas entradas/salidas disponibles. Puedes utilizar varios módulos I2C en paralelo, sólo recuerda que deberás asignarle una dirección diferente a cada uno y bajar del portal de Arduino la librería para usar el I2C. Saludos.
 
Última edición:
#55
Hola, gente. Os pido su ayuda. Soy nuevo en el mundo del arduino y necesito hacer un sistema que sense la temperatura del agua, ésta al estar por debajo de x temperatura encenderá un calentador (12V ) que la calentará.
Luego se apagará al alcanzar la temperatura ideal. Ejemplo; de 30° mínimo - 45° máximo. (esto debe ser de manera automática) y además se mostrará en una pantalla la temperatura en la que se encuentra el agua.

Uso el sensor DS18B20 sumergible.
Arduino uno
LCD 16x2

Quería que me ayuden en poder realizar la parte automática, ya que he visto un caso parecido con un ventilador de apago y encendido automático pero con un LM35.
Tengo entendido que éste usa la parte analógica del arduino.
Puede que el DS18B20 sólo pueda usarse en las entradas digitales del arduino.

Les dejaré la parte que tengo hasta hora, que sólo es el sensoramiento del agua y el muestreo en el LCD, (me faltaría el encendido y apagado automático del calentador)

PHP:
#include <OneWire.h>;
#include <DallasTemperature.h>
#include <LiquidCrystal.h>

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

#define ONE_WIRE_BUS 9

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

float Celsius = 0;
float Fahrenheit = 0;

void setup() {
  sensors.begin();
  lcd.begin(20, 4);
  lcd.print("Kirito Hack";
}

void loop() {
  sensors.requestTemperatures();

  Celsius = sensors.getTempCByIndex(0);
  Fahrenheit = sensors.toFahrenheit(Celsius);

  lcd.setCursor(0, 1);
  lcd.print(Celsius);
  lcd.print("Graditos");
  lcd.setCursor(0, 2);
  lcd.print(Fahrenheit);
  lcd.println("Fahrenheit");

  delay(100);

}
 
#56
ok, dices que ya lees temperatura y tienes tu variable Celsius que lo almacena, lo siguiente es una condicional, utiliza esta variable como el argumento.

if(Celsius < 30) digitalWrite(Pin_calefactor, Encender); //Si la temperatura es menor lo enciendes
if(Celsius > 45) digitalWrite(Pin_calefactor, Apagar); //Si la temperatura es mayor lo apagas

El numero de pin y el estado lógico (HIGH o LOW) lo sabras tu ya que no publicas el diagram, recuerda también iniciar los pines en el setup mediante pinMode().
 
Última edición: