memoria 2 joan

137
Autor : Joan Mercader del Moral Direcció : Albert Masip Alvarez David Romero Duran TFG IMPLEMENTACIÓ D'UN SISTEMA DE CONTROL, COMUNICACIÓ I GENERACIÓ D'ENERGIA D' UNA FINCA AGRÍCOLA I RAMADERA AUTOSOSTENIBLE. PFG presentat per obtenir el títol de graduat en Enginyeria Electrònica Industrial i Automàtica

Upload: carles-lopez-gomez

Post on 22-Jan-2017

43 views

Category:

Education


4 download

TRANSCRIPT

Page 1: Memoria 2 joan

Autor : Joan Mercader del Moral

Direcció : Albert Masip Alvarez David Romero Duran

TFG IMPLEMENTACIÓ D'UN SISTEMA DE CONTROL,

COMUNICACIÓ I GENERACIÓ D'ENERGIA D' UNA FINCA AGRÍCOLA I RAMADERA AUTOSOSTENIBLE.

PFG presentat per obtenir el títol de graduat en Enginyeria Electrònica Industrial i Automàtica

Page 2: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

2

PRÒLEG

Page 3: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

3

INDEX

PRÒLEG ....................................................................................................................................... 2

ÍNDEX DE FIGURES .................................................................................................................. 6

1- INTRODUCCIÓ ....................................................................................................................... 8

1.1- Motivació ........................................................................................................................... 8

1.2- Objectius ............................................................................................................................ 9

2- FULL D'IDENTIFICACIÓ ..................................................................................................... 10

2.1- Situació i emplaçament .................................................................................................... 10

2.2- Estudi del terreny ............................................................................................................. 11

3- PROJECTISTA I EMPRESA SOL·LICITANT ..................................................................... 12

3.1- Sol·licitant: ....................................................................................................................... 12

3.2- Projectista: ....................................................................................................................... 13

4- DESCRIPCIÓ GENERAL DELS BLOCS DEL SISTEMA .................................................. 14

4.1- Subministrament d'energia de tot el sistema .................................................................... 15

4.2- Automatització de tot el sistema ...................................................................................... 15

4.2.1- Menjadora animal ..................................................................................................... 15

4.2.2- Reg automàtic ........................................................................................................... 15

4.2.3- Pastor elèctric ............................................................................................................ 15

4.2.4- Comunicació ............................................................................................................. 15

4.3- Infograma ......................................................................................................................... 16

5- PLANIFICACIÓ INICIAL ..................................................................................................... 17

6- SISTEMA DE CONTROL ..................................................................................................... 18

6.1- Estudi de mercat ............................................................................................................... 18

6.1.1- Microcontrolador ...................................................................................................... 18

6.1.2- Plc ............................................................................................................................. 20

6.1.3- Arduino ..................................................................................................................... 22

6.2- Criteris de selecció ........................................................................................................... 24

6.3- Valoració .......................................................................................................................... 25

6.4- Estudi de mercat arduino ................................................................................................. 26

6.4.1- Arduino leonardo rev3 .............................................................................................. 26

6.4.2- Arduino uno rev3 ...................................................................................................... 27

6.4.3- Arduino mega 2560 rev3........................................................................................... 28

Page 4: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

4

6.5- Criteris de selecció ........................................................................................................... 29

6.6- Shields arduino : .............................................................................................................. 30

6.6.1- Placa de comunicació 3g ........................................................................................... 30

6.6.2- Rellotge extern .......................................................................................................... 30

6.6.3- Mòdul d'expansió de memòria .................................................................................. 31

6.6.3- Ethernet ..................................................................................................................... 31

7- PROGRAMACIÓ GENERAL ............................................................................................... 32

7.1- Entorn de desenvolupament ............................................................................................. 32

7.2- Realització del programa ................................................................................................. 34

7.2.1- General ...................................................................................................................... 36

8- PERIFÈRICS .......................................................................................................................... 39

8.1- Pastor elèctric ................................................................................................................... 39

8.1.1- Modificació senyal d'alarma ..................................................................................... 43

8.1.2- Programació pastor ................................................................................................... 47

8.1.3- Comunicació pastor .................................................................................................. 48

8.2- Menjadora automàtica ...................................................................................................... 49

8.2.1- Estudi de mercat de les menjadores per a cavalls ..................................................... 49

8.2.2- Criteris de selecció .................................................................................................... 53

8.2.3- Valoració ................................................................................................................... 54

8.2.4- Detecció de menjar ................................................................................................... 55

8.2.5- Programació menjadora ............................................................................................ 58

8.2.6- Comunicació menjadora ........................................................................................... 60

8.3- Hort .................................................................................................................................. 61

8.3.1- Sensor d'humitat ........................................................................................................ 63

8.3.2- Programació hort ....................................................................................................... 67

8.3.3- Comunicació hort ...................................................................................................... 72

8.4- Alarma ............................................................................................................................. 75

8.4.1- Programació alarma .................................................................................................. 79

8.4.2- Comunicació alarma ................................................................................................. 81

9- PLACA D'ADAPTACIÓ DE SENYALS .............................................................................. 82

10- COMUNICACIÓ .................................................................................................................. 85

10.1- Objectius ........................................................................................................................ 85

10.2- Tecnología ..................................................................................................................... 86

10.2.1- Proves de comunicació ........................................................................................... 87

10.3- Entorn web ..................................................................................................................... 88

Page 5: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

5

11- PLANIFICACIÓ INICIAL VS FINAL ................................................................................ 91

12- DESPESES ........................................................................................................................... 92

13- BIBLIOGRAFIA .................................................................................................................. 93

14- CONCLUSIONS .................................................................................................................. 94

15- ANNEX TREBALLS FUTURS ........................................................................................... 96

15.1- Alarma amb connexió al exterior i accés web des de red externa ................................. 96

16- ANNEX PLANOL ................................................................................................................ 98

17- ANNEX REALITZACIÓ PLAQUES PCB ........................................................................ 100

18- ANNEX NORMATIVA ITC_BT-39 ................................................................................. 110

19- ANNEX PROGRAMA COMPLET ................................................................................... 112

Page 6: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

6

ÍNDEX DE FIGURES

Figura 1 - Localització finca Can AiguesFosques ....................................................................... 10

Figura 2 - Distrribució d'espais a la finca .................................................................................... 11

Figura 3 - Connexió Pastor elèctric ............................................................................................. 39

Figura 5 - Física Pastor elèctric ................................................................................................... 40

Figura 4 - Control Pastor elèctric ................................................................................................ 40

Figura 6 - LDR ............................................................................................................................ 43

Figura 7 - Esquema circuit detecció de falles pastor ................................................................... 43

Figura 8 - Simulació LDR màxima llum ..................................................................................... 44

Figura 9 - Simulació LDR mínima llum ..................................................................................... 44

Figura 11 - Disseny circuit placa detecció de falla pastor .......................................................... 45

Figura 10 - Logotip Kicad ........................................................................................................... 45

Figura 12 - Circuit PCB placa detecció falles pastor .................................................................. 46

Figura 13 - Visualització 3D placa detecció falles pastor ........................................................... 46

Figura 14 - Fotolit placa detecció falles pastor ........................................................................... 46

Figura 15 - Menjadora automàtica Taurus .................................................................................. 50

Figura 16 - Menjadora automàtica Gaun equimatic .................................................................... 51

Figura 17 - Menjadora automàtica Anibal CM-75 ...................................................................... 52

Figura 18 - Dibuix sensor de detecció de menjar ........................................................................ 55

Figura 19 - Sensor de detecció de menjar i posicionament ......................................................... 56

Figura 20 - Sensor d'intensitat del motor de la menjadora .......................................................... 57

Figura 21 - Reg per degoteig ....................................................................................................... 61

Figura 22 - Sensor d'humitat ....................................................................................................... 63

Figura 23 - Recollida de mostres de terra.................................................................................... 64

Figura 24 - Mostres de terra numerades ...................................................................................... 64

Figura 25 - Test terra ................................................................................................................... 65

Figura 26 - Posició sensors dipòsits ............................................................................................ 66

Figura 27 - Visualització web zona horts .................................................................................... 72

Figura 28 - Vista barrera sensor infraroig ................................................................................... 75

Figura 29 - Distribució d'elements de l'alarma ............................................................................ 76

Figura 30 - Barrera infraroja ....................................................................................................... 77

Figura 31 - Sirena d'alarma ......................................................................................................... 78

Figura 32 - Visualització web alarma ......................................................................................... 81

Figura 33 - Circuit divisor de tensió ............................................................................................ 82

Figura 34 - Circuit de relés .......................................................................................................... 83

Figura 35 - Placa PCB Adaptació de senyals .............................................................................. 84

Figura 36 - Fotolit Placa Adaptació de senyals ........................................................................... 84

Figura 37 -Microcontrolador ATMEL SMD............................................................................... 18

Figura 38 - Microcontrolador ATMEL DIP 28 ........................................................................... 19

Figura 39 - Imatges PLC actuals ................................................................................................. 20

Figura 40 - Imatge moduls PLC .................................................................................................. 21

Figura 41 - Placa Arduino UNO ................................................................................................. 22

Figura 42 - Plaques diversos models ARDUINO ....................................................................... 23

Figura 43 - Arduino Leonardo .................................................................................................... 26

Figura 44 - Arduino UNO ........................................................................................................... 27

Figura 45 - Arduino Mega ........................................................................................................... 28

Page 7: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

7

Figura 46 - SIM800L GPRS GSM Module ................................................................................ 30

Figura 47 - RTC .......................................................................................................................... 30

Figura 48 - Mòdul d'expansió de memòria .................................................................................. 31

Figura 49 - Shield ethernet .......................................................................................................... 31

Figura 50 - Entorn de programació d'Arduino ............................................................................ 32

Figura 51 - Configuració placa arduino ...................................................................................... 32

Figura 52 - Estructura del codi Arduino ...................................................................................... 33

Figura 53 - Verificació del codi Arduino .................................................................................... 33

Figura 54 - Esquema comunicació .............................................................................................. 86

Figura 55 - 1a prova comunicació ............................................................................................... 87

Figura 56 - 2a prova comunicació ............................................................................................... 87

Figura 57 - Creació pàgina web .................................................................................................. 89

Figura 58 - Pàgina web final ....................................................................................................... 90

Figura 59 - Esquema connexió Internet ...................................................................................... 96

Figura 60 - Nou projecte Kikad ................................................................................................. 100

Figura 61 - Menú principal Kikad ............................................................................................. 100

Figura 62 - Esquemàtic Kikad ................................................................................................... 101

Figura 63 - Selecció de components Kikad ............................................................................... 101

Figura 64 - Components Kikad ................................................................................................. 102

Figura 65 - Alimentació circuit Kikad ...................................................................................... 102

Figura 66 - Creació Netlist Kikad ............................................................................................. 103

Figura 67 - Mòduls components Kikad ..................................................................................... 103

Figura 68 - Creació PCB Kikad ................................................................................................ 104

Figura 69 - PCB kikad ............................................................................................................... 104

Figura 70 - Visualització 3D Kikad .......................................................................................... 105

Figura 71 - Fotolits PCB ........................................................................................................... 105

Figura 72 - Material creació PCB ............................................................................................. 106

Figura 73 - Isoladora ................................................................................................................. 106

Figura 74 - Revelat PCB ........................................................................................................... 107

Figura 75 - Àcid PCB ................................................................................................................ 108

Figura 76 - Mecanitzat PCB ...................................................................................................... 108

Figura 77 - Pistes finals PCB .................................................................................................... 109

Figura 78 - PCB final ................................................................................................................ 109

Page 8: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

8

1- INTRODUCCIÓ

1.1- Motivació

Des de que vaig acabar els estudis obligatoris, sempre m'ha fascinat el món de la tecnologia i la

gran quantitat de coses amb la que aquesta està present i com una cosa aparentment molt

complicada es pot acabar realitzant en un petit despatx al garatge de casa.

Per altra banda, fins fa pocs anys enrere, ningú es preocupava d'utilitzar la tecnologia de manera

sostenible i respectant el medi ambient.

Això m'ha fet arribar a la conclusió que el meu treball de final de grau havia de ser capaç

d'incorporar la tecnologia a un medi natural però ho havia de fer de manera sostenible i

respectuosa amb l'entorn.

També crec que per tal d'ampliar els meus coneixements era necessari incorporar certes parts

com les comunicacions o la realització de circuits PCB que són bàsics en el món de l'electrònica

i que crec que durant el meu aprenentatge no s'han aprofundit tot el que m'hagués agradat.

Per altra banda, degut a que el grau en enginyeria industrial electrònica i automàtica inclou una

part important d' enginyeria de control, considero interessant que el projecte contingui una part

d'aquesta ja que així aconseguiré gestionar molt millor els nostres recursos, estalviant aigua,

energia i sobretot temps.

Per tal de cobrir els àmbits mencionats, el projecte tractarà sobre la implementació de sistemes

de control, comunicació i generació d'energia aplicat a una finca agrícola i ramadera.

Page 9: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

9

1.2- Objectius

Es tracta de fer una instal·lació completa a un terreny agrícola i ramader. Aquest terreny és

particular i presenta mancances que es pretenen solucionar amb la instal·lació del sistema.

En primer lloc s'ha d'obtenir energia ja que aquest terreny com la majoria de terrenys, no

disposa de cap punt d'alimentació. Per tant, el primer pas és obtenir energia, i com que es tracta

d' un projecte sostenible, aquesta serà energia solar o eòlica (segons les condicions del terreny.)

El segon pas és la obtenció i el repartiment de l'aigua. El terreny disposa de dos pous

d'alimentació des d'on s'ha de repartir l'aigua a les diferents zones, així com també s'ha d'

alimentar el reg automàtic .

Com que el terreny està adaptat per a l' ús ramader, s'ha d'incorporar també un pastor elèctric

que delimiti els marges del bestiar, i un menjador automàtic programable.

Un dels requisits d'aquest sistema és que ha de ser completament autònom i autosuficient, és a

dir que ha de ser capaç d'estar durant un període de temps acomplint les funcions programades

sense necessitat d' intervenció humana.

La segona part d' aquest sistema és la incorporació d' un kit de comunicació capaç de

transmetre dades a un PC connectat a la xarxa per tal de poder fer un monitoratge i un control de

la finca a distància.

Page 10: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

10

2- FULL D'IDENTIFICACIÓ

2.1- Situació i emplaçament

La instal·lació es realitzarà a la finca d'aiguesfosques Nº 6710AD al municipi de Sant Esteve

Sesrovires situat a la comarca del Baix Llobregat, Barcelona.

Es tracta d'un terreny destinat a l'agricultura i la ramaderia que queda situat a un quilòmetre del

nucli urbà de Sant Esteve a on no hi arriba cap tipus d'instal·lació de llum ni aigua potable.

La finca en sí, va ser declarada l'any 2010 com a un terreny d'explotació ramadera per tal de

poder habilitar-la per tenir bestiar.

A la finca s'hi accedeix per un camí de muntanya amb una forta pendent i queda delimitada per

el mateix desnivell d'un costat i per una riera que marca les altres tres vores.

A l'annex dels planols es pot veure amb més detall el registre oficial de la finca segons el

ministeri d' agricultura, alimentació i medi ambient.

Figura 1 - Localització finca Can AiguesFosques

Page 11: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

11

2.2- Estudi del terreny

La pròpia finca es pot dividir en 3 parts:

Extensió de bosc (0,5 ha):

Aquesta part ocupa la majoria del terreny de la finca i consta d'una pineda frondosa

productora de pins pinyoners la qual no forma pròpiament part del projecte en si però

s'haurà de tenir en compte ja que aquesta zona de la finca està habilitada per a la

pastura dels animals.

Zona d'agricultura i ramaderia (0,1 ha):

És una secció que es pot subdividir en dues parts:

Zona de tancat animal: Aquesta zona és on s'alimenten els animals i on

tenen un lloc per resguardar-se a cobert, està perfectament delimitada per un

tancat d'obra.

Zona de cultiu: És la zona dedicada pròpiament al cultiu d'aliments i està

separada per un tancat de la resta del terreny per tal que els animals no pugin

entrar-hi.

Zona habitatge (50m2):

És un petit magatzem situat a un racó de la finca i destinat a l'emmagatzematge d'eines

d'ús agrícola. Està totalment cobert i tancat, per tan l'accés a l'interior és limitat a

persones amb autorització.

Figura 2 - Distrribució d'espais a la finca

Page 12: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

12

3- PROJECTISTA I EMPRESA SOL·LICITANT

3.1- Sol·licitant:

NOM: Worldpacksa

CIF: 77269040B

DIRECCIÓ: Carrer Pau Costes , 2 bis

MUNICIPI: Sant Esteve Sesrovires

CP: 08635

TELÈFON: 639725792

MAIL: [email protected]

Page 13: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

13

3.2- Projectista:

NOM: Joan Mercader del Moral

EMPRESA: UPC

DIRECCIÓ: Campus de Terrassa, Edifici TR1. C. Colom, 1.

MUNICIPI: Terrassa

CP: 08222

TELÈFON: 937398200 / 644425981

MAIL: [email protected]

[email protected]

Page 14: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

14

4- DESCRIPCIÓ GENERAL DELS BLOCS DEL SISTEMA

A continuació trobem un quadre on s'expliquen a grans trets els principals elements del sistema.

El quadre el podem diferenciar en 6 grans parts on el conjunt d'elles formen el sistema sencer :

SISTEMA DE CONTROL :

És la part encarregada del control i la automatització de tot el sistema , està

format per un sistema central que és el propi arduino, juntament amb una placa

d'adaptació de senyals. A aquest bloc hi arriben totes les senyals de la resta de

perifèric i és l'encarregat de gestionar-les.

ALIMENTACIÓ :

Aquest bloc és el que subministra energía a tot el sistema i al tractar-se d'un

projecte auto sostenible, està format per un conjunt de plaques solars i unes

bateries, juntament amb el seu corresponent regulador i inversor. Proporciona

l'energia necessària a tots els elements perifèrics i de control.

ALARMA:

És un dels blocs perifèrics del sistema que s'encarrega de la detecció de

presència quan detecta el pas d'algun intrús. Esta format per una barrera

infraroja i una sirena que sona quan detecta la presència d'intrusos.

AGRICULTURA:

Aquest bloc és un dels blocs principals del sistema que s'encarrega del

funcionament automàtic d'un hort diferenciat en 4 zones, està format per un

dipòsit en cada zona amb la seva corresponent electrovàlvula i el conjunt de

tubs necessaris per cobrir tota la zona així com també un conjunt de sensors que

s'encarrega de determinar la humitat del terra i el nivell dels dipòsits per a la

posterior presa de decisions.

RAMADERIA:

Aquest bloc s'encarrega de subministrar menjar als animals de forma

automàtica i està format per una menjadora automàtica programable i un

conjunt de sensors encarregats de detectar falles així com també determinar les

quantitats de menjar que es subministren i el bon funcionament de la

menjadora.

COMUNICACIÓ:

Aquest element no forma un bloc perifèric en si, però és l'encarregat de la

gestió i interacció amb l'usuari, es tracta d'una pàgina web on l'usuari rep tota la

informació del funcionament del sistema i des d'on es realitza la gestió d'aquest.

Està format per un router 3G amb connexió a l' arduino i a la xarxa que permet

rebre avisos del funcionament del sistema des de qualsevol lloc i dispositiu amb

connexió a Internet.

Page 15: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

15

4.1- Subministrament d'energia de tot el sistema

Aquesta part del projecte s'encarrega de fer-la un company per tal de poder complementar la

totalitat del projecte amb les següents parts d'automatització i comunicació.

L'energia del sistema ha de ser subministrada a través de plaques solars.

El sistema ha d'estar alimentat ininterrompudament.

El sistema ha de ser capaç d'entregar la suficient energia per un ús quotidià.

4.2- Automatització de tot el sistema

4.2.1- Menjadora animal

Ha de ser capaç d'alimentar automàticament als animals.

Les sortides han de ser programables.

Ha de tenir autonomia per almenys una setmana.

4.2.2- Reg automàtic

Ha de subministrar aigua a un hort mitjançant diversos dipòsits.

Ha de mantenir el nivell dels dipòsits, amb la pluja i dos pous.

El reg ha de ser programable.

4.2.3- Pastor elèctric

Ha de mantenir-se en funcionament sempre.

Ha de disposar d'un detector de falles per evitar el consum innecessari.

4.2.4- Comunicació

Ha de mostrar la informació requerida en un dispositiu extern.

Ha d'incloure sistemes d'avís i alertes automàtics.

Page 16: Memoria 2 joan

4.3- Infograma

Sistema de control ARDUINO

Visualització de la informació

en dispositius externs

Placa de comunicació

Detectors d'intusos

Alarma

Placa d'adaptació

de senyals

Pastor elèctric

Menjadora automàtica

Sensor d'humitat

Zona d'agricultura

Plaques Solars Bateríes

Dipòsits i electrovàlvules

Page 17: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

17

5- PLANIFICACIÓ INICIAL

BLOC TREBALL 8 Febrer

10 Juny

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

PE

RIF

ÈR

ICS

PA

ST

OR

Estudi Pastor existent

Programació sistema detecció falles

Muntatge complert Pastor elèctric

ME

NJ

AD

OR

ES

Recerca d'informació sobre menjadores animals

Valoració i elecció tecnologia

Tria de components i disseny

Muntatge Menjadores

SIS

TE

MA

CO

NT

RO

L

CO

NT

RO

L

Cerca d'informació tecnologies de sistemes de control del

sistema

Valoració i elecció tecnologia segons criteris

Tria de components i disseny

Probes de funcionament

Programació

Muntatge

CO

MU

NIC

AC

RO

UT

ER

Recerca d'informació de tecnologies de transmissió dades

segons requisits del sistema

Valoració i elecció tecnologia segons criteris

Tria de components i disseny

Probes de funcionament

PR

OG

R

AM

AC

I

Ó

Programació entorn PC segons demandes del sistema (

nivells, menjar...)

Desenvolupament aplicació mòbil o Internet

ME

RIA

RE

DA

CC

Redacció bàsica

Redacció completa

Ajustos de formats

Page 18: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

18

6- SISTEMA DE CONTROL

6.1- Estudi de mercat

6.1.1- Microcontrolador

Un microcontrolador (abreujat µC, uC o MCU) és un petit ordinador integrat en un sol circuit

especialitzat a controlar equips electrònics, que inclou una CPU, una petita quantitat de

memòria, unitats d' entrada i sortida i acostuma a portar una memòria RAM, NOR flash o

una ROM per guardar el programa.

Els microcontroladors van ser dissenyats per a aplicacions per a sistemes encastats en

contraposició als microprocessadors utilitzats en els ordinadors personals per a aplicacions

d'ús general. Gràcies a la seva mida i cost reduït fan que siguin ideals per al control digital de

molts dispositius. També són comuns els microcontroladors de senyal mixt, perquè poden

integrar components analògics necessaris per controlar sistemes electrònics analògics.

Alguns microcontroladors utilitzen paraules de quatre bits i operen amb una freqüència de

rellotge tan baixa com 4 kHZ per aconseguir un consum baix. Generalment també tenen la

capacitat de quedar-se en un estat de repòs fins que reben una interrupció, això fa que el seu

consum sigui gairebé nul.

Emfatitza l'alta integració, en contrast amb un microprocessador que només conté una CPU. A

més de les típiques operacions lògiques i

aritmètiques d'un microprocessador de

propòsit general, un microcontrolador

integra elements addicionals com memòria

de lectura-escriptura per a dades, memòria

de només lectura per emmagatzemar el

programa, memòria flash per

emmagatzemament permanent, perifèrics,

i interfícies d'entrada sortida (Ports, I2C,

SPI...). A velocitats com 32 kHZ, els

microcontroladors operen a velocitats molt

baixes en comparació amb els

microprocessadors, tot i que això és

adequat per les aplicacions típiques per les

quals es programen. Consumeixen poca energia (miliwatts o fins i tot microwatts), i en general

mantenen la funcionalitat mentre esperen un esdeveniment com prémer un botó o una

interrupció. El consum d'energia en estat inactiu (rellotge de la CPU i perifèrics desactivats) pot

ser de només nanowatts, sent ideals per aplicacions de baix consum i bateria duradora. Encara

que n'hi ha de la mida d'un segell de correus, el normal és que siguin encara més petits, ja que,

lògicament, formen part del dispositiu que controlen.

Figura 3 -Microcontrolador ATMEL SMD

Page 19: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

19

Un microcontrolador típic disposa d'un

generador de rellotge integrat (clock) i una

petita quantitat de memòria RAM i

ROM/EPROM/EEPROM. Això significa que

per a fer-lo funcionar, tot el que es necessita

són uns pocs programes de control i un

cristall de sincronització.

Els microcontroladors generalment també

disposen d'una gran varietat de dispositius

d'entrada/sortida, com convertidors

d'analògic a digital (CAD), temporitzadors,

UARTs i busos d'interfície en sèrie

especialitzats, com I2C i CAN. Normalment, aquests dispositius integrats poden ser controlats

per instruccions de processadors especialitzats. Els microcontroladors moderns sovint inclouen

un llenguatge de programació integrat, com el BASIC que s'utilitza amb freqüència per a aquest

propòsit.

Els microcontroladors negocien la velocitat i la flexibilitat per a facilitar el seu ús. A causa del

fet que s'utilitza força lloc en el xip per a incloure funcionalitat, com els dispositius

d'entrada/sortida o la memòria que inclou el microcontrolador, s'ha de prescindir d'altres tipus

de circuit.), temporitzadors, UARTs i busos d'interfície en sèrie especialitzats, com I2C i CAN.

Normalment, aquests dispositius integrats poden ser controlats per instruccions de

processadors especialitzats. Els microcontroladors moderns sovint inclouen un llenguatge de

programació integrat, com el BASIC que s'utilitza amb freqüència per a aquest propòsit.

AVANTATGES INCONVENIENTS

Cost molt baix

Consum molt baix

Complexitat de programació

Necessitat de molts elements externs

Complexitat de disseny

Figura 4 - Microcontrolador ATMEL DIP 28

Page 20: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

20

6.1.2- Plc

Els PLC (Programmable Logic Controller en les seves sigles en anglès) són

dispositius electrònics molt usats en Automatització industrial.

La seva història es remunta a la fi de la dècada

de 1960 quan la indústria va buscar en les

noves tecnologies electròniques una solució

més eficient per a reemplaçar els sistemes de

control basats en circuits elèctrics amb relés,

interruptors i altres components

comunament utilitzats per al control dels

sistemes de lògica combinacional.

Avui dia, els PLC no només controlen la lògica

de funcionament de màquines, plantes i

processos industrials, sinó que també poden

realitzar operacions aritmètiques,

manejar senyals analògiques per a realitzar

estratègies de control, tals com

controladors proporcional integral derivatiu

(PID).

Els PLC actuals poden comunicar-se amb altres controladors i computadores en xarxes d'àrea

local, i són una part fonamental dels moderns sistemes de control distribuït.

Existeixen diversos llenguatges de programació, tradicionalment els més utilitzats són el

diagrama de scada (Llenguatge Ladder), preferit pels electricistes, llista d'instruccions i

programació per estats, encara que s'han incorporat llenguatges més intuïtius que permeten

implementar algoritmes complexos mitjançant simples diagrames de fluix més fàcils

d'interpretar i mantenir. Un llenguatge més recent, preferit pels informàtics i electrònics, és el

FBD (en anglès Function Block Diagram)que empra comportes lògiques i blocs amb distintes

funcions connectats entre si.

En la programació es poden incloure diferents tipus d'operands, des dels més simples com

lògica booleana, comptadors, temporitzadors, contactes, bobines i operadors matemàtics, fins

a operacions més complexes com maneig de taules (receptes), apuntadores, algoritmes PID i

funcions de comunicació mutiprotocol que li permetrien interconnectar-se amb altres

dispositius.

Com el seu mateix nom indica, s'ha dissenyat per programar i controlar processos seqüencials

en temps real. En general, és possible trobar aquest tipus d'equips en ambients industrials.

Els PLC serveixen per realitzar automatismes; es pot ingressar un programa al seu disc

d'emmagatzemament i, amb un microprocessador integrat, corre el programa, s'ha de saber

que hi ha infinitats de tipus de PLC. Els quals tenen diferents propietats, que ajuden a facilitar

certes tasques per a les quals se'ls dissenyen.

Figura 5 - Imatges PLC actuals

Page 21: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

21

Perquè un PLC aconsegueixi complir amb la seva funció de controlar, és necessari programar-

ho amb certa informació sobre els processos que es vol seqüenciar. Aquesta informació és

rebuda per captadors que, gràcies al programa lògic intern, aconsegueixen implementar-la a

través dels accionadors de la instal·lació. Un PLC és possible de trobar a totes aquelles

maquinàries que necessiten controlar processos seqüencials, així com en aquelles que

realitzen maniobres d'instal·lació, senyalització i control. Tant podem trobar PLCs a la indústria

del plàstic, com del metall, com controlant una cruïlla de semàfors.

Dins de les funcions que un PLC pot complir es troben operacions com les de detecció i de

comandament, en les quals s'elaboren i envien dades d'acció als preaccionadors i accionadors.

A més, compleixen la important funció de programació, podent introduir, crear i modificar les

aplicacions del programa.

Dins dels avantatges que aquests equips tenen es troba que, gràcies a ells, és possible estalviar

temps en l'elaboració de projectes, podent realitzar modificacions sense costs addicionals.

D'altra banda, són de mida reduïda i manteniment de baix cost. A més, permeten estalviar

diners a mà d'obra i la possibilitat de controlar més d'una màquina amb el mateix equip.

Tanmateix, i com succeeix en tots els casos, els controladors lògics programables, o PLC's,

presenten certs desavantatges com és la necessitat de comptar amb tècnics qualificats i

ensenyats específicament per ocupar-se del seu bon funcionament.

AVANTATGES INCONVENIENTS

Fiabilitat

Consum

Dissenyat per a processos industrials

Complexitat de programació

Poca compatibilitat

Preu mig-alt

Figura 6 - Imatge moduls PLC

Page 22: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

22

6.1.3- Arduino

Arduino és un prototip de codi font obert basat en la facilitat de maneig del software i hardware.

Les plaques d' Arduino són capaces de llegir entrades tals com llums en un sensor, l'estat d'un

botó, o un missatge de Twitter... i convertir-lo en una sortida activant un motor, encenent un

Led o publicar alguna cosa en línea. Podem programar la nostra placa enviant un conjunt

d'instruccions al microcontrolador ja existent a la mateixa placa. Per a fer-ho s'utilitza l'Arduino

llenguatge de programació (basat en *Wiring), i l' Arduino Programari (IDE), basat en el

processament.

Al llarg del temps, Arduino ha estat el cervell de milers de projectes, des d'objectes d'ús quotidià

fins a instruments científics complexos. Un a tot el món, comunitat de fabricants - estudiants,

artistes, programadors, i professionals - ha reunit al voltant d'aquesta plataforma de font oberta,

les seves contribucions han afegit fins a una quantitat increïble de coneixement accessible que

pot ser d'ajuda gran a novençans i experts igualment.

Arduino va néixer al Institut de Disseny

de la Interacció Ivrea com una eina fàcil

de desenvolupament de prototips, va

apuntar a estudiants sense gaires nocions

d'electrònica i programació. Tan aviat

com va assolir una comunitat més

ampla, Arduino va començar a canviar

per adaptar a reptes i necessitats noves,

diferenciant la seva oferta de senzilles

plaques de 8 bits fins a productes per

aplicacions IoT, portables, impressió

3D, i entorns integrats.

Totes les plaques Arduino són

completament de codi obert, facilitant

als usuaris per construir-los

independentment i finalment adaptar-los

a les seves necessitats particulars. El

programari, també, és de codi obert, i

està creixent a través de les

contribucions d'usuaris a tot el món.

Gràcies al entorn simple que presenta per a l'usuari, Arduino ha estat utilitzat en milers

d'aplicacions i projectes diferents. El seu programari és fàcil d'entendre per a principiants, tot i

així és prou flexible per a usuaris avançats. Funciona en Mac, Windows, i Linux. Els mestres i

els estudiants l'utilitzen per construir instruments científics a baix cost, per provar química i

principis de física, o per començar amb programar i robòtica. Els dissenyadors i els arquitectes

construeixen prototipus interactius, els músics i els artistes l'utilitzen per instal·lacions i

experiments amb instruments musicals nous. Els fabricants, naturalment, l'utilitzen per construir

molts dels projectes que es van exhibir al Maker Faire, per exemple.

Figura 7 - Placa Arduino UNO

Page 23: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

23

Arduino és doncs una eina clau per aprendre coses noves. Qualsevol nen, aficionat, artista,

programador... pot començar a desenvolupar projectes només seguint les instruccions d'una

caixa, o compartint les idees en línia amb altres membres de la comunitat Arduino.

Hi ha molts altres microcontroladors i plataformes de microcontrolador disponibles per

informàtica física. Parallax Segell bàsic, Netmedia BX-24, Phidgets, MIT Handyboard, i molts

altres que ofereixen funcionalitat similar.

Figura 8 - Plaques diversos models ARDUINO

AVANTATGES INCONVENIENTS

Cost molt baix

Compatibilitat d'entorns

Facilitat de programació

Codi obert

Ineficient degut a la capa de programació ja instal·lada

Poc fiable

Page 24: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

24

6.2- Criteris de selecció

Un cop s'ha determinat la funció que ha d' acomplir el sistema i per tal de poder fer un estudi de

mercat complet, s'ha consultat el client les seves preferències per tal de poder valorar i escollir

correctament la opció més viable per a dur a terme aquesta part del projecte.

Aquesta part del projecte és la eina central on es controla i administra tota la resta de perifèrics,

però seguint els criteris de la resta del projecte, el pressupost domina sobre qualsevol altre

criteri, per tant les valoracions fetes són en conseqüència a aquest.

La següent taula ens mostra els criteris imposats per el client i el percentatge d'importància que

presenta cadascú.

CRITERIS DEL CLIENT PES PERCENTATGE

Preu inicial 40%

Manteniment anual 35%

Compatibilitat 10%

Complexitat 10%

Consum 5%

La següent taula és una valoració de totes les opcions amb la puntuació obtinguda per a cada

criteri

OPCIÓ/ CRITERI PREU MANTENIMENT MÒDULS COMPLEXITAT CONSUM

MICRO

CONTROLADOR 8 6 5 4 7

PLC 6 5 7 6 7

ARDUINO 7 7 7 8 4

La següent taula ens mostra el resultat final aplicant la ponderació de cada criteri a cada opció

per tal de determinar la opció més adequada.

OPCIÓ PUNTUACIÓ PONDERADA

MICROCONTROLADOR 6,55

PLC 5,8

ARDUINO 6,95

Page 25: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

25

6.3- Valoració

Un cop hem estudiat les principals opcions disponibles en el mercat, es pot observar que la

opció de controlar el sistema mitjançant arduino, és la opció més viable, bàsicament perquè

degut a que el projecte té un timming concret, aquesta opció ens permet estalviar molt de temps

a l'hora de fer el disseny de la placa i de la programació així com alhora és molt atractiva

econòmicament.

La opció de controlar el sistema amb un microcontrolador implica el disseny de la placa des de

zero, cosa que incrementa molt el temps de dedicació al disseny així com també a la

programació, tot i que és una opció molt vàlida, no ofereix tots els requeriments necessaris per

implementar-ho.

La opció de controlar-ho mitjançant un PLC és una opció més pensada per a un ús industrial,

cosa que no és el cas i la compatibilitat amb elements externs és escassa i de preu elevat, per

tant és una opció que queda totalment descartada.

Page 26: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

26

6.4- Estudi de mercat arduino

Un cop s'ha determinat que la millor opció com a sistema de control és l'ús d'una placa Arduino,

trobem diferents opcions al mercat, per tant, a continuació es valoren les principals opcions per

a poder escollir quina és la que millor s'ajusta a les necessitats del projecte.

6.4.1- Arduino leonardo rev3

Arduino Leonardo és el nou model del team d' Arduino. Utilitza un microcontrolador

ATmega32U4 que permet un disseny molt més simple i econòmic.

Una de les avantatges d'aquest nou microcontrolador es que disposa d'USB natiu per hardware i

per tant no necessita cap tipus de conversió serie-USB. També permet a la placa ser utilitzada i

programada com un dispositiu d'entrada per emular un teclat, ratolí etc.

Suporta 12 entrades analògiques i com que el port de comunicació USB és emulat, deixa el port

serial hardware lliure per la programació. D'aquesta manera no sorgeixen conflictes de

programació mentre tenim perifèrics sèrie connectats a la placa.

CARACTERÍSTIQUES

Microcontrolador ATmega32u4

Tensió de funcionament 5V

Alimentació aconsellada 7-12 V

Pins I/O Digitals 20

Canals PWM 7

Entrades analògiques 12

Corrent màxima dels pins I/O 40 mA

Corrent màxima dels pins 3.3V 50 mA

Memòria Flash 32 KB (4KB bootloader)

SRAM 2,5 KB

EEPROM 1 KB

Velocitat 16 MHz

Figura 9 - Arduino Leonardo

Page 27: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

27

6.4.2- Arduino uno rev3

Arduino UNO és una placa electrònica basada en el microprocessador Atmega328 . Presenta 14

entrades / sortides digitals i 6 d'aquestes poden utilitzar per a sortides PWM .

A més incorpora 6 entrades analògiques , un oscil·lador de 16MHz , una connexió USB , un

connector d'alimentació, 1 sòcol ICSP i un polsador per al reset. La placa porta tot el necessari

per suportar el microprocessador.

Aquest nou model Arduino UNO és pràcticament igual que el seu predecessor però incorpora

alhora una auto selecció del voltatge d'alimentació ( DC / USB ) gràcies a un xip MOSFET

inclòs a la placa . A més, disposa del nou bootloader OptiBoot que permet carregar programes a

115Kbps ( 56Kbps en la versió anterior ) .

El bootloader també ha estat reduït en grandària ja que tan sols ocupa 512bytes , pel que tindrem

encara més espai per programar.

CARACTERÍSTIQUES

Microcontrolador ATmega328

Tensió de funcionament 5V

Alimentació aconsellada 7-12 V

Pins I/O Digitals 14

Canals PWM 6

Entrades analògiques 6

Corrent màxima dels pins I/O 40 mA

Corrent màxima dels pins 3.3V 50 mA

Memòria Flash 32 KB (0,5 KB bootloader)

SRAM 2 KB

EEPROM 1 KB

Velocitat 16 MHz

Figura 10 - Arduino UNO

Page 28: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

28

6.4.3- Arduino mega 2560 rev3

Arduino Mega 2560 és una placa electrònica basada en el microprocessador Atmega2560.

Incorpora 54 entrades/sortides digitals i 14 d'aquestes poden utilitzar-se per a sortides PWM.

A més consta de 16 entrades analògiques, UARTs (ports sèrie), un oscil·lador de 16 MHz, una

connexió USB, un connector d'alimentació, un sòcol ICSP i un polsador de reset.

El Nou Arduino Mega 2560 incorpora més memòria per al programa, més RAM i més pins.

100% compatible amb la versió UNO.

La placa porta tot el necessari per suportar el microprocessador. Per començar a utilitzar la placa

només és necessari connectar-la a l'ordinador a traves d'un cable USB, o alimentar-la amb un

adaptador de corrent AC/DC. També pot alimentar-se senzillament amb una bateria.

La placa Arduino MEGA2560 és compatible amb la majoria dels mòduls d'expansió sostinguts

per les plaques UNO.

CARACTERÍSTIQUES

Microcontrolador ATmega2560

Tensió de funcionament 5V

Alimentació aconsellada 6-18 V

Pins I/O Digitals 54

Canals PWM 14

Entrades analògiques 16

Corrent màxima dels pins I/O 40 mA

Corrent màxima dels pins 3.3V 50 mA

Memòria Flash 256 KB (8KB bootloader)

SRAM 8 KB

EEPROM 4 KB

Velocitat 16 MHz

Figura 11 - Arduino Mega

Page 29: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

29

6.5- Criteris de selecció

Un cop s'ha decidit que el sistema de control es realitza mitjançant arduino, existeixen varies

plaques prefabricades que s'adapten a les necessitats del sistema. El preu, factor d'alta

importància, és molt semblant entre totes les opcions, per tant en aquest cas no és un factor tant

important i es poden valorar més les prestacions que ofereix cada placa en concret.

En una primera valoració, la opció de la placa Leonardo és la opció intermèdia de totes elles i

va semblar suficient per els requeriments del nostre sistema ja que aquestes plaques ofereixen la

possibilitat d'afegir-hi expansions de comunicació, memòria... que a mesura que es va tirant

endavant el projecte queden patents que es necessiten i que són degudament explicades tot

seguit.

A mesura que ha anat avançant el projecte, la placa de Leonardo s'ha quedat curta en quant a

prestacions ja que la memòria és insuficient per guardar el servidor web així com també la

quantitat de pins disponibles, per tant s'ha decidit passar a una placa superior i finalment la

opció triada és fer servir la placa arduino MEGA que amplia les prestacions d'una manera

notable.

Page 30: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

30

6.6- Shields arduino :

6.6.1- Placa de comunicació 3g

Com que es vol que el sistema tingui comunicació amb dispositius externs connectats a la xarxa,

és necessària una placa de comunicació que permeti comunicar el propi arduino amb la resta de

dispositius.

Al inici del projecte, quan es va decidir fer la comunicació mitjançant 3G, es va optar per

incloure un shield Arduino capaç d'enviar i rebre dades a traves d'internet mitjançant una targeta

SIM de telefonia.

A mesura que el projecte va anar avançant, es va descartar aquesta opció i es va canviar la

manera de transmetre de manera que s'utilitza un shield diferent (ethernet) i un router 3G.

Característiques:

Model: SIM800L

Work voltage: 5V

Network support: Quad-Band 850/900/1800/1900 MHz -

would work on GSM

networks in all countries across the world.

TTL serial interface compatible with 3.3V and 5V MCU

Microcontrollers,competible with arduino .

6.6.2- Rellotge extern

Al inici es va creure que una petita baixada de tensió pot afectar a l'hora de controlar els temps, i

per tant era necessari tenir un rellotge extern que sigui fiable ja que el programa funciona per

comparació de temps i és una variable que s'ha de tenir controlada durant tota l'execució del

programa. També es va valorar la possibilitat d'utilitzar un rellotge en xarxa però si es per la

connexió a la red, aquest queda totalment inutilitzat.

Finalment es posa la hora mitjançant el software de

l'arduino i es pot comprovar si funciona bé a través de la

pàgina web, en cas de fallar es tan senzill com reiniciar el

sistema o canviar la variable per software.

Figura 12 - SIM800L GPRS GSM Module

Figura 13 - RTC

Page 31: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

31

6.6.3- Mòdul d'expansió de memòria

Degut a que la memòria de l'arduino és relativament

escassa és necessària la incorporació d'un mòdul

d'expansió de memòria ja que la placa d'arduino

s'utilitza com a servidor.

Finalment, considerant el preu d'un mòdul d'expansió de

memòria amb les avantatges i diferència de preu de la

placa Mega, s'ha optat per no incloure un shield

d'expansió de memòria ja que la pròpia placa Mega és

capaç d'emmagatzemar tot el necessari, i en tot cas

també es disposa d'una tarja SD que incorpora el shield

Ethernet.

6.6.3- Ethernet

Finalment, un cop descartat l'ús de la placa de

comunicació 3G, es disposa d'un shield ethernet,

és a dir que la placa de control d'arduino es

comunica amb un router a traves d'un cable

ethernet i és el propi router el que estableix la

comunicació per 3G.

A part, aquest mòdul també disposa d'una ranura

per a targetes SD la qual es fa servir per guardar

un registre d'activitat i successos.

Figura 14 - Mòdul d'expansió de memòria

Figura 15 - Shield ethernet

Page 32: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

32

7- PROGRAMACIÓ GENERAL

Al tractar-se d'una placa "open hardware" per la qual cosa el seu disseny és de lliure distribució

i ús, el programa s'implementa fent ús de l'entorn de programació propi de l'arduino i es

transmet a través d'un cable USB.

7.1- Entorn de desenvolupament

Per a programar l'arduino és necessari

descarregar-se de la pagina web d'arduino l'entorn

de desenvolupament (IDE). En la figura 20,

podem veure l'entorn de programació. En cas de

disposar d'una placa USB és necessari instal·lar

els drivers FTDI. A la web podem trobar versions

per als diferents sistemes operatius.

El primer que es fa per a començar a treballar amb

aquest entorn és configurar les comunicacions

entre la placa Arduino i el PC. Per a fer-ho obrim

el menú "Herramientas" i la opció "Puerto" a on

s'ha de seleccionar el port al que està connectat

l'arduino.

Un cop seleccionat el port, passem a seleccionar la nostra placa d'arduino entre els diferents

models existents, per a fer-ho anem a "Herramientas" i a la opció placa escollim el model

d'arduino, a continuació a la opció de processador escollim l'adient.

Figura 16 - Entorn de programació d'Arduino

Figura 17 - Configuració placa arduino

Page 33: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

33

Un cop he configurat la placa i la comunicació, es pot escriure ja el programa estructurat de la

següent manera :

Figura 18 - Estructura del codi Arduino

Un cop es té el codi complet s'ha de verificar que aquest no conté errors i que per tant es pot

transmetre correctament a la placa Arduino. Per a fer-ho existeixen els botons de "Verificar" i

"Subir" que polsarem un darrere l'altre.

Figura 19 - Verificació del codi Arduino

En aquest punt, el codi ja es troba dins de l'arduino i ha de funcionar correctament.

En primer lloc s'ha fet la programació bàsica del funcionament general per després anar afegint

les ampliacions necessàries.

Page 34: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

34

7.2- Realització del programa

Per a la programació bàsica de l'arduino s'utilitza un software específic de codi obert

proporcionat per la mateixa web d'arduino i que treballa en llenguatge C.

En primer lloc s'ha fet la programació bàsica del funcionament general :

On es pot comprovar que el primer pas és configurar les diverses entrades i sortides del

Arduino.

Page 35: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

35

Tot seguit es fa una posta a punt calibrant un rellotge per tal de poder eliminar timmers i delays

del programa fent servir temps relatius als que marca aquest rellotge.

Un cop tenim el sistema en marxa, comprova mitjançant interrupcions si ha saltat l'alarma anti-

intrusos, en cas de que aquesta hagi saltat, s'activa la sirena dissuasòria i envia un e-mail als

dispositius externs indicant que ha saltat l'alarma, un cop fet això continua amb el procediment

normal.

Tot seguit comprova que el pastor funciona correctament, en cas de no funcionar com es degut,

el sistema genera una senyal de falla del pastor.

A continuació es passa a la programació de reg, que per a la seva realització es comprova en

primer lloc si la terra està humida i es procedeix a prendre la decisió de regar o no segons si ha

plogut o la terra esta seca que és quan es regaran les diverses zones programades.

Acte seguit comprova si s'ha donat menjar als animals i va decrementant un comptador cada

vegada que aquest deixa anar una càrrega fins a arribar a zero on el sistema genera una senyal

informant que el dipòsit de menjar esta buit i s'ha d'omplir.

Un cop fets aquests passos actualitza totes les dades i torna a començar el bucle de nou.

Page 36: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

36

7.2.1- General

Aquest apartat està dedicat a explicar la forma i el cos que adopta el programa final de manera

general, les diferents funcions que hi apareixen estan descrites a les diverses parts corresponents

del projecte. A la part dels annexes també hi podem trobar el codi del programa complet.

VARIABLE DESCRIPCIÓ

#include <Time.h> Llibreria del temps

#include <EEPROM.h> Llibreria per accedir a la EEPROM

#include <Ethernet.h> Llibreria d'ethernet

#include <SPI.h> Llibreria de perifèrics d'Arduino

#include <SD.h> Llibreria per accedir a la tarja SD

byte Hora ;

byte Minuts ;

byte Segons ;

byte Dia;

byte Mes;

byte Any;

Definició del temps actual

String readString; Cadena de caràcters per a la pagina web

volatile int comptador = 0;

int n = comptador ;

long T0 = 0 ;

Sistema antirebots de polsadors

int outputQuantity = 6; Nombre de sortides

int outputAddress[6] = 2, 5, 36, 37, 38,

39; Associació de pins de sortida

int inputQuantity = 13; Nombre d'entrades

int inputAddress[13] = 7, 22, 23, 24, 25,

26, 27, 28, 29, 30, 31, 32, 33; Associació de pins d'entrada

File myFile; Definició de documents de la tarja SD

EthernetServer server(80); Definició del port Ethernet

byte ip[] =

192, 168, 1, 127

;

Ip on es troba la pàgina web

byte mac[] =

0x90, 0xA2, 0xDA, 0x0F, 0x3C, 0xCF

;

Mac de la placa Ethernet de l'arduino

Page 37: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

37

Aquesta és la part de configuració (SETUP) del programa de l'arduino.

En primer lloc inicialitza i comprova la existència d'una tarja SD a l'arduino per posteriorment

poder tractar amb ella.

Tot seguit associa les diverses interrupcions amb els pins, les subrutines i la manera de detectar

corresponents.

A continuació es defineix el temps actual

.

Seguidament s'associen totes les entrades i sortides amb els seus pins.

Per acabar la part del setup, s'estableix la comunicació amb la configuració d'internet.

//////////////////////////////SETUP////////////////////////////////////

void setup()

Serial.begin(9600);

while (!Serial) ;

Serial.print("Initializing SD card...");

if (!SD.begin(4))

Serial.println("initialization failed!");

return;

Serial.println("initialization done.");

attachInterrupt(1, Interrupcio_Alarma, RISING);

attachInterrupt(0, Interrupcio_Menjadora, RISING);

setTime(23, 59, 30, 03, 03, 2016);

for (int var = 0; var < outputQuantity; var++)

pinMode(outputAddress[var], OUTPUT);

for (int var = 0; var < inputQuantity; var++)

pinMode(inputAddress[var], INPUT);

Ethernet.begin(mac, ip);

server.begin();

Serial.print("server is at ");

Serial.println(Ethernet.localIP());

Page 38: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

38

Aquesta part és la part principal del programa i la que s'executa constantment.

El primer que fa és habilitar les interrupcions i definir el temps actual i actualitzar-lo cada cop

que s'executa el programa.

Tot seguit va fent crida a les diverses funcions definides.

Finalment neteja la cadena de caràcters que rep d'internet per poder tornar-hi a escriure.

//////////////////////////////LOOP////////////////////////////////////

void loop()

interrupts();

time_t t = now();

Hora = hour(t);

Minuts = minute(t);

Segons = second(t);

Dia = day(t);

Mes = month(t);

Any = year(t);

SistemaReg();

SistemaAlarma();

SistemaPastor();

SistemaMenjadora();

Acces();

ServidorWeb();

readString = "";

Page 39: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

39

8- PERIFÈRICS

8.1- Pastor elèctric

Com a part del projecte, es vol dissenyar un sistema capaç de detectar falles en un pastor

elèctric ja existent i proporcionat per el client. El sistema en qüestió porta ja incorporat un

sistema de falles que es capaç de detectar quan el pastor no funciona correctament degut a que

algun fenomen extern fa contacte permanent amb el pastor i per tant això causa una descàrrega

total de la bateria. Amb el sistema a implementar es generarà una senyal d'avís de falla que

posteriorment serà transmesa a l'usuari.

Que és i com funciona un pastor elèctric :

El pastor elèctric permet el control dels animals mitjançant una descàrrega elèctrica d'alt

voltatge i curta durada. Aquesta breu descàrrega produeix un desagradable dolor (més intens

com més potent és el pastor), que estimula la memòria de l'animal fent-li respectar el tancat. Els

tancats elèctrics no són només una barrera física, també són una barrera psicològica per a

l'animal. Aquests aparells són inofensius tant per als animals com per a les persones.

El principi bàsic de funcionament

és molt senzill: És un circuit obert

que precisa d'alguna cosa que ho

toqui (l'animal en aquest cas)

perquè ho tanqui, moment en què

rep la descàrrega. Controla tot tipus

d'animals independentment de la

mida. Quan l'animal toca el filferro

o el conductor del tancat

l'electricitat passa al sòl a través

del seu cos, viatja fins a la presa de

terra i arriba al pastor tancant el

circuit.

El corrent elèctric viatja tant a través del sòl com del tancat, per la qual cosa tan important és

tenir muntat un bon tancat com un bon contacte de la presa de terra amb el sòl, i mantenir tots

dos muntatges ben aïllats entre si per al correcte funcionament del pastor.

Figura 20 - Connexió Pastor elèctric

Page 40: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

40

Com és el pastor del que disposem?

PASTORMATIC 2500 LCD 12v

Figura 22 - Física Pastor elèctric

Figura 21 - Control Pastor elèctric

Page 41: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

41

1.- Aplicació:

El pastor elèctric Pastormatic 2500 LCD 12v esta dissenyat per poder fer una tanca de fins a 18

km mitjançant impulsos de corrent elèctrica.

2.- Característiques tècniques:

Alimentació 12 VDC

Consum 8 W

Voltatge de sortida 8,2 +/- 0,3 kV

Voltatge sobre 500 Ω 3,7 +/- 0,3 kV

Energia de càrrega 1,36 J

Energia de descàrrega 1,1 J

Impulsos / segons 1,2 s

Longitud màxima de la tanca 18 km

Resistència d'impacte carcassa IP - 55

3.- Components

Nº Descripció

1 Presa de terra (Negre)

2 Presa de línea (Vermell)

3 Presa de retorn (Groc)

4 Pinces per a bateria 12V

5 Panel LCD

6 Indicador Test/Alarma

7 Pinça unió preses

8 Indicador ver d'impulsos de corrent

9 Interruptor d'arrencada/parada

4.- Principis bàsics de funcionament

És el principal element i motor de la instal·lació. Te dues sortides per les que emet impulsos

elèctrics en petits intervals. Aquesta corrent provoca un xoc elèctric sense perill per a qui el rep

però ha de ser suficientment fort per que l'animal ho recordi i no torni a acostar-se a la tanca.

Quan l'animal toca la tanca la tensió baixa de 8,2 kV fins a 3,7 kV el qual el protegeix de la

descàrrega elèctrica.

El pastor elèctric inicia el seu funcionament mesurant els valors elèctrics del tancat i els

emmagatzema en la memòria de la placa electrònica cosa que permet la detecció de falles.

Page 42: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

42

5.- Posada en marxa

El model Pastormatic 2500 LCD 12v pot connectar-se a la tanca de dues maneres:

Connexió normal:

El cable de línea es connecta a la tanca i a la presa vermella. La presa groga estarà connectada a

la presa vermella mitjançant la pinça d'unió i el cable de presa de terra es connecta com és

habitual a la presa de línea negre del pastor.

Connexió amb opció Test/Alarma:

El cable de línea es connecta a la tanca i a la presa vermella i groga sense que aquestes estiguin

connectades entre si. El cable de presa de terra es connecta com és habitual a la presa de línea

negre del pastor. Quan el tancat presenta alguna possible anomalia, l'indicador Test/Alarma ens

avisa amb un centelleig de color vermell. Per assegurar un bon funcionament és necessari

esbrinar el causant real del problema.

6.- Instruccions d'ús

Si la tanca elèctrica supera els 18 km, aquesta hauria d'estar fraccionada en parcel·les

individuals no superiors als 18 km, cada una separada equipada amb un pastor elèctric i aquests

separats almenys per 2m. La distància entre els tancats elèctrics haurà de tancar-se amb material

aïllant.

7.- Normes de seguretat

El model Pastormatic 2500 LCD 12v compleix amb les normatives establertes en el registre de

"Instalaciones para fines especiales. itc del reglamento de baja tensión. ITC-BT-39."

Page 43: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

43

8.1.1- Modificació senyal d'alarma

Com que el propi pastor ja incorpora un sistema de detector de falles i per tal de no modificar el

circuit del propi pastor integrat dins d'una caixa, com que cada cop que es detecta una falla, el

pastor fa saltar l'alarma i engega un led de color vermell, aprofitant la llum que genera aquest

led s'obté la senyal de sortida necessària per a transmetre-la al dispositiu de control i

posteriorment tractar-la.

Per a fer aquest sistema s'utilitza una LDR (light-dependent

resistor), és a dir una resistència que varia en funció de la

quantitat de llum que rep.

Es tracta d'un circuit commutador per il·luminació controlat

per la LDR que ens donarà una senyal de sortida quan la

LDR rebi suficient llum.

Sabent que la LDR varia de 100Ω amb màxima llum fins a

1MΩ en absència de llum, depenent de la il·luminació que rebi la LDR, la seva resistència

polaritza a tall o a conducció el transistor Q2 el qual governa a Q3 i a la vegada aquest a Q1.

Quan Q1 es troba en conducció vol dir que rep la suficient llum per activar la sortida de la qual

aprofitarem la tensió generada.

Per a la realització de les simulacions del circuit

utilitzem el software gratuït de Linear Technology

LTSpice IV.

Figura 23 - LDR

Figura 24 - Esquema circuit detecció de falles pastor

Page 44: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

44

En la següent simulació veiem que si la LDR rep la màxima llum, és a dir que presenta valors

de 100Ω aproximadament veiem que els transistors no condueixen i en especial el transistor Q1

que és el que ens proporciona la senyal de sortida està en tall.

Figura 25 - Simulació LDR màxima llum

En la següent simulació, la LDR presenta una resistència de 1MΩ, és a dir que no rep gens de

llum, per tant els transistors condueixen i obtenim un voltatge de sortida que serà enviat al

dispositiu de control.

Figura 26 - Simulació LDR mínima llum

El punt de canvi dels transistors en funció de la variació de resistència de la LDR es troba al

voltant del valor de 1k6Ω, és a dir que en tot el rang de la LDR (100Ω-1MΩ) és capaç de

detectar canvis de llum molt petits, per tant detecta la llum proporcionada per el led vermell i

activa els transistors i la sortida al mínim canvi d'il·luminació.

Page 45: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

45

Per al disseny de la placa electrònica s'utilitza el

programa de disseny de software gratuït KiKad que

ens permet fer un disseny òptim i complet de la

placa en qüestió.

La següent figura ens mostra l'esquemàtic de la placa :

Figura 28 - Disseny circuit placa detecció de falla pastor

Figura 27 - Logotip Kicad

Page 46: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

46

Un cop s'ha fet el circuit esquemàtic de la placa, es passa a dissenyar la PCB amb el mateix

software.

A continuació les següents figures ens mostren el disseny d'aquesta PCB

Figura 29 - Circuit PCB placa detecció falles pastor

Figura 30 - Visualització 3D placa detecció falles pastor

Figura 31 - Fotolit placa detecció falles pastor

Page 47: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

47

8.1.2- Programació pastor

A continuació es mostra la declaració de variables que s'utilitzen en les funcions del pastor.

VARIABLE DESCRIPIÓ

byte FallaPastor = LOW; S'activa quan el pastor falla

int T1dp; Dia en que el pastor ha fallat

int T1Mp; Mes en el que el pastor ha fallat

byte SensorPastor = LOW; Lectura digital del sensor del pastor

const int SPast = 7; Pin associat al sensor del pastor

La funció que determina el funcionament del pastor és la següent :

El programa llegeix la sortida digital que correspon a l'estat del sensor, si aquest es troba en

nivell baix vol dir que el pastor funciona correctament, per altra banda si aquest es troba en

nivell alt, esta fallant i el programa activa la variable de Falla Pastor i obre un registre

d'incidències a la tarja Sd de l'arduino.

void SistemaPastor()

SensorPastor = digitalRead(SPast);

if (SensorPastor == HIGH )

FallaPastor = HIGH;

delay(200);

myFile = SD.open("HISTORIAL_HORT.txt", FILE_WRITE);

if (myFile)

myFile.print ("El pastor ha fallat el dia ");

myFile.print(+ " ") ;

myFile.print (T1dp);

myFile.print (" / ");

myFile.print (T1Mp);

myFile.close();

Page 48: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

48

8.1.3- Comunicació pastor

La part de comunicació del pastor elèctric, ens mostra constantment a la web dins de l'apartat

d'informació l'estat en que es troba el pastor.

Si el pastor es troba funcionant normalment, apareix per pantalla un missatge de "El pastor

funciona OK".

En cas de que el pastor no funcioni correctament, el missatge que apareix és "El pastor falla".

Simplement funciona com a eina informativa de l'estat del pastor, al no ser un punt crític, no es

genera cap senyal important d'avís o alarma ja que també per la reactivació del pastor s'ha d'anar

fisicament al lloc on està muntat i fer les comprovacions del motiu pel qual el pastor està fallant.

if (SensorPastor == HIGH)

client.println ("El pastor falla");

else

client.println ("El pastor funciona OK");

Page 49: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

49

8.2- Menjadora automàtica

8.2.1- Estudi de mercat de les menjadores per a cavalls

8.2.1.1- Menjadora automàtica taurus ti.1

Gran Resistència i Fiabilitat. (Garantia de 3 anys)

Gran Capacitat del tanc d'Alimentació : 60 litres.

Programació per Segons amb fins a 6 dosis diàries diferents.

Possibilitat de funcionament a 220 AC. i 12V CC.

Sortida individual, o doble (Sistema duplo).

Possibilitat de funcionament amb sistema SAI (davant talls de llum), o amb kits solars

Preu: 228,00 €

Característiques Físiques

Menjadora realitzada en xapa prelacada d'1 mm. d'espessor, de colors gris metàl·lic.

Dimensions: alçada x amplada x profunditat: 750x600x200 mm.

Capacitat per a 60 litres.

Incorpora 3 visors de metacrilat per a una ràpida inspecció visual de la quantitat

d'aliment en tanc.

Instal·lació senzilla i adaptable any un tipus de quadre o quadra.

Sortints de 45º en les superfícies interiors per a evitar la acumulació de pinso i facilitar

la fluïdesa del mateix.

Dissenyat per al ús en exteriors.

Sortida amb embocadura per a tubs de 75 mm. de diàmetre. Cada menjadora ve

equipada amb 0,5 metres de tub de PVC i un colze de 45º .

Compatible amb qualsevol tipus de gra o pinso.

Alimentació

La menjadora funciona tant amb corrent altern de 220V (Red Elèctrica) com a 12V CC.

(Bateries, kits solars, ...).

Possibilitat d'instal·lació del sistema SAI, (Sistema d'Alimentació ininterromput), que

consisteix en :

1) Gestor de Càrregues de Bateria

2) Transformador de 220 V de corrent altern 1 CC. 12V de 40W

3) Bateria 1.3Ah.

Aquest Sistema té una autonomia aproximada de 7 dies, davant el tall de

subministrament de la xarxa elèctrica.

Existeix també la possibilitat de funcionar a través d'un kit solar de 12V CC . amb les

següents Característiques:

- Placa solar de 5W

- Regulador i bateria de 12 V i 1,3 Ah. .

Page 50: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

50

Panell de control

Temporitzador diari amb fins a 6 possibles dosis per dia.

Temporitzador per segons, el que li garanteix la selecció exacta de la dosi de

subministrar.

Màxima Quantitat per dosi 5 litres. (Aproximadament 5 kg)

Test Button, botó per a la comprovació del correcte funcionament de la menjadora

automàtica. En pressionar sobre el botó, la menjadora funciona durant 10 Segons.

Garantia de 3 anys en Tots Els nostres menjadors automàtics.

Figura 32 - Menjadora automàtica Taurus

Page 51: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

51

8.2.1.2- Menjadora automàtica Gaun equimatic

Tremuja amb dosificador automàtic de pinso per a cavalls.

Programable per subministrar la quantitat de pinso que es desitgi en una, dues o tres

vegades al dia, a les hores que es programin.

Fabricada en xapa galvanitzada.

Prevista de bateria de seguretat per continuar en marxa en cas de fallada de corrent

elèctric.

Capacitat: 75 litres (aprox. 50 kg.)

Mesures: Amplada: 50 cm. Fons: 70 cm. Alçada: 87 cm.

Preu: 478 €

Figura 33 - Menjadora automàtica Gaun equimatic

Page 52: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

52

8.2.1.3- Menjadora automàtica Anibal CM-75

Capacitat: 75 L (50 kg de pinso / aprox. cereals).

Robustesa màxima. Aparell Dissenyat per a instal·lar dins de la quadra del cavall.

- No deixa pinso anar davant els cops.

- Quadre elèctric independent i extern. Aïlla el funcionament elèctric del

mecànic.

- Fixació de paret: Sistema ISOFIX. (Inclòs al lliurament).

Preu: 300 euros

Dimensions: 50 cm x 20 cm x 95cm.

Sortida en acer galvanitzat de 15 cm x 7 cm x 7 cm

Display in 45L - 275 euros

Materials :

- Dipòsit o en Alumini.

- Estructura i reblada Reforçada amb perfileria en alumini.

- Mecanismes interns en Acer.

- Carcassa Mecanisme interior en PVC 5mm d'altura i perfileria en alumini.

Motor d'alt parell. Sistema contra encallament: 100 N.cm

Quadre Elèctric de control exterior

Programador: De control solar de bateria, extern a l'aparell.

Bateria 12V 3,2 Ah: Inclosa en quadre. Garanteix funcionament ininterromput (SAI)

davant talls de tensió i / o fallada de la placa solar.

Connexió elèctrica (220 V): Adaptador de CA 220V - 12V DC, per mantenir carregada

la bateria.

Possibilitat de Connexió una placa solar. El Sistema funciona internament amb una

bateria de 12V.

Protecció Elèctrica: Motor i programador Protegits per fusible.

Programació: Fins a 6 àpats al dia. Reglatge en Segons.

Figura 34 - Menjadora automàtica Anibal CM-75

Page 53: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

53

8.2.2- Criteris de selecció

Un cop s'ha determinat la funció que ha d' acomplir el sistema i per tal de poder fer un estudi de

mercat complet, s'ha consultat el client les seves preferències per tal de poder valorar i escollir

correctament la opció més viable per a dur a terme aquesta part del projecte.

El client ha remarcat que degut a que el projecte engloba moltes parts, el cost final té una gran

importància i per tant en aquesta part també s'assigna un gran pes del total. Els altres criteris de

selecció han sigut imposats conjuntament ja que tots influeixen també de manera indirecta en el

cost total del projecte.

La següent taula ens mostra els criteris imposats per el client i el percentatge d'importància que

presenta cadascú.

CRITERIS DEL CLIENT PES PERCENTATGE

Preu 50 %

Facilitat Instal·lació 5 %

Consum 20 %

Capacitat 5 %

Temps disseny i muntatge 20 %

La següent taula és una valoració de totes les opcions amb la puntuació obtinguda per a cada

criteri :

OPCIÓ/ CRITERI PREU INSTAL·LACIÓ CONSUM CAPACITAT TEMPS

TAURUS 6 8 6 5 7

CAUN 3 8 4 6 7

ANIBAL 4 7 4 6 6

AUTOMUNTATGE 6 7 5 8 2

La següent taula ens mostra el resultat final aplicant la ponderació de cada criteri a cada opció

per tal de determinar la opció més adequada.

OPCIÓ PUNTUACIÓ PONDERADA

TAURUS 6.25

CAUN 4.4

ANIBAL 4.65

AUTOMUNTATGE 5.15

Page 54: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

54

8.2.3- Valoració

Un cop hem estudiat totes les opcions disponibles en el mercat, inclosa la opció de fer un

disseny propi de la menjadora , observem que amb els criteris seleccionats segons el client, la

opció que més s'ajusta al nostre propòsit és la OPCIÓ 1 (Taurus).

La opció Caun queda descartada ja que és una opció molt similar a la primera però el preu és

molt més elevat i com que per el client el percentatge de pes del preu és un 50% del total, això

fa que aquesta opció quedi totalment descartada.

La tercera opció,Anibal, al igual que la segona també queda descartada per motius econòmics

tot i que també és molt similar a la primera, havent consultat amb el client es va decantar per la

primera opció entre aquestes dues.

La quarta i última opció de les valorades és fer el disseny completament des de zero que en

termes econòmics podria ser bastant viable, però a l'hora de valorar tots els criteris ens en

adonem que la part de disseny, consum i instal·lació incrementa molt la dificultat i viabilitat

d'aquesta opció.

Per tant, un cop valorades totes les opcions conjuntament amb el client, la opció 1 tot i no

comptar amb la capacitat de ser programada a distància i com que realment el propòsit del

projecte és assegurar que els animals s'alimentin correctament i que sigui un sistema fiable,

obviem la part de programació a distància ja que el mateix sistema incorpora la capacitat de

programació in situ de manera fàcil i eficient i ens garanteix el correcte funcionament del

sistema, així com també aquesta opció incorpora la capacitat de ser alimentada directament amb

plaques solars que també és una part fonamental del projecte, per tan simplement haurem

d'afegir un sensor que ens informi de quantes vegades s'ha donat de menjar a l'animal i serà

aquesta la informació útil que rebrem.

Page 55: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

55

8.2.4- Detecció de menjar

La missió d'aquest sensor és avisar-nos quan la menjadora descarregui la seva càrrega, és a dir

que cada vegada que sigui subministrada una càrrega de menjar, aquest sensor ens entregui una

senyal informativa conforma l'animal ha estat alimentat alhora que incrementarà un comptador

per tal de poder saber quan la menjadora està buida. Aquesta senyal serà transmesa

posteriorment a un dispositiu mòbil.

Per a la realització d'aquesta adaptació es col·locarà un sensor de proximitat just a la sortida de

la menjadora automàtica per tal de que detecti la presència de menjar que significarà que

l'animal ha estat alimentat.

Per a la elecció del sensor i degut novament a que el cost total del projecte és el factor de pes

més important per a prendre totes les decisions, s'ha reutilitzat un sensor de proximitat que el

mateix client ha proporcionat i que tot i no sent el més adequat per a l'aplicació, és

suficientment correcte per a poder-lo utilitzar.

El sensor el qüestió és un sensor de proximitat industrial per infrarojos capaç de detectar

qualsevol element a una distància de 30cm que s'alimenta a una tensió contínua entre 10V i

30V, el qual presenta un consum màxim de 30mA i que té una sortida per a transistor NPN o

PNP que pot ser configurada per l'usuari. També disposa d'ajust de distància de detecció.

Per tant, veient les característiques del sensor i fent els ajustos corresponents, aquest és apte per

a l'aplicació.

La següent imatge mostra un esquema bàsic del funcionament i missió del sensor:

Figura 35 - Dibuix sensor de detecció de menjar

Page 56: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

56

Un cop fetes les proves amb el sensor, no acabava de funcionar bé del tot degut a que els grans

de menjar són d'una mida molt petit i com que el sensor detecta per reflexió de llum, la senyal

que donava no es podia processar correctament ja que era molt intermitent i no sempre

detectava correctament.

Per tant, vist aquest error s'ha procedit a obrir el circuit electrònic que porta la pròpia menjadora

i aprofitant que aquest dona tensió al motor que proporciona el menjar a través d'un relé,

obtenim el senyal desitjat d'entrega de menjar a través d'aquest relé, sent així un dispositiu molt

més fiable.

Com que el relé proporciona una senyal de 12v i a l'arduino només hi poden arribar 5v, es fa

passar aquesta senyal per un divisor de tensió que adapta la tensió a la desitjada.

Figura 36 - Sensor de detecció de menjar i posicionament

Page 57: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

57

Ja que és té accés al circuit del motor, per tal de fer més precís el sistema, s'incorpora un

mesurador d'intensitat que ens proporciona la intensitat que consumeix el motor, per tant, fent

una tara d'aquesta intensitat que circula, es pot saber si el motor està treballant correctament, si

treballa en buit o si es troba encallat per tal de poder prendre una decisió.

Figura 37 - Sensor d'intensitat del motor de la menjadora

Per tal de saber la quantitat de menjar que queda en el dipòsit, es fa primer una tara per veure

quantes vegades pot descarregar menjar abans de quedar-se el dipòsit buit i a partir d'aquest

s'implementa un comptador mitjançant software que va disminuint a mesura que la menjadora

va subministrant menjar. Aquest comptador es posa a zero manualment quan s'omple el dipòsit

de nou.

Page 58: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

58

8.2.5- Programació menjadora

VARIABLE DESCRIPCIÓ

int ContadorMenjar = 20; Variable amb la quantitat de descarregues màxima de la

tremuja de menjar

byte Menjar = LOW; S'activa quan es dona la ordre de donar menjar

const int SensorMotor = A1; Entrada analògica del sensor d'intensitat del motor

int LecturaMotorMenjar = 0; Lectura del valor del sensor del motor

int Motorbuit = 100; Valor a partir del qual es considera que el motor gira en buit

int MotorEncallat = 800; Valor a partir del qual es considera que el motor està

encallat

byte ME; S'activa si el motor esta encallat

byte MB; S'activa si el motor gira en buit

byte MOK; S'activa si el motor gira correctament

La part del programa de la menjadora funciona per interrupcions, és a dir, cada vegada que el

motor gira, i alhora s'activa el seu propi relé, capturem la senyal i la enviem al pin 1 de l'arduino

que correspon a la interrupció numero 0 d'aquest. Un cop tenim la connexió feta, determinem

com volem que s'activi aquesta interrupció i ho fem amb la detecció d'un flanc de pujada amb la

instrucció RISING.

En aquest punt ja tenim associada la interrupció a la subrutina de la menjadora que

La subrutina d'interrupció ens activa la variable de MENJAR per saber que s'ha donat la ordre

de donar menjar i ens disminueix en una unitat el comptador de menjar.

void Interrupcio_Menjadora()

if ( millis() > T0 + 500)

contador++ ;

T0 = millis();

Menjar = HIGH;

ME = LOW;

MB = LOW;

MOK = LOW;

ContadorMenjar --;

attachInterrupt(0, Interrupcio_Menjadora, RISING);

Page 59: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

59

Un cop s'ha donat la ordre de donar menjar , el programa ens redirecciona a la funció de la

menjadora :

Aquesta funció s'activa cada vegada que es dona la ordre de donar menjar i s'encarrega de fer la

lectura del motor per saber com està funcionant i activar la variable corresponent segons com

estigui girant el motor. Alhora, aquesta funció també ens avisa quan el comptador de menjar

està buit.

void SistemaMenjadora()

if ( Menjar == HIGH )

LecturaMotorMenjar = analogRead(SensorMotor);

if (LecturaMotorMenjar > MotorEncallat )

ME = HIGH;

if (LecturaMotorMenjar < Motorbuit )

MB = HIGH;

if (LecturaMotorMenjar < MotorEncallat && LecturaMotorMenjar > Motorbuit )

MOK = HIGH;

if (ContadorMenjar <= 0 )

ContadorMenjar = 0;

Menjar = LOW;

Page 60: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

60

8.2.6- Comunicació menjadora

La part de comunicació de la menjadora, ens informa a través de la web de la capacitat a la qual

es troba la tremuja de menjar.

La web ens mostra l'estat del comptador que va decrementant a mesura que es va donant menjar.

La web incorpora també un botó de Reset que reinicia el comptador quan s'omple la tremuja

manualment.

En tot moment ens mostra per pantalla també l'estat en que està funcionant el motor de la

menjadora, generant diferents missatges segons com es trobi el motor. De la mateixa manera,

també ens informa quan el dipòsit de menjar està buit.

if (ContadorMenjar != 0)

client.println("<center>");

client.println("<br />");

client.println ("El dipòsit de menjar es troba en carrega:");

client.println("<br />");

client.println("<br />");

client.print (ContadorMenjar);

client.print(" ") ;

client.print (" / 20");

client.println("<br />");

client.println("<br />");

else

client.println ("El dipòsit de menjar esta buit");

client.println("<br />");

client.println("<center>");

client.print("<button>");

client.print("<a href=\"/?reset\"\"<button style='font-size:100%; color:black; '>RESET</a>");

client.print("</button>");

client.println("</center>");

client.println("<br />");

if (readString.indexOf("?reset") > 0)

ContadorMenjar = 20;

if (ME == HIGH)

client.println ("El motor de la menjadora està encallat:");

if (MB == HIGH)

client.println ("El motor de la menjadora està girant en buit:");

if (MOK == HIGH)

client.println ("El motor de la menjadora funciona OK:");

Page 61: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

61

8.3- Hort

Es parteix d'un disseny de la zona agrícola ja dissenyada de la següent manera :

Reg per degoteig

El reg per degoteig, igualment conegut sota el nom de “reg gota a gota” és un mètode d’irrigació

utilitzat a les zones àrides perquè permet la utilització òptima d’ aigua i abonaments.

L’ aigua aplicada per aquest mètode de reg s’ infiltra cap a les arrels de les plantes irrigant

directament la zona d’ influencia de les arrels a través d’ un sistema de canonades i emissors

(degotadors).

La major part dels grans sistemes de reg per degoteig utilitzen un cert tipus de filtre d'aigua per

impedir l'obstrucció dels petits tubs sortidors.

Els sistemes de degoteig barregen sovint l'abonament líquid o pesticides en l'aigua de reg. Altres

productes químics tals com el clor o l'àcid sulfúric són igualment utilitzats per netejar

periòdicament el sistema.

Si està correctament muntat, instal·lat, i controlat, el reg per degoteig pot ajudar a realitzar

importants economies d'aigua per la reducció de l'evaporació. D'altra banda, el reg gota a gota

pot eliminar moltes malalties que neixen del contacte de l'aigua amb les fulles. En conclusió, a

les regions on els aprovisionaments d'aigua estan molt limitats, es pot obtenir un notable

augment de producció utilitzant la mateixa quantitat d'aigua que abans.

Els kits de gota a gota per al jardí són cada vegada més populars per als propietaris de cases. Es

componen d'un temporitzador, una canonada i diversos degotadors.

També es necessita un manoreductor perquè la pressió no sigui excessiva en el sistema ja que

poden arribar a sortir disparats els degotadors si no es regula adequadament.

Figura 38 - Reg per degoteig

Page 62: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

62

AVANTATGES INCONVENIENTS

Rendiment elevat

Estalvia aigua

Elimina malalties

Reducció de mà d’ obra

Fàcil adaptació al terreny

Alt risc d’ obturació

Automatització complexa

Per tant és un sistema que funciona per degoteig i en l'espai físic queda distribuït de la següent

manera :

Són quatre zones independents amb u dipòsit d'aigua de 1000L i una electrovàlvula per a cada

dipòsit.

Figura A.2 - Distribució zona hort

Cada un dels dipòsits està equipat amb 3 sensors que ens determinen la capacitat a la qual es

troba cada dipòsit. Així com també es disposa d'un sensor d'humitat que mesura la quantitat

d'aigua a la terra.

Page 63: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

63

8.3.1- Sensor d'humitat

Es tracta d’ un sensor d’ humitat que per poder mesurar la quantitat d'aigua present al terra

mitjançant canvi de resistència.

El mecanisme consta de dos plaques separades

entre si recobertes d’un material conductor que al

posar-lo en contacte amb un medi humit i per tant

capaç de conduir la corrent elèctrica, tanca el

circuit.

El sensor be amb un circuit que detecta la corrent

entre les potes i la transforma en un valor

analògic, el qual ens permet conèixer el grau de

humitat que hi ha. També podem fer servir la

sortida digital que si hi ha o no humitat.

El pac inclou:

- 1 Mòdul detector d’ humitat del terra

- 1 Sonda

Característiques tècniques:

- Voltatge de funcionament: 3.3V~5~ 2.5mA

- Mòdul de sortida dual (analògica i digital)

- Analògic: 1023terra sec

0màxima humitat

- Digital: 1 per manca d’humitat

0Humitat

- Panell PCB Dimensions: 30mm x16mm

- Sonda de terra Dimensions: Aprox. 60mm x 30mm

- Amb el indicador de potencia (Vermell) i el indicador de sortida de commutació

digital (verd).

- Chip comparador LM393, estable

- Descripció interface (4 fils)

- VCC: 3.3V-5V

- GND:GND

- HACER: interface de sortida digital ( 0 i 1).

- Interface de sortida analògica.

-

La conductivitat de la terra, varia en funció de la zona, del que s’ hagi plantat, del temps que

porta sense haver-hi res plantat i de lo humida que pugui estar.

La manera més precisa de determinar si las plantes necessiten aigua o no era posar diverses

sondes però el pressupost es disparava.

Figura 39 - Sensor d'humitat

Page 64: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

64

La solució mes econòmica, ha sigut agafar diferents mostres de terres de diferents zones.

Figura 40 - Recollida de mostres de terra

Un cop recollides les mostres les identifiquem.

Figura 41 - Mostres de terra numerades

Page 65: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

65

Per poder determinar un valor mig, el qual es considera que les plantes necessiten ser regades,

es realitzen les següents proves.

Figura 42 - Test terra

Mitjançant la lectura dels pins analògics corresponents a la sonda d'humitat, aconseguim

extreure les dades recollides per la sonda i mostrejar-les per pantalla.

Després es crea una taula per determinar el valor mig a partir del qual es considera que les

plantes necessiten aigua. Tot hi així, el client a partir d’ un SCADA (supervisió, control i

adquisició de dades) podrà determinar aquest valor.

La següent taula recull des dades recol·lectades

Mostra 1 2 3 4 5

Sense aigua 998 464 806 1010 385

Humides 120 118 149 130 128

El sensor en qüestió, varia la seva sortida amb un valor analògic que va de 0 a 1023. Entregarà

0 quan el terra estigui sec i 1023 en el punt de màxima humitat. Un cop realitzades les proves,

amb les diferents sorres, establim un llindar de 500.

Senyal rebuda al arduino a través de la sonda <500 es pot regar

Senyal rebuda al arduino a través de la sonda >= 500 no es necessari regar.

El valor de la humitat a partir de la qual es rega, es determina per software, assignant el valor a

la variable "HumitatReg".

LecturaHumitat = analogRead(SensorHumitat);

LecturaHumitatescalada = 102.3 - (LecturaHumitat / 10);

Page 66: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

66

Per poder determinar el nivell dels dipòsits, farem servir 3 sondes per cada un d’ ells.

Figura 43 - Posició sensors dipòsits

De les quals cada una proporcionarà un senyal digital a l'arduino, indicant amb un 0

lògic quan hi ha aigua, i un 1 lògic quan no hi hagi.

Page 67: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

67

8.3.2- Programació hort

VARIABLE DESCRIPIÓ

int Tev1 = 0 ;

int Tev2 = 0 ;

int Tev3 = 0 ;

int Tev4 = 0 ;

Temps durant el que es rega cada zona definit per l'usuari a

través de la pàgina web

const int Ev1 = 36;

const int Ev2 = 37;

const int Ev3 = 38;

const int Ev4 = 39;

Pins de sortida de les diferents electrovàlvules

byte Horareg = 22 ; Hora de reg automàtic

byte RegManual1 = LOW;

byte RegManual2 = LOW;

byte RegManual3 = LOW;

byte RegManual4 = LOW;

Variables per activar el reg manual a través de la pàgina

web

byte Zona1 = LOW;

byte Zona2 = LOW;

byte Zona3 = LOW;

byte Zona4 = LOW;

Variables per activar el reg automàtic a través de la pàgina

web

int SensorDalt1 = 0;

int SensorMig1 = 0;

int SensorBaix1 = 0;

int SensorDalt2 = 0;

int SensorMig2 = 0;

int SensorBaix2 = 0;

int SensorDalt3 = 0;

int SensorMig3 = 0;

int SensorBaix3 = 0;

int SensorDalt4 = 0;

int SensorMig4 = 0;

int SensorBaix4 = 0;

Lectura digital del valor dels sensors de cada dipòsit per

determinar-ne el nivell

const int SD1 = 22;

const int SMi1 = 23;

const int SB1 = 24;

const int SD2 = 25;

const int SMi2 = 26;

const int SB2 = 27;

const int SD3 = 28;

const int SMi3 = 29;

const int SB3 = 30;

const int SD4 = 31;

const int SMi4 = 32;

const int SB4 = 33;

Pins d'entrada associats als sensors dels dipòsits

Page 68: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

68

VARIABLE DESCRIPCIÓ

byte Diposit1ple = LOW;

byte Diposit1mig = LOW;

byte Diposit1minim = LOW;

byte Diposit1buit = LOW;

byte Diposit2ple = LOW;

byte Diposit2mig = LOW;

byte Diposit2minim = LOW;

byte Diposit2buit = LOW;

byte Diposit3ple = LOW;

byte Diposit3mig = LOW;

byte Diposit3minim = LOW;

byte Diposit3buit = LOW;

byte Diposit4ple = LOW;

byte Diposit4mig = LOW;

byte Diposit4minim = LOW;

byte Diposit4buit = LOW;

Variables que defineixen l'estat de cada

dipòsit

const int SensorHumitat = A0; Pin d'entrada analògic del sensor d'humitat

int LecturaHumitat = 0; Lectura del sensor d'humitat (0-1023)

int LecturaHumitatescalada = 0; Lectura del sensor d'humitat (0-100)

int HumitatReg = 50; Valor a partir del qual es decideix regar

La funció general que determina el funcionament del reg és la següent :

void SistemaReg()

SensorDalt1 = digitalRead(SD1);

SensorMig1 = digitalRead(SMi1);

SensorBaix1 = digitalRead(SB1);

SensorDalt2 = digitalRead(SD2);

SensorMig2 = digitalRead(SMi2);

SensorBaix2 = digitalRead(SB2);

SensorDalt3 = digitalRead(SD3);

SensorMig3 = digitalRead(SMi3);

SensorBaix3 = digitalRead(SB3);

SensorDalt4 = digitalRead(SD4);

SensorMig4 = digitalRead(SMi4);

SensorBaix4 = digitalRead(SB4);

LecturaHumitat = analogRead(SensorHumitat);

LecturaHumitatescalada = 102.3 - (LecturaHumitat / 10);

NivellDiposits();

RegManual();

RegAutomatic();

Page 69: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

69

El programa llegeix l'estat dels sensors dels dipòsits així com també la humitat de la terra per

posteriorment decidir si és necessari i viable regar.

A continuació executa diverses funcions :

void NivellDiposits()

if ( SensorDalt1 == HIGH && SensorMig1 == HIGH && SensorBaix1 == HIGH)

Diposit1ple = HIGH; Diposit1mig = LOW; Diposit1minim = LOW; Diposit1buit = LOW;

if ( SensorDalt2 == HIGH && SensorMig2 == HIGH && SensorBaix2 == HIGH)

Diposit2ple = HIGH; Diposit2mig = LOW; Diposit2minim = LOW; Diposit2buit = LOW;

if ( SensorDalt3 == HIGH && SensorMig3 == HIGH && SensorBaix3 == HIGH)

Diposit3ple = HIGH; Diposit3mig = LOW; Diposit3minim = LOW; Diposit3buit = LOW;

if ( SensorDalt4 == HIGH && SensorMig4 == HIGH && SensorBaix4 == HIGH)

Diposit4ple = HIGH; Diposit4mig = LOW; Diposit4minim = LOW; Diposit4buit = LOW;

if ( SensorDalt1 == LOW && SensorMig1 == HIGH && SensorBaix1 == HIGH)

Diposit1ple = LOW; Diposit1mig = HIGH; Diposit1minim = LOW; Diposit1buit = LOW;

if ( SensorDalt2 == LOW && SensorMig2 == HIGH && SensorBaix2 == HIGH)

Diposit2ple = LOW; Diposit2mig = HIGH; Diposit2minim = LOW; Diposit2buit = LOW;

if ( SensorDalt3 == LOW && SensorMig3 == HIGH && SensorBaix3 == HIGH)

Diposit3ple = LOW; Diposit3mig = HIGH; Diposit3minim = LOW; Diposit3buit = LOW;

if ( SensorDalt3 == LOW && SensorMig3 == HIGH && SensorBaix3 == HIGH)

Diposit4ple = LOW; Diposit4mig = HIGH; Diposit4minim = LOW; Diposit4buit = LOW;

if ( SensorDalt1 == LOW && SensorMig1 == LOW && SensorBaix1 == HIGH)

Diposit1ple = LOW; Diposit1mig = LOW; Diposit1minim = HIGH; Diposit1buit = LOW;

if ( SensorDalt2 == LOW && SensorMig2 == LOW && SensorBaix2 == HIGH)

Diposit2ple = LOW; Diposit2mig = LOW; Diposit2minim = HIGH; Diposit2buit = LOW;

if ( SensorDalt3 == LOW && SensorMig3 == LOW && SensorBaix3 == HIGH)

Diposit3ple = LOW; Diposit3mig = LOW; Diposit3minim = HIGH; Diposit3buit = LOW;

if ( SensorDalt4 == LOW && SensorMig4 == LOW && SensorBaix4 == HIGH)

Diposit4ple = LOW; Diposit4mig = LOW; Diposit4minim = HIGH; Diposit4buit = LOW;

if ( SensorDalt1 == LOW && SensorMig1 == LOW && SensorBaix1 == LOW)

Diposit1ple = LOW; Diposit1mig = LOW; Diposit1minim = LOW; Diposit1buit = HIGH;

if ( SensorDalt2 == LOW && SensorMig2 == LOW && SensorBaix2 == LOW)

Diposit2ple = LOW; Diposit2mig = LOW; Diposit2minim = LOW; Diposit2buit = HIGH;

if ( SensorDalt3 == LOW && SensorMig3 == LOW && SensorBaix3 == LOW)

Diposit3ple = LOW; Diposit3mig = LOW; Diposit3minim = LOW; Diposit3buit = HIGH;

if ( SensorDalt4 == LOW && SensorMig4 == LOW && SensorBaix4 == LOW)

Diposit4ple = LOW; Diposit4mig = LOW; Diposit4minim = LOW; Diposit4buit = HIGH;

Page 70: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

70

La funció de NivellDipòsits, avalua l'estat en que es troba cada dipòsit i activa la variable

corresponent a aquest estat.

La funció del reg manual avalua si la zona que es vol regar està activada i el dipòsit

corresponent està ple per tal de procedir a obrir la electrovàlvula.

void RegManual()

if ( RegManual1 == HIGH && Diposit1buit == LOW)

digitalWrite( Ev1 , HIGH);

else

digitalWrite( Ev1 , LOW);

if ( RegManual2 == HIGH && Diposit2buit == LOW)

digitalWrite( Ev2 , HIGH);

else

digitalWrite( Ev2 , LOW);

if ( RegManual3 == HIGH && Diposit3buit == LOW)

digitalWrite( Ev3 , HIGH);

else

digitalWrite( Ev3 , LOW);

if ( RegManual4 == HIGH && Diposit4buit == LOW)

digitalWrite( Ev4 , HIGH);

else

digitalWrite( Ev4 , LOW);

Page 71: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

71

La funció de reg automàtic, comprova si és l'hora en que està programat el reg i si la terra no

està per sobre del nivell d'humitat fixat, a partir d'aquí comprova quines zones estan activades i

si els dipòsits corresponents contenen aigua i activa el reg durant els minuts preestablerts.

void RegAutomatic()

if (Hora == Horareg)

if (LecturaHumitatescalada < HumitatReg)

if ( Minuts < Tev1 && Zona1 == HIGH && Diposit1buit == LOW)

digitalWrite( Ev1 , HIGH);

else

digitalWrite( Ev1 , LOW);

if ( Minuts < Tev2 && Zona2 == HIGH && Diposit2buit == LOW)

digitalWrite( Ev2 , HIGH);

else

digitalWrite( Ev2 , LOW);

if ( Minuts < Tev3 && Zona3 == HIGH && Diposit3buit == LOW)

digitalWrite( Ev3 , HIGH);

else

digitalWrite( Ev3 , LOW);

if ( Minuts < Tev4 && Zona4 == HIGH && Diposit4buit == LOW)

digitalWrite( Ev4 , HIGH);

else

digitalWrite( Ev4 , LOW);

Page 72: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

72

8.3.3- Comunicació hort

La part de comunicació de la zona d'agricultura és una de les parts fonamentals de la pàgina web

ja que ens permet controlar per complet el reg de les diferents zones.

Està dividida en quatre taules que corresponen a les quatre zones de les que consta l'hort.

Cada zona es presenta en pantalla de la seguent manera :

Figura 44 - Visualització web zona horts

Hi trobem el títol que ens indica a quina zona de l'hort correspon el control.

Al costat de "MANUAL" trobem un botó que ens permet activar o desactivar el reg manual de

cada zona i alhora ens mostra l'estat en que es troba aquella zona.

Al costat de "AUTOMÀTIC" trobem dos botons de ON i OFF que ens permeten activar o

desactivar el reg automàtic de cada zona i que es posen en ver quan estan activats o en vermell

si estan desactivats.

A la cel·la de TIME podem escollir el temps durant el qual es vol estar regant en mode

automàtic simplement fent click sobre el botó "+" o "-" per incrementar o decrementar aquest

temps.

Per últim ens mostra informació de com es troba el dipòsit de cada zona, indicant-nos la

quantitat d'aigua que queda o si es troba buit.

Page 73: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

73

client.print("<h3>Zona Hort 1<h3>");

client.print("</td></tr>");

client.print("<tr><td ><center>");

client.print("<h3>MANUAL<h3>");

client.print("</td>");

client.print("<td>");

client.print("<center>");

if (RegManual1 == HIGH)

client.print("Zona 1 ON");

client.println("<br />");

client.println("<br />");

client.print("<button>");

client.print("<a href=\"/?manual1off\"\"<button style='font-size:120%; align : 'center'>OFF</a>");

client.print("</button>");

else

client.print("Zona 1 OFF");

client.println("<br />");

client.println("<br />");

client.print("<button >");

client.print("<a href=\"/?manual1on\"\"<button style='font-size:120%; align : 'center'>ON</a>");

client.print("</button>");

if (readString.indexOf("?manual1on") > 0)

RegManual1 = HIGH;

if (readString.indexOf("?manual1off") > 0)

RegManual1 = LOW;

client.print("</td>"); client.print("<td>");

client.print("<center>");

client.print("TIME");

client.print("</center>");

client.print("</td>");

client.print("<td>");

client.print("Nivell dipòsit 1:");

client.print("</td></tr>");

client.print("<tr><td><center>");

client.print("<h3>AUTOMÀTIC<h3>");

client.print("</td>");

client.print("<td>");

if (Zona1 == HIGH)

client.print("<button>");

client.print("<a href=\"/?zona1on\"\"<button style='font-size:100%; background-color:greenyellow;

color:blue; '>ON</a>");

client.print("</button>");

client.print("<button>");

client.print("<a href=\"/?zona1off\"\"<button style='font-size:100%;background-color:red'>OFF</a>");

client.print("</button>");

Page 74: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

74

else

client.print("<button>");

client.print("<a href=\"/?zona1on\"\"<button style='font-size:100%;background-color:red'>ON</a>");

client.print("</button>");

client.print("<button>");

client.print("<a href=\"/?zona1off\"\"<button style='font-size:100%; background-color:greenyellow;

color:blue;'>OFF</a>");

client.print("</button>");

if (readString.indexOf("?zona1on") > 0) Zona1 = HIGH;

if (readString.indexOf("?zona1off") > 0) Zona1 = LOW;

client.print("</td>");

client.print("<td>");

client.print("<button>");

client.print("<a href=\"/?Time1on\"\"<button style='font-size:80%;'>-</a>");

client.print("</button>");

client.print(+ " ") ;

client.print(Tev1);

client.print(+ " ") ;

client.print("<button>");

client.print("<a href=\"/?Time1off\"\"<button style='font-size:80%;'>+</a>");

client.print("</button>");

client.print("</td>");

if (readString.indexOf("?Time1on") > 0) Tev1 = Tev1 - 1;

if (readString.indexOf("?Time1off") > 0) Tev1 = Tev1 + 1;

client.print("<td>");

client.println("<center>");

if ( Diposit1ple == HIGH) client.println("100%");

if ( Diposit1mig == HIGH) client.println("50%");

if ( Diposit1minim == HIGH) client.println("10%");

if ( Diposit1buit == HIGH) client.println("0%");

client.print("</center>");

client.print("</td></tr>");

client.println("<br />");

client.print("</table>");

Page 75: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

75

8.4- Alarma

Es parteix d'un disseny de l'alarma ja dissenyada de la següent manera :

Sistema d’alarma mitjançant sensors de rajos infrarojos

Un sensor d'infraroig és un dispositiu electrònic capaç de mesurar la radiació

electromagnètica infraroja del cossos que es troben en el seu camp de visió. Tots el

cossos refracten una certa radiació, aquesta radiació resulta invisible per als nostres ulls però no

per aquests aparells electrònics, ja que a l'espectre es troba just per sota del rang de la llum

visible.

Sensors passius

Està format únicament pel fototransistor amb la tasca de mesurar

les radiacions provinents dels objectes.

Sensors actius

Es basen en la combinació d'un emissor i un receptor pròxims entre ells,

normalment formen part d'un mateix circuit integrat. L'emissor és un díode

LED infraroig (IRED) i el component receptor és el fototransistor.

Figura 45 - Vista barrera sensor infraroig

AVANTATGES INCONVENIENTS

Fàcil configuració

Cost relativament baix

Àrea de detecció reduïda

No disposa d'antianimals.

Sensible a canvis de llum (Barrera reflectida)

Page 76: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

76

Els elements es distribueixen de la següent manera :

Figura 46 - Distribució d'elements de l'alarma

Page 77: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

77

Elements que composen la instal·lació

A continuació, es descriuran els diferents components del sistema d’alarma que s’ instal·laran i

quines són les seves especificacions tècniques i característiques.

1-Detectors de rajos infrarojos exteriors

Detecció de rajos infrarojos actius, utilitzant un

gran calibre conjuntada a una lent esfèrica.

La modulació al aire lliure guany automàtic de

multi-rajos.

Lent òptica es pot ajustar més ràpid i còmodament

Circuits de filtres especials, interferències anti-

reflexes.

Circuit de AGC, el detector augmenta

automàticament la sensibilitat quan es troba

afrontant a dures condicions.

Quan el feix esta bloquejat, dispara la alarma.

Especificacions

Distancia al aire lliure: 20m

Detecció significa: fotoelèctrica detector de feix

Numero de feixos :2

Font de llum : LED

Infraroig velocitat de resposta : 50-700m/s

Sortida d’ alarma : Sortida de senyal de commutació ( NO/NC )

Energia i voltatge: DC13.8-24V / AC 11-18V.

Corrent de treball: 40mA

Ajust de nivell de l’angle : 180º (+- 90º)

Material : Plàstic

Mida: 175 x 85 x 85 mm

Pes: 520g

Tipus d’ embalatge: Caixa de color

El paquet inclou: Manual d’ usuari, bisos.

Pes del producte: 1.26Kg

Aquest sensor es connectarà directament a una entrada del arduino.

Figura 47 - Barrera infraroja

Page 78: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

78

2 - Sirena amb llum per sistema d’alarma color vermell

La funció de la sirena es simplement dissuasiva degut a que la finca s’ ubica apartada del nucli

urbà i no permet alertar a altres persones. Per tant amb sola sirena serà suficient.

Figura 48 - Sirena d'alarma

Color: Meitat superior vermella, meitat inferior blanc

Sirena: 105dB / 500mA

Tensió nominal: 12V DC

Freqüència de parpelleig: 150 vegades / minut

Mida 122x73x45mm

El paquet inclou:

1 Sistema d’ alarma de seguretat

2 Cargols per a l’ instal·lació

Aquest element terminal, es connectarà directament a una sortida de l'arduino.

Page 79: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

79

8.4.1- Programació alarma

VARIABLE DESCRIPCIÓ

int Talarma = 1; Temps durant el que l'alarma està sonant

int T1h;

int T1m;

int T1d;

int T1M;

int T1a;

Definició del temps en el que ha saltat l'alarma

byte AlarmaDetecta =

LOW; S'activa quan l'alarma detecta

byte AlarmaActivada =

LOW; S'activa i desactiva manualment en xarxa

const int Alarma = 5; Pin de sortida de la sirena de l'alarma

La part del programa de l'alarma funciona per interrupcions, és a dir, cada vegada que el sensor

detecta presència, capturem la senyal i la enviem al pin 2 de l'arduino que correspon a la

interrupció numeró1 d'aquest. Un cop tenim la connexió feta, determinem com volem que

s'activi aquesta interrupció i ho fem amb la detecció d'un flanc de pujada amb la instrucció

RISING.

La subrutina d'interrupció ens activa la variable de AlarmaDetecta per saber que ha saltat la

alarma i ens activa la sirena.

void Interrupcio_Alarma()

if ( millis() > T0 + 250)

contador++ ;

T0 = millis();

if (AlarmaActivada == HIGH)

digitalWrite( Alarma , HIGH);

T1h = Hora;

T1m = Minuts;

T1d = Dia;

T1M = Mes;

T1a = Any;

AlarmaDetecta = HIGH;

attachInterrupt(1, Interrupcio_Alarma RISING);

Page 80: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

80

La funció que determina el funcionament de l'alarma és la següent :

Aquesta funció deixa que soni la alarma fins que ha passat el temps preestablert per la variable

Talarma i un cop ha passat aquest temps, l'apaga, grava un registre a la tarja SD i torna a quedar

a l'espera de que el sensor torni a detectar per tornar a començar el procés de nou.

void SistemaAlarma()

if (AlarmaDetecta == HIGH && AlarmaActivada == HIGH && Minuts > T1m + Talarma )

digitalWrite( Alarma , LOW);

AlarmaDetecta = LOW ;

Serial.print ("L'alarma ha sonat a les ");

Serial.print(+ " ") ;

Serial.print (T1h);

Serial.print(+ ":") ;

Serial.print (T1m);

Serial.println ("");

myFile = SD.open("test.txt", FILE_WRITE);

if (myFile)

myFile.print ("L'alarma ha sonat a les ");

myFile.print(+ " ") ;

myFile.print (T1h);

myFile.print(+ ":") ;

myFile.print (T1m);

myFile.print (+ " ");

myFile.print ("del ");

myFile.print(+ " ") ;

myFile.print (T1d);

myFile.print (" / ");

myFile.print (T1M);

myFile.close();

Page 81: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

81

8.4.2- Comunicació alarma

La part de comunicació de l'alarma ha de permetre al usuari rebre notificacions en el moment en

que es detecta la presencia d'algun intrús.

Degut a varis problemes, aquesta part queda pendent per un treball futur d'ampliació ja que la

comunicació amb l'exterior no depèn de nosaltres sinó del proveïdor d'Internet.

Per altre banda, per poder implementar el sistema d'alarma amb avisos al exterior s'ha de

contractar una línea de dades amb IP fixa que presenta un cost de 18,75€ i per el moment el

client està valorant la opció ja que és un cost fixa cada mes i primer vol comprovar si el simple

efecte dissuasori de la sirena i l'avís i posterior registre en la pàgina web és suficient o si

realment és necessari implementar el sistema d'alerta via e-mail.

De moment la comunicació amb la pàgina web, ens mostra per pantalla quan ha sonat la alarma

al mateix temps que guarda un registre a la tarja SD.

També es disposa d'un botó d'activació i desactivació manual

ja que sinó l'alarma sonaria sempre que es traspasses la

barrera infraroja i l'usuari no podria accedir mai al recinte

sense fer-la sonar.

client.print("<table border = 5 align= 'center' bgcolor='#F5F6CE' ><tr><td>");

client.println("<center>");

if (AlarmaActivada == HIGH)

client.print("ALARMA ACTIVADA");

client.println("<br />");

client.println("<br />");

client.print("<button>");

client.print("<a href=\"/?alarmaoff\"\"<button style='font-size:100%'; >DESACTIVAR</a>");

client.print("</button>");

if (readString.indexOf("?alarmaon") > 0) AlarmaActivada = HIGH;

if (AlarmaActivada == LOW)

client.print("ALARMA DESACTIVADA");

client.println("<br />");

client.println("<br />");

client.print("<button>");

client.print("<a href=\"/?alarmaon\"\"<button style='font-size:100%';>ACTIVAR</a>");

client.print("</button>");

if (readString.indexOf("?alarmaoff") > 0) AlarmaActivada = LOW;

Figura 49 - Visualització web alarma

Page 82: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

82

9- PLACA D'ADAPTACIÓ DE SENYALS

Degut a la incompatibilitat entre els diferents perifèrics i el sistema de control s'ha hagut de

dissenyar una placa per adaptar aquestes senyals ja que molts dels perifèrics treballen amb

tensions de 12V i en canvi el sistema de control ho fa sempre per sota de 5V.

Per aquest motiu, a grans trets s'han dissenyat 2 tipus de circuits bàsics.

El primer circuit serveix per entrar tensions superiors a 5V a l'arduino mitjançant un simple

divisor de tensió. S'ha decidit fer ús d'un divisor de tensió i no d'un sistema més complex ja que

el temps durant el que aquest està treballant és molt baix i s'han escollit resistències altes per tal

minimitzar la intensitat que hi circula.

Figura 50 - Circuit divisor de tensió

Càlculs :

Fixem una de les resistències :

R1 = 1MΩ

Sabem que la tensió d'entrada són 12V i a la sortida volem 5V

𝑉𝑜 =R2

R1+R2· Vi => 12 =

R2

1M+R2· 5 => 𝑅2 = 714 𝐾Ω

El valor comercial de resistència més pròxim a 714kΩ és 680kΩ que ens proporciona una

tensió de sortida de 4,85V que és un valor suficient i s'evita el dany del dispositiu ja que la

tensió mai supera el llindar de 5V.

Page 83: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

83

El segon circuit fa exactament el contrari que el divisor de tensió, és a dir que mitjançant una

tensió d'entrada de 5V proporcionada per una sortida de l'arduino, es controla un relé que activa

o desactiva els diferents contactes connectats a 12V.

Figura 51 - Circuit de relés

Aquest circuit funciona mitjançant la conducció d'un transistor que s'activa per la seva base

connectada a un pin de sortida de l'arduino, quan la base rep tensió, el transistor es troba en

conducció i deixa passar corrent entre col·lector i emissor, la qual activa la bobina del relé i mou

el contacte de la posició Normalment Tancat a Normalment Obert, cosa que fa que s'activi

l'element connectat a aquest contacte.

La placa general completa consta de 3 circuits divisors de tensió i 5 sortides per a relay. Tota la

resta de la placa són regletes de connexió que faciliten la interacció entre les diverses plaques i

elements.

Page 84: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

84

Les següents imatges ens mostren la placa PCB del circuit i el fotolit :

Figura 52 - Placa PCB Adaptació de senyals

Figura 53 - Fotolit Placa Adaptació de senyals

Page 85: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

85

10- COMUNICACIÓ

10.1- Objectius

L'objectiu de comunicar el nostre dispositiu és ser capaços de transmetre dades desde la zona on

es troba el terreny a qualsevol dispositiu amb connexió a internet.

És a dir, per a fer-ho, l'arduino funciona com un servidor i ens penja la nostra pàgina de

configuració i control del sistema a la xarxa, i des de qualsevol altre dispositiu, ens connectem

com a clients a la pàgina en questió per a tal de poder fer les gestions que vulguem.

Per altre banda, el sistema conté l'alarma que és un element vital i no pot dependre de la

connexió d'un client per notificar els seus avisos, per tant ha de ser el propi servidor que

notifiqui aquests canvis de manera immediata a l'usuari. En aquest cas, cada cop que salta

l'alarma, l'Arduino a part de mostrar-ho a la pàgina de configuració i control envia un e-mail a la

direcció especificada per tal de notificar immediatament a l'usuari de que ha saltat el dispositiu

anti intrusos.

Page 86: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

86

10.2- Tecnología

La primera opció que es va triar per a fer la comunicació entre l'arduino i la resta de dispositius

en xarxa va ser la utilització d'un shield Arduino especial per a comunicació 3G (Sim800L GSM

module).

Aquest dispositiu va tardar gairebé 2 mesos en arribar per correu, mentrestant la opció que es va

seguir per continuar treballant va ser la utilització del shield ethernet i un router vell per crear

una xarxa local i comunicar qualsevol dispositiu que estigués connectat a ella.

Un cop es disposava ja de la placa de comunicació de l'arduino es van fer varies proves totes

elles sense èxit de comunicació amb altres dispositius i degut a que la programació es trobava en

un punt molt avançat, es va apartar la placa de comunicació i es va optar per buscar una

alternativa.

L'alternativa va ser utilitzar un Router 3G, això feia que simplement canviant el Router, el

programa fós el mateix i simplement s'hagués de configurar el nou router.

Figura 54 - Esquema comunicació

Page 87: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

87

10.2.1- Proves de comunicació

La primera prova que es va dur a terme per a visualitzar en una pàgina web informació rebuda

de l'Arduino va ser comunicar-lo mitjançant un programa de prova que ja ve incorporat en

l'entorn de programació el qual llegia les diferents entrades analògiques de l'Arduino i ens les

mostrava en una direcció IP on en un futur estarà allotjat el nostre servidor.

Figura 55 - 1a prova comunicació

Un cop les proves havien funcionat correctament es va procedir a la modificació del programa

predeterminat per les diferents coses que havia de mostrar a la pàgina web l'Arduino.

Figura 56 - 2a prova comunicació

Un cop arribat aquest punt i després de anar provant diferents elements per comunicar com

pulsadors, leds... es va considerar suficient per començar a dissenyar la pàgina web ja que totes

les proves van ser un èxit i es podia gobernar l'Arduino desde la pàgina web facilment així com

també l'Arduino enviava les dades a la pàgina sense cap tipus de problema.

Page 88: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

88

10.3- Entorn web

Per a la realització de la pàgina web es va optar per utilitzar el llenguatge html, per a fer-ho vaig

haver d'aprendre aquest llenguatge perquè era un llenguatge que mai havia tocat. Entre un

company enginyer informàtic i l'ajuda de diversos llocs web i projectes similars vaig ser capaç

de crear la pàgina web en qüestió.

A continuació trobem les etiquetes bàsiques que s'han fet servir per a la realització del

programa.

ETIQUETA DESCRIPCIÓ

<!DOCTYPE> És l'etiqueta que defineix el tipus de document HTML que s'utilitza.

<html> És l'arrel de qualsevol document HTML

<head> Defineix la capçalera del document

<body> Defienix el cos del document

<title> Defineix el títol de la pàgina

<h1,2,3> Capçaleres del document amb diferents mides

<div> Divisions estructurals de la pàgina

<p> Paràgraf

<br> Salt de linea

<table> Indica el començament d'una taula

<tr> Nova Fila

<td> Nova cel·la

<button> Crea un botó

Poc a poc la pàgina web va anar prenent la forma desitjada a mesura que anaven avançant les

parts del projecte i es donava per valida cada una de les parts si acomplia amb èxit la seva

missió.

Tot seguit es mostren un conjunt d'imatges de com va anar evolucionant la pàgina web.

Page 89: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

89

Una de les primeres proves on es començaven

a diferenciar els estils dels títols, manejar

colors o diferents posicions de la pantalla.

En aquesta prova es comença a interactuar

amb l'arduino i mostrar la informació a la web.

En aquest punt es comencen a definir els

primers botons que controlen entrades i

sortides de l'Arduino.

Aquí ja es comença a estructurar la pàgina

web en taules i a diferenciar les diverses zones

de la pàgina.

Aquí ja s'interactua en ambdos sentits de la

comunicació i es té la pàgina completament

estructurada.

En aquest punt simplement es comença a

donar la imatge i la manera en que l'usuari

visualitzarà l'entorn.

Figura 57 - Creació pàgina web

Page 90: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

90

Finalment ja es considera la pàgina acabada on podem observar tres zones diferents :

HORT

En aquesta part es controla tot el que té a veure amb l'apartat d'agricultura, com

l'activació o desactivació de les diverses zones, el temps de reg o l'estat dels

dipòsits.

CONTROL

És la zona des de la qual es governa l'alarma i es controla la menjadora o l'estat

de les bateries.

COMUNICACIÓ

En aquest apartat és on l'Arduino ens mostra a temps quasi real diversa

informació com la humitat de la terra o l'estat del pastor elèctric.

Figura 58 - Pàgina web final

Page 91: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

91

11- PLANIFICACIÓ INICIAL VS FINAL

BLOC TREBALL INICIAL FINAL 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

PE

RIF

ÈR

ICS

PA

ST

OR

Estudi Pastor existent

Programació sistema detecció falles

Muntatge complert Pastor elèctric

ME

NJ

AD

OR

ES

Recerca d'informació sobre menjadores animals

Valoració i elecció tecnologia

Tria de components i disseny

Muntatge Menjadores

SIS

TE

MA

CO

NT

RO

L

CO

NT

RO

L

Cerca d'informació tecnologies de sistemes de control del

sistema

Valoració i elecció tecnologia segons criteris

Tria de components i disseny

Probes de funcionament

Programació

Muntatge

CO

MU

NIC

AC

RO

UT

ER

Recerca d'informació de tecnologies de transmissió dades

segons requisits del sistema

Valoració i elecció tecnologia segons criteris

Tria de components i disseny

Probes de funcionament

PR

OG

R

AM

AC

I

Ó

Programació entorn PC segons demandes del sistema (

nivells, menjar...)

Desenvolupament aplicació mòbil o Internet

ME

RIA

RE

DA

CC

IÓ Redacció bàsica

Redacció completa

Ajustos de formats

Page 92: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

92

12- DESPESES

PART ELEMENT PREU QT. SUBTOTAL

MENJADORA

Menjadora Taurus 295,85 1 295,85

Sensor motor 8 1 8

Tubs 12 1 12

Cablejat 18 1 18

Mecanitzat 5,25 1 5,25

PASTOR

Sensor 6,75 1 6,75

Cablejat 16,1 1 16,1

Mecanitzat 2,35 1 2,35

HORT Compra externa 201,26 1 201,26

ALARMA Compra externa 39,74 1 39,74

ENERGÍA Compra externa 1125,80 1 1125,80

PLACA ADAPTACIÓ

Rele 4,35 5 21,75

Placa baquelita 3,12 1 3,12

Regletes 0,35 20 7

Potenciómetre 0,19 1 0,19

Àcid 8,65 1 8,65

Revelador 4,02 1 4,02

Cables 3,14 1 3,14

Resistencies 1,8 65 117

Transistors 0,75 10 7,5

COMUNICACIÓ Tarja Vodafone 15 1 15

Router TPLINK 114,52 1 114,52

GENERAL Arduino Mega 11,27 1 11,27

Placa ethernet 9,5 1 9,5

ENGINYERIA Hores de feina 12 400 4.800

DESPESES INDIRECTES

LLum, aigua, gasoil, etc

4 400 1.600

TOTAL 8.443,76 €

Page 93: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

93

13- BIBLIOGRAFIA

Llocs

visitats

Fira agrícola de Mollerussa

Diotrónic

Onda Radio

Electrónica Martorell

Setnoc 2000 informàtica

Informàtica Sesrovires

Llibres

Consultats

Apunts UPC

Edicions UPC

Manual programació Router TP-LINK

Manual KiCad

Manual LTSpice

Enllaços

Arduino - Home, 2016. Arduino.cc [online],

Arduino UNO - RTC Reloj de Tiempo Real, 2016. YouTube [online],

Buy Products Online from China Wholesalers at Aliexpress.com,

2016. Es.aliexpress.com [online],

Cómo ejecutar código JavaScript en Arduino - whiledev, 2014. whiledev [online],

Control de Arduino desde Internet | Tutoriales Arduino, 2016. Prometec.net [online],

El riego subterraneo, 2016. Gardencenterejea.com [online],

Gota a gota por gravidade, 2016. YouTube [online],

Group, The, 2016, Downloads. Gort.io [online]. 2016. [Accessed 8 June 2016]. Available

from: http://gort.io/documentation/getting_started/downloads/

How to remotely enable/disable a LED on your Arduino using PHP and Processing | The

project pages, 2016. Projects.sindrelindstad.com [online],

How to remotely enable/disable a LED on your Arduino using PHP and Processing | The

project pages, 2016. Projects.sindrelindstad.com [online],

Instalar un riego automático de jardín - Bricomanía, 2016. hogarmania.com [online],

La Granja Automática - Comedero ANIBAL para Caballos,

2016. Lagranjaautomatica.com [online],

Maquinaria, Equipamiento, industrial, Equipamiento and pi, Detalles, 2016, Módulo sensor

de humedad del suelo tierra - higrómetro para suelos -raspberry pi. eBay [online]. 2016.

[Accessed 8 June 2016]. Available from: http://www.ebay.es/itm/Modulo-sensor-de-

humedad-del-suelo-tierra-higrometro-para-suelos-raspberry-piOthers.

Page 94: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

94

Lightinthebox&trade;, 2016, [€2.99] módulo ds3231 alta precisión de reloj en tiempo real -

azul (3.3 ~ 5.5v). Miniinthebox.com [online]. 2016. [Accessed 8 June 2016]. Available

from: http://www.miniinthebox.com/es/modulo-ds3231-alta-precision-de-reloj-en-

tiempo-real-azul-3-3-5-5v_p4536384.html?pos=ultimately_buy_3&prm=2.3.5.0

Pastor, Javier, Penalva, Javier, Jiménez, Javier, González, María, Pastor, Javier, Pastor,

Javier, Jiménez, Javier, Puerto, Kote, Puerto, Kote, Pastor, Javier and Pastor, Javier,

2016, Xataka. Xataka.com[online]. 2016. [Accessed 8 June 2016]. Available from:

http://www.xataka.com/

Riego por goteo, 2016. Es.wikipedia.org [online],

Sistemas y/o tipos de riego, 2012. Es.slideshare.net [online],

Te de bocas iguales 20 mm Ref. 12166756 - Leroy Merlin, 2016. Leroymerlin.es [online],

Ti.1, Comedero, 2016, Comedero automático para caballos Taurus Ti.1. COMEDEROS

TAURUS[online]. 2016. [Accessed 8 June 2016]. Available from:

http://www.comederos-automaticos-taurus.es/comederos-para-caballos/18-comedero-

automatico-para-caballos-taurus-ti1.html

TOLVA AUTOMATICA PARA CABALLOS, 2016. Tiendaganadera.com [online],

V, Jose, 2014, Robot Styles: ¡¡Que me mojo!! - Sensor de Humedad en

suelo.Robotstyles.blogspot.com.es [online]. 2014. [Accessed 8 June 2016]. Available

from: http://robotstyles.blogspot.com.es/2014/07/que-me-mojo-sensor-de-humedad-en-

suelo.html

Valenzuela, Pablo, 2013, 2 detectores de rayos infrarrojos Distancia exterior: 20m, interior:

60m.Ilevante.com [online]. 2013. [Accessed 8 June 2016]. Available from:

http://www.ilevante.com/2-detectores-de-rayos-infrarrojos-distancia-exterior-20m-

interior-

60m?utm_source=merchant_center&utm_medium=cpc&utm_term=shopping&utm_cam

paign=GoogleShopping&gclid=CjwKEAiA8qG1BRDz0tmK0pufw3QSJACfn6olKObM

5lLvOf4f0S5vCQhuTdJFOarMwuyJa3uR0FlbqhoCWjTw_wcB

W3Schools Online Web Tutorials, 2016. W3schools.com [online],

Wikipedia, 2016. Wikipedia.org [online],

Page 95: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

95

14- CONCLUSIONS

Page 96: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

96

15- ANNEX TREBALLS FUTURS

15.1- Alarma amb connexió al exterior i accés web des de red externa

El treball complet constaria d'una alarma amb connexió a qualsevol dispositiu en xarxa aixi com

també l'accés a la pàgina web.

Durant la realització del treball ha sigut una de les principals dificultats ja que el client

demanava algú econòmic i les opcions valorades no oferien aquesta possibilitat així com també

eren bastant complexes d'implementar.

A continuació s'explica el motiu per el qual s'ha deixat pendent aquesta part del projecte mentre

el client valora la seva viabilitat.

El sistema funciona perfectament en una xarxa local ja que coneixem la direcció IP del router i

hi podem accedir fàcilment sense cap mena de problema. Però al tractar-se d'un router amb

connexió a Internet via 3G hi ha uns passos entremitjos que no depenen de nosaltres sinó que

depenen del proveïdor d'Internet, en aquest cas Vodafone.

En el següent diagrama podem veure les connexions necessàries i els tipus d'accés :

Figura 59 - Esquema connexió Internet

Page 97: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

97

El nostre servidor que en aquest cas és l'arduino, allotja la pàgina web en una direcció IP, per

tant, quan nosaltres i volem accedir des de un dispositiu connectat a la mateixa red que ens

proporciona el router 3G no tenim cap mena de problema ja que coneixem la direcció IP a la

qual es troba el nostre servidor (IP_3).

El problema resideix en quan nosaltres volem conèixer la nostra IP pública per accedir-hi desde

una red externa.

Les companyies telefòniques tenen un nombre limitat de IP's que han comprat (IP_1) però no

són suficients per a tots els usuaris de la companyia, per tant el que fan és alternar diferents IP's

i assignar-les als usuaris segons les demandes que tingui la companyia, es a dir que no podem

saber quina és la nostra IP pública ja que aquesta va canviant segons li interessa a la companyia.

La possible sol·lució que s'ha valorat i que el client es troba en fase de valoració i acceptació és

la de demanar al proveïdor d'Internet que ens assigni a la nostra tarja amb connexió 3G una IP

fixa per tal de poder-la conèixer i accedir-hi de de qualsevol dispositiu amb connexió a Internet.

El client està valorant aquesta opció ja que aixó afegiria un cost extra a la pròpia tarifa mensual

de dades per la connexió a Internet i només es serveixen IP's fixes a empreses.

Per tant el cost total per rebre les notificacions de l'alarma i poder accedir a la pàgina web desde

l'exterior es veu incrementat notablement ja que el cost d'una IP fixa és de 18,75 € / mes als

quals s'ha de sumar la tarifa de dades que varia des de els 15€/ mes fins als 45€/mes.

Per tant un cop plantejada la opció al client, es queda a l'espera d'una resposta per part seva i

començar els tràmits per una tarja amb IP fixa amb l'empresa Vodafone.

Page 98: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

98

16- ANNEX PLANOL

Page 99: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

99

Page 100: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

100

17- ANNEX REALITZACIÓ PLAQUES PCB

Per a la realització de les plaques del sensor del pastor com la d'adaptació de senyals s'ha decidit

aprofitar coneixements previs d'electrònica en realització de PCB's ja que es disposa de tots els

materials per a fer-ho.

A continuació es detalla el procés seguit per a la realització d'aquestes :

En primer lloc s'ha escollit el programa lliure KIKAD per al disseny del circuit :

El primer pas per a la realització d'una placa és crear un nou projecte. Obrim la pestanya

"Proyectos" i la opció "Nuevo...".

Figura 60 - Nou projecte Kikad

Un cop s'ha donat el nom al nou projecte, trobem 4 botons al menú principal :

Figura 61 - Menú principal Kikad

Page 101: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

101

Es comença amb la realització de l'esquema del circuit fent clic al botó "Esquemàtic" i se'ns

obre una pantalla com la següent :

Figura 62 - Esquemàtic Kikad

A la part esquerra de la pàgina trobem la barra de configuració on entre altres coses podem

escollir la mida de la reixeta i les unitats de mesura.

A la part dreta de la pàgina, trobem la barra d'eines que ens permet afegir elements al nostre

circuit així com també realitzar les connexions.

Per afegir un nou element al circuit ho fem escollint el botó "Place component" i a continuació

fem que ens mostri una llista de biblioteques amb els components desitjats.

Figura 63 - Selecció de components Kikad

Page 102: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

102

Dins de les diferents biblioteques trobem la majoria d'elements necessaris per a la realització de

circuits bàsics. En cas de no trobar-lo, també es pot crear des de zero a gust de l'usuari fent clic

al botó "Editor de componentes y bibliotecas". En el cas del circuit en qüestió s'ha hagut de

crear el relé ja que el model que tenim no coincidia amb cap model dels existents a les diferents

biblioteques.

Figura 64 - Components Kikad

Tot seguit es crea l'alimentació del circuit amb el botó "Place power port" i un cop tenim tots els

elements disposats sobre l'esquema es procedeix a la connexió entre ells amb el botó "Place

line".

Figura 65 - Alimentació circuit Kikad

Page 103: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

103

En aquest punt ja tenim el circuit connectar i procedim a numerar tots els elements i a afegir

valor i nom a tots ells. Existeix el botó "Numerar componentes" que ho fa de manera automàtica

i facilita la feina. Un cop tenim tots els elements amb el seu nom i el valor, es crea una

NETLIST amb el botó "Netlist".

Figura 66 - Creació Netlist Kikad

Un cop s'ha acabat el disseny de l'esquemàtic del circuit ja podem tancar la pestanya

"Esquemàtic" i obrir la següent pestanya d' "Associació components / mòduls" que ens permetrà

dir en quin format volem l'encapsulat de cada element del nostre circuit. La pestanya ens mostra

una llista de mòduls des d'on hem de seleccionar el que volem associar a cada component, i de

la mateixa manera que teníem la opció de crear components per a l'esquemàtic, aquí també

podem crear mòduls amb la pestanya "New module".

Figura 67 - Mòduls components Kikad

Page 104: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

104

Un cop tenim associats tots els components amb l'encapsulat corresponent, ja podem tancar la

pestanya d ' "Associació de components / mòduls " i passar a la pestanya d'edició de PCB on

completarem la placa amb el nostre circuit.

Obrim la pestanya "PCB new" i a la botonera busquem "Leer Netlist" i seleccionem la Netlist

que hem generat anteriorment.

Figura 68 - Creació PCB Kikad

A la part dreta d' aquesta pàgina trobem la barra d'elements on podem afegir pistes, vies,

contorns... i a la part esquerra podem configurar la reixeta de fons...les marques de pistes, la

seva mida... Així dons anem muntant el circuit segons les nostres preferències.

Figura 69 - PCB kikad

Page 105: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

105

Quan tenim el circuit muntat, podem fer una visualització en 3 dimensions per comprovar que el

circuit és correcte.

Figura 70 - Visualització 3D Kikad

I aquí podem donar per acabat el disseny de la placa PCB.

El següent pas és crear el fotolit del circuit, per a fer-ho s'imprimeix un PDF amb les capes que

necessitem en un sol full i ho imprimim sobre un paper fotolit amb una impressora tòner ja que

amb una de tinta no s'adhereix correctament.

Figura 71 - Fotolits PCB

Page 106: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

106

Ara ja tenim els fotolits llestos i el següent pas és isolar-los.

Per a fer els següents passos disposem de material a casa tot i que també es pot portar a una

empresa que es dediqui a la impressió de PCB's. La següent manera que s'explica és de

fabricació pròpia.

Figura 72 - Material creació PCB

S'imprimeix el fotolit dues vegades i es solapen un amb l'altre per tal que sigui més opac i

garantir la correcta insolació de la placa. Agafem una placa PCB fotosensible positiva , fixem el

fotolit a sobre i el posem a insolar durant aproximadament 30 minuts en el cas que ens ocupa

perquè la insoladora està feta amb leds ultraviolats i un escàner vell.

Figura 73 - Insoladora

Page 107: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

107

Passada la mitja hora el següent pas és revelar el circuit i per a fer-ho submergim la placa en

líquid revelador i el removem una mica durant un parell de minuts aproximadament.

Figura 74 - Revelat PCB

En el procés de revelat deixem a la vista el circuit, que és la part on no hi ha incidit la llum de

manera directa, per tant, al treure la placa de la cubeta, ens queda una imatge del nostre circuit.

En aquest punt netegem la placa resultant amb una mica d'aigua per treure les impureses del

líquid revelador i poder-lo submergir en àcid que és el següent pas.

Page 108: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

108

Un cop tenim les plaques revelades les submergim durant un parell de minuts en un àcid que

ataca el metall sobrant.

Figura 75 - Àcid PCB

I en aquest punt ja tenim el circuit imprès en la placa PCB i podem passar al mecanitzat de la

placa.

Per començar amb el mecanitzat es comprova primer que les pistes no tenen continuitat entre

elles i que no hi ha cap error a la placa.

Figura 76 - Mecanitzat PCB

Page 109: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

109

A continuació es procedeix al taladrat i posteriorment es solden tots els elements.

Figura 77 - Pistes finals PCB

Es comprova que totes les tensions i senyals són correctes i ja es té la placa 100% funcional.

Figura 78 - PCB final

Page 110: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

110

18- ANNEX NORMATIVA ITC_BT-39

1. OBJETO Y CAMPO DE APLICACIÓN

El objeto de la presente Instrucción es determinar los requisitos particulares de las cercas

eléctricas para ganado, su alimentador y su instalación. Se entiende por cerca eléctrica para

ganado, a una barrera para animales que comprende uno o varios conductores formados por

hilos metálicos, barrotes o alambradas. Se entiende por alimentador de cerca eléctrica, al aparato

destinado a suministrar regularmente impulsos de tensión a la cerca a la que está conectado.

2. ALIMENTACIÓN

El alimentador de cerca eléctrica puede estar alimentado a su vez mediante una de las siguientes

formas: - Conectado a una red de distribución de energía eléctrica. - Conectado a baterías o

acumuladores cuya carga se realiza mediante una red de distribución de energía eléctrica. -

Conectados a baterías o acumuladores autónomos, es decir que no están destinados a ser

conectados a una red de distribución de energía eléctrica.

3. PRESCRIPCIONES PARTICULARES

Los alimentadores de cercas eléctricas conectados a una red de distribución de energía

eléctrica, deberán cumplir la norma UNE-EN 60.335-2-76 y su circuito de alimentación las

prescripciones de las ITC-BT-22, ITC-BT-23 e ITC-BT-24. Los alimentadores se colocarán en

lugares donde no puedan quedar cubiertos por paja, heno, etc., y estarán próximos a la cerca que

alimentan. Los conductores de la cerca estarán separados de cualquier objeto metálico no

perteneciente a la misma, de manera que no haya riesgo de contacto entre ellos. Los conductores

de la cerca y los de conexión de ésta a su alimentador no se sujetarán en apoyos

correspondientes a otra canalización, sea de alta o baja tensión, de telecomunicación, etc. Los

elementos de maniobra de las puertas de la cerca estarán aislados convenientemente de los

conductores de la misma y su maniobra tendrá por efecto la puesta fuera de tensión de los

conductores comprendidos entre los soportes laterales de la puerta.

Entre cercas que no estén alimentadas por un mismo alimentador, se tomarán medidas

convenientes para evitar que una persona o animal pueda tocarlas simultáneamente.

Normalmente se considera suficiente una separación de 2 m, entre los conductores de unas y

otras cercas.

Se colocarán carteles de aviso cuando las cercas puedan estar al alcance de personas no

prevenidas de su presencia y, en todo caso, cuando estén junto a una vía pública.

El mínimo de carteles será de uno por cada alineación recta de la cerca y, en todo caso, a

distancias máximas de 50 metros.

Page 111: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

111

Los carteles se colocarán en lugares bien visibles y preferentemente sujetos al conductor

superior de la cerca si la altura de éste sobre el suelo asegura esa visibilidad; en caso contrario,

se colocarán sobre los apoyos de los conductores, de manera que sean visibles tanto desde el

exterior como desde el interior del cercado.

Los carteles llevarán la indicación “CERCA ELÉCTRICA” escrito sobre un triángulo

equilátero de base horizontal con letras negras sobre fondo amarillo.

El cartel tendrá unas dimensiones mínimas de 105 × 210 milímetros y las letras 25 milímetros

de altura. La toma de tierra del alimentador de la cerca tendrá las características de “tierra

separada” de cualquier otra, incluso de la tierra de masa del mismo aparato. Cuando una cerca

eléctrica esté situada en una zona particularmente expuesta a los efectos de descargas

atmosféricas, el alimentador estará situado en el exterior de los edificios o en un local destinado

expresamente a él y se tomarán las medidas de protección apropiadas.

Page 112: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

112

19- ANNEX PROGRAMA COMPLET

////////////////////////////////////////////////////////////////////////

///////////CONFIGURACIÓ /////////

////////////////////////////////////////////////////////////////////////

#include <Time.h>

#include <EEPROM.h>

#include <Ethernet.h>

#include <SPI.h>

#include <SD.h>

////////////////////////////////////////////////////////////////////////

//GENERAL

////////////////////////////////////////////////////////////////////////

byte Hora ; // Hora actual

byte Minuts ; // Minuts actuals

byte Segons ; // Segons actuals

byte Dia;

byte Mes;

byte Any;

String readString;

volatile int contador = 0; // Anti rebots

int n = contador ;

long T0 = 0 ; // Variable global temps

int outputQuantity = 6; //Nombre maxim de sortides controlades en xarxa.

int outputAddress[6] = 2, 5, 36, 37, 38, 39; //Pins físics conectats a les sortides controlades en

xarxa

int inputQuantity = 13; //Nombre maxim de sortides controlades en xarxa.

int inputAddress[13] = 7, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33; //Pins físics conectats a les

sortides controlades en xarxa

File myFile;

byte ip[] = 192, 168, 1, 117;

//byte dns[] = 192, 168, 1, 117;

byte gateway[] = 192, 168, 1, 1;

byte subnet[] = 255,255,255,0;

byte mac[] = 0x90, 0xA2, 0xDA, 0x0F, 0x3C, 0xCF;

EthernetServer server(80); //Ethernet Port

Page 113: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

113

////////////////////////////////////////////////////////////////////////

//REG AUTOMATIC

////////////////////////////////////////////////////////////////////////

int Tev1 = 0 ; // Temps en minuts que la valvula ev1 està oberta

int Tev2 = 0 ; // Temps en minuts que la valvula ev2 està oberta

int Tev3 = 0 ; // Temps en minuts que la valvula ev3 està oberta

int Tev4 = 0 ; // Temps en minuts que la valvula ev4 està oberta

const int Ev1 = 36; // Sortida electrovalvula 1

const int Ev2 = 37; // Sortida electrovalvula 2

const int Ev3 = 38; // Sortida electrovalvula 3

const int Ev4 = 39; // Sortida electrovalvula 4

byte Horareg = 22 ; // Hora a la que es vol començar a regar

byte RegManual1 = LOW; // Reg manual zona 1

byte RegManual2 = LOW; // Reg manual zona 2

byte RegManual3 = LOW; // Reg manual zona 3

byte RegManual4 = LOW; // Reg manual zona 4

byte Zona1 = LOW; // Activació reg zona 1 hort

byte Zona2 = LOW; // Activació reg zona 2 hort

byte Zona3 = LOW; // Activació reg zona 3 hort

byte Zona4 = LOW; // Activació reg zona 4 hort

int SensorDalt1 = 0; // Lectura Sensor Dalt dipòsit 1

int SensorMig1 = 0; // Lectura Sensor Mig dipòsit 1

int SensorBaix1 = 0; // Lectura Sensor Baix dipòsit 1

int SensorDalt2 = 0; // Lectura Sensor Dalt dipòsit 2

int SensorMig2 = 0; // Lectura Sensor Mig dipòsit 2

int SensorBaix2 = 0; // Lectura Sensor Baix dipòsit 2

int SensorDalt3 = 0; // Lectura Sensor Dalt dipòsit 3

int SensorMig3 = 0; // Lectura Sensor Mig dipòsit 3

int SensorBaix3 = 0; // Lectura Sensor Baix dipòsit 3

int SensorDalt4 = 0; // Lectura Sensor Dalt dipòsit 4

int SensorMig4 = 0; // Lectura Sensor Mig dipòsit 4

int SensorBaix4 = 0; // Lectura Sensor Baix dipòsit 4

const int SD1 = 22; // Pin entrada sensor Dalt dipòsit 1

const int SMi1 = 23; // Pin entrada sensor Mig dipòsit 1

const int SB1 = 24; // Pin entrada sensor Baix dipòsit 1

const int SD2 = 25; // Pin entrada sensor Dalt dipòsit 2

const int SMi2 = 26; // Pin entrada sensor Mig dipòsit 2

const int SB2 = 27; // Pin entrada sensor Baix dipòsit 2

const int SD3 = 28; // Pin entrada sensor Dalt dipòsit 3

const int SMi3 = 29; // Pin entrada sensor Mig dipòsit 3

const int SB3 = 30; // Pin entrada sensor Baix dipòsit 3

const int SD4 = 31; // Pin entrada sensor Dalt dipòsit 4

const int SMi4 = 32; // Pin entrada sensor Mig dipòsit 4

const int SB4 = 33; // Pin entrada sensor Baix dipòsit 4

Page 114: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

114

byte Diposit1ple = LOW;

byte Diposit1mig = LOW;

byte Diposit1minim = LOW;

byte Diposit1buit = LOW;

byte Diposit2ple = LOW;

byte Diposit2mig = LOW;

byte Diposit2minim = LOW;

byte Diposit2buit = LOW;

byte Diposit3ple = LOW;

byte Diposit3mig = LOW;

byte Diposit3minim = LOW;

byte Diposit3buit = LOW;

byte Diposit4ple = LOW;

byte Diposit4mig = LOW;

byte Diposit4minim = LOW;

byte Diposit4buit = LOW;

const int SensorHumitat = A0; // Pin entrada sensor humitat

int LecturaHumitat = 0; // Lectura sensor humitat

int LecturaHumitatescalada = 0; // Humitat escalada entre 0-100

int HumitatReg = 50; // Valor d'humitat a partir del qual es rega 0-100

////////////////////////////////////////////////////////////////////////

//ALARMA

////////////////////////////////////////////////////////////////////////

int Talarma = 1; // Temps durant el que l'alarma sona a partir de l'activació

int T1h; // Temps (Hora) en el que l'alarma s'ha activat

int T1m; // Temps (minut) en el que l'alarma s'ha activat

int T1d;

int T1M;

int T1a;

byte AlarmaDetecta = LOW; // 1- Quan detecta / 0 - Quan deixa de sonar

byte AlarmaActivada = LOW; // Activació manual de l'alarma

const int Alarma = 5; // Sortida per activar la alarma

Page 115: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

115

////////////////////////////////////////////////////////////////////////

//MENJADORA

////////////////////////////////////////////////////////////////////////

int ContadorMenjar = 20; // Vaiable contador de menjar

byte Menjar = LOW;

const int SensorMotor = A1; // Pin entrada sensor humitat

int LecturaMotorMenjar = 0; // Lectura sensor humitat

int Motorbuit = 100;

int MotorEncallat = 800;

byte ME;

byte MB;

byte MOK;

///////////////////////////////////////////////////////////////////////

//PASTOR

////////////////////////////////////////////////////////////////////////

byte ErrorPastor = LOW; // 1- Quan falla el pastor / 0 - Quan deixa de fallar

byte FallaPastor = LOW;

int T1dp;

int T1Mp;

byte SensorPastor = LOW;

const int SPast = 7; // Pin entrada sensor Baix dipòsit 4

////////////////////////////////////////////////////////////////////////

///////////////////////////////SETUP////////////////////////////////////

////////////////////////////////////////////////////////////////////////

void setup()

Serial.begin(9600); // Activa la comunicació sèrie i espera per obrir el port

while (!Serial)

; // Espera per activar el port serie (Només per usb)

Serial.print("Initializing SD card...");

if (!SD.begin(4))

Serial.println("initialization failed!");

return;

Serial.println("initialization done.");

attachInterrupt(1, Interrupcio_Alarma, RISING); // Activa la interrupcio i l'asocia a la subrutina

d'alarma

attachInterrupt(0, Interrupcio_Menjadora, RISING); // Activa la interrupcio i l'asocia a la subrutina de la

menjadora

setTime(23, 59, 30, 03, 03, 2016); // Les 22:00:00 del dia 3 de Març de 2016

for (int var = 0; var < outputQuantity; var++)

Page 116: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

116

pinMode(outputAddress[var], OUTPUT);

for (int var = 0; var < inputQuantity; var++)

pinMode(inputAddress[var], INPUT);

Ethernet.begin(mac, ip,gateway,subnet); // Comença la connexió Ethernet i el servidor

server.begin();

Serial.print("server is at ");

Serial.println(Ethernet.localIP());

////////////////////////////////////////////////////////////////////////

////////////////////////////////LOOP////////////////////////////////////

////////////////////////////////////////////////////////////////////////

void loop()

interrupts();

time_t t = now(); // Definició del temps actual

Hora = hour(t);

Minuts = minute(t);

Segons = second(t);

Dia = day(t);

Mes = month(t);

Any = year(t);

SistemaReg();

SistemaAlarma();

SistemaPastor();

SistemaMenjadora();

//Acces();

// if ()

ServidorWeb();

//

readString = "";

Page 117: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

117

////////////////////////////////////////////////////////////////////////

//SERVIDOR WEB

////////////////////////////////////////////////////////////////////////

void ServidorWeb()

EthernetClient client = server.available(); // Espera la connexió d'un client

if (client)

boolean currentLineIsBlank = true;

while (client.connected())

if (client.available())

char c = client.read();

Serial.write(c);

if (readString.length() < 100)

//store characters to string

readString += c;

//Serial.print(c);

if (c == '\n' && currentLineIsBlank)

client.println("HTTP/1.1 200 OK"); // Envia una capçalera estandard HTTP

client.println("Content-Type: text/html");

client.println("Connection: close"); // La connexió es tancara despres de rebre resposta

client.println("Refresh: 10"); // Actualitza la pagina HTTP cada x segons

client.println();

client.println("<!DOCTYPE HTML>");

client.println("<html lag='es'>");

client.println("<head>");

client.println("<title> CAN AIGUESFOSQUES </title>");

client.println("<meta charset='utf-8'>");

client.println("</head>");

client.println("<body><?php<table border=1 colspan=3 align= 'center'><tr><td>");

//OBRIR TAULA GENERAL I primera linea

client.println("<style type='text/css'> body color: black; background-color: white

</style>");//EL CSS

client.print("<center ><h1>CAN AIGUESFOSQUES<h1></center></td></tr>");

client.print("<tr><td><table border=1 align = 'center' >");

// segona linea taula general

client.print("<tr ><td bgcolor= '#81F781' align = 'center' >");

client.print("<h2>HORT<h2>");

client.print("</td>");

client.print("<td bgcolor='#F3F781' align = 'center'>");

client.print("<h2>CONTROL<h2>");

client.print("</td>");

client.print("<td bgcolor='#F5BCA9' align = 'center'>");

client.print("<h2>INFORMACIÓ<h2>");

Page 118: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

118

client.print("</tr></td>");

client.print("<tr><td>");

client.print("<table border = 1 bgcolor='#D0F5A9' ><tr><td colspan = 4 align = 'center'>");

client.print("<h3>Zona Hort 1<h3>");

client.print("</td></tr>");

client.print("<tr><td ><center>");

client.print("<h3>MANUAL<h3>");

client.print("</td>");

client.print("<td>");

client.print("<center>");

if (RegManual1 == HIGH)

client.print("Zona 1 ON");

client.println("<br />");

client.println("<br />");

client.print("<button>");

client.print("<a href=\"/?manual1off\"\"<button style='font-size:120%; align : 'center'>OFF</a>");

client.print("</button>");

else

client.print("Zona 1 OFF");

client.println("<br />");

client.println("<br />");

client.print("<button >");

client.print("<a href=\"/?manual1on\"\"<button style='font-size:120%; align : 'center'>ON</a>");

client.print("</button>");

if (readString.indexOf("?manual1on") > 0)

RegManual1 = HIGH;

if (readString.indexOf("?manual1off") > 0)

RegManual1 = LOW;

client.print("</td>");

client.print("<td>");

client.print("<center>");

client.print("TIME");

client.print("</center>");

client.print("</td>");

client.print("<td>");

client.print("Nivell dipòsit 1:");

client.print("</td></tr>");

client.print("<tr><td><center>");

client.print("<h3>AUTOMÀTIC<h3>");

Page 119: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

119

client.print("</td>");

client.print("<td>");

if (Zona1 == HIGH)

client.print("<button>");

client.print("<a href=\"/?zona1on\"\"<button style='font-size:100%; background-

color:greenyellow; color:blue; '>ON</a>");

client.print("</button>");

client.print("<button>");

client.print("<a href=\"/?zona1off\"\"<button style='font-size:100%;background-

color:red'>OFF</a>");

client.print("</button>");

else

client.print("<button>");

client.print("<a href=\"/?zona1on\"\"<button style='font-size:100%;background-

color:red'>ON</a>");

client.print("</button>");

client.print("<button>");

client.print("<a href=\"/?zona1off\"\"<button style='font-size:100%; background-

color:greenyellow; color:blue;'>OFF</a>");

client.print("</button>");

if (readString.indexOf("?zona1on") > 0)

Zona1 = HIGH;

if (readString.indexOf("?zona1off") > 0)

Zona1 = LOW;

client.print("</td>");

client.print("<td>");

client.print("<button>");

client.print("<a href=\"/?Time1on\"\"<button style='font-size:80%;'>-</a>");

client.print("</button>");

client.print(+ " ") ;

client.print(Tev1);

client.print(+ " ") ;

client.print("<button>");

client.print("<a href=\"/?Time1off\"\"<button style='font-size:80%;'>+</a>");

client.print("</button>");

client.print("</td>");

if (readString.indexOf("?Time1on") > 0)

Tev1 = Tev1 - 1;

if (readString.indexOf("?Time1off") > 0)

Tev1 = Tev1 + 1;

Page 120: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

120

client.print("<td>");

client.println("<center>");

if ( Diposit1ple == HIGH)

client.println("100%");

if ( Diposit1mig == HIGH)

client.println("50%");

if ( Diposit1minim == HIGH)

client.println("10%");

if ( Diposit1buit == HIGH)

client.println("0%");

client.print("</center>");

client.print("</td></tr>");

client.println("<br />");

client.print("</table>");

client.print("<table border = 1 bgcolor='#D0F5A9' ><tr><td colspan = 4 align = 'center'>");

client.print("<h3>Zona Hort 2<h3>");

client.print("</td></tr>");

client.print("<tr><td ><center>");

client.print("<h3>MANUAL<h3>");

client.print("</td>");

client.print("<td>");

client.print("<center>");

if (RegManual2 == HIGH)

client.print("Zona 2 ON");

client.println("<br />");

client.println("<br />");

client.print("<button>");

client.print("<a href=\"/?manual2off\"\"<button style='font-size:120%; align : 'center'>OFF</a>");

client.print("</button>");

else

client.print("Zona 2 OFF");

client.println("<br />");

client.println("<br />");

client.print("<button >");

client.print("<a href=\"/?manual2on\"\"<button style='font-size:120%; align : 'center'>ON</a>");

client.print("</button>");

Page 121: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

121

if (readString.indexOf("?manual2on") > 0)

RegManual2 = HIGH;

if (readString.indexOf("?manual2off") > 0)

RegManual2 = LOW;

client.print("</td>");

client.print("<td>");

client.print("<center>");

client.print("TIME");

client.print("</center>");

client.print("</td>");

client.print("<td>");

client.print("Nivell dipòsit 2:");

client.print("</td></tr>");

client.print("<tr><td><center>");

client.print("<h3>AUTOMÀTIC<h3>");

client.print("</td>");

client.print("<td>");

if (Zona2 == HIGH)

client.print("<button>");

client.print("<a href=\"/?zona2on\"\"<button style='font-size:100%; background-

color:greenyellow; color:blue; '>ON</a>");

client.print("</button>");

client.print("<button>");

client.print("<a href=\"/?zona2off\"\"<button style='font-size:100%;background-

color:red'>OFF</a>");

client.print("</button>");

else

client.print("<button>");

client.print("<a href=\"/?zona2on\"\"<button style='font-size:100%;background-

color:red'>ON</a>");

client.print("</button>");

client.print("<button>");

client.print("<a href=\"/?zona2off\"\"<button style='font-size:100%; background-

color:greenyellow; color:blue;'>OFF</a>");

client.print("</button>");

if (readString.indexOf("?zona2on") > 0)

Zona2 = HIGH;

if (readString.indexOf("?zona2off") > 0)

Zona2 = LOW;

Page 122: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

122

client.print("</td>");

client.print("<td>");

client.print("<button>");

client.print("<a href=\"/?Time2on\"\"<button style='font-size:80%;'>-</a>");

client.print("</button>");

client.print(+ " ") ;

client.print(Tev2);

client.print(+ " ") ;

client.print("<button>");

client.print("<a href=\"/?Time2off\"\"<button style='font-size:80%;'>+</a>");

client.print("</button>");

client.print("</td>");

if (readString.indexOf("?Time2on") > 0)

Tev2 = Tev2 - 1;

if (readString.indexOf("?Time2off") > 0)

Tev2 = Tev2 + 1;

client.print("<td>");

client.println("<center>");

if ( Diposit2ple == HIGH)

client.println("100%");

if ( Diposit2mig == HIGH)

client.println("50%");

if ( Diposit2minim == HIGH)

client.println("10%");

if ( Diposit2buit == HIGH)

client.println("0%");

client.print("</center>");

client.print("</td></tr>");

client.println("<br />");

client.print("</table>");

client.print("<table border = 1 bgcolor='#D0F5A9' ><tr><td colspan = 4 align = 'center'>");

client.print("<h3>Zona Hort 3<h3>");

client.print("</td></tr>");

client.print("<tr><td ><center>");

client.print("<h3>MANUAL<h3>");

Page 123: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

123

client.print("</td>");

client.print("<td>");

client.print("<center>");

if (RegManual3 == HIGH)

client.print("Zona 3 ON");

client.println("<br />");

client.println("<br />");

client.print("<button>");

client.print("<a href=\"/?manual3off\"\"<button style='font-size:120%; align : 'center'>OFF</a>");

client.print("</button>");

else

client.print("Zona 3 OFF");

client.println("<br />");

client.println("<br />");

client.print("<button >");

client.print("<a href=\"/?manual3on\"\"<button style='font-size:120%; align : 'center'>ON</a>");

client.print("</button>");

if (readString.indexOf("?manual3on") > 0)

RegManual3 = HIGH;

if (readString.indexOf("?manual3off") > 0)

RegManual3 = LOW;

client.print("</td>");

client.print("<td>");

client.print("<center>");

client.print("TIME");

client.print("</center>");

client.print("</td>");

client.print("<td>");

client.print("Nivell dipòsit 3:");

client.print("</td></tr>");

client.print("<tr><td><center>");

client.print("<h3>AUTOMÀTIC<h3>");

client.print("</td>");

client.print("<td>");

if (Zona3 == HIGH)

client.print("<button>");

client.print("<a href=\"/?zona3on\"\"<button style='font-size:100%; background-

color:greenyellow; color:blue; '>ON</a>");

client.print("</button>");

client.print("<button>");

Page 124: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

124

client.print("<a href=\"/?zona3off\"\"<button style='font-size:100%;background-

color:red'>OFF</a>");

client.print("</button>");

else

client.print("<button>");

client.print("<a href=\"/?zona3on\"\"<button style='font-size:100%;background-

color:red'>ON</a>");

client.print("</button>");

client.print("<button>");

client.print("<a href=\"/?zona3off\"\"<button style='font-size:100%; background-

color:greenyellow; color:blue;'>OFF</a>");

client.print("</button>");

if (readString.indexOf("?zona3on") > 0)

Zona3 = HIGH;

if (readString.indexOf("?zona3off") > 0)

Zona3 = LOW;

client.print("</td>");

client.print("<td>");

client.print("<button>");

client.print("<a href=\"/?Time3on\"\"<button style='font-size:80%;'>-</a>");

client.print("</button>");

client.print(+ " ") ;

client.print(Tev3);

client.print(+ " ") ;

client.print("<button>");

client.print("<a href=\"/?Time3off\"\"<button style='font-size:80%;'>+</a>");

client.print("</button>");

client.print("</td>");

if (readString.indexOf("?Time3on") > 0)

Tev3 = Tev3 - 1;

if (readString.indexOf("?Time3off") > 0)

Tev3 = Tev3 + 1;

client.print("<td>");

client.println("<center>");

if ( Diposit3ple == HIGH)

client.println("100%");

if ( Diposit3mig == HIGH)

client.println("50%");

Page 125: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

125

if ( Diposit3minim == HIGH)

client.println("10%");

if ( Diposit3buit == HIGH)

client.println("0%");

client.print("</center>");

client.print("</td></tr>");

client.println("<br />");

client.print("</table>");

client.print("<table border = 1 bgcolor='#D0F5A9' ><tr><td colspan = 4 align = 'center'>");

client.print("<h3>Zona Hort 4<h3>");

client.print("</td></tr>");

client.print("<tr><td ><center>");

client.print("<h3>MANUAL<h3>");

client.print("</td>");

client.print("<td>");

client.print("<center>");

if (RegManual4 == HIGH)

client.print("Zona 4 ON");

client.println("<br />");

client.println("<br />");

client.print("<button>");

client.print("<a href=\"/?manual4off\"\"<button style='font-size:120%; align : 'center'>OFF</a>");

client.print("</button>");

else

client.print("Zona 1 OFF");

client.println("<br />");

client.println("<br />");

client.print("<button >");

client.print("<a href=\"/?manual4on\"\"<button style='font-size:120%; align : 'center'>ON</a>");

client.print("</button>");

if (readString.indexOf("?manual4on") > 0)

RegManual4 = HIGH;

if (readString.indexOf("?manual4off") > 0)

RegManual4 = LOW;

client.print("</td>");

client.print("<td>");

Page 126: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

126

client.print("<center>");

client.print("TIME");

client.print("</center>");

client.print("</td>");

client.print("<td>");

client.print("Nivell dipòsit 4:");

client.print("</td></tr>");

client.print("<tr><td><center>");

client.print("<h3>AUTOMÀTIC<h3>");

client.print("</td>");

client.print("<td>");

if (Zona4 == HIGH)

client.print("<button>");

client.print("<a href=\"/?zona4on\"\"<button style='font-size:100%; background-

color:greenyellow; color:blue; '>ON</a>");

client.print("</button>");

client.print("<button>");

client.print("<a href=\"/?zona4off\"\"<button style='font-size:100%;background-

color:red'>OFF</a>");

client.print("</button>");

else

client.print("<button>");

client.print("<a href=\"/?zona4on\"\"<button style='font-size:100%;background-

color:red'>ON</a>");

client.print("</button>");

client.print("<button>");

client.print("<a href=\"/?zona4off\"\"<button style='font-size:100%; background-

color:greenyellow; color:blue;'>OFF</a>");

client.print("</button>");

if (readString.indexOf("?zona4on") > 0)

Zona4 = HIGH;

if (readString.indexOf("?zona4off") > 0)

Zona4 = LOW;

client.print("</td>");

client.print("<td>");

client.print("<button>");

client.print("<a href=\"/?Time4on\"\"<button style='font-size:80%;'>-</a>");

client.print("</button>");

client.print(+ " ") ;

client.print(Tev4);

client.print(+ " ") ;

Page 127: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

127

client.print("<button>");

client.print("<a href=\"/?Time4off\"\"<button style='font-size:80%;'>+</a>");

client.print("</button>");

client.print("</td>");

if (readString.indexOf("?Time4on") > 0)

Tev4 = Tev4 - 1;

if (readString.indexOf("?Time4off") > 0)

Tev4 = Tev4 + 1;

client.print("<td>");

client.println("<center>");

if ( Diposit4ple == HIGH)

client.println("100%");

if ( Diposit4mig == HIGH)

client.println("50%");

if ( Diposit4minim == HIGH)

client.println("10%");

if ( Diposit4buit == HIGH)

client.println("0%");

client.print("</center>");

client.print("</td></tr>");

client.println("<br />");

client.print("</table>"); // TANCO ULTIMA TAULA ZONA HORTS

client.print("</td>");

client.print("<td >");

client.print("<table border = 5 align= 'center' bgcolor='#F5F6CE' ><tr><td>");

client.println("<center>");

if (AlarmaActivada == HIGH)

client.print("ALARMA ACTIVADA");

client.println("<br />");

client.println("<br />");

client.print("<button>");

client.print("<a href=\"/?alarmaoff\"\"<button style='font-size:100%'; >DESACTIVAR</a>");

client.print("</button>");

if (readString.indexOf("?alarmaon") > 0)

Page 128: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

128

AlarmaActivada = HIGH;

if (AlarmaActivada == LOW)

client.print("ALARMA DESACTIVADA");

client.println("<br />");

client.println("<br />");

client.print("<button>");

client.print("<a href=\"/?alarmaon\"\"<button style='font-size:100%';>ACTIVAR</a>");

client.print("</button>");

if (readString.indexOf("?alarmaoff") > 0)

AlarmaActivada = LOW;

Serial.println (AlarmaActivada);

client.println("<br />");

client.println("<br />");

client.print("</td></tr></table>");

client.println("<br />");

client.println("<br />");

client.print("<table border = 5 align = 'center' bgcolor='#F5F6CE'><tr><td>");

if (ContadorMenjar != 0)

client.println("<center>");

client.println("<br />");

client.println ("El dipòsit de menjar es troba en carrega:");

client.println("<br />");

client.println("<br />");

client.print (ContadorMenjar);

client.print(" ") ;

client.print (" / 20");

client.println("<br />");

client.println("<br />");

else

client.println ("El dipòsit de menjar esta buit");

client.println("<br />");

client.println("<br />");

client.println("<center>");

client.print("<button>");

client.print("<a href=\"/?reset\"\"<button style='font-size:100%; color:black; '>RESET</a>");

client.print("</button>");

client.println("</center>");

Page 129: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

129

client.println("<br />");

if (readString.indexOf("?reset") > 0)

ContadorMenjar = 20;

client.print("</td></tr></table>");

client.println("<br />");

client.println("<br />");

client.print("<table border = 5 align = 'center' bgcolor='#F5F6CE'><tr><td>");

client.print("Bateries");

client.print("</td></tr></table>");

client.print("</td>");

client.print("<td bgcolor='#F6D8CE'>");

client.println("INFORMACIÓ GENERAL");

client.println("<br />");

client.println("<br />");

client.print ("Hora actual "); // Mostra tot el seguent per pantalla a la direcció IP

client.print (Hora);

client.print(+ ":") ;

client.print (Minuts);

client.print(+ ":") ;

client.println (Segons);

client.println("<br />");

client.println("<br />");

client.println ("La humitat es del" );

client.println (LecturaHumitatescalada);

client.println ("%");

client.println("<br />");

client.println("<br />");

if (SensorPastor == HIGH)

client.println ("El pastor falla");

else

client.println ("El pastor funciona OK");

client.println("<br />");

client.println("<br />");

if (ME == HIGH)

client.println ("El motor de la menjadora està encallat:");

if (MB == HIGH)

client.println ("El motor de la menjadora està girant en buit:");

if (MOK == HIGH)

client.println ("El motor de la menjadora funciona OK:");

Page 130: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

130

client.println("<br />");

client.println("<br />");

if (AlarmaDetecta == HIGH)

client.println ("Ha saltat l'alarma");

client.print("</td>");

client.print("</tr>");

client.print("</table>");

client.print("</td></tr>");

client.println("</table>");

client.println("</body>");

client.println("</html>");

break;

delay(1); // Temps al navegador per rebre les dades

client.stop(); // Tanca la connexió

Serial.println("client disconnected");

Ethernet.maintain();

Page 131: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

131

////////////////////////////////////////////////////////////////////////

//MENJADORA

////////////////////////////////////////////////////////////////////////

void SistemaMenjadora()

if ( Menjar == HIGH )

LecturaMotorMenjar = analogRead(SensorMotor);

Serial.println (LecturaMotorMenjar);

if (LecturaMotorMenjar > MotorEncallat )

//Serial.println ("El motor de menjar esta encallat");

ME = HIGH;

Menjar = LOW;

if (LecturaMotorMenjar < Motorbuit )

//Serial.println ("El motor de menjar esta girant en buit");

MB = HIGH;

Menjar = LOW;

if (LecturaMotorMenjar < MotorEncallat && LecturaMotorMenjar > Motorbuit )

//Serial.println ("S'ha donat menjar");

MOK = HIGH;

Menjar = LOW;

if (ContadorMenjar <= 0 )

//Serial.println ("El diposit de menjar esta buit");

ContadorMenjar = 0;

////////////////////////////////////////////////////////////////////////

//PASTOR

////////////////////////////////////////////////////////////////////////

void SistemaPastor()

SensorPastor = digitalRead(SPast);

if (SensorPastor == HIGH )

FallaPastor = HIGH;

Serial.println ("Falla pastor");

delay(200);

myFile = SD.open("HISTORIAL_HORT.txt", FILE_WRITE);

if (myFile)

myFile.print ("El pastor ha fallat el dia ");

myFile.print(+ " ") ;

myFile.print (T1dp);

myFile.print (" / ");

myFile.print (T1Mp);

myFile.close();

Page 132: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

132

////////////////////////////////////////////////////////////////////////

//ALARMA

////////////////////////////////////////////////////////////////////////

void SistemaAlarma()

if (AlarmaDetecta == HIGH && AlarmaActivada == HIGH && Minuts > T1m + Talarma )

digitalWrite( Alarma , LOW);

AlarmaDetecta = LOW ;

Serial.print ("L'alarma ha sonat a les ");

Serial.print(+ " ") ;

Serial.print (T1h);

Serial.print(+ ":") ;

Serial.print (T1m);

Serial.println ("");

myFile = SD.open("test.txt", FILE_WRITE);

if (myFile)

myFile.print ("L'alarma ha sonat a les ");

myFile.print(+ " ") ;

myFile.print (T1h);

myFile.print(+ ":") ;

myFile.print (T1m);

myFile.print (+ " ");

myFile.print ("del ");

myFile.print(+ " ") ;

myFile.print (T1d);

myFile.print (" / ");

myFile.print (T1M);

myFile.close();

Page 133: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

133

////////////////////////////////////////////////////////////////////////

// REG AUTOMATIC

////////////////////////////////////////////////////////////////////////

void SistemaReg()

SensorDalt1 = digitalRead(SD1);

SensorMig1 = digitalRead(SMi1);

SensorBaix1 = digitalRead(SB1);

SensorDalt2 = digitalRead(SD2);

SensorMig2 = digitalRead(SMi2);

SensorBaix2 = digitalRead(SB2);

SensorDalt3 = digitalRead(SD3);

SensorMig3 = digitalRead(SMi3);

SensorBaix3 = digitalRead(SB3);

SensorDalt4 = digitalRead(SD4);

SensorMig4 = digitalRead(SMi4);

SensorBaix4 = digitalRead(SB4);

LecturaHumitat = analogRead(SensorHumitat);

LecturaHumitatescalada = 102.3 - (LecturaHumitat / 10);

NivellDiposits();

RegManual();

RegAutomatic();

void RegManual()

if ( RegManual1 == HIGH && Diposit1buit == LOW) // sensor nivell baix1 no detecta aigua i zona 1

activa

digitalWrite( Ev1 , HIGH);

else

digitalWrite( Ev1 , LOW);

if ( RegManual2 == HIGH && Diposit2buit == LOW) // sensor nivell baix1 no detecta aigua i zona 1

activa

digitalWrite( Ev2 , HIGH);

else

digitalWrite( Ev2 , LOW);

if ( RegManual3 == HIGH && Diposit3buit == LOW) // sensor nivell baix1 no detecta aigua i zona 1

activa

digitalWrite( Ev3 , HIGH);

else

digitalWrite( Ev3 , LOW);

Page 134: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

134

if ( RegManual4 == HIGH && Diposit4buit == LOW) // sensor nivell baix1 no detecta aigua i zona 1

activa

digitalWrite( Ev4 , HIGH);

else

digitalWrite( Ev4 , LOW);

void NivellDiposits()

if ( SensorDalt1 == HIGH && SensorMig1 == HIGH && SensorBaix1 == HIGH)

Diposit1ple = HIGH;

Diposit1mig = LOW;

Diposit1minim = LOW;

Diposit1buit = LOW;

if ( SensorDalt2 == HIGH && SensorMig2 == HIGH && SensorBaix2 == HIGH)

Diposit2ple = HIGH;

Diposit2mig = LOW;

Diposit2minim = LOW;

Diposit2buit = LOW;

if ( SensorDalt3 == HIGH && SensorMig3 == HIGH && SensorBaix3 == HIGH)

Diposit3ple = HIGH;

Diposit3mig = LOW;

Diposit3minim = LOW;

Diposit3buit = LOW;

if ( SensorDalt4 == HIGH && SensorMig4 == HIGH && SensorBaix4 == HIGH)

Diposit4ple = HIGH;

Diposit4mig = LOW;

Diposit4minim = LOW;

Diposit4buit = LOW;

if ( SensorDalt1 == LOW && SensorMig1 == HIGH && SensorBaix1 == HIGH)

Diposit1ple = LOW;

Diposit1mig = HIGH;

Diposit1minim = LOW;

Diposit1buit = LOW;

if ( SensorDalt2 == LOW && SensorMig2 == HIGH && SensorBaix2 == HIGH)

Diposit2ple = LOW;

Diposit2mig = HIGH;

Diposit2minim = LOW;

Diposit2buit = LOW;

if ( SensorDalt3 == LOW && SensorMig3 == HIGH && SensorBaix3 == HIGH)

Diposit3ple = LOW;

Diposit3mig = HIGH;

Page 135: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

135

Diposit3minim = LOW;

Diposit3buit = LOW;

if ( SensorDalt3 == LOW && SensorMig3 == HIGH && SensorBaix3 == HIGH)

Diposit4ple = LOW;

Diposit4mig = HIGH;

Diposit4minim = LOW;

Diposit4buit = LOW;

if ( SensorDalt1 == LOW && SensorMig1 == LOW && SensorBaix1 == HIGH)

Diposit1ple = LOW;

Diposit1mig = LOW;

Diposit1minim = HIGH;

Diposit1buit = LOW;

if ( SensorDalt2 == LOW && SensorMig2 == LOW && SensorBaix2 == HIGH)

Diposit2ple = LOW;

Diposit2mig = LOW;

Diposit2minim = HIGH;

Diposit2buit = LOW;

if ( SensorDalt3 == LOW && SensorMig3 == LOW && SensorBaix3 == HIGH)

Diposit3ple = LOW;

Diposit3mig = LOW;

Diposit3minim = HIGH;

Diposit3buit = LOW;

if ( SensorDalt4 == LOW && SensorMig4 == LOW && SensorBaix4 == HIGH)

Diposit4ple = LOW;

Diposit4mig = LOW;

Diposit4minim = HIGH;

Diposit4buit = LOW;

if ( SensorDalt1 == LOW && SensorMig1 == LOW && SensorBaix1 == LOW)

Diposit1ple = LOW;

Diposit1mig = LOW;

Diposit1minim = LOW;

Diposit1buit = HIGH;

if ( SensorDalt2 == LOW && SensorMig2 == LOW && SensorBaix2 == LOW)

Diposit2ple = LOW;

Diposit2mig = LOW;

Diposit2minim = LOW;

Diposit2buit = HIGH;

if ( SensorDalt3 == LOW && SensorMig3 == LOW && SensorBaix3 == LOW)

Diposit3ple = LOW;

Diposit3mig = LOW;

Page 136: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

136

Diposit3minim = LOW;

Diposit3buit = HIGH;

if ( SensorDalt4 == LOW && SensorMig4 == LOW && SensorBaix4 == LOW)

Diposit4ple = LOW;

Diposit4mig = LOW;

Diposit4minim = LOW;

Diposit4buit = HIGH;

void RegAutomatic()

if (Hora == Horareg)

if (LecturaHumitatescalada < HumitatReg)

if ( Minuts < Tev1 && Zona1 == HIGH && Diposit1buit == LOW) // sensor nivell baix1 no

detecta aigua i zona 1 activa

digitalWrite( Ev1 , HIGH);

else

digitalWrite( Ev1 , LOW);

if ( Minuts < Tev2 && Zona2 == HIGH && Diposit2buit == LOW) // sensor nivell baix2 no

detecta aigua i zona 1 activa

digitalWrite( Ev2 , HIGH);

else

digitalWrite( Ev2 , LOW);

if ( Minuts < Tev3 && Zona3 == HIGH && Diposit3buit == LOW) // sensor nivell baix3 no

detecta aigua i zona 1 activa

digitalWrite( Ev3 , HIGH);

else

digitalWrite( Ev3 , LOW);

if ( Minuts < Tev4 && Zona4 == HIGH && Diposit4buit == LOW) // sensor nivell baix no detecta

aigua i zona 1 activa

digitalWrite( Ev4 , HIGH);

else

digitalWrite( Ev4 , LOW);

Page 137: Memoria 2 joan

JOAN MERCADER TFG - UPC - 2016

137

////////////////////////////////////////////////////////////////////////

// INTERRUPCIONS

////////////////////////////////////////////////////////////////////////

void Interrupcio_Alarma()

if ( millis() > T0 + 250)

contador++ ;

T0 = millis();

if (AlarmaActivada == HIGH)

digitalWrite( Alarma , HIGH);

T1h = Hora;

T1m = Minuts;

T1d = Dia;

T1M = Mes;

T1a = Any;

AlarmaDetecta = HIGH;

void Interrupcio_Menjadora()

if ( millis() > T0 + 500)

contador++ ;

T0 = millis();

Menjar = HIGH;

ME = LOW;

MB = LOW;

MOK = LOW;

ContadorMenjar --;