Documente Academic
Documente Profesional
Documente Cultură
So Carlos SP
Novembro/2014
So Carlos
2014
Resumo
Este trabalho foi motivado pela crescente utilizao da Internet no dia a dia das
pessoas nos ltimos anos, alm da grande disponibilidade de mdulos eletrnicos
comercializados ao redor do mundo a baixo custo. A unio desses dois fatos favorece
a construo de prottipos automatizados conectados rede. Neste documento
detalhada a criao de uma estufa automatizada, controlada remotamente pela
Internet atravs de uma pgina online. O sistema foi construdo em mdulos sendo
baseado na utilizao do sistema operacional Ubuntu 12.04 para disponibilizar o
acesso remoto via internet, e plataforma Arduino para controlar uma srie de sensores
e atuadores. As formas de comunicao entre os mdulos, o desenvolvimento da
pgina web e a montagem em geral atenderam aos requisitos da proposta inicial,
permitindo assim a concluso com xito do projeto.
Abstract
This work has been motivated by the expanding daily use of the Internet by people in
recent years, in addition to the wide availability of low-cost electronic modules traded
all over the world. These two factors combined promote the building of networkconnected automated prototypes. This paper details the creation of an automated
greenhouse, which is remotely controlled by an online webpage. The system was built
in modules, being based in the Ubuntu 12.04 operational system and the Arduino
plataform in order to control a series of sensors and actuators. The means of
communication between the modules, the developing of the webpage and the
assembly in general met the requirements of the initial proposal, thus enabling the
successful completion of the project.
10
Lista de Abreviaturas
Web
RISC
EEPROM
SRAM
USART
SPI
SynchronousAsynchronousReceiverTransmitter
Transmissor/Receptor
A/D
Analgico-Digital.
IDEs
ROM
E/S
Entrada e sada
11
12
Sumrio
Resumo ........................................................................................................................ 7
Abstract ........................................................................................................................ 9
Lista de Abreviaturas .................................................................................................. 11
Sumrio ...................................................................................................................... 13
1.
2.
3.
Introduo............................................................................................................ 15
1.1.
Objetivo ........................................................................................................ 15
1.2.
Histria ......................................................................................................... 15
1.3.
Motivao ..................................................................................................... 16
1.4.
Organizao do trabalho............................................................................... 17
2.2.
13
Resultados........................................................................................................... 43
4.1. Hardware.......................................................................................................... 43
4.1.1.
4.1.2.
4.1.3.
4.1.4.
Concluses .......................................................................................................... 59
5.1.
5.2.
5.3.
5.4.
Trabalhos Futuros......................................................................................... 60
14
1.
Introduo
1.1.
Objetivo
1.2.
Histria
15
1.3.
Motivao
A ideia do trabalho pode se apoiar no fato de que a tecnologia est cada vez
mais presente no dia-a-dia das pessoas. Aquelas que possuem alguma plantao que
precisa de cuidados dirios e eventualmente precisam viajar, por exemplo, podem se
utilizar do projeto para manter plantas em um ambiente com temperatura adequada e
umidade e iluminao controladas pela Internet, alm de poder requisitar fotos atravs
de uma webcam.
Vdeo que rene vrias fotos tiradas em sequncia e na mesma posio, que vo dar a impresso de um
vdeo acelerado do desenvolvimento da planta.
16
1.4.
Organizao do trabalho
17
18
2.
Embasamento Terico
2.1.
19
relativos s alteraes causadas por alteraes nos botes online (como a irrigao
das plantas).
O notebook equipado com Ubuntu 12.04 utilizado no projeto, que executa o
programa em Python e mantm o servidor web ser a partir de agora chamado de
computador.
2.2.
Microcontrolador ATMega328
uma
USART,
portas
para
comunicao
SPI,
20
21
22
3.
Materiais e Mtodos
3.1. Estufa
23
24
3.2. Arduino
25
26
3.3. Sensores
27
Resistor de pull-down utilizado para fixar o nvel lgico de uma entrada de dados em 0 se no
utilizarmos um desses (ou de pull-up que mantm o nvel lgico em 1), a leitura do pino fica
comprometida por rudo. O resistor deve ser ligado entre o pino desejado e o GND do circuito.
28
29
Uma foto do sensor de umidade do solo pode ser visto na Figura 10. Um
esquema de conexo do circuito pode ser visto na Figura 11.
3.4. Atuadores
30
desses perifricos ser feito atravs de uma fonte externa (retirada de um computador
antigo, com sadas de 5 V, 12 V e 110 ou 220 V) e reles.
Reles so interruptores eletromecnicos. Quando uma corrente eltrica
percorre as bobinas de um rele, cria um campo magntico que atrai ou repulsa uma
chave metlica, que fecha um circuito eltrico. Dessa forma, podem-se isolar tenses
diferentes em um mesmo circuito.
No caso do projeto, como o Arduino no fornece corrente suficiente para
alimentar as bobinas dos reles, a soluo que ele excite a base de um transistor
bipolar, cujo coletor est conectado ao rele, gerando uma corrente maior na bobina do
mesmo.
A bobina est em paralelo com um diodo, conhecido como diodo de roda
livre. Esse diodo serve para a proteo do transistor: Quando a corrente na bobina
interrompida, ela pode gerar picos de tenso em seus terminais, que podem queimar o
transistor. O diodo posicionado de forma que, se houver pico de tenso no coletor do
transistor, a corrente passe por ele, e no seja forada pelo transistor. [8]
A corrente na bobina gera um campo magntico que fecha (mecanicamente) o
circuito entre o GND de algum perifrico, como a bomba dgua, e o GND da fonte
externa, ativando o circuito. O esquemtico de conexo de um rele pode ser visto na
Figura 12.
31
3.4.1. Luz
A lmpada feita para funcionar em 220 V, mas no danificada quando ligada a 110 V e para o rele
indiferente a tenso controlada.
32
controle feito a partir do pino A4 do Arduino. Quando esse pino setado para nvel
lgico 1, a lmpada ativada.
33
34
Mesmo tipo de circuito usado para controlar motores: Um sinal de controle determina a polaridade do
circuito (qual fio ser ligado ao VCC da fonte e qual fio ser ligado ao GND da fonte).
35
necessrios). Isso torna a pastilha bastante potente (12 V * 6 A = 72 W), o que justifica
seu uso em bebedouros industriais5.
Para dissipar o calor que a pastilha de Peltier gera, foram utilizados dois pares
cooler-dissipador. No recomendado que a pastilha seja energizada sem ao menos
um dissipador.
Detalhes sobre a fixao do conjunto coolers-Peltier e o circuito de controle do
mesmo podem ser vistos na seo 3.4.4.
3.4.4. Coolers
Por isso que na parte externa de um bebedouro o metal fica quente no local onde a Peltier est instalada,
a outra face dela permanece fria, gelando a gua.
36
Para inspeo dos valores dos sensores sem acesso pgina web, foi inserido
no projeto um display LCD da Nokia. Uma figura do display j exibindo as informaes
pode ser visto na Figura 20.
3.6. Comunicao
3.7. Cmera
38
Na pgina web, existe um boto com o desenho de uma cmera que, quando
apertado, executa um comando no computador que captura uma imagem da webcam
e a salva no diretrio em que o servidor web est atuando (geralmente /var/www),
sempre com o mesmo nome (foto1.jpeg). Na pgina tambm existe um espao
reservado para a imagem, que sempre exibe o arquivo foto1.jpeg, qualquer que seja
a ltima foto capturada.
O acesso da webcam pelo servidor feito via linha de comando no terminal,
com o auxlio do softwareopen-source fswebcam [15]. O quadro abaixo mostra a
linha completa executada pelo servidor. A opo -r pede a resoluo desejada, -d
espera o local onde o dispositivo est montado e por fim informado o nome da nova
foto.
fswebcam
39
A pgina web foi criada para ser bastante intuitiva ao usurio. So apenas trs
elementos na tela. Ela foi desenvolvida utilizando a combinao das linguagens HTML,
PHP e CSS. Mais detalhes podem ser vistos na seo 4.3.2.
O primeiro elemento uma tabela que exibe os valores de temperatura do ar,
umidade do ar, umidade do solo, e estado da luz (ON/OFF) todos esses valores so
enviados pelo Arduino a cada loop do programa, ou seja, a taxa de atualizao deles
bem rpida. Uma imagem dessa tabela pode ser visto na Figura 23.
40
41
42
4.
Resultados
4.1. Hardware
43
Figura 27 - Esquema de fixao dos coolers. A pastilha de Peltier est entre eles.
37
35
38
00:40:00
00:50:00
39
31
30
25
38
26
23
20
15
00:00:00
00:10:00
00:20:00
00:30:00
01:00:00
45
23
23
23
23
00:00:00
00:10:00
00:20:00
00:30:00
22
22
22
00:40:00
00:50:00
01:00:00
20
15
46
de gua podem ser vistas nas Figura 32 e Figura 33. Uma foto da nova configurao
da estufa (com o reservatrio de gua em cima da tampa) ser mostrada na Figura 40.
47
48
49
Com o desenho pronto, a placa foi construda em uma mquina fresadora: uma
estrutura que movimenta com muita preciso nos 3 eixos cartesianos, uma
ferramenta que corri o cobre da face inferior de uma placa, isolando as trilhas de
conexo eltrica. A mesma mquina possui a funo de fazer os furos para soldagem
atravs da troca da ferramenta da extremidade. Uma foto do circuito feito nessa
mquina pode ser visto na Figura 37.
50
51
52
53
AO PAGINA WEB
AO PYTHON
controle_iluminacao.txt
Escreve 0 nesse
Permanece verificando
arquivo quando o
se o nvel lgico
escrito no arquivo
54
controle_irrigacao.txt
muda, e envia ao
clicado. Escreve 1
oposta.
Escreve 1 nesse
Permanece verificando
o arquivo. Quando
percebe o valor 1,
clicado.
envia o comando
irrigar ao Arduino e
reseta o arquivo,
escrevendo 0.
controle_temperatura.txt
Permanece verificando
temperatura a ser
ocorrem, envia ao
arquivo.
Arduino a string
temperaturaX, onde
X a nova
temperatura que o
Arduino deve buscar.
Rotina que executada toda vez que o Arduino recebe algum dado via serial, no importando
o local do cdigo que estava sendo executado no momento.
55
Para que o usurio pudesse de fato controlar a estufa atravs da pgina web
foi necessrio configurar corretamente as permisses de arquivos no sistema
operacional do computador. Assim, para que cada boto funcionasse corretamente ao
ser apertado pelo usurio era necessrio que os arquivos textos de controle para a
temperatura, irrigao e iluminao possussem permisso www-data. Esta
permisso dada, por exemplo, com o seguinte comando:
56
Alm das permisses www-data tambm foi necessrio dar permisso 777
ao arquivo/dev/video1 que controla a webcam, permitindo tambm tirar fotos atravs
do boto da pgina web, com o seguinte comando:
sudo sh config.sh
Para caso de teste da estufa, foi adquirido um vaso pequeno e foram plantados
alguns gros de feijo. Esse vegetal foi escolhido pela sua simplicidade, de forma que
o objetivo desta parte do trabalho era validar o prottipo em termos de iluminao,
irrigao, e, principalmente de monitoramento remoto, pela webcam. Concluiu-se que
a escolha de um vegetal com necessidades muito especficas, que poderia acabar no
se desenvolvendo totalmente devido s condies disponveis no ambiente, no era
interessante.
Duas imagens capturadas pela webcam aps a plantao podem ser vistas na
Figura 41e Figura 42. Elas mostram o vegetal em duas situaes diferentes: logo aps
o plantio, e algumas semanas depois dos brotos aparecerem.
57
58
5.
Concluses
5.1.
Concluses gerais
5.2.
5.3.
5.4.
Trabalhos Futuros
60
REFERNCIAS BIBLIOGRFICAS
http://www.cadsoftusa.com/download-eagle/freeware/.
Acesso em 29/10/2014.
Sistemas
[2]
Operacionais.
Disponvel
em
[4]Microcontroladores.
em
Microcontrolador
ATMega328.
Disponvel
em
http://www.nkcelectronics.com/arduino-ready-avr-atmega328-microcontrol328.html.
Acesso em 08/09/2014.
[6]
Pgina
oficial
do
Arduino
UNO.
Disponvel
em
Datasheet
do
sensor
DHT11.
Disponvel
em
transistor
bipolar
como
chave.
Disponvel
em
http://www.ebah.com.br/content/ABAAAfLpMAD/transistor-bipolar-como-chave. Acesso
em 05/06/2014.
[9] Efeito de luzes coloridas no desenvolvimento de plantas. Disponvel em
http://www.ehow.com.br/efeito-luzes-coloridas-crescimento-plantas-sobre_76499/.
Acesso em 10/09/2014.
[10] DealExtreme. Disponvel em http://dx.com/p/6971-brushless-mute-air-pump-blackdc-6-12v-177852. Acesso em 26/11/2013.
[11]
Efeito
Peltier.
Disponvel
em
DealExtreme.
Disponvel
em
http://dx.com/p/tec1-12706-semiconductor-
61
62
Apndice A
A0
(out)13
(in)12
(out)A1
(in)A2
(dc)5
(din)6
*display
(rst)3
*reles
(ce)4
(cooler/peltier)A3
(luz)A4
(clk)7
(bombaAgua)A5
*/
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
dht11 DHT11;
#define
tempPin
A0
#define
nivelPinOut
13
#define
nivelPinIn
12
#define
soloPinOut
A1
#define
soloPinIn
A2
#define
coolerPin
A3
#define
luzPin
A4
#define
bombaPin
A5
charok_no[3], luz[3];
/* valores escolhidos pelo usuario */
inttemperatura, umidade, solo;
/* valores lidos pelo arduino */
intsensorTemperatura, sensorUmidade, sensorSolo, sensorNivel;
63
StringcriaString(int
temperatura,
int
umidade,
int
solo,
intnivel,
int
solo,
intnivel,
char* luz);
voidimprimeTela(int
temperatura,
int
umidade,
char* luz);
void aquecer();
void irrigar();
voidapagarluz();
void acenderluz();
String inputString = "";
booleanstringComplete = false;
void setup() {
inputString.reserve(200);
/* configuracao dos pinos */
pinMode(tempPin, INPUT);
pinMode(nivelPinOut, OUTPUT);
pinMode(nivelPinIn, INPUT);
pinMode(soloPinOut, OUTPUT);
pinMode(soloPinIn, INPUT);
pinMode(coolerPin, OUTPUT);
pinMode(luzPin, OUTPUT);
pinMode(bombaPin, OUTPUT);
/* liga os sensores de nivel e umidade do solo */
digitalWrite(nivelPinOut, HIGH);
digitalWrite(soloPinOut, HIGH);
/* configura o lcd display */
display.begin();
display.setContrast(40);
display.clearDisplay();
/* inicia comunicacao serial */
Serial.begin(9600);
strcpy(luz, "NO");
digitalWrite(luzPin, LOW);
64
digitalWrite(coolerPin, LOW);
/* inicializa valores de controle */
temperatura = 25;
solo = 50;
}
void loop() {
display.clearDisplay();
/* limpa a tela */
/* SENSORES */
DHT11.read(tempPin);
/* leitura da temperatura
e umidade do ar */
sensorTemperatura = DHT11.temperature;
sensorUmidade = DHT11.humidity;
sensorSolo = analogRead(soloPinIn);
/* leitura da umidade do
solo */
floatporcSoloFloat = sensorSolo/1024.0 * 100.0;
intporcSolo = porcSoloFloat;
sensorNivel = digitalRead(nivelPinIn);
/* leitura do nivel de
agua */
/* envia uma string para a rasp com todas as informacoes */
Serial.println(criaString(sensorTemperatura,
sensorUmidade,
sensorSolo, sensorNivel));
imprimeTela(sensorTemperatura, sensorUmidade, sensorSolo, sensorNivel,
luz);
}
String criaString(inttemperatura, intumidade, int solo, intnivel) {
char nivelStr[3];
if (nivel == 1) {
strcpy(nivelStr, "OK");
65
}
else {
strcpy(nivelStr, "NO");
}
float porcSoloFloat = solo/1024.0 * 100.0;
intporcSolo = porcSoloFloat;
String temp = String(temperatura);
String umid = String(umidade);
String umids = String(porcSolo);
String tudo = "";
String t = "TEMPERATURA: ";
String u = "UMIDADE: ";
String s = "UMIDADESOLO: ";
String n = "NIVEL: ";
String div = "|";
tudo.concat(t);
tudo.concat(temp);
tudo.concat(div);
tudo.concat(u);
tudo.concat(umid);
tudo.concat(div);
tudo.concat(s);
tudo.concat(umids);
tudo.concat(div);
tudo.concat(n);
tudo.concat(nivelStr);
tudo.concat(div);
return tudo;
}
voidimprimeTela(int
temperatura,
int
umidade,
int
solo,
intnivel,
char* luz) {
floatporcSoloFloat = solo/1024.0 * 100.0;
intporcSolo = porcSoloFloat;
66
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(30,0);
display.println("v1.0");
display.print("Temp:
");
display.print(temperatura);
display.println("oC");
display.print("Umid:
");
display.print(umidade);
display.println("%");
display.print("UmidSl:
");
display.print(porcSolo);
display.println("%");
display.print("Nivel:
");
if (nivel == 1) {
display.println("OK");
}
else {
display.println("NO");
}
display.print("Luz:
");
display.println(luz);
display.display();
delay(500);
}
/*
* @brief liga a peltier com o lado quente para dentro. o mesmo rele
que liga o cooler, liga a peltier
*/
void aquecer() {
digitalWrite(coolerPin, HIGH);
}
67
/*
* @brief liga a bomba d'agua por 2 segundos e desliga
*/
void irrigar() {
digitalWrite(bombaPin, HIGH);
delay(2000);
digitalWrite(bombaPin, LOW);
}
/*
* @brief apaga a luz
*/
void apagarluz() {
digitalWrite(luzPin, LOW);
strcpy(luz, "");
strcpy(luz, "OFF");
}
/*
* @brief acende a luz
*/
void acenderluz() {
digitalWrite(luzPin, HIGH);
strcpy(luz, "");
strcpy(luz, "ON");
}
/*
* @briefinterrupcao serial
*/
void serialEvent() {
while (Serial.available()) {
charinChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n') {
stringComplete = true;
}
}
68
if (inputString.equals("irrigar")) {
Serial.println("COMANDO RECEBIDO PELA SERIAL: LIGAR BOMBA");
irrigar();
}
else
if
((inputString.equals("luz0")
||
inputString.equals("luz1"))) {
if (inputString.charAt(3) == '0') {
Serial.println("COMANDO RECEBIDO PELA SERIAL: APAGAR LUZ");
apagarluz();
}else {
Serial.println("COMANDO RECEBIDO PELA SERIAL: ACENDER LUZ");
acenderluz();
}
} else if (inputString.charAt(0) == 't' &&inputString.charAt(1) ==
'e' &&inputString.charAt(2) == 'm' &&inputString.charAt(3) == 'p') {
String valor_temp = inputString.substring(11);
intvalor_temp_int = valor_temp.toInt();
temperatura = valor_temp_int;
Serial.print("COMANDO RECEBIDO PELA SERIAL: TEMPERATURA = ");
Serial.print(valor_temp_int);
Serial.println(" oC");
if (sensorTemperatura< (temperatura)) {
aquecer();
}else {
digitalWrite(coolerPin, LOW);
}
}
inputString = "";
}
69
70
Apndice B
71
printser.readline()
# ATUALIZA TEMP_OLD
temp_old=temp
arq1.close()
# CONTROLE DE IRRIGACAO
arq2 = open('/var/www/controle_irrigacao.txt','r+')
arq2.seek(0)
if(arq2.read()=="1"):
# ENVIA COMANDO AO ARDUINO
ser.flushOutput()
ser.flushInput()
ser.write("irrigar")
ser.flush()
time.sleep(0.1)
# ACK
printser.readline()
# RESETA O ARQUIVO
arq2.seek(0)
arq2.write("0")
arq2.close()
# CONTROLE DE ILUMINACAO
arq3 = open('/var/www/controle_iluminacao.txt','r')
arq3.seek(0)
ilum=arq3.read()
if(int(ilum)!=int(ilum_old)):
# ENVIA COMANDO AO ARDUINO
ser.flushOutput()
ser.flushInput()
ser.write("luz"+ilum)
ser.flush()
time.sleep(0.1)
# ACK
printser.readline()
# ATUALIZA ILUM_OLD
ilum_old = ilum
arq3.close()
72
Apndice C
http-equiv="refresh"
content="<?phpecho
$sec?>;URL='<?phpecho $page?>'">
<styletype="text/css">
@importurl("styles.css");
//
@importurl("onOff.css");
</style>
<?php
if(isset($_POST["botao_foto"])){
echoshell_exec('fswebcam -r 960x720 -d /dev/video1
foto1.jpg');
echo "Tirando a foto...";
}
if(isset($_POST["botao_temp_inc"])){
if($T>=30){
echo "Valor maximo= 30 oC";
}
else{
echo "Aumentando temperatura...";
$T++;
echo $T;
file_put_contents("controle_temperatura.txt",
$T);
}
}
if(isset($_POST["botao_temp_dec"])){
if($T<=20){
echo "Valor minimo= 20 oC";
}
73
else{
echo "Diminuindo temperatura...";
$T--;
echo $T;
file_put_contents("controle_temperatura.txt", $T);
}
}
if(isset($_POST["botao_irrigar"])){
echo "Irrigacao ativada...";
file_put_contents("controle_irrigacao.txt", "1");
}
if(!empty($_POST["onoffswitch"])){
echo "On/Off apertado...";
//
echoshell_exec('sh irrigar.sh');
}
if(isset($_POST["botao_luz"])){
if($I == 0){
echo "Acendendo a luz...";
$I=1;
file_put_contents("controle_iluminacao.txt",
$I);
}
else{
echo "Apagando a luz...";
$I=0;
file_put_contents("controle_iluminacao.txt", $I);
}
}
?>
</head>
<body id="corpo">
<divalign="center" id="b1">
<imgsrc="banner1.jpg" align="middle">
</div>
<h5
style="font-family:arial;text-align:center;color:black;"
/h5>
<?php
$str = file_get_contents("arquivo.txt");
list($temperatura,
$umidade,
$umidadeSolo,
$niveldagua)
74
explode("|", $str);
list($temp, $ntemp)=explode(":",$temperatura);
list($umid, $numid)=explode(":",$umidade);
list($umidS, $numidS)=explode(":",$umidadeSolo);
list($nivel, $nnivel)=explode(":",$niveldagua);
if($I==0)
$nilum="OFF";
else
$nilum="ON";
$ilum="LUZ";
/*
if($nnivel<100)
$enivel="CRITICO";
else
$enivel="OK";*/
echo '<tablewidth="30%" align="center" id="tabela" style="fontfamily:arial;color:black;font-size:x-large;">';
echo '<thead><tr>';
echo '</tr></thead>';
echo '<tbody>';
echo '<tr>';
echo '<td><b>' . "TEMPERATURA" . '</b></td>';
echo '<td><b>' . $ntemp ." oC" .'</b></td>';
echo '</tr>';
echo '<tr>';
echo '<td><b>' . "UMIDADE AR" . '</b></td>';
echo '<td><b>' . $numid ." %" . '</b></td>';
echo '</tr>';
echo '<tr>';
echo '<td><b>' . "UMIDADE SOLO" . '</b></td>';
echo '<td><b>' . $numidS . " %" . '</b></td>';
echo '</tr>';
echo '<tr>';
echo '<td><b>' . "ILUMINACAO" . '</b></td>';
echo '<td><b>' . $nilum . '</b></td>';
echo '</tr>';
echo '<tr>';
75
align="middle"
width="300"
height"200">
</div>
<formalign="center"
id="botao"
name="botao_foto"
method="post"
action="index.php">
<input
type="image"
id="botao_maquina"
src="img_camera.jpg"
value="Fotografar!"
name="botao_foto"
style="width:
100px;
height:
id="Tinc"
name="botao_temp_inc"
method="post"
action="index.php">
<input
id="Tinc"
type="image"
value="+"
src="img_temp_inc.png"
style="width:
100px;
name="botao_temp_inc"
height:
20px;
font-size:
15px;"/>
</form>
<div id="Techo">
<h2
style="font-family:arial;text-align:center;color:black;"
/h2>
<?phpecho "$T"; ?>
</div>
<formalign="center"
id="Tdec"
name="botao_temp_dec"
method="post"
action="index.php">
<input
id="Tdec"
type="image"
value="-"
src="img_temp_dec.png"
style="width:
100px;
name="botao_temp_dec"
height:
20px;
font-size:
76
15px;"/>
</form>
<formalign="center"
id="irrigar"
name="botao_irrigar"
method="post"
action="index.php">
<input
type="image"
src="img_regador.jpg"
name="botao_irrigar"
id="luz"
name="botao_luz"
method="post"
action="index.php">
<input
type="image"
src="img_luz.jpg"
name="botao_luz"
Apndice D
77