Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* TITULO: Generar frío con una Célula Peltier cerámica TEC1-12706
- AUTOR:
- MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA
- - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia
- - TWITTER: https://twitter.com/MarianoCampoGa
- - CORREO: marianodc83@gmail.com
- DESCRIPCIÓN DEL PROGRAMA
- Con este programa generamos frío a partir de una célula Peltier. Está célula será controlada mediante
- dos pulsadores, uno para su encendido/apagado en el modo manual (Pulsador_Peltier), donde la Célula
- Peltier se irá enfriando paulatinamente hasta llegar a la temperatura mínima límite (depende de la
- potencia con la que la alimentemos la célula), y el otro para entrar en el modo PID (Pulsador_PID) en
- el que la Célula Peltier trabajará de manera automática para mantener la temperatura de su cara fría
- entre unos rangos predefinidos (entre 16 y 18°C aproximadamente). La medida de dicha temperatura la
- realizaremos mediante el sensor de temperatura DS18B20, que montaremos sobre la cara fría de la Célula,
- además todo el proceso podrá ser visualizado a través de un display LCD 2004 conectado mediante I²C.
- La célula Peltier y su sistema de refrigeración se alimentan mediante una F.A de 12VDC y 8,5A a través
- de un relé de 5VDC, que es el que directamente será controlado a través de Arduino.
- ESQUEMA DE CONEXION
- +-----+
- +----[PWR]-------------------| USB |--+
- | +-----+ |
- | GND/RST2 [ ][ ] |
- | MOSI2/SCK2 [ ][ ] A5/SCL[ ] | SCL del módulo I2C del LCD 2004
- | 5V/MISO2 [ ][ ] A4/SDA[ ] | SDA del módulo I2C del LCD 2004
- | AREF[ ] |
- | GND[ ] |
- | [ ]N/C SCK/13[ ] |
- | [ ]IOREF MISO/12[ ] |
- | [ ]RST MOSI/11[ ]~|
- | [ ]3V3 +---+ 10[ ]~|
- | [ ]5v -| A |- 9[ ]~| Pin "S" del RELÉ
- | [ ]GND -| R |- 8[ ] | Pin "PA" del "Pulsador_Peltier"
- | [ ]GND -| D |- |
- | [ ]Vin -| U |- 7[ ] | Pin "PA" del "Pulsador_PID"
- | -| I |- 6[ ]~| Cable amarillo "DATA" del sensor de temperatura DS18B20
- | [ ]A0 -| N |- 5[ ]~|
- | [ ]A1 -| O |- 4[ ] |
- | [ ]A2 +---+ INT1/3[ ]~|
- | [ ]A3 INT0/2[ ] |
- | [ ]A4/SDA RST SCK MISO TX>1[ ] |
- | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] |
- | [ ] [ ] [ ] |
- | UNO_R3 GND MOSI 5V ____________/
- \_______________________/
- NOTAS:
- - Conexión de la parte de control (entrada) del Relé:
- - Pin(+) del Relé --> +5V.
- - Pin(-) del Relé --> GND.
- - Conexión de la parte de potencia (salida) del Relé:
- - Pin "COM" del RELÉ --> Negativo de la fuente de tensión de 12VDC.
- - Pin "NO" del RELÉ --> Cable negro(-) del ventilador de 12VDC.
- - Cable rojo(+) del ventilador de 12VDC --> Positivo de la fuente de tensión de 12VDC.
- - Conexión de la célula Peltier:
- - La Célula Peltier se conecta en paralelo con el Ventilador de 12VDC, es decir, el cable rojo(+) del
- ventilador de 12VDC al cable rojo (+) de la Célula Peltier y el cable negro(-) del ventilador de 12VDC
- al cable negro(-) de la Célula Peltier.
- - Los dos pulsadores tienen dos pines, que vamos a denominar PA y PB (si es de 4 sólo usamos 2 de ellos)
- - Conexión PULL-DOWN del "Pulsador_PID" y del "Pulsador_Peltier"
- - PB tanto del "Pulsador_PID" como del "Pulsador_Peltier" conectados a VCC.
- - PA tanto del "Pulsador_PID" como del "Pulsador_Peltier" conectados a GND a través de una R=10K ohms.
- (la resistencia debe de ser individual para cada pulsador)
- - La alimentación y la masa del módulo I2C del LCD 2004 van directamente conectadas a VCC (+5V) y GND
- respectivamente.
- - Conexión del sensor de temperatura DS18B20:
- - Cable rojo (VCC) del sensor de temperatura --> Cable negro (GND) del sensor de temperatura.
- - Cable amarillo (DATA) del sensor de temperatura --> +5VDC de Arduino a través de R=4,7K (PULL-UP)
- */
- // Incluimos las librerías
- #include <OneWire.h> // Librería para la comunicación con un solo cable
- #include <DallasTemperature.h> // Librería para el sensor DS18B20
- #include <Wire.h> // Librería para la comunicación I2C
- #include <LiquidCrystal_I2C.h> // Librería para el LCD I2C
- float temperatura; // Variable para almacenar la temperatura del sensor de temperatura DS18B20
- float TEMP_MAX = 125; // Temperatura máxima que detecta el sensor de temperatura DS18B20
- float TEMP_MIN = -55; // Temperatura mínima que detecta el sensor de temperatura DS18B20
- int PIN_sensor = 6; // Pin digital para el sensor de temperatura DS18B20
- int Pulsador_PID = 7; // Pin digital 7 para el pulsador que activa el modo PID
- int Pulsador_Peltier = 8; // Pin digital 8 para el pulsador que activa la célula Peltier
- int RELE = 9; // Pin digital 9 para la señal de entrada del Relé
- // Variables internas para los pulsadores con enclavamiento
- int encender_Peltier = 0;
- int anterior_Peltier = 0;
- int estado_Peltier = 0;
- int encender_PID = 0;
- int anterior_PID = 0;
- int estado_PID = 0;
- int Peltier = 0;
- int PID = 0;
- OneWire ourWire(PIN_sensor); // Se establece el pin digital 6 para la comunicación OneWire
- DallasTemperature sensor(&ourWire); // Se instancia la librería DallasTemperature
- // Declaración del objeto para el LCD
- // Terminales de conexión del LCD: addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
- LiquidCrystal_I2C lcd(0x20, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
- void setup()
- {
- pinMode(PIN_sensor, INPUT); // Pin digital 6 como entrada
- pinMode(Pulsador_PID, INPUT); // Pin digital 7 como entrada
- pinMode(Pulsador_Peltier, INPUT); // Pin digital 8 como entrada
- pinMode(RELE, OUTPUT); // Pin digital 9 como salida
- digitalWrite(RELE, LOW); // Relé inicialmente desconectado
- lcd.begin(20,4); // Se inicializa el LCD para 20x4
- sensor.begin(); // Se inicializa el sensor de temperatura DS18B20
- lcd.setCursor(0,0);
- lcd.print("TEMPERATURA PELTIER"); // Imprimo la cabecera
- lcd.setCursor(0,1);
- lcd.print("PELTIER - OFF"); // Imprimo el estado de la célula PELTIER
- lcd.setCursor(0,2);
- lcd.print("PID - OFF"); // Imprimo el estado del modo PID
- }
- void loop()
- {
- // Función que controla el estado (ON/OFF) de la célula Peltier
- Celula_Peltier();
- // Función que controla el estado (ON/OFF) del modo PID
- modo_PID();
- sensor.requestTemperatures(); // Prepara el sensor de temperatura DS18B20 para su lectura
- temperatura = sensor.getTempCByIndex(0); // Se lee la temperatura del sensor en grados Celsius
- // Mostramos el valor de la temperatura a través del LCD 2004
- lcd.setCursor(0,4);
- lcd.print(">> TEMP = ");
- if(temperatura < 10)
- {
- lcd.print(" ");
- }
- lcd.print(temperatura);
- lcd.print(" \337C"); // Símbolo de º (número en OCTAL) + C (tabla de caracteres especiales LCD 1602)
- }
- // Función que controla el estado (ON/OFF) de la célula Peltier
- void Celula_Peltier()
- {
- // Función que evalúa el estado del pulsador Peltier
- Estado_Pulsador_Peltier();
- // Si se enciende el pulsador Peltier o la Tª es mayor o igual que TEMP_MAX se activa el RELÉ
- if(encender_Peltier == 1)
- {
- digitalWrite(RELE, HIGH);
- lcd.setCursor(0,1);
- lcd.print(">> PELTIER = ON ");
- }
- // Si es la 2ª vez que presionamos el pulsador o la Tª es menor o igual que TEMP_MIN se desactiva el RELÉ
- if(encender_Peltier == 0)
- {
- digitalWrite(RELE, LOW);
- lcd.setCursor(0,1);
- lcd.print(">> PELTIER = OFF");
- }
- }
- // Función que controla el estado (ON/OFF) del modo PID
- void modo_PID()
- {
- // Función que evalúa el estado del pulsador del modo PID
- Estado_Pulsador_PID();
- // Si es la 1ª vez que presionamos el pulsador del modo PID
- if(encender_PID == 1)
- {
- TEMP_MAX = 18; // Temperatura máxima del modo PID
- TEMP_MIN = 16; // Temperatura mínima del modo PID
- lcd.setCursor(0,2);
- lcd.print(">> PID = ON ");
- if(temperatura >= TEMP_MAX)
- {
- encender_Peltier = 1;// Se enciende la célula Peltier
- }
- if(temperatura <= TEMP_MIN)
- {
- encender_Peltier = 0;// Se apaga la célula Peltier
- }
- }
- // Si es la 2ª vez que presionamos el pulsador del modo PID
- else
- {
- TEMP_MAX = 125; // Temperatura máxima que detecta el sensor de temperatura DS18B20
- TEMP_MIN = -55; // Temperatura mínima que detecta el sensor de temperatura DS18B20
- lcd.setCursor(0,2);
- lcd.print(">> PID = OFF");
- }
- }
- // Función que evalúa el estado del pulsador ON/OFF de la Célula Peltier
- void Estado_Pulsador_Peltier()
- {
- estado_Peltier = digitalRead(Pulsador_Peltier); // Comprobamos el estado actual del pulsador Peltier
- // Si el pulsador Peltier está presionado y su estado anterior es desactivado
- if(estado_Peltier && anterior_Peltier == 0)
- {
- encender_Peltier = 1 - encender_Peltier;
- }
- anterior_Peltier = estado_Peltier; // Se actualiza el estado anterior del pulsador Peltier
- }
- // Función que evalúa el estado del pulsador del modo PID
- void Estado_Pulsador_PID()
- {
- estado_PID = digitalRead(Pulsador_PID); // Comprobamos el estado actual del pulsador Peltier
- // Si el pulsador del modo PID está presionado y su estado anterior es desactivado
- if(estado_PID && anterior_PID == 0)
- {
- encender_PID = 1 - encender_PID;
- }
- anterior_PID = estado_PID; // Se actualiza el estado anterior del pulsador Peltier
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement