Invernadero Automatizado con Arduino
Invernadero Automatizado con Arduino
FACULTAD DE TECNOLOGÍA
CARRERA DE ELECTRONICA Y TELECOMUNICACIONES
PROYECTO
INFORME
CI: 9102220
INVERNADERO
AUTOMATIZADO
La Paz –Bolivia
2017
INVERNADERO AUTOMATIZADO
POR ARDUINO
OBJETIVO:
adecuados de temperatura, humedad relativa y calidad del aire. Con ello conseguir
la mejor respuesta del cultivo y por tanto, mejoras en el rendimiento, precocidad,
calidad del producto y calidad del cultivo. El usuario introduce las condiciones
ambientales deseadas y el microcontrolador actúa sobre sus salidas para
conseguirlas, corrigiendo sus decisiones gracias a la labor de los sensores, los
cuales permiten cerrar El lazo de control. De esta forma, puede crearse un
microclima con unas condiciones determinadas de temperatura, humedad y
calidad de aire en el invernadero.
ESTRUCTURA DE LA MAQUETA
SRAM: 8KB
EEPROM: 4KB
Alimentación
Arduino Mega puede ser alimentado mediante el puerto USB o con una fuente
externa de poder. La alimentación es seleccionada de manera automática.
Cuando se trabaja con una fuente externa de poder se debe utilizar un convertidor
AC/DC y regular dicho voltaje en el rango operativo de la placa. De igual manera
se puede alimentar el micro mediante el uso de baterías. Preferiblemente el voltaje
debe estar en el rango de los 7V hasta los 12V.
Arduino Mega posee algunos pines para la alimentación del circuito aparte del
adaptador para la alimentación:
5V: Podemos obtener un voltaje de 5V y una corriente de 40mA desde este pin.
3.3V: Podemos ubtener un voltaje de 3.3V y una corriente de 50mA desde este
pin.
Arduino puede ser programado de una manera muy fácil utilizando el lenguaje
propio de Arduino junto con la interfaz Arduino IDE.
VENTILADORES
SISTEMA DE CALECFACION
ARD1
ARDUINO MEGA2560 R3
VDD
VSS
VEE
RW
RS
D0
D1
D2
D3
D4
D5
D6
D7
E
RV1
1k
1
2
3
4
5
6
7
8
9
10
11
12
13
14
RESET
AREF
13
PB7/OC0A/OC1C/PCINT7
12
PB6/OC1B/PCINT6
R3 A0 PB5/OC1A/PCINT5
11
10k PF0/ADC0 10
A1 PB4/OC2A/PCINT4
PF1/ADC1 9
A2 PH6/OC2B
PF2/ADC2 8
A3 PH5/OC4C
PWM
PF3/ADC3
A7
PF7/ADC7/TDI 7
A6 PH4/OC4B
ANALOG IN
PF6/ADC6/TDO 6
A5 PH3/OC4A
PF5/ADC5/TMS 5
ATMEGA2560
A4 PE3/OC3A/AIN1
16AU 1126
PF4/ADC4/TCK 4
PG5/OC0B
1
3
A8 PE5/OC3C/INT5
LDR1 A9
PK0/ADC8/PCINT16
PE4/OC3B/INT4
2
TORCH_LDR PK1/ADC9/PCINT17 1
A10 TX0 PE1/TXD0/PDO
[Link].
PK2/ADC10/PCINT18 0
A11 RX0 PE0/RXD0/PCINT8
PK3/ADC11/PCINT19
COMUNICATION
A12
PK4/ADC12/PCINT20 14
A13 TX3 PJ1/TXD3/PCINT10
2
PK5/ADC13/PCINT21 15
A14 RX3 PJ0/RXD3/PCINT9
PK6/ADC14/PCINT22 16
A15 TX2 PH1/TXD2
PK7/ADC15/PCINT23 17
RX2 PH0/RXD2
TX1 PD3/TXD1/INT3
18 D1 D2
19 R1 R2 LED-BIGY LED-BLUE
RX1 PD2/RXD1/INT2
20
PB2/MOSI/PCINT2
PB3/MISO/PCINT3
SDA PD1/SDA/INT1
PB1/SCK/PCINT1
21
PB0/SS/PCINT0
PG2/ALE
PA7/AD7
PA6/AD6
PA5/AD5
PA4/AD4
PA3/AD3
PA2/AD2
PA1/AD1
PA0/AD0
PC2/A10
PC4/A12
PC5/A13
PC6/A14
PC7/A15
PG0/WR
PC3/A11
PG1/RD
PC0/A8
PC1/A9
PD7/T0
PL2/T5
PL6
PL7
U1
53
52
51
50
49
48
47
46
45
44
43
42
41
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
1
VDD
2 > 81
DATA
4 31
GND
%RH °C
DHT11
U2 M1
9
COM
1 16
1B 1C
2 15
2B 2C
3 14
3B 3C
4 13 +88.8
4B 4C
5 12 MOTOR-BLDCM
5B 5C
6 11
6B 6C
7 10
7B 7C
ULN2003A
LCD1
LM016L
VDD
VSS
VEE
RW
RS
D0
D1
D2
D3
D4
D5
D6
D7
E
1
2
3
4
5
6
7
8
9
10
11
12
13
14
RV1
1k
DIAGRAMA DE BLOQUES
CONTROL TEMPERATURA
MOSTRAR POR
PROGRAMA DE LCD
LDR TEMPERATURA
C/S&&S/L
ABRIR CERRAR
CONTROL
CONTROL
A A
CONTROL DEL
ILUMINACION
USUARIO INTERNET
SEGURIDAD
CODIGO FUENTE
/ librerias requeridas
#include <LiquidCrystal.h>
#include <DHT.h>
#include <SPI.h>
#include <Ethernet.h>
#include <Servo.h>
#define motor1 2 // pin 1 del ULN2003, corresponde a Azul del motor (pin 1)
#define motor2 3 // pin 2 del ULN2003, corresponde a Rosa del motor (pin 2)
#define motor3 4 // pin 3 del ULN2003, corresponde a Amarillo del motor (pin 3)
#define motor4 5 // pin 4 del ULN2003, corresponde a Naranja del motor (pin 4)
int velocidadmotor = 1000; //variable para velocidad de pasos del motorto set
stepper speed
Servo microservo;
int pos = 0;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //Direccion Fisica MAC
byte ip[] = { 192, 168,0, 153 }; // IP Local que usted debe configurar
String readString;
// variables medidas
float temperatura = 0;
float humedad = 0;
float indiceCalor = 0;
// temperatura de control
int temperaturaControl = 0;
long previousMillis = 0; // tiempo en milisegundos para tarea en segundo plano
// caracteres personalizados
byte grados[8] = {
};
};
B00000,
};
B00000,
};
B11111,
};
void setup()
[Link]();
//[Link](9600);
[Link]();
// configurar pines
pinMode(dht11Pin, INPUT);
pinMode(relayPin, OUTPUT);
pinMode(botonMasPin, INPUT);
pinMode(botonMenosPin, INPUT);
pinMode(venti, OUTPUT);
// crear caracteres
[Link](0, grados);
[Link](1, flechas);
[Link](2, fanOn);
[Link](3, fanOff);
[Link](4, barra);
[Link](0,0);
[Link]("INVERNADERO...");
[Link](i, 1);
[Link]((byte)4);
delay(250);
delay(250);
[Link]();
delay(500);
indiceCalor = [Link]([Link](true),
humedad); // calcula el indice de calor
if (isnan(humedad) || isnan(temperatura)) {
//debugging
//[Link]("Fallo la lectura del sensor...");
return;
temperaturaControl = temperatura + 1;
desplegarInformacion();
void loop()
if (client) {
while ([Link]()) {
if ([Link]()) {
char c = [Link]();
readString += c;
[Link]("Content-Type: text/html");
[Link]();
[Link]("<HTML>");
[Link]("<HEAD>");
[Link]("<h1 align='center'>INVERNADERO</h1><h1
align='center'>AUTOMATIZADO</h1><h2 align='center'>**===-----CONTROL-----
===**</h2>");
[Link]("</b>");
[Link]("</HEAD>");
[Link]("<BODY >");
[Link]("<hr />");
[Link]("<div style='text-align:center;'>");
[Link]("<h2 align='center'>ILUMINACION</h2>");
[Link]("<button onClick=[Link]='./?button2on\'
style='margin:auto;background-color: #FF0000;color: snow;padding: 10px;border:
1px solid #990000;width:65px;'>");
[Link]("ON");
[Link]("</button>");
[Link]("<button onClick=[Link]='./?button2off\'
style='margin:auto;background-color: #FF0000;color: snow;padding: 10px;border:
1px solid #990000;width:65px;'>");
[Link]("OFF");
[Link]("</button>");
[Link]("<br />");
[Link]("<br />");
[Link]("<hr />");
[Link]("<button onClick=[Link]='./?right\'
style='margin:auto;background-color: #FF0099;color: snow;padding: 10px;border:
2px solid #990066;width:65px;'> ");
[Link]("ON");
[Link]("</button>");
[Link]("<button onClick=[Link]='./?left\'
style='margin:auto;background-color: #FF0099;color: snow;padding: 10px;border:
2px solid #990066;width:65px;'> ");
[Link]("OFF");
[Link]("</button>");
[Link]("<br />");
[Link]("<hr />");
[Link]("</BODY>");
[Link]("</HTML>");
delay(1);
if ([Link]("?button2on") >0){
digitalWrite(2, HIGH);
if ([Link]("?button2off") >0){
digitalWrite(2, LOW);
if ([Link]("?left") >0){
[Link](pos);
if ([Link]("?right") >0){
[Link](pos);
}
// Limpia el String(Cadena de Caracteres para una nueva lectura
readString="";
currentBotonMas = digitalRead(botonMasPin);
currentBotonMenos = digitalRead(botonMenosPin);
if (digitalRead(botonMasPin)) {
temperaturaControl++;
// [Link](temperaturaControl);
lastBotonMas = HIGH;
else {
lastBotonMas = digitalRead(botonMasPin);
if (digitalRead(botonMenosPin)) {
temperaturaControl--;
//[Link](temperaturaControl);
lastBotonMenos = HIGH;
else {
lastBotonMenos = digitalRead(botonMenosPin);
[Link](6,1);
[Link]((byte)1);
[Link](7,1);
[Link](temperaturaControl);
[Link](10,1);
[Link]("Buf");
[Link](15,1);
[Link]((byte)2);
digitalWrite(relayPin, LOW);
else {
[Link](15,1);
[Link]((byte)3);
digitalWrite(relayPin, HIGH);
//[Link](15,1);
//[Link]((byte)2);
digitalWrite(venti, LOW);
else {
//[Link](15,1);
//[Link]((byte)3);
digitalWrite(venti, HIGH);
previousMillis = currentMillis;
indiceCalor = [Link]([Link](true),
humedad); // calcula el indice de calor
if (isnan(humedad) || isnan(temperatura)) {
//debugging
return;
desplegarInformacion();
/**
*/
void desplegarInformacion()
[Link](0, 1);
[Link]("T:");
[Link](2, 1);
[Link]((int)temperatura);
[Link](4, 1);
[Link]((byte)0);
[Link](0, 0);
[Link]("H:");
[Link](2, 0);
[Link]((int)humedad);
[Link](4, 0);
[Link]("%");
/*[Link](6, 0);
[Link]("IC:");
[Link](9, 0);
[Link](indiceCalor); */
CONCLUSION:
La maqueta construida ha permitido simular las condiciones ambientales que
tienen lugar en el interior de un invernadero, y por consiguiente se han podido
llevar a cabo los objetivos propuestos en este trabajo.
Las tareas principales que lleva a cabo la aplicación servidor se han desarrollado
empleando funciones y clases, lo que repercute en una aplicación versátil y
fácilmente escalable. Propuestas como recibir una nueva variable del invernadero,
ampliar el mensaje de comunicación o crear un nuevo campo en la base de datos
son fácilmente asumibles
BIBLIOGRAFIA: