//El sensor detecta cierta temperatura dentro del sistema [dependiendo de los parámetros que se establezcan en los testeos] se activa
//o desactiva el foco para que luego ventilar esta temperatura en todo el contenedor.
// En caso el medico tenga que digitar el angulo de giro, girará los grados que se le indiquen
// La programacion del motor Paso a Paso ajustado a grado fue realizado por : www.elprofegarcia.com
//Definir las variables
const int pwm = 3; // Pin del Ventilador (modulación por ancho de pulsos)
int Pin = 12; //Pin de la bombilla
const int LM35 = 0; // Sensor de temperatura
float temperatura = 20;
int ADClido = 0;
int retardo=5; // Tiempo de retardo en milisegundos (Velocidad del Motor)
int dato_rx; // valor recibido en grados
int numero_pasos = 0; // Valor en grados donde se encuentra el motor
String leeCadena; // Almacena la cadena de datos recibida
int a = 0; // Inicializa la otra parte del sistema
void setup(){
Serial.begin(9600);
pinMode(pwm, OUTPUT);
pinMode(Pin, OUTPUT);
analogReference(INTERNAL);
// Los in1 al in4 pertenecen al driver ULN200
pinMode(11, OUTPUT); // Pin 11 conectar a IN4
pinMode(10, OUTPUT); // Pin 10 conectar a IN3
pinMode(9, OUTPUT); // Pin 9 conectar a IN2
pinMode(8, OUTPUT); // Pin 8 conectar a IN1
}
void loop(){
//Programacion del sensor de temperatura, bombilla y ventilador
ADClido = analogRead(LM35);
temperatura = ADClido * 0.1075268817204301;
delay(1000);
//Los números dentro de la condicion serán modificados después del testeo
Serial.print("La temperatura es: \n" + String(temperatura));
if(temperatura > 30){
Serial.print("\n La temperatura es muy alta por lo tanto apagar la bombilla \n");
digitalWrite(Pin, LOW); //Relay encendido
Serial.println("Homogenizando la temperatura ventilador gira a 250 pwm \n");
analogWrite(pwm, 250);
delay(1000);
}
if(temperatura > 25 && temperatura <= 30){
Serial.print("\n La temperatura esta cerca del rango adecuado por lo tanto apagar la bombilla \n");
digitalWrite(Pin, LOW); //Relay encendido
Serial.println("Homogenizando la temperatura ventilador gira a 170 pwm \n");
analogWrite(pwm, 170);
delay(1000);
a = 1;
}
if(temperatura < 20){
Serial.print("\n La temperatura es muy BAJA por lo tanto encender la bombilla \n");
digitalWrite(Pin, HIGH); //Relay encendido
Serial.println("Homogenizando la temperatura ventilador gira a 250 pwm \n");
analogWrite(pwm, 250);
delay(1000);
}
//Programacion del motor de paso
// Tengo una duda. Siempre y cuando la homogenizacion de la temperatura sea correcta se activa el codigo motor de paso (a == 1){
// pero al colocar este if ( a == 1) desconoce la función paso_izq Giro hacia la izquierda. ¿Por que sucede eso? {
while (Serial.available()) { // Leer el valor enviado por el Puerto serial
delay(retardo);
char c = Serial.read(); // Lee los caracteres
leeCadena += c; // Convierte Caracteres a cadena de caracteres
}
if (leeCadena.length()>0){
dato_rx = leeCadena.toInt(); // Convierte Cadena de caracteres a Enteros
Serial.print(dato_rx); // Envia valor en Grados
Serial.println(" Grados");
delay(retardo);
dato_rx = (dato_rx * 1.4222222222); // Ajuste de 512 vueltas a los 360 grados
}
while (dato_rx>numero_pasos){ // Girohacia la izquierda en grados
paso_izq();
numero_pasos = numero_pasos + 1;
}
while (dato_rx<numero_pasos){ // Giro hacia la derecha en grados
paso_der();
numero_pasos = numero_pasos -1;
}
leeCadena = ""; // Inicializamos la cadena de caracteres recibidos
apagado(); // Apagado del Motor para que no se caliente
} ///////////////////// Fin del Loop ///////////////////////////
void paso_der(){ // Pasos a la derecha
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
delay(retardo);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
digitalWrite(8, LOW);
delay(retardo);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
delay(retardo);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
delay(retardo);
}
void paso_izq() { // Pasos a la izquierda
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
delay(retardo);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
digitalWrite(8, LOW);
delay(retardo);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
delay(retardo);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
delay(retardo);
}
void apagado() { // Apagado del Motor
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
}
//}
//}