Plancha Calentadora Multiusos
Introducción
El objetivo principal de nuestra práctica era construir una plancha para poder calentar comida.
Además, durante la realización de la misma nos dimos cuenta de que también podría usarse para precalentar circuitos y llevarlos hasta el punto de soldadura. Pensamos que esta opción también podría resultar interesante ya que, si pensamos en un plan de negocio, una plancha para cocinar cuesta 29€ y solo en materiales presupuestados para esta práctica se supera ese precio, mientras que una estación de calentado de PCB suele costar unos 80€.
Desarrollo
Pasos Dados
Una vez decidido lo que queríamos hacer nos pusimos manos a la obra.
Cuando llegaron todas las piezas y con una plancha y una madera que nos regalaron para hacer la práctica, quedamos varios días en el laboratorio de física de la universidad para poder realizar el proyecto.
Comenzamos colocando los materiales de manera que en base a los cables con los que
contábamos ninguno quedara ni demasiado corto ni demasiado largo. Al unir todo con los cables temíamos que al haber separados varios cables de la alimentación de la plancha nos pegara un calambrazo o algo prendiera en llamas, así que actuamos con prudencia para evitar cualquier error. Una vez conectado y comprobado todo vimos que no había ningún problema.
Hicimos un código para comprobar que cada parte de la práctica funcionaba por separado y cuando
vimos que todo iba a la perfección unificamos todo el código.
Montamos la práctica definitivamente sobre la madera y probamos el código unificado, todo
funcionaba a la perfección. Lo último fue modificar el código para que quedara mucho más legible y
limpio.
Materiales
Material | Precio |
Placa Arduino Uno | 0€ (clase) |
Cables | 10,99€ |
Relé SSR-40DA | 10,99€ |
Sensor Tº Termopar Tipo K | 8,99€ |
Codificador | 5,79€ |
Leds | 0€ (clase) |
Plancha | 0€ (reutilizada) |
Madera | 0€ (reutilizada) |
Ventilador | 0€ (reutilizado) |
Interruptor | 0€ (reutilizado) |
Total | 36,76€ |
Código
//librerias para manejar encoder y sensor de temperatura
#include "max6675.h"
#include "Encoder.h"
// variable para rele
int SSR = 5;
// variables sensor de temperatura
int ktcSO = 8;
int ktcCS = 9;
int ktcCLK = 10;
MAX6675 ktc(ktcCLK, ktcCS, ktcSO);
//variables relacionadas con el encoder y modo reflow
int pinEnt = 4;
bool E = false;
bool pulsado = false;
bool terminado = true;
long antiguaPosicion = 0;
int tempObjetivo = 0;
#define ENCODER_OPTIMIZE_INTERRUPTS
Encoder encoder(2, 3);
// leds para indicar temperatura
int led1 = 11;
int led2 = 12;
// led para indicar activación del modo reflow
int led3 = 6;
float temperatura;
unsigned long time;
unsigned long transcurrido;
void setup() {
Serial.begin(9600);
pinMode(SSR, OUTPUT); //rele apagado inicialmente
digitalWrite(SSR, LOW);
pinMode(led1, OUTPUT); //led apagado inicialmente
digitalWrite(led1, LOW);
pinMode(led2, OUTPUT); //led apagado inicialmente
digitalWrite(led2, LOW);
pinMode(led3, OUTPUT); //led apagado inicialmente
digitalWrite(led3, LOW);
// declaramos pin encoder pulsador
pinMode(pinEnt, INPUT);
encoder.write(antiguaPosicion);
delay(500);
}
void loop() {
time = millis();
long nuevaPosicion = encoder.read();
// controlar si el usuario quiere modificar la temperatura con el encoder
if (nuevaPosicion != antiguaPosicion) {
if(nuevaPosicion < 0){
nuevaPosicion = 0;
encoder.write(0);
}
antiguaPosicion = nuevaPosicion;
tempObjetivo = nuevaPosicion;
}
// control del modo reflow
if(E == false){
if(digitalRead(pinEnt) == LOW){
E = true;
if(pulsado){
pulsado = false;
terminado = true;
}else{
pulsado = true;
terminado=false;
}
}
}
if(E == true){
if(digitalRead(pinEnt) == HIGH){
Serial.println("Presionado");
E = false;
}
}
//////////////////////////////////////////////////////////////////
delay(200);
temperatura = ktc.readCelsius();
// modo normal (regular temperatura)
if(temperatura < tempObjetivo && !pulsado){
if(temperatura < tempObjetivo){
analogWrite(SSR,20);
} else{
digitalWrite(SSR, LOW);
}
}
// modo reflow
else if(pulsado){
if(temperatura > 180){ // apagar
digitalWrite(SSR, LOW);
terminado = true;
pulsado = false;
} else if(temperatura <= 138 && temperatura > 110){ // estabilización
analogWrite(SSR, 6);
}else if(temperatura < 90){ // precalentamiento
digitalWrite(SSR,HIGH);
}else if(temperatura > 138 && temperatura < 180){ // calentamiento
digitalWrite(SSR,HIGH);
}
}
else{
digitalWrite(SSR, LOW);
}
// mostrar la T cada 0,5s por pantalla
if(time-transcurrido>500){
transcurrido = time;
Serial.print("Temperatura actual = ");
Serial.print(temperatura);
Serial.print(" Temperatura objetivo ");
if(!pulsado){
Serial.println(tempObjetivo);
}else{
Serial.println(220);
}
}
// encender led verde si T inferior a 40º
if(temperatura < 40){
analogWrite(led1, 150);
analogWrite(led2, 0);
}
// encender led rojo si T superior a 40º
else{
analogWrite(led2, 150);
analogWrite(led1, 0);
}
// encender el led verde 2 que indica que está modo reflow
if(!terminado){
digitalWrite(led3, HIGH);
}else{
digitalWrite(led3, LOW);
}
}