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
JOAN MERCADER TFG - UPC - 2016
2
PRÒLEG
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
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
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
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
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
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.
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.
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
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
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]
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]
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.
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.
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
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
IÓ
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
MÒ
RIA
RE
DA
CC
IÓ
Redacció bàsica
Redacció completa
Ajustos de formats
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
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
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
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
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
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
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
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.
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
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
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
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.
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
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
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
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.
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.
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.
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
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());
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 = "";
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
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
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.
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."
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
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ó.
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
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
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();
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");
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. .
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
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
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
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
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.
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
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
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.
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);
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;
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:");
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
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.
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
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
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);
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.
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
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();
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;
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);
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);
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.
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>");
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>");
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)
JOAN MERCADER TFG - UPC - 2016
76
Els elements es distribueixen de la següent manera :
Figura 46 - Distribució d'elements de l'alarma
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
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.
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);
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();
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
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.
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.
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
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.
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ó
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.
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.
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
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
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
IÓ
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
MÒ
RIA
RE
DA
CC
IÓ Redacció bàsica
Redacció completa
Ajustos de formats
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 €
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.
JOAN MERCADER TFG - UPC - 2016
94
Lightinthebox™, 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],
JOAN MERCADER TFG - UPC - 2016
95
14- CONCLUSIONS
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
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.
JOAN MERCADER TFG - UPC - 2016
98
16- ANNEX PLANOL
JOAN MERCADER TFG - UPC - 2016
99
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
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
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
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
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
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
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
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.
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
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
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.
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.
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
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
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
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++)
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 = "";
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>");
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>");
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;
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>");
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;
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>");
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>");
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%");
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>");
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(+ " ") ;
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)
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>");
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:");
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();
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();
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();
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);
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;
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;
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);
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 --;
Top Related