#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#define tROTARHUEVOS 10000 //(rotar huevos cada 2 horas)
#define tOBJETIVO 37 //(temperatura de incubación 37ºC)
#define pSERVO 9 //(servo conectado al pin 9)
#define pVENTILADOR 12 //(ventilador conectado al pin 12)
#define SERVOa1 45
#define SERVOa2 135
#define pRELE 7 //(relé con calefactor conectado al pin 7)
#define pONEWIRE 3 //(sonda DS18b20 conectada al pin 3)
boolean statusServo = false;
unsigned long time, previoTime = 0;
float temp;
Servo servo;
LiquidCrystal_I2C lcd(0x27, 16, 2);
OneWire oneWireBus(pONEWIRE);
DallasTemperature sensor(&oneWireBus);
void setup() {
pinMode(pRELE, OUTPUT);
pinMode(pVENTILADOR, OUTPUT);
Serial.begin(9600);
sensor.begin();
lcd.init();
lcd.backlight();
servo.attach(pSERVO);
servo.write(SERVOa1);
}
void termostato() {
lcd.setCursor(0, 0);
lcd.print("Objetivo");
lcd.setCursor(9, 0);
lcd.print(tOBJETIVO);
lcd.setCursor(12, 0);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Tempera.");
lcd.setCursor(9, 1);
lcd.print(temp);
lcd.setCursor(15, 1);
lcd.print("C");
if (temp < tOBJETIVO) {
digitalWrite(pRELE, HIGH);
digitalWrite(pVENTILADOR, HIGH);
} else {
digitalWrite(pRELE, LOW);
digitalWrite(pVENTILADOR, LOW);
}
}
void rotacion() {
time = millis();
if (time - previoTime > tROTARHUEVOS) {
previoTime = time;
Serial.println(statusServo ? SERVOa1 : SERVOa2);
servo.write(statusServo ? SERVOa1 : SERVOa2);
statusServo = !statusServo;
}
}
void loop() {
sensor.requestTemperatures();
temp = sensor.getTempCByIndex(0);
Serial.print("Temperatura en sensor: ");
Serial.print(temp);
Serial.println(" ºC");
termostato();
rotacion();
delay(1000);
}