Controlador de acuario con Arduino

Embed Size (px)

Citation preview

  • 8/19/2019 Controlador de acuario con Arduino

    1/73

    Controlador De Acuario Electrónico Con Arduino

    Hola:

    Pretendo describir en este post como he construido una especie de pequeña computadora para controlar

    un acuario de 270L de agua dulce, sobre este tema hay muchísima informacin en internet y todos ellosest!n reali"ados con una pequeñísima placa, con un microprocesador llamada #rduino $es una placa de

    licencia libre%, las hay de &arios tipos y de &arios precios, la m!s com'n es la #rduino ()* que ronda los

    20+ yo e elegido en cambio la #rduino ega que ronda los -.+ pero porque no me quería quedar corto yquería que pudiera ser en un futuro ampliable el controlador/

    # primera &ista puede parecer que este tipo de montae sea algo demasiado complicado para alguien queno sepa de electrnica y programacin, pero les puedo asegurar que son muchas las personas que sin

    estos conocimientos est!n montando controladores de este tipo unos menos compleos y otros m!s perotodos se guían por lo que &en montar a los dem!s y consultar en foros del tema/

    #rduino 1# 23.0 #41#23.0 #56 (8 8oard 35 9 (8 able  

    4eniendo en cuenta que lo que hay comerciali"ado como ordenador, son cosas como el Profilu;, que solola unidad central cuesta unos .00+, merece la pena mir!rselo/

    *tra cosa que hay que tener en cuenta es que los precios que he dicho son de artículos comprados en1spaña, yo en cambio los e comprado en 1bay por menos de la mitad/

    8ueno el controlador que e montado tiene las siguientes características:

    ontrol de la temperatura del acuario y sus calentadores/

    ontrol de la temperatura de la tapa del acuario y los &entiladores de esta/ontrol de la temperatura del depsito y su calentador para los cambios de agua/

    ontrol del PH y la electro-? @ A.>? lo que equi&ales a mucho

    mas de B.0? de lu" de fluorescentes/ C una tercera fase que controla la lu" de luna/

    #dem!s lle&a una tareta = en la cual me &a grabando todos los e&entos que se producen, tanto

    encendidos, apagados y errores, para poder luego sacar estadísticas de ello/

    1ste controlador lo tengo montado con este acuario que detallo aquí 

    e puede hacer mucho m!s sencillo, por eemplo que controle solo la lu" y la temperatura del acuario,

    pero a mí me dio por querer complicarme la &ida, os puedo decir tambiDn que se un poco de electrnica y

    soy programador, pero hace B meses no sabía la e;istencia de estos dispositi&o y hoy tengo unofuncionando y de mara&illa/

    *s &oy a poner un enlace a los distintos tipo de #rduino que hay, que se me había ol&idado eeee/http:EEarduino/ccEenEainEHardFare 

    A

    http://rover.ebay.com/rover/0/e11003.m43.l1123/7?euid=6acb3be3896a408fafb80cd5e9888e1a&loc=http%3A%2F%2Fcgi.ebay.es%2Fws%2FeBayISAPI.dll%3FViewItem%26item%3D180729532731%26ssPageName%3DADME%3AB%3AEOIBSA%3AES%3A1123http://www.portalpez.com/documentacion-de-montaje-acuario-270l-luces-leds-mueble-vt51191.htmlhttp://www.portalpez.com/documentacion-de-montaje-acuario-270l-luces-leds-mueble-vt51191.htmlhttp://www.portalpez.com/documentacion-de-montaje-acuario-270l-luces-leds-mueble-vt51191.htmlhttp://arduino.cc/en/Main/Hardwarehttp://arduino.cc/en/Main/Hardwarehttp://www.portalpez.com/documentacion-de-montaje-acuario-270l-luces-leds-mueble-vt51191.htmlhttp://arduino.cc/en/Main/Hardwarehttp://rover.ebay.com/rover/0/e11003.m43.l1123/7?euid=6acb3be3896a408fafb80cd5e9888e1a&loc=http%3A%2F%2Fcgi.ebay.es%2Fws%2FeBayISAPI.dll%3FViewItem%26item%3D180729532731%26ssPageName%3DADME%3AB%3AEOIBSA%3AES%3A1123

  • 8/19/2019 Controlador de acuario con Arduino

    2/73

    1l esquema general del montae es este

    y el frontal del controlador a quedado así:

    i os interesa sigo con la

    descripcin detallada de todoel montae y programacin/

    8ueno empecemos, el

    controlador est! basado en un

    microprocesador muy populary barato el cual es el cerebro

    de todo el controlador, estetiene cone;iones digitales y

    analgicas, así como

    cone;iones PG y serie/

    Para los nefitos del tema:

    Las conexiones digitales son aquellas que solo funcionan mandando o recibiendo una señal de G o )*,siendo el )* que la cone;in tenga menos de 2& y el sí que la cone;in tenga 3&, con esto podemosgestionar salidas que maneen un 6elD, un transistor de potencia o un led, si la cone;in es de entrada

    podemos gestionar, un pulsador, en sensor de &arios tipos como flotadores o sensores de presin y

    algunas cosas m!s, el que sea la cone;in de salida o entrada lo definimos nosotros,

    Las conexiones analógicas son las encargadas de manear señales en las cuales detectamos &ariaciones

    2

    http://www.softweb.es/acuario/Esquemas/Esquema%20completo.jpghttp://www.softweb.es/acuario/fotos/FOTO0046.jpg

  • 8/19/2019 Controlador de acuario con Arduino

    3/73

    de tensin o generamos &ariaciones de tensin, dependiendo si las configuramos como entrada o salida,

    un uso puede ser manear un motor, un sensor de temperatura, entre estas hay un pequeño grupo que sonP? $Pulse ?a&e odulation, modulacin de onda por pulsos% las cuales son para controlar una salida

    escalonada desde 0 a 233, las cuales son perfectas para manear un fluo de corriente como puede ser eldimeo$encendido escalonado% de las luces de nuestro acuario/

    SPI $ erial Peripherical Gnterface% es un protocolo de comunicaciones que &a por un bus de tres líneas,sobre el cual se transmiten paquetes de informacin de > bits/ ada una de estas tres líneas porta la

    informacin entre los diferentes dispositi&os conectados al bus/ ada dispositi&o conectado al bus puedeactuar como transmisor y receptor al mismo tiempo, por lo que este tipo de comunicacin serial es full

    duple;/ =os de estas líneas trasfieren los datos $una en cada direccin% y la tercer línea es la del relo/

    #lgunos dispositi&os solo pueden ser transmisores y otros solo receptores, generalmente un dispositi&oque tramite datos tambiDn puede recibir/

    1n mi caso yo maneo la tareta = de 2b para leer y escribir/

    Puertos Serie estos son unos pines para la comunicacin serie $6

  • 8/19/2019 Controlador de acuario con Arduino

    4/73

    Alimentación 1l #rduino ega puede ser alimentado &ía la cone;in (8 o con una fuente de alimentacin e;terna/ 1lorigen de la alimentacin se selecciona autom!ticamente/

    Las fuentes de alimentacin e;ternas $no

  • 8/19/2019 Controlador de acuario con Arduino

    5/73

    1n mi controlador e instalado B, y muy f!cil de conectar y programar, ya que se conectan todas en

    paralelo/

    Bm =igital =A>820 4emp probe sensor thermometer 6ohs 

    #quí tenDis algunas im!genes del sensor

    ensor de nivel (Boya) 1l sensor de ni&el $una simple bolla% es de lo m!s simple, de echo es simplemente un interruptor que seacciona por una boya que se mue&e al contacto con el agua/

    Liquid ?ater Le&el ensor Hori"ontal Jloat Fitch 

    1l cual se conecta a una entrada digital del #rduino,desde la cual podemos saber si esta acti&a o no/

    3

    http://www.ebay.es/itm/3m-Digital-Thermal-DS18B20-Temp-probe-or-sensor-Rohs-/350515660493?pt=UK_BOI_Electrical_Test_Measurement_Equipment_ET&hash=item519c5c86cdhttp://www.ebay.es/itm/3m-Digital-Thermal-DS18B20-Temp-probe-or-sensor-Rohs-/350515660493?pt=UK_BOI_Electrical_Test_Measurement_Equipment_ET&hash=item519c5c86cdhttp://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=350118853479http://www.softweb.es/acuario/Esquemas/bolla1.jpghttp://www.softweb.es/acuario/Esquemas/MB-SM17111_2.jpghttp://www.softweb.es/acuario/Esquemas/conexcion%20boya.jpghttp://www.softweb.es/acuario/Esquemas/bolla3.jpghttp://www.softweb.es/acuario/Esquemas/bolla2.jpghttp://www.softweb.es/acuario/Esquemas/MB-SM17111_4.jpghttp://www.softweb.es/acuario/Esquemas/MB-SM17111_1.jpghttp://www.ebay.es/itm/3m-Digital-Thermal-DS18B20-Temp-probe-or-sensor-Rohs-/350515660493?pt=UK_BOI_Electrical_Test_Measurement_Equipment_ET&hash=item519c5c86cdhttp://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=350118853479

  • 8/19/2019 Controlador de acuario con Arduino

    6/73

    Sensor de P

    Ca sD que el PH siempre se ha utili"ado con aparatos electrnicos bastantes caro, pero con el #rduino estoes mucho m!s sencillo, en el mercado $sobre todo por internet% hay muchos sensores de PH y de otras

    m!s cosas como de *6P, 1 y de o;ígenos disuelto en el agua/

    1n el caso de mi montae, yo solo puse un sensor de PH y de los modelos que hay me decidí por uno de#tlas

  • 8/19/2019 Controlador de acuario con Arduino

    7/73

    Pero actualmente es pocorentable montarnos una placa

    de relDs ya que solo un relD nospuede costar B+ o -+, en

    cambio en 1bay tenemos placas

    ya montadas de por eemplo -relDs a 3+ con gastos de en&i y

    todo/

    Podemos encontrar placas de relDs de -, > y A. relDs, yo me decidí para mi montae por una de > relDs/

    La placa la conecte de la siguiente forma/

    4enDis que tener en cuenta que yo estoy describiendo el controlador que yo he creado y con los

    perifDricos que yo he decidido, &osotros tenDis que decidir que dese!is controlar y que accesorios usar,con lo cual puede ser m!s pequeño o m!s grande/

    7

    http://www.softweb.es/acuario/Esquemas/conexiones-reles.jpghttp://www.softweb.es/acuario/Esquemas/8Rele.jpghttp://www.softweb.es/acuario/Esquemas/esquema%20rele.jpg

  • 8/19/2019 Controlador de acuario con Arduino

    8/73

    "eclado 

    1l teclado es una parte importante del controlador ya que es con lo que nos comunicamos con el #rduino,de la misma forma que nos comunicamos con los P, por eemplo para configurar a que temperatura

    queremos el acuario o a quD hora se inicia el encendido de las luces/

    He &isto montaes del #rduino con tan solo 2

    pulsadores como teclado y otros con un teclado de A.

    teclas, todo depende de lo que queramos hacer, hayque tener en cuenta que si ponemos menos pulsadores

    que mo&imientos, tendremos que programar mas/

    Para accionar un pulsador o tecla con el #rduino, esigual que la cone;in de la bolla, la bolla lo que hace

    es cerrar un contacto al accionarse, lo mismo que

    nosotros al pulsar un pulsador/

    =e esta forma podemos decidir cuantos pulsadores o teclas queremos en nuestro montae, en mi caso medecidí por . pulsadores, uno para el *K, otro para salir, 2 para el m!s y menos, para aumentar o disminuir

    los &alores y 2 para derecha e i"quierda que me ser&ía para mo&erme por la pantalla/

    4ambiDn podDis decidiros por un teclado de los muchos que hay, de . aA. teclas, suelen ser m!s f!cil de

    programar/

    >

    http://www.softweb.es/acuario/Esquemas/keypad_Arduino_Wiring.pnghttp://www.softweb.es/acuario/Esquemas/teclado.jpghttp://www.softweb.es/acuario/Esquemas/conexcion%20boya.jpg

  • 8/19/2019 Controlador de acuario con Arduino

    9/73

    La pantalla 

    La pantalla es la parte del montae en la que &eremos el estado e informacin del controlador, adem!s deser&irnos para &er las operaciones que queramos hacer con el controlador, por eemplo la configuracin

    de los par!metros de funcionamiento como a que temperatura queremos el acuario o a que hora se

    enciende y apagan las luces/

    Lo normal es que la pantalla sea una L= de cristal

    liquido, las mas comunes son de caracteres y se definen porcuantos caracteres caben en cada línea y cuantas líneas

    tiene/

    http:EEFFF/ebay/esEitmE230>>AB>727///>-/mA-7/l2.-  

    4ambiDn las hay gr!ficas las cuales se definen por puntos $pí;eles% de resolucin de la pantalla, como por

    eemplo la que yo utili"o en mi montae, una de A2>;.-puntos, teniendo en cuenta que cada car!cter ocupa >;.

    puntos esto nos da unos A caracteres por línea y > líneas, ytambiDn tiene la posibilidad de pintar líneas, circulo,

    rect!ngulos y figuras/

    http:EEFFF/ebay/esEitmEL=A2>.--/mA-7/l2.-  

    http://www.ebay.es/itm/250898138727?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649http://www.ebay.es/itm/LCD12864-LCD-Display-Module-5V-3V-logic-Power-Supply-Blue-Screen-w-Backlight-/250898138703?pt=LH_DefaultDomain_0&hash=item3a6ab1c64fhttp://www.ebay.es/itm/170709357972?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649http://www.softweb.es/acuario/Esquemas/LCD_bb.pnghttp://www.softweb.es/acuario/Esquemas/512259713_o.jpghttp://www.softweb.es/acuario/Esquemas/OT411-1m.jpghttp://www.softweb.es/acuario/Esquemas/lcd_photo.pnghttp://www.ebay.es/itm/250898138727?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649http://www.ebay.es/itm/LCD12864-LCD-Display-Module-5V-3V-logic-Power-Supply-Blue-Screen-w-Backlight-/250898138703?pt=LH_DefaultDomain_0&hash=item3a6ab1c64fhttp://www.ebay.es/itm/170709357972?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649

  • 8/19/2019 Controlador de acuario con Arduino

    10/73

    Las pantallas son el elemento que m!s

    cone;iones utili"an ya que para mandar lainformacin a una de esta pantalla suele rondar

    por > cone;iones m!s la alimentacin/

    Hay otro sistema de cone;in que se utili"a,

    aunque tambiDn ralenti"a un poco el pintado de

    la pantalla, y es un modulo que tiene algunaspantallas de comunicacin serie, estos mdulos

    nos permite manear la pantalla con tan solouna cone;in o dos, mas la alimentacin,

    encarg!ndose el modulo de con&ertir lasordenes del serie a ordenes de > hilos/

    1stas pantallas las &eremos que en la definicin

    de su nombre le incluyen la denominacin deMserieN/

    Lectora de tar#eta de memoria SD 

    1ntre las miles de cosas que podemos conectar a un #rduino, est! la

    lectora de memoria =, este componente nos permite leer y escribiren una tareta = la informacin que queramos/

    1ste componente es raro que os haga falta ya que es muy especifico

    y yo lo utili"o apro&echando mis conocimientos de programacin

    para que el #rduino baya escribiendo en unos archi&os de te;to todo los e&entos y errores que ocurrandurante todo el funcionamiento del #rduino, para luego pasarlos al ordenador a tra&Ds de un programa

    echo por mi el cual me saca estadísticas del funcionamiento del acuario, de esta forma puedo saber poreemplo en que momentos del día se acti&an mas los calentadores que tiempo total al día est!n

    funcionando y algunas cosas mas/

    El relo# de tiempo real$ 

    C por ultimo &eremos el modulo de relo, este modulo es en si un relo

    el cual lle&a una pequeña pila de forma que una &e" puesto en horaaunque le cortemos la fuente de alimentacin el mantendr! siempre la

    hora actual, este modulo una &e" puesto en hora solo nos ser&ir! para

    preguntarle en cualquier momento que fecha eso que hora es, algo esencial para nuestro

    controlador, por eemplo para saber a que horaencender las luces o apagarlas/

    http:EEFFF/ebay/esEitmE=AB07e 

    1l modulo de relo se comunica con el #rduinopor dos cone;iones a tra&Ds del protocolo G2,

    un sistema de comunicacin soportado por

    algunas de las cone;iones del #rduino/

    A0

    http://www.ebay.es/itm/DS1307-RTC-Module-Real-Time-Clock-For-AVR-Arduino-PIC-/110784417678?pt=LH_DefaultDomain_0&hash=item19cb440f8ehttp://www.ebay.es/itm/DS1307-RTC-Module-Real-Time-Clock-For-AVR-Arduino-PIC-/110784417678?pt=LH_DefaultDomain_0&hash=item19cb440f8ehttp://www.softweb.es/acuario/Esquemas/ds1307-01.gifhttp://www.softweb.es/acuario/Esquemas/DS1307.jpghttp://www.softweb.es/acuario/Esquemas/489301241_o.jpghttp://www.softweb.es/acuario/Esquemas/1866-LCD_conexion.jpghttp://www.ebay.es/itm/DS1307-RTC-Module-Real-Time-Clock-For-AVR-Arduino-PIC-/110784417678?pt=LH_DefaultDomain_0&hash=item19cb440f8ehttp://www.ebay.es/itm/DS1307-RTC-Module-Real-Time-Clock-For-AVR-Arduino-PIC-/110784417678?pt=LH_DefaultDomain_0&hash=item19cb440f8ehttp://www.ebay.es/itm/DS1307-RTC-Module-Real-Time-Clock-For-AVR-Arduino-PIC-/110784417678?pt=LH_DefaultDomain_0&hash=item19cb440f8e

  • 8/19/2019 Controlador de acuario con Arduino

    11/73

    El control de luces 

    e me ol&idaba un componente, el mas importante de todos el control de las luces, sobre este tema se ahablado mucho por internet, el sistema que mas utili"an la mayoría es unos transformadores dimeables

    que por cierto son bastante caro y para dimear estos utili"an circuitos con un integrado regulador que le

    da una señal a los trasformadores de 0& a A0&/

    Para mi siempre e &isto esto como algo demasiado complicado y caro, por lo que me decidí por un

    sistema mas directo de dimeo, utili"ando una fuente de alimentacin normal para leds y dimeando en susalida con un solo transistor/

    1l sistema es simple partiendo de un transformador específico para leds

    como este/

    *btenemos los A2& o 2-& para alimentar nuestros leds, y

    para dimearlos intercalamos un transistor de potencia

    entre este transformador y los leds, encarg!ndose este deregular el &oltae que le llegan a los leds, de esta forma

    tenemos el efecto tan deseado para nuestro acuario deamanecer y anochecer/

    1n mi montae yo uso B transistores porque e di&idido las luces en B fases 2 en los leds de iluminacin yla tercera para la lu" de luna/

    AA

    http://www.softweb.es/acuario/Esquemas/048.jpghttp://www.softweb.es/acuario/Esquemas/esquema-fuente_bb.jpghttp://www.softweb.es/acuario/Esquemas/TIP141_2.jpghttp://www.softweb.es/acuario/Esquemas/Fuente.jpg

  • 8/19/2019 Controlador de acuario con Arduino

    12/73

    Programación del Arduino 

    8ueno una &e" que conocemos la mayoría de los perifDricos que puede lle&ar nuestro #rduino, &eremoscomo programarlo para que haga todo lo que deseemos, )*, no podemos programarlo para que haga

    dinero pero si para que nos controle nuestro acuario como nosotros deseemos/

    Para programar el #rduino de utili"a un programa que es como un editor de te;to, pero con algunasopciones especifica, denominado como G=1 de programacin el cual es gratuito, lo hay para ?indoFs,

    ac y Linu;, os lo podDis descargar de aquí/

    (n &e" descargado el archi&o comprimido lo descomprimimos en un directorio y ya lo tenemos listo parausar/

    Ca solo nos falta instalar el dri&er del #rduino para poder manearlo por (8, para ello basta con

    conectar el #rduino al P con su cable (8 y el P nos pedir! que si busca el dri&er, le diremos que noque lo que queremos es que lo busque en una carpeta determinada, y esta es el subdirectorio del G=1 de

    #rduino denominado Mdri&ersN, con esto nos instalara el dri&er y tendremos todo listo para empe"ar/

    Pensaba escribir un gran tocho describiendo los primeros paso de programacin y de como utili"ar el

    G=1, pero es algo ya esta demasiado escrito por todas parte y meor descrito de lo que lo podría hacer yo,por lo que meor os deo unos enlaces a unos tutoriales que lo e;plican todo mucho meor, a sin adem!s

    los podDis tener para consultas, adem!s de otros enlaces importantes/

    Pagina oficial de #rduino, hay documentacin, eemplos y librerías para poder manear todo tipo de

    perifDricos, adem!s de una guía detallada del lenguae de programacin/$en ingles%http:EEarduino/ccE 

    Pagina ofician de #rduino en 1spañol con lo mismo que la de ingles pero menos actuali"ado/http:EEarduino/ccEesE 

    Pagina de descarga del G=1 del #rduino/

    http:EEarduino/ccEesEainEoftFare 

    Pagina del foro del #rduino, tiene un apartado en español, bastante acti&o/

    http:EEarduino/ccEforumEinde;/php 

    5arios tutorial del G=1 de #rduino y de programacin del #rduino/

    #rduinoOuserOmanualOes/pdf anualOProgramacionO#rduino/pdf 

    #rduinoOprogramingOnotebooO1/pdf #rduino/OircuitosOb!sicosOdeOentrada

  • 8/19/2019 Controlador de acuario con Arduino

    13/73

    el &oltae de entrada a una salida constante de 3&, claro que

    el &oltae que sobra el integrado lo tiene que disipar enforma de calor, adem!s del calor que le produce el consumo

    que pasa por el, con lo cual tenemos que a la larga nospermite alimentarlo con otro &oltae pero con casi el mismo

    consumo que el (8 si no queremos quemar el integrado

    de entrada/

    Lo mas con&eniente si conectamos muchas cosas es alimentarlo directamente a 3& por el conectorP*?16, de esta forma no tendremos problemas de consumo y podremos conectar todo lo que queramos,

    pero siempre que uno de los aparatos conectados necesite alimentacin se conecte esta a los 3& de la

    alimentacin directamente, adem!s hay que tener en cuenta que el #rduino solo soporta un consumointerno de -00 m#, por lo que todas las señales de salida untas del #rduino no tienen que superar ese

    &alor/

    Conectando nuestro primer artilugio al Arduino (La sonda de temperatura)

    omo ya &imos al principio del post, como sonda de temperatura lo meor que hay es el integrado de Bpatillas =A>820 de la casa =allasEa;im es un termmetro digital de a A2 bits que se conecta a tra&Ds

    de un bus A

  • 8/19/2019 Controlador de acuario con Arduino

    14/73

    (na librería es unos archi&os con funciones que nospermiten manear determinadas características del

    #rduino o de un componente conectado al #rduino/

    1stas librería deben de estar en un subdirectoriodentro del directorio que tiene el G=1 de #rduino específicos para ellas llamado MlibrariesN, si mir!is en

    este directorio &erDis que hay muchos subdirectorios de di&ersas librerías, el G=1 del #rduino cada &e"

    que lo eecutamos mira estos directorios para registrar todas las librerías/

    i eecutamos el G=1 del #rduino y nos &amos al men' MetchN y a MGmport LibraryN &eremos todas laslibrerías registrada en el G=1, si le damos a una de ellas, nos escribir! en el cdigo la llamada a estalibrería para poder usarla/

    onque empecemos eecutemos el G=1 y al arrancar ya tendremos abierto el editor con un nue&o archi&o,empe"aremos añadiendo dos librerías que nos hace falta para manear el =A>820 que son la

    M*ne?ie/hN que ya trae el G=1 en su instalacin y la M=allas4emperature/hN que no descargaremos ycopiaremos de este del 1nlace/

    Para añadirlas lo podemos hacer d!ndole al men' Metch820, de esta forma

    EE =irecciones de los sensores de temperatura

    =e&ice#ddress #gua4ermo, 4apa4ermo, =epo4ermoV 

    Co aquí declaro B &ariables porque tengo B sensores montados, de esta forma cada &e" que quiera consultar

    algunos de mis sensores los llamare a cada uno por sus nombres/

    Luego declaramos las &ariables que nos permite manear un obeto de tipo =allas4emperature/

    *ne?ire one?ire$ PG)OPO41P16 %V 

    =allas4emperature sensors$Wone?ire%V

    =e esta forma declaramos una cone;in *)1?G61 llamada Mone?ireN que apunta a nuestro sensor y estase la pasamos a MsensorsN para crearlo, que es un obeto =allas4emperature, estas dos &ariable las podDis

    llamar como &osotros quer!is, estos nombres son solo los que yo decidí/

    A-

    http://www.milesburton.com/?title=Dallas_Temperature_Control_Library#Downloadhttp://www.softweb.es/acuario/Esquemas/Conexion%20del%20sensor%20DS18B202.pnghttp://www.softweb.es/acuario/Esquemas/DS18B20_parasite_mode_2.pnghttp://www.milesburton.com/?title=Dallas_Temperature_Control_Library#Download

  • 8/19/2019 Controlador de acuario con Arduino

    15/73

    La funcin setup$%

    1n ella declararemos que el pin 7 es de entrada de datos

    &oid setup$% 

    EEpin 7 es de entrada de datospinode$PG)OPO41P16, G)P(4 %V 

    EEGniciamos el controlador del controladorEs =A>820sensors/begin$%V 

    EEompruebo que estDn todos los sensores/

    EEuidado, ya que al llamar a Msensors/get#ddress$%N, lo que hacemos es definir queEE&ariable es cada sensor, por eemplo definimos que el sensor )Q0 es =epo4ermo/

    if $sensors/get=e&iceount$% U B% erial/println $ YJaltan sensores de temperaturaN%V

    if $Zsensors/get#ddress$=epo4ermo, 0%% erial/println $YJalta el sensores de temperatura del=epositoY%V

    if $Zsensors/get#ddress$#gua4ermo, A%% erial/println $ MJalta el sensores de temperatura delaguaY%V 

    if $Zsensors/get#ddress$4apa4ermo, 2%% erial/println $ YJalta el sensores de temperatura de la

    tapaY%V 

    EEdefinimos sus mínimo y m!;imo de temperatura para cada uno, de forma que losEEcalentadores se enciendan cuando la temperatura bae a los 2./23 grados y se apaguen

    EEcuando lleguen a los 2./73 grados, y los &entiladores de la tapa se enciendan al llegar

    EE a los B0/00 grados y se apaguen al llegar a los 2/30 grados/sensors/setHigh#larm4emp$ #gua4ermo, 2./73 %V 

    sensors/setLoF#larm4emp$ #gua4ermo, 2./23 %V sensors/setHigh#larm4emp$ =epo4ermo, 2./73 %V 

    sensors/setLoF#larm4emp$ =epo4ermo, 2./23 %V sensors/setHigh#larm4emp$ 4apa4ermo, B0/00 %V sensors/setLoF#larm4emp$ 4apa4ermo, 2/30 %V 

    [

    8ien con esto ya tenemos definido nuestro inicio del #rduino el cual nos &a a iniciar y configurar nuestrossensores/

    #hora &eremos como leer la temperatura con nuestros sensores/

    &oid loop$% X 

    float 4emperatura#cuario, 4emperatura=eposito, 4emperatura4apaV 

    EELlamamos a la funcin request4emperatures$% de nuestro controlador de sensores

    EEpara que se prepare a nuestra llamada de lectura/sensors/request4emperatures$%V 

    EEllamamos a get4emp$% pas!ndole la &ariable del sensor que queremos leer

    EE y esta funcin nos de&ol&er! la temperatura de el sensor llamado/

    4emperatura#cuario @ sensors/get4emp$ #gua4ermo %V EE #(#6G*4emperatura4apa @ sensors/get4emp$ 4apa4ermo %V EE 4#P#

    4emperatura=eposito @ sensors/get4emp$=epo4ermo%V EE =1P*G4*

    EEahora que tenemos las temperaturas de nuestros sensores podemos hacer con

    A3

  • 8/19/2019 Controlador de acuario con Arduino

    16/73

    EEellas los que queramos, por eemplo sacarlas por una pantalla/

    EE# continuacin comprobaremos si se a acti&ado alguna alarma de temperatura en nuestros

    sensoresif $sensors/has#larm$#gua4ermo%% 

    EE e a acti&ado una alarma, comprobamos cual y actuamos/if $ sensors/get4emp$#gua4ermo% U sensors/getLoF#larm4emp$#gua4ermo % % 

    X EE 1ncendemos el calentador del acuario

    if $ sensors/get4emp$#gua4ermo% S sensors/getHigh#larm4emp$#gua4ermo% % X 

    EE#pagamos el calentador del acuario[ 

    if $sensors/has#larm$=epo4ermo%% X 

    if $ sensors/get4emp$=epo4ermo% U sensors/getLoF#larm4emp$=epo4ermo%% X 

    EE 1ncendemos el calentador del deposito

    [ if $ sensors/get4emp$=epo4ermo% S sensors/getHigh#larm4emp$=epo4ermo%% 

    EE #pagamos el calentador del deposito[ 

    [ if $sensors/has#larm$4apa4ermo%% 

    if $ sensors/get4emp$4apa4ermo% S sensors/getHigh#larm4emp$4apa4ermo%% X 

    EE 1ncendemos los &entiladores de la tapa[ 

    if $ sensors/get4emp$4apa4ermo% U sensors/getLoF#larm4emp$4apa4ermo%% 

    X EE #pagamos los &entiladores de la tapa/

    [ [ 

    [

    1n este enlace tenDis el cdigo/

    1n la pr;ima hablaremos de la pantalla L= importante para &er lo que pasa y optimi"aremos este cdigopara que sea m!s efecti&o/

    A.

    http://www.softweb.es/acuario/codigos/Ejemplo1.pdehttp://www.softweb.es/acuario/codigos/Ejemplo1.pde

  • 8/19/2019 Controlador de acuario con Arduino

    17/73

    La pantalla 

    omo ya &imos al principio del post lo normal es que la pantalla sea una L= de cristal liquido, las mascomunes son de caracteres y se definen por cuantos caracteres caben en cada línea y cuantas líneas tiene/

    Para comunicarnos con ellas tenemos que hacerlo por un bus de datos de -bit o >bit en definiti&a por -

    cables o >, los cuales ir!n conectados a los pines digitales del #rduino, lo normal es que con -bit sepuedan manear casi todas/

    #dem!s del bus de datos tendremos que conectar algunos cables m!s, como son registro (%S) que es el

    que controla en quD parte de la memoria del L= est!s escribiendo datos, el cual ira a otro pin digital del#rduino, tambiDn conectaremos el pin de lecturaEescritura (%&') que selecciona el modo de lectura o elde escritura, este a no ser que nos queramos meter en reprogramacin de los caracteres de la pantalla lopondremos a masa $polo negati&o%/

    Luego nos queda el pin para habilitar (E&enale) que habilita los registros, el cual ira a otro pin digital del#rduino, tambiDn tendremos que conectar un potencimetro de A0K *hm conectado entre el positi&o y el

    negati&o de la alimentacin y con su punto central al pin (*) para regular el contraste de la pantalla/C por ultimo los cables de alimentacin negati&o y positi&o de 3& para la pantalla y suele ser tambiDnnecesario para pines de retroiluminacin (B+lt, y B+lt-), encender y apagar la retro8it/D0 \D1 \ \D2 \ -8it/ \D3 \ \D4 \ \%S ontrol del direccionamiento de memoria/%' eleccin de modo lecturaEescritura/E Habilitacin de los registros/*  ontraste de la pantalla/

    B+lt, Positi&o alimentacin de la retro

  • 8/19/2019 Controlador de acuario con Arduino

    18/73

  • 8/19/2019 Controlador de acuario con Arduino

    19/73

    *s la podDis descargar de este enlace/

    Tinclude YL=A2>;.-/hY EE#ñadimos la librería en nuestro cdigo/EEGniciali"amos nuestra &ariable de la pantalla con la librería sin par!metros ningunos/

    L=A2>;.-lass iPantalla $%V

    Pero tener en cuenta que al funcionar con un puerto serial tenemos que editar la librería y modificarla sideseamos utili"ar otro puerto serial que no sea el por defecto del #rduino/

    Por eemplo si utili"ados un #rduino mega y queremos utili"ar el puerto serial A tendremos que cambiar elMerialN por MerialAN/

    &oid setup$&oid% 

    EE =efinimos el tiempo de espera entre cada orden a la pantalla/iPantalla/et=elay$200%V EEilisegundos

    EE =efinimos el brillo que queremos en la pantalla de 0 a A00/iPantalla/8rillo$70%V 

    &oid loop$&oid% 

    X EE8orramos la pantalla entera/

    Lcd/ls$%V 

    EE1scribimos en la posicin que indiquemos, la posicin &a en escala de puntos A2> ; .- puntos/

    iPantalla/?riteIC$ 6elo/=ate4ime$%, A0, .A%V 

    [

    Para este tipo de pantallas tambiDn tenemos otras rdenes como:

    EE8orrar una "ona determinada de la pantalla

    &oid 8orrar$byte desdeO;, byte desdeOy, byte hastaO;, byte hastaOy%V

    EE#cti&ar o desacti&ar un punto de la pantalla/&oid Pi;el$byte ;, byte y, byte modo%V

    EEPosicionar el cursor en unas coordenadas de la pantalla/&oid otoIC$byte ;, byte y%V

    EE1scribir en la pantalla en la posicin actual del cursor/&oid ?rite$char] st%V

    &oid ?rite$int st%V&oid ?rite$long st%V

    &oid ?rite$float st%V&oid ?rite$float st, int decimales%V

    EE1scribir en la pantalla en la posicin que le digamos/&oid ?riteIC$char] st, byte ;, byte y%V

    &oid ?riteIC$int st, byte ;, byte y%V&oid ?riteIC$long st, byte ;, byte y%V

    &oid ?riteIC$float st, byte ;, byte y%V

    &oid ?riteIC$float st, byte ;, byte y, int decimales%V

    A

    http://www.softweb.es/acuario/codigos/LCD128x64.ziphttp://www.softweb.es/acuario/codigos/LCD128x64.ziphttp://www.softweb.es/acuario/codigos/LCD128x64.zip

  • 8/19/2019 Controlador de acuario con Arduino

    20/73

    EE=ibuar en la pantalla un rectangulo/

    &oid 6ectangulo$byte ;A, byte yA, byte ;2, byte y2%V

    EE=ibuar en la pantalla un circulo/&oid irculo$byte entroI, byte entroC, byte 6adio, byte modo%V

    EE=ibuar en la pantalla una linea/&oid Linea$int ;A, int yA, int ;2, int y2, int "%V

    EE=ibuar en la pantalla un grafico/

    &oid Gmagen$ int desdeO;, int desdeOy, int ancho, int alto, int modo, P6*1 progOuintA.Ot

    ]array%V

    8ueno pues tras esto nos pondremos a crear ya nuestro montae inicial, uniendo nuestro sensor de

    temperatura y nuestra pantalla en un montae y un cdigo/

    Para esto escribiremos el comien"o de nuestro programa, estructur!ndolo bien para poder seguirlo sinperdernos, ni liarnos/

    )o puedo dar una clase de programacin, pero os aseguro que si me seguís cualquiera de &osotros podrDiscrear &uestra programacin a medida para &uestro montae/

    )o es difícil, solo es entretenido y muy gratificante/

    Hoy un poco de programacin, un par de post antes &imos la programacin de los sensores de temperatura,para lo cual puse el siguiente cdigo/

    Tinclude U*ne?ire/hS

    Tinclude U=allas4emperature/hS

    Tdefine PG)OPO41P16 7

    =e&ice#ddress #gua4ermo, 4apa4ermo, =epo4ermoV EE =irecciones de los sensores de temperatura

    *ne?ire one?ire$ PG)OPO41P16 %V

    =allas4emperature sensors$Wone?ire%V

    &oid setup$%

    Xpinode$PG)OPO41P16, G)P(4 %V

    EEGniciamos el controlador del controladorEs =A>820

    sensors/begin$%V

    EEompruebo que estDn todos los sensores/

    EEuidado, ya que al llamar a Msensors/get#ddress$%N, lo que hacemos es definir que

    EE&ariable es cada sensor, por eemplo definimos que el sensor )Q0 es =epo4ermo/if $sensors/get=e&iceount$% U B% erial/println$ YJaltan sensores de temperaturaN%V

    if $Zsensors/get#ddress$=epo4ermo, 0%% erial/println$YJalta el sensores de temperatura del=epositoY%V

    if $Zsensors/get#ddress$#gua4ermo, A%% erial/println$YJalta el sensores de temperatura del aguaY%V

    if $Zsensors/get#ddress$4apa4ermo, 2%% erial/println$YJalta el sensores de temperatura de la tapaY%V

    EEdefinimos sus mínimo y m!;imo de temperatura para cada uno, de forma que losEEcalentadores se enciendan cuando la temperatura bae a los 2./23 grados y se apaguen

    20

  • 8/19/2019 Controlador de acuario con Arduino

    21/73

    EEcuando lleguen a los 2./73 grados, y los &entiladores de la tapa se enciendan al llegar

    EE a los B0/00 grados y se apaguen al llegar a los 2/30 grados/sensors/setHigh#larm4emp$ #gua4ermo, 2./73 %V

    sensors/setLoF#larm4emp$ #gua4ermo, 2./23 %Vsensors/setHigh#larm4emp$ =epo4ermo, 2./73 %V

    sensors/setLoF#larm4emp$ =epo4ermo, 2./23 %V

    sensors/setHigh#larm4emp$ 4apa4ermo, B0/00 %Vsensors/setLoF#larm4emp$ 4apa4ermo, 2/30 %V

    [

    &oid loop$%

    Xfloat 4emperatura#cuario, 4emperatura=eposito, 4emperatura4apaV

    EELlamamos a la funcin request4emperatures$% de nuestro controlador de sensores

    EEpara que se prepare a nuestra llamada de lectura/

    sensors/request4emperatures$%V

    EEllamamos a get4emp$% pas!ndole la &ariable del sensor que queremos leerEE y esta funcin nos de&ol&er! la temperatura de el sensor llamado/

    4emperatura#cuario @ sensors/get4emp$ #gua4ermo %V EE #(#6G*

    4emperatura4apa @ sensors/get4emp$ 4apa4ermo %V EE 4#P#4emperatura=eposito @ sensors/get4emp$=epo4ermo%V EE =1P*G4*

    EEahora que tenemos las tempreaturas de nuestros sensores podemos hacer conEEellas los que queramos, por eemplo sacarlas por una pantalla/

    EE# continuacin comprobaremos si se a acti&ado alguna alarma de temperatura en nuestros

    sensores

    if $sensors/has#larm$#gua4ermo%%X

    EE e a acti&ado una alarma, comprobamos cual y actuamos/if $ sensors/get4emp$#gua4ermo% U sensors/getLoF#larm4emp$#gua4ermo % %

    X

    EE 1ncendemos el calentador del acuario[

    if $ sensors/get4emp$#gua4ermo% S sensors/getHigh#larm4emp$#gua4ermo% %X

    EE#pagamos el calentador del acuario

    [

    [if $sensors/has#larm$=epo4ermo%%X

    if $ sensors/get4emp$=epo4ermo% U sensors/getLoF#larm4emp$=epo4ermo%%

    XEE 1ncendemos el calentador del deposito

    [if $ sensors/get4emp$=epo4ermo% S sensors/getHigh#larm4emp$=epo4ermo%%

    X

    EE #pagamos el calentador del deposito[

    [if $sensors/has#larm$4apa4ermo%%

    X

    2A

  • 8/19/2019 Controlador de acuario con Arduino

    22/73

    if $ sensors/get4emp$4apa4ermo% S sensors/getHigh#larm4emp$4apa4ermo%%

    XEE 1ncendemos los &entiladores de la tapa

    [if $ sensors/get4emp$4apa4ermo% U sensors/getLoF#larm4emp$4apa4ermo%%

    X

    EE #pagamos los &entiladores de la tapa/[

    [[

    1ste cdigo esta bien pero si seguimos programando así, escribiendo todo de forma seguida dentro de la

    funcin Msetup$%N y Mloop$%N, cuando lle&emos la mitad del cdigo escrito nos ser! casi imposible seguir elhilo de lo que hace el cdigo, por lo cual lo ideal es repartir el cdigo en funciones, las cuales se declaran

    igual que Msetup$%N y Mloop$%N, pero con otros nombre que nosotros decidamos, hay que tener en cuenta por

    eemplo que las &ariables que declaremos dentro de una funcin, solo podremos acceder a ella dentro de lafuncin y estas de reiniciaran cada &e" que salgamos de la funcin/

    iguiendo este termino, modificaremos el cdigo ya escrito, quitando el cdigo de iniciacin de los

    sensores de temperatura de la funcin Msetup$%N y poniendo este cdigo dentro de una funcin que

    llamaremos MGniciar4emperaturas$%N y dentro de Msetup$%N pondremos tan solo la llamada a esta funcin,tambiDn el cdigo de comprobacin de la temperatura que esta en Mloop$%N lo quitaremos y lo pondremos

    dentro de otra funcin que llamaremos Mirar4emperaturas$%N y dentro de Mloop$%N pondremos unallamada a esta funcin, espero que esto este claro para los que est!n pegados en programacin/

    1ste nue&o cdigo lo guardaremos con otro nombre como M)uestroontrolador/inoN, este fichero ser!

    nuestro proyecto de controlador y a partir de ahora le iremos añadiendo todo el cdigo que &allamosa&an"ando para controlar todo/

    Tinclude U*ne?ire/hS

    Tinclude U=allas4emperature/hS

    Tdefine PG)OPO41P16 7

    =e&ice#ddress #gua4ermo, 4apa4ermo, =epo4ermoV EE =irecciones de los sensores de temperatura

    *ne?ire one?ire$ PG)OPO41P16 %V

    =allas4emperature sensors$Wone?ire%V

    &oid setup$%

    X

    pinode$PG)OPO41P16, G)P(4 %V

    Gniciar4emperaturas$%V EEGniciamos los sensores de temperatura/

    [

    &oid loop$%

    Xirar4emperaturas$%V EEiramos la temperaturas

    [

    &oid Gniciar4emperaturas$%

    XEEGniciamos el controlador del controladorEs =A>820

    22

  • 8/19/2019 Controlador de acuario con Arduino

    23/73

    sensors/begin$%V

    EEompruebo que estDn todos los sensores/

    EEuidado, ya que al llamar a Msensors/get#ddress$%N, lo que hacemos es definir queEE&ariable es cada sensor, por eemplo definimos que el sensor )Q0 es =epo4ermo/

    if $sensors/get=e&iceount$% U B% erial/println$ YJaltan sensores de temperaturaN%V

    if $Zsensors/get#ddress$=epo4ermo, 0%% erial/println$YJalta el sensores de temperatura del=epositoY%V

    if $Zsensors/get#ddress$#gua4ermo, A%% erial/println$YJalta el sensores de temperatura del aguaY%Vif $Zsensors/get#ddress$4apa4ermo, 2%% erial/println$YJalta el sensores de temperatura de la tapaY%V

    EEdefinimos sus mínimo y m!;imo de temperatura para cada uno, de forma que losEEcalentadores se enciendan cuando la temperatura bae a los 2./23 grados y se apaguen

    EEcuando lleguen a los 2./73 grados, y los &entiladores de la tapa se enciendan al llegarEE a los B0/00 grados y se apaguen al llegar a los 2/30 grados/

    sensors/setHigh#larm4emp$ #gua4ermo, 2./73 %V

    sensors/setLoF#larm4emp$ #gua4ermo, 2./23 %Vsensors/setHigh#larm4emp$ =epo4ermo, 2./73 %V

    sensors/setLoF#larm4emp$ =epo4ermo, 2./23 %Vsensors/setHigh#larm4emp$ 4apa4ermo, B0/00 %V

    sensors/setLoF#larm4emp$ 4apa4ermo, 2/30 %V

    [

    &oid irar4emperaturas$%

    Xfloat 4emperatura#cuario, 4emperatura=eposito, 4emperatura4apaV

    EELlamamos a la funcin request4emperatures$% de nuestro controlador de sensores

    EEpara que se prepare a nuestra llamada de lectura/

    sensors/request4emperatures$%V

    EEllamamos a get4emp$% pas!ndole la &ariable del sensor que queremos leerEE y esta funcin nos de&ol&er! la temperatura de el sensor llamado/

    4emperatura#cuario @ sensors/get4emp$ #gua4ermo %V EE #(#6G*

    4emperatura4apa @ sensors/get4emp$ 4apa4ermo %V EE 4#P#4emperatura=eposito @ sensors/get4emp$=epo4ermo%V EE =1P*G4*

    EEahora que tenemos las tempreaturas de nuestros sensores podemos hacer con

    EEellas los que queramos, por eemplo sacarlas por una pantalla/

    EE# continuacin comprobaremos si se a acti&ado alguna alarma de temperatura en nuestrossensoresif $sensors/has#larm$#gua4ermo%%

    X

    EE e a acti&ado una alarma, comprobamos cual y actuamos/if $ sensors/get4emp$#gua4ermo% U sensors/getLoF#larm4emp$#gua4ermo % %

    XEE 1ncendemos el calentador del acuario

    [

    if $ sensors/get4emp$#gua4ermo% S sensors/getHigh#larm4emp$#gua4ermo% %X

    EE#pagamos el calentador del acuario[

    [

    2B

  • 8/19/2019 Controlador de acuario con Arduino

    24/73

    if $sensors/has#larm$=epo4ermo%%

    Xif $ sensors/get4emp$=epo4ermo% U sensors/getLoF#larm4emp$=epo4ermo%%

    XEE 1ncendemos el calentador del deposito

    [

    if $ sensors/get4emp$=epo4ermo% S sensors/getHigh#larm4emp$=epo4ermo%%X

    EE #pagamos el calentador del deposito[

    [

    if $sensors/has#larm$4apa4ermo%%X

    if $ sensors/get4emp$4apa4ermo% S sensors/getHigh#larm4emp$4apa4ermo%%X

    EE 1ncendemos los &entiladores de la tapa

    [if $ sensors/get4emp$4apa4ermo% U sensors/getLoF#larm4emp$4apa4ermo%%

    XEE #pagamos los &entiladores de la tapa/

    [

    [[

    #quí tenDis el cdigo final )uestroontrolador00A/"ip

    #hora le añadiremos el cdigo para empe"ar a pintar en nuestra pantalla, para lo cual añadiremos anuestro cdigo la librería de nuestra pantalla y su iniciacin/

    Por eemplo para una pantalla de caracteres/

    Tinclude U*ne?ire/hS

    Tinclude U=allas4emperature/hS

    Tinclude ULiquidrystal/hS

    Tdefine PG)OPO41P16 7Tdefine L=O?G=4H A. EE#ncho de la pantalla

    Tdefine L=OH1GH4 2 EE #lto de la pantalla

    =e&ice#ddress #gua4ermo, 4apa4ermo, =epo4ermoV EE =irecciones de los sensores de temperatura

    *ne?ire one?ire$ PG)OPO41P16 %V

    =allas4emperature sensors$Wone?ire%V

    Liquidrystal lcd$A2, 2, A0, , >, 7%V EEGniciamos la pantalla

    &oid setup$%X

    pinode$PG)OPO41P16, G)P(4 %V

    lcd/begin$L=O?G=4H, L=OH1GH4,A%V EE#rrancamos nuestra pantalla

    Gniciar4emperaturas$%V EEGniciamos los sensores de temperatura/[

    2-

    http://www.softweb.es/acuario/codigos/NuestroControlador001.ziphttp://www.softweb.es/acuario/codigos/NuestroControlador001.zip

  • 8/19/2019 Controlador de acuario con Arduino

    25/73

    C en la funcin Mirar4emperaturas$%N pondremos el cdigo para que pinte lo &alores de las temperaturas/

    &oid irar4emperaturas$% X 

    float 4emperatura#cuario, 4emperatura=eposito, 4emperatura4apaV 

    char data^A2_V EE5ariable para pasar el &alor de la temperatura a te;to/

    EELlamamos a la funcin request4emperatures$% de nuestro controlador de sensores

    EEpara que se prepare a nuestra llamada de lectura/sensors/request4emperatures$%V 

    EEllamamos a get4emp$% pas!ndole la &ariable del sensor que queremos leer

    EE y esta funcin nos de&ol&er! la temperatura de el sensor llamado/4emperatura#cuario @ sensors/get4emp$ #gua4ermo %V EE #(#6G*

    4emperatura4apa @ sensors/get4emp$ 4apa4ermo %V EE 4#P#

    4emperatura=eposito @ sensors/get4emp$=epo4ermo%V EE =1P*G4*

    EEahora que tenemos las temperaturas de nuestros sensores la pintamos en nuestra pantallalcd/setursor$0,0%V EE)os ponemos en el inicio de la pantalla

    lcd/print$Y#(#: Y%V 

    dtostrf$ data, -, 2, 4emperatura#cuario %V EEon&ertimos el &alor de la temperatura a te;to con dosdecimales/

    lcd/print$data%V EE Lo pintamos/lcd/setursor$AA,0%V EE)os ponemos en la derecha de la pantalla

    lcd/print$Y4#P#: Y%V 

    dtostrf$ data, -, 2, 4emperatura4apa %V EEon&ertimos el &alor de la temperatura a te;to con dosdecimales/

    lcd/print$data%V EE Lo pintamos/lcd/setursor$0,A%V EE)os ponemos al inicio de la segunda línea/

    lcd/print$Y=1P*: Y%V dtostrf$ data, -, 2, 4emperatura=eposito%V EEon&ertimos el &alor de la temperatura a te;to con dosdecimales/

    lcd/print$data%V EE Lo pintamos/

    on la pantalla A2>;.- conectada en paralelo/

    Tinclude U*ne?ire/hS

    Tinclude U=allas4emperature/hS

    Tinclude YL=A2>.-6/hYTdefine #6OG`1$ a % si"eof$ a % E si"eof$ a^0_ %

    Tdefine PG)OPO41P16 7

    =e&ice#ddress #gua4ermo, 4apa4ermo, =epo4ermoV EE =irecciones de los sensores de temperatura

    *ne?ire one?ire$ PG)OPO41P16 %V 

    =allas4emperature sensors$Wone?ire%V 

    &oid setup$% 

    X pinode$PG)OPO41P16, G)P(4 %V 

    L=#/Gnitialise$%V EEGniciamos la pantalla

    23

  • 8/19/2019 Controlador de acuario con Arduino

    26/73

    L=#/L1#6$%VEELimpiamos la pantalla

    Gniciar4emperaturas$%V EEGniciamos los sensores de temperatura/

    [

    C ahora lo pintamos

    EEahora que tenemos las temperaturas de nuestros sensores la pintamos en nuestra pantalla

    L=#/=isplaytring$0,A, Y#(#: Y, #6OG`1$Y#(#: Y%%V dtostrf$ data, -, 2, 4emperatura#cuario %V EEon&ertimos el &alor de la temperatura a te;to con dosdecimales/

    L=#/=isplaytring$0,>, data, #6OG`1$data%%V EE Lo pintamos/delay$A00%V 

    L=#/=isplaytring$A,A, Y4#P#: Y, #6OG`1$Y4#P#: Y%%V 

    dtostrf$ data, -, 2, 4emperatura4apa %V EEon&ertimos el &alor de la temperatura a te;to con dosdecimales/

    L=#/=isplaytring$A,>, data, #6OG`1$data%%V EE Lo pintamos/delay$A00%V 

    L=#/=isplaytring$A,A, Y=1P*: Y, #6OG`1$Y4#P#: Y%%V dtostrf$ data, -, 2, 4emperatura=eposito %V EEon&ertimos el &alor de la temperatura a te;to con dosdecimales/

    L=#/=isplaytring$A,>, data, #6OG`1$data%%V EE Lo pintamos/delay$A00%V 

    on la pantalla A2>;.- conectada por serial/

    Tinclude U*ne?ire/hS

    Tinclude U=allas4emperature/hSTinclude YL=A2>;.-/hY EE Libreria del L=

    Tdefine PG)OPO41P16 7

    =e&ice#ddress #gua4ermo, 4apa4ermo, =epo4ermoV EE =irecciones de los sensores de temperatura

    *ne?ire one?ire$ PG)OPO41P16 %V=allas4emperature sensors$Wone?ire%V

    L=A2>;.-lass Lcd$ A, A> %V EE=eclaramos la pantalla

    &oid setup$%

    X

    pinode$PG)OPO41P16, G)P(4 %V

    Lcd/et=elay$200%V EE=eclaramos el tiempo en de espera entre cada orden/Lcd/8rillo$70%V EE=efinimos el brillo que queremos en nuestra pantalla/

    Gniciar4emperaturas$%V EEGniciamos los sensores de temperatura/

    [

    C ahora lo pintamos

    EEahora que tenemos las temperaturas de nuestros sensores la pintamos en nuestra pantalla

    Lcd/?riteIC$Y#(#6G* :Y, 2, 30%V 

    Lcd/?riteIC$4emperatura#cuario, 37, 30 %V 

    2.

  • 8/19/2019 Controlador de acuario con Arduino

    27/73

    Lcd/?riteIC$Y4#P#=16#:Y, 2, -0%V 

    Lcd/?riteIC$4emperatura4apa, 37, -0 %V Lcd/?riteIC$Y=1P*G4*:Y, 2, B0%V 

    Lcd/?riteIC$4emperatura=eposito, 37, B0 %V 

    #quí tenDis el cdigo final )uestroontrolador002/"ip 

    =entro de poco pondrD la parte del relo y el teclado, pero mientras tanto para aclarar un poco las ideas a

    los que est!n pensando como montar su propio controlador, le pongo unos enlaces de otra mucha gente queesta montando tambiDn sus controladores, esperando que pod!is coger ideas de como conectar y encaar el

    controlador en &uestro acuario/

    1n español:http:EEFFF/carballada/comEFordpress///

  • 8/19/2019 Controlador de acuario con Arduino

    28/73

    int etHour$%VEE*btiene un entero con el &alor de la hora/ 

    int etinute$%VEE*btiene un entero con el &alor de los minutos/ int etCear$%VEE*btiene un entero con el &alor del año/ 

    int etonth$%VEE*btiene un entero con el &alor del mes/ int et=ay$%VEE*btiene un entero con el &alor del día/ 

    &oid et=iaemana$ int =iaemana %V EE1stablece el día de la semana$Lunes,artes/%/ 

    int et=iaemana$%V EE*btiene un entero con el &alor del día de la semana char ] =ia)ame$%V EE*btiene una cadena con el nombre del día de la semana/ 

    char ] es)ame$%VEE*btiene una cadena con el nombre del mes/ boolean GsLater$ int hour, int minute %V EE)o de&uel&e si la hora actual es mas tarde que la pasada/ 

    boolean GsPre&ious$ int hour, int minute %V EE)o de&uel&e si la hora actual es mas temprana que la

    pasada/ 

    u uso &iendo las funciones que tiene es bastante simple, empe"aremos añadiendo en nuestro 'ltimocdigo la llamada a la librería y tambiDn la librería U?ire/hS que tambiDn utili"a internamente/

    Tinclude U?ire/hS

    Tinclude U*ne?ire/hSTinclude U=allas4emperature/hS

    Tinclude YL=A2>;.-/hY EE Libreria del L=

    Tinclude Y6elo=AB07/hY EE Libreria del 6elo

    #sí mismo declararemos la &ariable con la que utili"aremos el 6elo=AB07, en este caso simplemente la

    llamaremos M6eloN/

    *ne?ire one?ire$ PG)OPO41P16 %V =allas4emperature sensors$Wone?ire%V 

    L=A2>;.-lass Lcd$ A, A> %V EE=eclaramos la pantalla

    6elo=AB07lass 6eloV EE=eclaracin de la &ariable del 6elo

    1n la funcin Msetup$%N añadiremos la iniciacin del sistema Fire para uso de nuestro 6elo

    Lcd/et=elay$200%V EE=eclaramos el tiempo en de espera entre cada orden/

    Lcd/8rillo$70%V EE=efinimos el brillo que queremos en nuestra pantalla/?ire/begin$%V

    4ambiDn añadiremos otra línea para poner en hora nuestro relo, pero esta línea ser! solo para que se use

    una sola &e", de forma que cuando se reinicie el #rduino y funcione le cargaremos otra &e" el mismocdigo pero sin esta línea, ya que esta línea te pondr! la fecha y hora del relo en cuanto se inicie el

    #rduino y si lo apagas y inicias otra &e" te la &ol&er! a configurar la misma y entonces tendr! retraso el

    relo como es normal/

    Lcd/et=elay$200%V EE=eclaramos el tiempo en de espera entre cada orden/

    Lcd/8rillo$70%V EE=efinimos el brillo que queremos en nuestra pantalla/?ire/begin$%V 

    6elo/et=ate4ime$ A>, 0A, A2, A>, A2, 00 %V

    as adelante &eremos como configurar la hora sin tener que armar este aleo/Luego para que podamos &er en nuestra pantalla la fecha y la hora actual, es tan simple como poner en

    nuestra funcin Mloop$%N una llamada a la funcin de pintar de nuestra pantalla pes!ndole lo que nos

    de&uel&e la funcin 6elo/=ate4ime$%/

    &oid loop$% 

    2>

  • 8/19/2019 Controlador de acuario con Arduino

    29/73

    Lcd/?riteIC$ 6elo/=ate4ime$%, A0, .A%V irar4emperaturas$%V EEiramos la temperaturas

    1sto nos imprimir! en nuestra pantalla algo como MA>E0AEA2 A.:B3:23N

    #quí os deo el cdigo de nuestro controlador modificado )uestroontrolador00B/"ip/ 

    1n la pr;ima &eremos como guardar y leer nuestra configuracin desde la 1prom del #rduino, en esta

    memoria, aunque le cortemos la corriente al #rduino, no se perder! lo que guardemos/

    7uardar y leer nuestra con8iguración desde la Eprom del Arduino

    5amos a &er ahora como guardar y leer los datos de nuestra configuracin, como &imos anteriormentecon nuestro sensor de temperatura podemos controlar los calentadores, pero el &alor de temperatura que

    deseamos tener si lo ponemos en el cdigo escrito, significa que cada &e" que queramos cambiar este&alor deberemos editar el programa y cargarlo en nuestro #rduino/

    1sto no es practico, por lo que lo ra"onable es que el &alor de temperatura deseado este en una &ariable lacual si queremos cambiar, lo podemos hacer desde un men' en la pantalla, el problema que tiene esto es

    que si se corta la lu" a nuestro #rduino se le borra el &alor de todas las &ariable como es natural, para

    solucionar este problema tenemos la solucin muy practica, que es guardar los datos de nuestraconfiguracin en la 1P6* la memoria no &ol!til del #rduino que tiene 3A2 bytes de memoria, es poco

    pero para nuestra configuracin nos sobra/

    Para poder escribir y leer en la 1P6* del #rduino tenemos la librería 11P6*/h la cual ya &iene con

    el G=1 del #rduino, esta librería es muy simple ya que solo tiene 2 funciones read$% y Frite$% , con lo cualqueda claro su maneo/

    Pero escribir en una 1P6* tiene un problema, que no es como un disco de ordenador, no hay archi&osni directorios, solo un espacio de 3A2 bytes, por lo que si queremos guardar &arios datos tenemos que

    saber la posicin de cada uno, para e&itar esto utili"aremos un tipo de dato llamado struct $estructura% quees un grupo de &ariables unidas por una estructura de esta forma/

    EE 1structura de los datos de configuracin

    typedef struct onfiguracioOstructX 

    float 4ermo#cuarioV EE4emperatura #cuariofloat PHV EE5alor del PH

    int Lu"HO*)V EEHora de encendido de la lu"

    int Lu"O*)V EEinutos de encendido de la lu"[ truOonfiguracionV

    =e esta forma solo tendremos que guardar o leer en la 1P6* la &ariable que definamos como

    truOonfiguracion, conteniendo esta todas las &ariable de nuestra configuracin/GmplementDmoslo en nuestro cdigo, añadiendo primero la librería a nuestro cdigo/

    Tinclude U?ire/hS

    Tinclude U*ne?ire/hSTinclude U=allas4emperature/hS EE Librería de los sensores de temperatura

    2

    http://www.softweb.es/acuario/codigos/NuestroControlador003.ziphttp://www.softweb.es/acuario/codigos/NuestroControlador003.ziphttp://www.softweb.es/acuario/codigos/NuestroControlador003.ziphttp://www.softweb.es/acuario/codigos/NuestroControlador003.zip

  • 8/19/2019 Controlador de acuario con Arduino

    30/73

    Tinclude U11P6*/hS EE Librería para poder escribir en la eprom del #rduino

    Tinclude Y6elo=AB07/hY EE Librería del 6eloTinclude YL=A2>;.-/hY EE Librería del L=

    #hora declaremos el tipo de estructura que tendr! nuestra configuracin/

    EE 1structura de los datos de configuracintypedef struct onfiguracioOstruct

    X float 4ermo#cuarioV EE4emperatura #cuariofloat 4ermo4apaV EE4emperatura 4apa

    float 4ermo=epositoV EE4emperatura =epositofloat PHV EE5alor del PH

    int Lu"AHO*)V EEHora de encendido de la lu" )QA

    int Lu"AO*)V EEinutos de encendido de la lu" )QAint Lu"AHO*JJV EEHora de apagado de la lu" )QA

    int Lu"AO*JJV EEinutos de apagado de la lu" )QAint Lu"2HO*)V EEHora de encendido de la lu" )Q2

    int Lu"2O*)V EEinutos de encendido de la lu" )Q2int Lu"2HO*JJV EEHora de apagado de la lu" )Q2int Lu"2O*JJV EEinutos de apagado de la lu" )Q2

    int Lu"BHO*)V EEHora de encendido de la lu" )QBint Lu"BO*)V EEinutos de encendido de la lu" )QB

    int Lu"BHO*JJV EEHora de apagado de la lu" )QB

    int Lu"BO*JJV EEinutos de apagado de la lu" )QB[ truOonfiguracionV

    C luego declaramos la &ariable de tipo truOonfiguracion/

    truOonfiguracion JV

    #hora para poder asignar o leer un &alor de nuestra configuracin tan solo tendremos que hacer esto/

    J/4ermo#cuario @ 27/00V 

    J/PH @ ./>V

    Para que en caso de que no podamos leer la 1P6* o sea la primera &e" que lo hagamos, le daremos anuestra estructura de configuracin unos &alores por defecto/

    J/4ermo#cuario @ 27V 

    J/4ermo4apa @ B0/0V J/4ermo=eposito @ 20/0V 

    J/PH @ 7/0V J/Lu"AHO*) @ A3V 

    J/Lu"AO*) @ 0V 

    J/Lu"AHO*JJ @ 2BV J/Lu"AO*JJ @ B0V 

    J/Lu"2HO*) @ A3V J/Lu"2O*) @ B0V 

    J/Lu"2HO*JJ @ 2-V 

    J/Lu"2O*JJ @ 0V J/Lu"BHO*) @ 2BV 

    J/Lu"BO*) @ 30V 

    B0

  • 8/19/2019 Controlador de acuario con Arduino

    31/73

    J/Lu"BHO*JJ @ 2.V 

    J/Lu"BO*JJ @ 0V

    Luego escribiremos las funciones que leer! y grabara nuestra configuracin en la 1P6*

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  

    EE EE 6#5# L# *)JG(6#G*) 1) L# 1P6*

    EE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  &oid al&aronfig$% 

    X uint>Ot 5alor^si"eof$J%_V 

    memcpy$ W5alor, WJ, si"eof$J%%V 

    for $int i @ 0V i U@ si"eof$5alor%V i99% 11P6*/Frite$i, 5alor^i_%V 

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  

    EE EE L11 L# *)JG(6#G*) =1 L# 1P6*

    EE 

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  &oid Leeronfig$% 

    X uint>Ot 5alor^si"eof$J%_V 

    for $int i @ 0V i U@ si"eof$J%V i99% 5alor^i_ @ 11P6*/read$i%V 

    memcpy$ WJ, W5alor, si"eof$J%%V 

    Luego todo es tan simple como que al iniciar el programa llamemos a la funcin Leeronfig$% con lo cualtendremos en la &ariable J la estructura con los datos de nuestra configuracin, luego si cambiamos

    alg'n &alor de nuestra configuracin llamaremos a al&aronfig$% y tendremos los cambios guardados/

    #quí os deo el cdigo de nuestro controlador modificado/ )uestroontrolador00-/"ip

    8ueno &amos a &er como optimi"ar el cdigo de pintado en pantalla de nuestro controlador, como yadiimos las pantallas L= no se borran solas,

    por lo que si pintamos algo en ellas nodesaparece hasta que pintemos encima o lo

    borremos, por lo cual tenemos que saber

    siempre que pintamos y en donde pintamos,para esto lo meor es hacernos un esquema o

    dibuo de como queremos que quede nuestrapantalla, teniendo en cuenta su tamaño y

    limitaciones/

    BA

    http://www.softweb.es/acuario/codigos/NuestroControlador004.ziphttp://www.softweb.es/acuario/codigos/NuestroControlador004.ziphttp://www.softweb.es/acuario/Esquemas/Pantalla2.jpghttp://www.softweb.es/acuario/codigos/NuestroControlador004.zip

  • 8/19/2019 Controlador de acuario con Arduino

    32/73

    1sta es mi pantalla tal como la diseñe y esta ahora, si nos fiamos bien en ella &eremos que esta di&idida

    en &arias partes/

    i os fi!is hay ciertas parte

    que no e marcado, estas son

    las parte est!ticas o lo que eslo mismo las que no

    cambian, lo mas efecti&o es

    que todas esas partes sepinten desde una funcin ya

    que mientras no cambiemosde pantalla, como &er!n a

    continuacin

    #l fotografiarla se me escapo el mensae del pie, pero quitando esto

    podDis &er lo que pinta mi funcin de pintado de pantalla principal,

    lo dem!s se pinta desde cada funcin encargada del &alor, poreemplo la temperatura se pinta en la funcin que llamamos para

    leerla irar4emperaturas$% sabiendo siempre el lugar dondepintarlo y el espacio que tenemos para ello, esto es importante los

    &alores &ariables que pintamos tenemos que preocuparnos que

    siempre tengan el mismo tamaño, para que machaque lo que habíaantes/

    5amos a aplicar esto en nuestro cdigo, lo primero crearemos 2 nue&as funciones la que pintara las partes

    est!ticas de nuestra pantalla y otra de apoyo que se encargara de pintar a&isos y estado en el pie de lapantalla/

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  EE 

    EE PG)4# () 1)#1 1) 1L PG1 =1 L# P#)4#LL#

    EE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  

    &oid sgPie$ char ] msg % X 

    Lcd/?riteIC$ msg, A0, >%V 

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  EE 

    EE PG)4# L# P#)4#LL# P6G)GP#L

    EE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  

    &oid PrintPantain$% X 

    Lcd/ls$%V 

    Lcd/6ectangulo$0, 0, A27, .B%V Lcd/Linea$ 0, 3B, A27, 3B, A%V 

    Lcd/Linea$ 0, A0, 0, 3B, A%V Lcd/Linea$ 0, A0, A27, A0, A%V 

    Lcd/?riteIC$Y#(#6G* :Y, 2, 30%V EE #ncho, #lto, odo

    B2

    http://www.softweb.es/acuario/Esquemas/Pantalla.jpghttp://www.softweb.es/acuario/Esquemas/Pantalla1.jpg

  • 8/19/2019 Controlador de acuario con Arduino

    33/73

    Lcd/?riteIC$Y4#P#=16#:Y, 2, -0%V 

    Lcd/?riteIC$Y=1P*G4*:Y, 2, B0%V Lcd/?riteIC$YPH :Y, 2, 20%V 

    [

    C pondremos la llamada a la funcin de pintar pantalla al inicio del programa/

    &oid setup$% 

    X pinode$PG)OPO41P16, G)P(4 %V 

    Lcd/et=elay$200%V EE=eclaramos el tiempo en de espera entre cada orden/Lcd/8rillo$70%V EE=efinimos el brillo que queremos en nuestra pantalla/

    PrintPantain$%V sgPie$ YGniciando istemaY %V 

    ?ire/begin$%V 

    ///

    Gniciar4emperaturas$%V EEGniciamos los sensores de temperatura/sgPie$ Yistema funcionandoY %V 

    [

    Ca solo nos queda quitar el te;to est!tico que est!bamos pintando en la pantalla y que esta repartido por elcdigo/

    &oid irar4emperaturas$% 

    X float 4emperatura#cuario, 4emperatura=eposito, 4emperatura4apaV 

    EELlamamos a la funcin request4emperatures$% de nuestro controlador de sensoresEEpara que se prepare a nuestra llamada de lectura/

    sensors/request4emperatures$%V 

    EEllamamos a get4emp$% pas!ndole la &ariable del sensor que queremos leer

    EE y esta funcin nos de&ol&er! la temperatura de el sensor llamado/4emperatura#cuario @ sensors/get4emp$ #gua4ermo %V EE #(#6G*

    4emperatura4apa @ sensors/get4emp$ 4apa4ermo %V EE 4#P#

    4emperatura=eposito @ sensors/get4emp$=epo4ermo%V EE =1P*G4*

    EEahora que tenemos las temperaturas de nuestros sensores la pintamos en nuestra pantallaLcd/?riteIC$Y#(#6G* :Y, 2, 30%V 

    Lcd/?riteIC$4emperatura#cuario, 37, 30 %V Lcd/?riteIC$Y4#P#=16#:Y, 2, -0%V 

    Lcd/?riteIC$4emperatura4apa, 37, -0 %V 

    Lcd/?riteIC$Y=1P*G4*:Y, 2, B0%V Lcd/?riteIC$4emperatura=eposito, 37, B0 %V

    Ruitaremos el cdigo que esta en a"ul/

    #quí os deo el cdigo de nuestro controlador modificado/ )uestroontrolador00-/"ip

    BB

    http://www.softweb.es/acuario/codigos/NuestroControlador004.ziphttp://www.softweb.es/acuario/codigos/NuestroControlador004.ziphttp://www.softweb.es/acuario/codigos/NuestroControlador004.zip

  • 8/19/2019 Controlador de acuario con Arduino

    34/73

    Los rel!s

    Los relDs como ya os puse en un post anterior son un componente esencial en nuestro controlador/

    Para poder controlarlos usaremos los pines digitales del #rduino de la siguiente forma

    digital?rite$ PG)O*)14#=*O1LO61L1, HGH %V

    con esto ponemos en I7 $acti&o positi&o, 3&% el pin donde esta conectado el relD y si le ponemos

    digital?rite$ PG)O*)14#=*O1LO61L1, L*? %V

    lo ponemos en L9' $acti&o negati&o, 0&% con lo cual lo apagamos/

    Pero hay una pega y es que si utili"amos las placas de relDs chinas anteriormente descritas, esta son de

    acti&acin negati&a, o lo que es lo mismo que los relDs se acti&an con L9' y se desacti&an con I7,los chinos son raros hasta para esto/

    omo esto puede ser un poco lioso a la hora de programar, por lo cual a la hora de hacer mi programa medecidí por programar una funcin que gestionara la acti&acin negati&a de los relDs y de paso pintar en la

    pantalla unos cuadritos representando que relDs est!n acti&os y cuales no/

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  EE 

    EE #4G5# * =1#4G5# () 61L1 C L* PG)4# 1) L# P#)4#LL#EE 

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  

    &oid et6ele$ int Gnde;, int Pin, boolean 1stado % X 

    int G @ >

  • 8/19/2019 Controlador de acuario con Arduino

    35/73

    for$ G@>V GSAV G EEBTdefine PG)O=O61L1OLL(5G# -0 EE2

    Tdefine PG)O=O61L1OLL1)#=* -2 EEA

    Luego en el setup$% configurar estos pines como de salida/

    pinode$ PG)O=O61L1O#L1)4#=*6, *(4P(4 %V 

    pinode$ PG)O=O61L1O#L1)4=1P*, *(4P(4 %V 

    pinode$ PG)O=O61L1O1I46#4*61, *(4P(4 %V pinode$ PG)O=O61L1OL(1, *(4P(4 %V 

    pinode$ PG)O=O61L1O*2, *(4P(4 %V pinode$ PG)O=O61L1O**G, *(4P(4 %V 

    pinode$ PG)O=O61L1OLL(5G#, *(4P(4 %V 

    pinode$ PG)O=O61L1OLL1)#=*, *(4P(4 %V

    B3

  • 8/19/2019 Controlador de acuario con Arduino

    36/73

    Pero aquí con los relDs chinos al ser de acti&acin negati&a, lo que pasara es que al definir los pines como

    de salida el #rduino los pondr! a negati&o $ 0& % con lo cual acti&ara todos los relDs para corregir estopondremos un bucle J*6 para desacti&arlos, esto ser! muy r!pido por lo que no le dar! tiempo a funcionar

    ning'n aparato conectado/

    byte nV for$n@2>V n U -BV n @ n 9 2% 

    digital?rite$ n, HGH%V [ 

    La funcin 6ePintar6ele$% la tenemos que poner en nuestra funcin PrintPantain$% para que pinte losrecuadros de nuestros relDs al pintar la pantalla/

    &oid PrintPantain$% 

    X Lcd/ls$%V 

    Lcd/6ectangulo$0, 0, A27, .B%V 

    Lcd/Linea$ 0, 3B, A27, 3B, A%V Lcd/Linea$ 0, A0, 0, 3B, A%V 

    Lcd/Linea$ 0, A0, A27, A0, A%V Lcd/?riteIC$Y#(#6G* :Y, 2, 30%V EE #ncho, #lto, odo

    Lcd/?riteIC$Y4#P#=16#:Y, 2, -0%V 

    Lcd/?riteIC$Y=1P*G4*:Y, 2, B0%V Lcd/?riteIC$YPH :Y, 2, 20%V 

    6ePintar6ele$%V [

    8ien con esto ya tenemos definido todo lo necesario para poner en funcionamientos nuestros relDs,

    empe"aremos por los relDs que controlan los calentadores, en la funcin Print4emperatura$%/

    if $sensors/has#larm$#gua4ermo%% 

    if $ sensors/get4emp$#gua4ermo% U sensors/getLoF#larm4emp$#gua4ermo% WW digital6ead$PG)O=O61L1O#L1)4#=*6%% 

    et6ele$ >, PG)O=O61L1O#L1)4#=*6, HGH %V if $ sensors/get4emp$#gua4ermo% S sensors/getHigh#larm4emp$#gua4ermo% WW $Z

    digital6ead$PG)O=O61L1O#L1)4#=*6%%% 

    et6ele$ >, PG)O=O61L1O#L1)4#=*6, L*? %V [ 

    if $sensors/has#larm$=epo4ermo%% X 

    if $ sensors/get4emp$=epo4ermo% U sensors/getLoF#larm4emp$=epo4ermo% WW 

    digital6ead$PG)O=O61L1O#L1)4=1P*%% et6ele$ 7, PG)O=O61L1O#L1)4=1P*, HGH %V 

    if $ sensors/get4emp$=epo4ermo% S sensors/getHigh#larm4emp$=epo4ermo% WW $Zdigital6ead$PG)O=O61L1O#L1)4=1P*%%% 

    et6ele$ 7, PG)O=O61L1O#L1)4=1P*, L*? %V 

    [ if $sensors/has#larm$4apa4ermo%% 

    X if $ sensors/get4emp$4apa4ermo% S sensors/getHigh#larm4emp$4apa4ermo% WW 

    digital6ead$PG)O=O61L1O1I46#4*61%% 

    B.

  • 8/19/2019 Controlador de acuario con Arduino

    37/73

    et6ele$ ., PG)O=O61L1O1I46#4*61, HGH %V 

    if $ sensors/get4emp$4apa4ermo% U sensors/getLoF#larm4emp$4apa4ermo% WW $Zdigital6ead$PG)O=O61L1O1I46#4*61%%% 

    et6ele$ ., PG)O=O61L1O1I46#4*61, L*? %V [ 

    omo &erDis utili"o la funcin digital6ead$PG)% para a&eriguar si esta o no acti&o ya el relD/

    1l cdigo modificado del controlador lo tenDis aquí/ )uestroontrolador00./"ip 

    El teclado$ 

    1l teclado es un componente importantísimo para poder interactuar con el #rduino y como &imos en este

    post hay &arias formas de componerlo/

    Co me decidí por este, 2 botones para mo&erme por la pantalla, 2 botones para aumentar o disminuir los

    &alores, A para el *K y A para salir de los men's/

    1sto lo que hace es poner acti&o $3&% el pin que este conectado el botn pulsado y lo mismo que us!bamospara saber si estaba acti&o un relD, lo usaremos para saber si esta acti&o un pulsador, que era la funcin

    digital6ead$PG)%/

    1mpecemos a ir definiendo el cdigo de nuestro teclado, empecemos definiendo los pines de nuestro

    teclado/

    Tdefine PG)O=OK1CO*K B

    Tdefine PG)O=OK1CO=16 -A

    Tdefine PG)O=OK1CO#LG6 -BTdefine PG)O=OK1COG`R -3

    Tdefine PG)O=OK1CO# -7Tdefine PG)O=OK1CO1)* -

    B7

    http://www.softweb.es/acuario/codigos/NuestroControlador006.ziphttp://www.softweb.es/acuario/Esquemas/teclado.jpghttp://www.softweb.es/acuario/codigos/NuestroControlador006.zip

  • 8/19/2019 Controlador de acuario con Arduino

    38/73

    #hora en el setup$% defin!moslo como pines de entrada/

    pinode$ PG)O=OK1CO*K, G)P(4 %V pinode$ PG)O=OK1CO=16, G)P(4 %V 

    pinode$ PG)O=OK1CO#LG6, G)P(4 %V 

    pinode$ PG)O=OK1COG`R, G)P(4 %V pinode$ PG)O=OK1CO#, G)P(4 %V 

    pinode$ PG)O=OK1CO1)*, G)P(4 %V

    Para empe"ar a usar nuestro teclado crearemos un men' con &arias opciones de configuracin, para lo cualprimero crearemos una funcin que pinte este men'/

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  

    EE EE PG)4# P#)4#LL# =1 *)JG(6#G*)

    EE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  

    &oid PrintPantonfig$% 

    X Lcd/ls$%V 

    Lcd/6ectangulo$0, 0, A27, .B%V Lcd/?riteIC$Y*)JG(6#G*)Y, 23, .A%V 

    Lcd/Linea$ 0, 3B, A27, 3B, A %V 

    Lcd/?riteIC$YJ1H# C H*6#Y, A-, -%V EE #ncho, #lto, odoLcd/?riteIC$Y41P16#4(6#Y, A-, B%V 

    Lcd/?riteIC$YJG#6 PH P#6# *2Y, A-, 2%V Lcd/?riteIC$YH*6#6G* =1 L(1Y, A-, A%V 

    Lcd/?riteIC$Y61L1Y, A-, %V 

    [

    C ahora definamos la funcin que controlara el teclado, esta funcin comprobara si pulsamos el botn *K,

    si lo pulsamos pintaremos la pantalla del men' con &arias opciones y nos mo&eremos por el, si en alg'n

    momento pulsamos el botn alir, saldremos de este men' y &ol&eremos a la pantalla principal/

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  

    EE EE 41L#=* P6G)GP#L C =1 *)JG(6#G*)

    EE 

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  &oid 4eclado$% 

    X int Gnde;V 

    boolean alir @ 8alseV if $digital6ead$PG)O=OK1CO*K%% EEi hemos pulsado el botn *K entramos/X 

    PrintPantonfig$%V EE Pintamos la pantalla del men'Gnde; @ AV 

    Lcd/?riteIC$ YSY, -, 3

  • 8/19/2019 Controlador de acuario con Arduino

    39/73

    Lcd/?riteIC$ Y Y, -, 3

  • 8/19/2019 Controlador de acuario con Arduino

    40/73

    Lcd/?riteIC$ 6elo/=ate4ime$%, A0, .A%V irar4emperaturas$%V EEiramos la temperaturas

    4eclado$%V [

    Ca iremos escribiendo las respecti&as pantallas de configuracin del men'/

    1ste sistema de men' y pantallas de configuracin tiene una pequeña pega, que la mayoría suele ob&iar, yes que mientras estas dentro de un men', el resto del cdigo del #rduino no se esta eecutando o lo que es

    lo mismo, no se eecuta la funcin loop$%, pero no hay pega ya que el la pr;ima entrega arreglaremos estapega y algunas mas/

    1l cdigo modificado del controlador lo tenDis aquí/ )uestroontrolador007/"ip 

    La 8unción loop() 

    La funcin loop como su nombre indica es un bucle infinito que se eecuta constantemente, lo que es

    muchas &eces por segundo, lo 'nico que lo retrasa es el tiempo que tarde en eecutarse las instruccionesde cdigo que metamos en ella, con lo cual nuestra funcin loop actual

    Lcd/?riteIC$ 6elo/=ate4ime$%, A0, .A%V 

    irar4emperaturas$%V EEiramos la temperaturas4eclado$%V

    Pintara la fecha y hora, leer! y pintara la temperatura y comprobara el teclado &arias &eces por segundo, lo

    cual es una bestialidad y que puede dar errores de lectura de la temperatura/

    Para solucionar esto pondremos una forma de controlar cada que tiempo se reali"a la llamada, y para ellousaremos la funcin millis$% la cual de&uel&e el tiempo en milisegundos transcurridos desde que se arrancla placa #rduino con el programa actual/ 1ste n'mero se desbordar! $&ol&er! a cero%, despuDs de

    apro;imadamente 30 días/

    Para empe"ar declararemos una &ariable global para guardar cuando se eecuto la ultima &e" nuestro

    cdigo/

    long *ldOillis @ 0V

    =espuDs pondremos el siguiente cdigo en nuestra funcin loop/

    &oid loop$% 

    X if $ $millis$% 

  • 8/19/2019 Controlador de acuario con Arduino

    41/73

  • 8/19/2019 Controlador de acuario con Arduino

    42/73

    =e esta forma nuestro men' quedara de esta forma

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  EE 

    EE 41L#=* P6G)GP#L C =1 *)JG(6#G*)

    EE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  

    &oid 4eclado$% 

    X int Gnde;V 

    boolean alir @ 8alseV if $digital6ead$PG)O=OK1CO*K%% EEi hemos pulsado el botn *K entramos/

    X PrintPantonfig$%V EE Pintamos la pantalla del men'

    Gnde; @ AV 

    Lcd/?riteIC$ YSY, -, 3

  • 8/19/2019 Controlador de acuario con Arduino

    43/73

    PrintPantonfig$%V 

    Lcd/?riteIC$ YSY, -, 3

  • 8/19/2019 Controlador de acuario con Arduino

    44/73

    et6ele$ >, PG)O=O61L1O#L1)4#=*6, L*? %V 

    if $$sensors/get4emp$=epo4ermo% U $J/4ermo=eposito

  • 8/19/2019 Controlador de acuario con Arduino

    45/73

    8ueno empecemos con el cdigo para controlar nuestras luces/

    Para controlar las luces debemos controlar dos cosas, el dimeo de las luces con los 4GP y la fuente dealimentacin con un relD, ya que aunque apaguemos las luces con los 4GP, mientras no desconectemos la

    fuente, esta seguir! consumiendo y haciendo trabaar a los 4GP, tener en cuenta que los 4GP sufrir!n

    $calent!ndose% mas contra mas redu"camos la iluminacin, ya que los 4GP tienen que dispar el &oltae querecortamos en forma de calor/

    1l cdigo lo haremos para controlar la iluminacin en 2 faces o grupos de luces y una tercera paracontrolar la lu" de luna/

    1mpe"aremos definiendo el tope de dimeo de nuestras luces, en mi caso por eemplo como me pase

    poniendo luces me &ino muy bien para poder reducir la m!;ima iluminacin/

    Tdefine =G1*OL(`A 233Tdefine =G1*OL(`2 233

    Tdefine =G1*O)*H1 233

    declarando B &ariables globales que nos dir!n el ni&el de dimeo de nuestros nuestras luces/

    int =imeoA, =imeo2, =imeoBV

    las iniciaremos a cero en nuestro setup$%

    =imeoA @ 0V =imeo2 @ 0V =imeoB @ 0V

    rearemos la funcin que pinte en la pantalla las barras de progresos de iluminacin de nuestras luces/

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  

    EE EE PG)4# 1L #(1 *) 1L )G51L =1 G)41)G=#= #4(#L =1 L# L(`

    EE 

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  &oid augeIC$ int 5alor, byte Gnde;ol % 

    int ol ^_ @ X0, A0, AA3, A2A[V int I @ ol^Gnde;ol_V 

    Lcd/6ectangulo$I, A2, I9B, 3A%V Lcd/8orrar$I9A, A29A, I92, 30%V 

    Lcd/6ectangulo$I9A, A2, I92, A29$map$5alor, 0, 233, 0, B%%%V 

    [

    #ñadiremos la llamada a esta funcin en el pintado de la pantalla principal

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  

    EE EE PG)4# L# P#)4#LL# P6G)GP#L

    EE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  

    &oid PrintPantain$% 

    X Lcd/ls$%V 

    Lcd/6ectangulo$0, 0, A27, .B%V 

    -3

  • 8/19/2019 Controlador de acuario con Arduino

    46/73

    Lcd/Linea$ 0, 3B, A27, 3B, A%V 

    Lcd/Linea$ 0, A0, 0, 3B, A%V Lcd/Linea$ 0, A0, A27, A0, A%V 

    Lcd/?riteIC$Y#(#6G* :Y, 2, 30%V EE #ncho, #lto, odoLcd/?riteIC$Y4#P#=16#:Y, 2, -0%V 

    Lcd/?riteIC$Y=1P*G4*:Y, 2, B0%V 

    Lcd/?riteIC$YPH :Y, 2, 20%V for$G@0V G U >V G99% 

    X Lcd/6ectangulo$ 3, 30

  • 8/19/2019 Controlador de acuario con Arduino

    47/73

    if$6elo/GsLater$ J/Lu"2HO*), J/Lu"2O*) % WW 6elo/GsPre&ious$ J/Lu"2HO*JJ, 

    J/Lu"2O*JJ %% X 

    EE #limentar el trasformador de la lu" si no esta encendidoif $digital6ead$PG)O=O61L1OL(1%% et6ele$ 3, PG)O=O61L1OL(1, HGH %V 

    if $ =imeo2 U =G1*OL(`2 % 

    X =imeo2 9@ 2V 

    if $=imeo2 S =G1*OL(`2% =imeo2 @ =G1*OL(`2V EE i se a re

  • 8/19/2019 Controlador de acuario con Arduino

    48/73

    C ya por ultimo ponemos la llamada a nuestra funcin de dimeo y control de nuestras luces en la funcin

    loop$%/

    &oid loop$% 

    if $ $millis$% 

  • 8/19/2019 Controlador de acuario con Arduino

    49/73

    =efinimos el pin donde tenemos conectado el "umbador/

    Tdefine PG)O=OPG4* >

    C creamos una funcin a la que llamaremos Pito$% y le pasaremos un par!metro que es la duracin delpitido, cuanto mas largo sea el pitido mas fuerte lo oiremos ya que es un sonido en crescendo/

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  

    EE EE 1)16# () PG4G=* =1 #5G*

    EE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  

    &oid Pito$ int duracion % 

    X tone$ PG)O=OPG4*, 20->, duracion %V 

    Gnternamente usaremos la funcin del #rduino tone$% la cual es una funcin que le tenemos que pasar el pin

    donde lo tenemos conectado, la frecuencia a la que queremos que suene y la duracin/

    Para que queremos un pito en nuestro controlador, pues os puedo asegurar que sin este, parece tonto el

    controlador, porque por mucho que toquemos nunca nos dice nada, por eso le pondremos que genere unpito largo cuando se reinicie para que nos enteremos que se esta reiniciando, y luego pondremos un pitido

    corto cada &e" que le pidamos una orden y la realice, por eemplo cuando le asignemos una configuracin

    y la guarde/omo he dicho al principio tambiDn tenemos que

    programar las alarmas y la alarma principal que tenemos

    que controlar es la de los ni&eles, si no queremos que lamuer nos aporree con la fregona/

    omo ya diimos en un post anterior el sensor de ni&el $laboya% se comporta como si fuera un pulsador y lo tenemos

    que conectar tambiDn como tal, con una resistencia de A0K

    a masa y la otra punta al positi&o/

    1l post en el que lo comente 

    Luego en nuestro cdigo ser! f!cil implementarlo como siempre primero definiremos el pin en el que estaconectado/

    Tdefine PG)O=O)G51L= .

    C como siempre crearemos una funcin que se encargue de comprobar que el sensor de ni&el no se a

    acti&ado, a la cual llamaremos ni&eles$%/

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  

    EE 

    EE *P6(18# 1L )G51L =1 #(# =1L =1P*G4*

    EE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  &oid irar)i&eles$% 

    -

    http://www.portalpez.com/controlador-de-acuario-electronico-con-arduino-vp493499.html#p493499http://www.softweb.es/acuario/Esquemas/conexcion%20boya.jpghttp://www.portalpez.com/controlador-de-acuario-electronico-con-arduino-vp493499.html#p493499

  • 8/19/2019 Controlador de acuario con Arduino

    50/73

    if $$digital6ead$PG)O=O)G51L=% @@ HGH% WW $Z#larma)i&el%% EE La bolla esta acti&a y cierralas electro&!l&ulas

    X et6ele$ B, PG)O=O61L1O**G, L*? %V 

    et6ele$ 2, PG)O=O61L1OLL(5G#, L*? %V 

    Log1&ent$ O)G51L, Y#cti&ada la alarma de ni&elY, YY, YY %V sgPie$ Y#larma de ni&el Y %V 

    #larma)i&el @ trueV #larma$%V 

    [

    omo &erDis esta funcin comprueba nuestro sensor de ni&el y si &e que esta acti&ado desconecta los relDs

    de entrada de agua como son los de smosis y de llu&ia, y adem!s saca un mensae en el pie de la pantalla

    y llama a la funcin #larma para a&isarnos, esta funcin alarma que crearemos a continuacin

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  

    EE EE 1)16# PG4G=* =1 #L#6#EE 

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  &oid #larma$% 

    int nV for$ n@0V n U B0V n99% 

    X Pito$>00%V 

    delay$A000%V 

    Pito$-00%V [ 

    delay$A0000%V [ 

    La cual utili"ando la funcin Pito$% nos generara un pitido repetiti&o para a&isarnos/

    1sto tiene una pega, y es que si estar! constantemente sonando la alarma hasta que no &aciemos el ni&eldel agua que a echo saltar la alarma de ni&el/

    Para e&itar esto pondremos una &ariable global que solemos llamar sem!foro, la cual nos deara llamar a la

    funcin de comprobar ni&el, siempre y cuando no nos haya a&isado anteriormente de una alarma,miraremos tambiDn que si no esta la alarma acti&a, pongamos esta &ariable a false/

    =efinimos la &ariable

    boolean #larma)i&el @ 8alseV

    y luego de todo esto nuestro loop$% nos quedaría así/

    &oid loop$% 

    X if $ $millis$% 

  • 8/19/2019 Controlador de acuario con Arduino

    51/73

    irar)i&eles$%V 

    irar4emperaturas$%V EEiramos la temperaturasLuces$%V 

    [ 4eclado$%V 

    [

    8ueno ya tan solo nos queda las pantallas de configuracin que espero poder poner mañana/

    1l cdigo modificado del controlador lo tenDis aquí/ )uestroontrolador0A0/"ip

    8ueno &amos a poner ahora el resto de las configuraciones, despuDs de mucho mirarlo, no &eo la forma dee;plicarlo, sobre todo porque casi todo esta ya e;plicado en la funcin que esplique y puse, la funcin

    4eclado$%/

    Para la configuracin que nos falta pondremos una pantalla para cada tipo de configuracin y iremosllamando a estas pantallas en la funcin 4eclado$% seg'n seleccionemos cada opcin/

    La funcin 4eclado$% con todas las opciones ya programadas nos quedaría asín/

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  

    EE EE 41L#=* P6G)GP#L C =1 *)JG(6#G*)

    EE 

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  &oid 4eclado$% 

    X int Gnde;V 

    boolean alir @ 8alseV if $digital6ead$PG)O=OK1CO*K%% 

    X Pito$A00%V PrintPantonfig$%V 

    Gnde; @ AV 

    Lcd/?riteIC$ YSY, -, 3

  • 8/19/2019 Controlador de acuario con Arduino

    52/73

    if $digital6ead$PG)O=OK1CO*K%% X 

    Gnacti&idad @ millis$%V sFitch $Gnde;% 

    case A: Pito$A00%V 

    Printonf6elo$%V PrintPantonfig$%V 

    Lcd/?riteIC$ YSY, -, 3

  • 8/19/2019 Controlador de acuario con Arduino

    53/73

    y la programacin de las pantallas de configuracin/

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  EE 

    EE *)JG(6#G*) 61L*

    EE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  

    &oid Printonf6elo$% 

    X int Gnde;, Gnde;olV 

    int ol^_ @ X2,3A[V int month=ay, month, year, hour, minute, secondV 

    static char tmp^23_V boolean alir @ 8alseV 

    6elo/et=ate4ime$ month=ay, month, year, hour, minute, second %V 

    Lcd/ls$%V Lcd/6ectangulo$0, 0, A27, .B%V 

    Lcd/?riteIC$Y61L*Y, -0, .A%V 

    Lcd/Linea$ 0, 3B, A27, 3B, A %V Lcd/?riteIC$Y=G#:Y, >, -%V Lcd/?riteIC$YH*6# :Y, 3>, -%V 

    Lcd/?riteIC$Y1:Y, >, B%V Lcd/?riteIC$YG)(4* :Y, 3>, B%V Lcd/?riteIC$Y#)*:Y, >, 2%V Lcd/?riteIC$Y1()=*:Y, 3>, 2%V 

    Lcd/?riteIC$ YSY, 2, - %V 

    Gnde; @ AV Gnde;ol @ 0V 

    sprintf$tmp, Y02dY, month=ay%V Lcd/?riteIC$tmp, B-, -%V 

    sprintf$tmp, Y02dY, hour%V Lcd/?riteIC$tmp, AA2, -%V sprintf$tmp, Y02dY, month%V Lcd/?riteIC$tmp, B-, B%V sprintf$tmp, Y02dY, minute%V Lcd/?riteIC$tmp, AA2, B%V 

    sprintf$tmp, Y02dY, year%V Lcd/?riteIC$tmp, B-, 2%V sprintf$tmp, Y02dY, second%V Lcd/?riteIC$tmp, AA2, 2%V 

    Gnacti&idad @ millis$%V Fhile$$Zdigital6ead$PG)O=OK1CO#LG6%% WW $Zalir%% 

    X if $digital6ead$PG)O=OK1CO=16%% EE #delante

    Gnacti&idad @ millis$%V Lcd/?riteIC$ Y Y, ol^Gnde;ol_, 3

  • 8/19/2019 Controlador de acuario con Arduino

    54/73

    Lcd/?riteIC$ Y Y, ol^Gnde;ol_, 3

  • 8/19/2019 Controlador de acuario con Arduino

    55/73

    Gnacti&idad @ millis$%V 

    sFitch $Gnde;9$Gnde;ol]A0%% X 

    case A: month=ay

  • 8/19/2019 Controlador de acuario con Arduino

    56/73

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  

    EE EE *)JG(6#G*) 41P16#4(6#

    EE 

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  &oid Printonf4emperatura$% 

    X int Gnde;V 

    float 4empA, 4emp2, 4empBV 

    boolean alir @ 8alseV 

    Lcd/ls$%V Lcd/6ectangulo$0, 0, A27, .B%V 

    Lcd/?riteIC$Y41P16#4(6#Y, 23, .A%V 

    Lcd/Linea$ 0, 3B, A27, 3B, A %V Lcd/?riteIC$Y#(#6G* :Y, >, -%V 

    Lcd/?riteIC$Y4#P# :Y, >, B%V Lcd/?riteIC$Y=1P*G4*:Y, >, 2%V 

    Lcd/?riteIC$ YSY, 2, - %V 

    Gnde; @ AV 

    4empA @ J/4ermo#cuarioV 

    4emp2 @ J/4ermo4apaV 4empB @ J/4ermo=epositoV 

    Lcd/?riteIC$4empA, .3, -, A%V 

    Lcd/?riteIC$4emp2, .3, B, A%V 

    Lcd/?riteIC$4empB, .3, 2, A%V 

    Gnacti&idad @ millis$%V Fhile$$Zdigital6ead$PG)O=OK1CO#LG6%% WW $Zalir%% 

    if $digital6ead$PG)O=OK1CO=16%% EE #delanteX 

    Gnacti&idad @ millis$%V Lcd/?riteIC$ Y Y, 2, 3

  • 8/19/2019 Controlador de acuario con Arduino

    57/73

    else 

  • 8/19/2019 Controlador de acuario con Arduino

    58/73

    Pito$A00%V 

    alir @ trueV [ 

    if $ 1nGnacti&idad$% % X 

    Pito$B00%V 

    alir @ trueV [ 

    [ [ 

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  EE 

    EE *)JG(6#G*) =1L PHEE 

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  

    &oid PrintonfPH$% X 

    boolean alir @ 8alseV Lcd/ls$%V 

    Lcd/6ectangulo$0, 0, A27, .B%V 

    Lcd/?riteIC$YPHY, .0, .A%V Lcd/Linea$ 0, 3B, A27, 3B, A %V 

    Lcd/?riteIC$YPH :Y, >, B%V 

    Lcd/?riteIC$J/PH, 33, B, A%V 

    Gnacti&idad @ millis$%V 

    Fhile$$Zdigital6ead$PG)O=OK1CO#LG6%% WW $Zalir%% 

    X if $digital6ead$PG)O=OK1CO#%% 

    X Gnacti&idad @ millis$%V 

    J/PH 9@ 0/A V 

    Lcd/?riteIC$J/PH, 33, B, A%V [ 

    if $digital6ead$PG)O=OK1CO1)*%% X 

    Gnacti&idad @ millis$%V 

    J/PH 

  • 8/19/2019 Controlador de acuario con Arduino

    59/73

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  

    EE EE *)JG(6#G*) =1 L* H*6#6G* =1 L# L(1

    EE 

    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE  &oid PrintonfLuces$% 

    X int Gnde;Line, Gnde;olV 

    int Line^_ @ XB,22,3[V 

    int ol^_ @ X-2,3,0,A07[V int arcaLine^_ @ X-A,2-,7[V 

    static char tmp^23_V boolean alir @ 8alseV 

    Lcd/ls$%V Lcd/6ectangulo$0, 0, A27, .B%V 

    Lcd/?riteIC$YL(1Y, 30, .A%V Lcd/Linea$ 0, 3B, A27, 3B, A %V 

    Lcd/?riteIC$YJ#1A:Y, B, -%V Lcd/?riteIC$Y:Y, 3B, -%V Lcd/?riteIC$YaY, 77, -%V 

    Lcd/?riteIC$Y:Y, A0A, -%V Lcd/?riteIC$YJ#12:Y, B, B2%V Lcd/?riteIC$Y:Y, 3B, B2%V Lcd/?riteIC$YaY, 77, B2%V 

    Lcd/?riteIC$Y:Y, A0A, B2%V 

    Lcd/?riteIC$YL()# :Y, B, A3%V Lcd/?riteIC$Y:Y, 3B, A3%V Lcd/?riteIC$YaY, 77, A3%V Lcd/?riteIC$Y:Y, A0A, A3%V 

    Gnde;Line @ 0V Gnde;ol @ 0V 

    sprintf$tmp, Y02dY, J/Lu"AHO*)%V Lcd/?riteIC$tm