el contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · el contenido...

138

Upload: others

Post on 14-Mar-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time
Page 2: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

ElcontenidodelaobrahasidodesarrolladoexclusivamenteporlosmiembrosdelequipodeTimeofSoftware.

Reservados todos los derechos. Queda rigurosamente prohibida, sin laautorizaciónescritadeTimeofSoftware,bajolassancionesestablecidasenlasleyes, la reproducción parcial o total de esta obra por cualquier medio oprocedimiento,incluidoslareprografíayeltratamientoinformático,asícomoladistribucióndeejemplaresmediantealquileropréstamopúblico.Paramásinformaciónvisita:www.timeofsoftware.comwww.aprendeenunfindesemana.com

Page 3: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

TABLADECONTENIDO

INTRODUCCIÓN¿QUÉNECESITOPARAEMPEZAR?PROCESODEAPRENDIZAJE

OrganizaciónDistribucióndelfindesemana

GLOSARIO¿QUÉESLAROBÓTICA?

LeyesdelaRobóticaARDUINO

¿PorquéapareceArduino?¿QuéesArduino?ComponentesplacadeArduinoPinesdigitalesPinesanalógicosPinesalimentaciónsensoresMicrocontroladordecomunicacionesMicrocontroladordeprogramaciónBotónresetPuertoUSBConectordeAlimentación¿ArduinoyRobótica?Ventajas

ENTORNODEDESARROLLOEntornowebAplicativoInstalacióndeArduinoenmacOSInstalacióndeArduinoenWindowsInstalacióndeArduinoenLinux

FAMILIARIZÁNDOTECONELENTORNODEDESARROLLOPantallaprincipalMenúprincipalMenúArchivoMenúProgramaMenúHerramientasBarradeaccesorápidoVerificarSubirNuevoAbrirSalvarMonitorSerie

ANTESDEEMPEZAREstructuradeunprogramaComponentescomunesentodoslosmontajesPlacaArduinoProtoboardCableUSB

Page 4: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

CablesResistenciasLEDLEDRGBPotenciómetroZumbadorSensordeluz(LDR)SensordehumedadytemperaturaSensordepresenciaSensordeaguaPantallaLCD

OBJETIVO1–MANEJOLEDSExplicaciónFuncionesdeprogramación#definepinModedigitalWriteanalogWritedelayforVariablesMaterialesFase1:InteractuarconunLEDMontajefísicoProgramaciónFase2:InteractuarconvariosLEDSMontajefísicoProgramaciónFase3:InteractuarconunLEDRGBMontajefísicoProgramacióndigitalProgramaciónanalógicaAhoraerescapazde…

OBJETIVO2–MANEJOPULSADORESExplicaciónFuncionesdeprogramacióndigitalReadifINPUT_PULLUPMaterialesFase1:EncenderyapagarvariosLEDSconunpulsador(Versión1)MontajefísicoProgramaciónFase2:EncenderyapagarvariosLEDSconunpulsador(Versión2)MontajefísicoProgramaciónAhoraerescapazde…

PROYECTO-CrearunsemáforoExplicaciónMaterialesMontajefísico

Page 5: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

ProgramaciónCódigofuente

OBJETIVO3–MANEJODEPOTENCIÓMETROSExplicaciónFuncionesdeprogramaciónanalogReadanalogWritemapMaterialesFase1:ControldesonidodeunzumbadorconunpotenciómetroMontajefísicoProgramaciónFase2:ControldeencendidodeLEDSconunpotenciómetroMontajefísicoProgramaciónAhoraerescapazde…

OBJETIVO4–MANEJODESENSORESExplicaciónFuncionesdeprogramaciónLibrerías#includeMaterialesFase1:LecturadeunsensorLDRMontajefísicoProgramaciónFase2:SeguridadconsensordepresenciaMontajefísicoProgramaciónFase3:LecturadeunsensordetemperaturayhumedadMontajefísicoProgramaciónSalidadelalectura(monitorserie)Ahoraerescapazde…

PROYECTOFINAL–ControlatucasaExplicaciónMaterialesMontajefísicoProgramación

¡CONSEGUIDO!SOBRELOSAUTORESYAGRADECIMIENTOS

Page 6: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

INTRODUCCIÓN¡Bienvenid@!¡SiestásleyendoéstoesporquehasdecididoaprenderArduino!¡Buenaidea!Todoelmundohapronunciadoohaescuchadoalgunavezensuvidaestasdosfrasesrefiriéndosealhechodeaprenderalgonuevo:

Notengotiempoparaaprenderlo.Esmuydifícil.

Seguroquesí,¿verdad?Puesconeste libro tevasadarcuentaqueaprenderArduinoesfácily…¡quesepuedehacerenuntiemporecord!Hemosdiseñadounmétodoconelquepodrásaprendertodoloquenecesitassaber para tener una base que permita ir desenvolviéndote poco a poco encualquierproyectoqueteplanteeshacerconArduino.Elmétodosebasaenunaprendizajeprogresivo,adentrándoseyprofundizandoenaquellosconceptosbásicosdeelectrónicayprogramaciónquenecesitasentenderparacomenzaratrabajarenel“MundoArduino”.Todoello…¡enunfindesemana!Una vez hayas acabado el libro, siguiendo el modo de aprendizaje que teproponemos,podemosgarantizartequevasasercapazdetenerlaautonomíasuficienteparallevaracabotuspropiosproyectos,oalmenoslanzarteaquelo intentes, ya que habrás adquirido unos conocimientos suficientes que tepermitirán diseñar y montar tus propios circuitos, desarrollar el código deprogramaciónylomejordetodo,verlosresultadosdetuspropiosproyectos.Estamossegurosdequesinosacompañashastael finaldel librose tevanaocurrirunacantidadgrandedeideaspararealizarconArduino,yaquecuantosmásconocimientosvasaprendiendo,máscuriosidaddesarrollarásymásideasteiránsurgiendo.Teanimamosaquecomiencesaadentrarteenestemundoydisfrutesconcadaproyecto.Nodesesperessinoloconsiguesalaprimera,yaqueseguroquedecadaerroraprendesalgoque tesirveparaseguiravanzando.Éstoessoloelcomienzo,yArduinonotienelímites,aligualquetuimaginación.

Page 7: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

¿QUÉNECESITOPARAEMPEZAR?ParaaprenderArduinoenun finde semana talycomo teproponemosaquí,necesitarás una serie de elementos que te permitirán realizar todos los retosqueteplanteamos.LoquenecesitasparapoderempezaratrabajarconArduinoes:

Unordenador, con total independencia del sistemaoperativo que tengainstalado. Si no dispones de conexión a internet deberás de descargardesde cualquier ordenador el ejecutable de instalación del entorno dedesarrollo de Arduino e instalarlo en el ordenador que vas a utilizardurante todoel aprendizaje.En losapartados siguientes teexplicaremoslospasosaseguirpara instalarelentornodedesarrolloencadaunodelos sistemas operativos soportados por la plataforma de desarrollo deArduino.

PlacadeArduino.

Kitdecomponenteselectrónicosbásico.

TantolaplacacomoelkitpuedesadquirirloenAmazon.Yporsupuesto…¡unfindesemana!

Page 8: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

PROCESODEAPRENDIZAJE

Page 9: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

ORGANIZACIÓNElaprendizajeestádivididoendospartesclaramentediferenciadas:

TeoríaypuestaenmarchaPráctica

Laprimeraparteestácompuestaporunafaseexclusivamenteteórica,enlaqueaprenderás conceptos básicos para que te desenvuelvas sin problema conArduino.Además,estaparteincluyetodolonecesarioparaqueseascapazdemontar todala infraestructurasoftwarequenecesitasparaempezara trabajarconArduino,juntoconlaexplicacióndetalladadelentornodedesarrollo.El aprendizaje práctico está dividido en cuatro Objetivos diferentes y dosProyectos para afianzar los conocimientos adquiridos en los diferentesObjetivos.LosObjetivostienendificultadincremental;amedidaquesevaavanzandosevan adquiriendo nuevos conocimientos de mayor complejidad que losanteriores. Los Objetivos están compuestos por diferentes ejercicios quellamaremosFases.EncadaObjetivoseindica,antesdeempezar,losmaterialesquesenecesitany las funcionesdeprogramacióncomunesa todas lasFasesquecomponenelObjetivo.UnaFaseesunejercicioqueprofundizaenunáreadeconocimientodentrodelObjetivo.EncadaFaseseindicaelmontajefísicodelcircuitoyelcódigodelprogramaArduino.LosProyectossonejerciciosdedificultadavanzadaquepermitenafianzarlosconocimientosadquiridosenlosObjetivosanteriores.DuranteelaprendizajeserealizandosProyectos.ElprimerodeellosestábasadoenlosdosprimerosObjetivos,yserealizadespuésdeacabarelsegundoObjetivoyelsegundosebasaenloscuatroObjetivosyserealizaalacabarelcuartoObjetivo.

Page 10: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

DISTRIBUCIÓNDELFINDESEMANAElmétododeaprendizajehasidodiseñadoyoptimizadoparaqueseascapazde aprender Arduino en un fin de semana. Obviamente, el tiempo deaprendizaje puede verse modificado ligeramente por los conocimientospreviosquetengas.La secuencia de aprendizaje que debes seguir para alcanzar el objetivo deaprenderArduinoeslasiguiente:

Ilustración1.Organiz aciónde l apre ndiz aje

Page 11: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

GLOSARIOA continuación te mostramos todos los términos relevantes que vamos autilizar durante todo el libro y que necesitas conocer para llevar a cabo elaprendizaje.CódigofuenteEselconjuntodelíneasdetextoqueformanunprograma.Laslíneasdetextoindicancómosedebeejecutardichoprogramayloquetienequehacer.El código fuente se escribe en un lenguaje específico de programación quetienequesertraducidoallenguajequeentiendeelordenador.SentenciaUnasentenciaescadaunadelaslíneasdelcódigofuente.LenguajedeprogramaciónLenguaje formal utilizado por los ingenieros de software para escribirprogramas. Mediante el lenguaje de programación se indican todas lassentenciasquedebedeejecutarelprograma.CompilarProcesodetraducirelcódigofuenteallenguajequeentiendeelordenador.LenguajemáquinaLenguajequeentiendeelordenadoryalqueescompiladoelcódigofuente.BucleSentencia específica que se repite durante un tiempo. El número derepeticionespuedeirenfuncióndediversosfactores,peroestánindicadosenlapropiasentenciaenlaquesedefineelbucle.ConstanteUnaconstanteesunvalorquenocambiaen toda laejecucióndelprograma.Paracrearconstantesenelcódigofuenteseutilizansentenciasespecíficas.VariableUnavariableesunvalorquecambiadurantelaejecucióndelprograma.Paracrearvariablesenelcódigofuenteseutilizansentenciasespecíficas.

Page 12: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

LibreríaConjuntode funcionalidadesquese incluyenen losprogramasyquenosondesarrolladasenélyaquepertenecenaotrasaplicaciones.InterfazElementosoftwarequesirveparacomunicardoselementosentresímedianteelconjuntodeoperacionesquedefine.PinCadaunadelasentradasosalidasquetienelaplacadeArduino.Unpinpuedeconfigurarse como entrada o como salida y es donde conectaremos loscomponentespara interactuarconellos.LaplacadeArduino tienediferentestiposdepines:digitales,analógicos,etc.SalidaProceso de enviar datos desde la placa de Arduino a los componentes delcircuitoelectrónico.EntradaProcesode recibirdatosdesde loscomponentesdel circuitoelectrónicoa laplacadeArduino.PrototipoEselresultadoderealizarunprocesodeprototipado.Elprocesoconsisteenlaconstrucción rápida del objetivo a conseguir sin tener un conocimientoprofundode todas las fasesdelprocesograciasa lautilizaciónde técnicasyherramientasquelopermiten.HardwareConjuntodeelementosfísicosomaterialesqueconstituyenunordenadorounsistemainformático.SoftwareConjuntodeprogramasyprocesosquepermitenalordenador la realizacióndedeterminadastareas.CPUConjunto de elementos hardware de un ordenador que interpretan

Page 13: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

las instrucciones de un programa informáticomediante la realización de lasoperacionesbásicasaritméticas,lógicasydeentrada/salidadelsistema.ProcesadorElementodelaCPUqueinterpretalasinstruccionesyprocesalosdatosdelosprogramas.CircuitoConjuntodecomponentesqueformanunaredeléctricacerrada.CircuitoIntegradoEstructura de pequeñas dimensiones sobre la que se fabrican circuitoselectrónicosyquecontienetodosloselementosquecomponenelcircuito.MicroprocesadorProcesadordemuypequeñasdimensionesenelquetodosloselementosdelaCPUestánagrupadosenunsolocircuitointegrado.

Page 14: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

¿QUÉESLAROBÓTICA?LaRobóticaseentiendecomolacienciaylatécnicaqueestudiaeldiseñoylaconstrucciónderobots.Además,secentraenlautilizacióndelosmismosparadesempeñar tareas de manera automática o realizar trabajos difíciles oimposiblesparalossereshumanos.Unrobotesunamáquinaprogramablecapazdeinteractuarconelentornoquelerodea,moverse,mostrarcomportamientointeligente,sentirelentorno,etc.UnodelosaspectosmásimportantesdelaRobóticaesqueaúnaenunamismaciencia a diferentes ciencias, como son la informática, la electrónica, laingenieríaylamecánica.LaRobóticaesunadelascienciasconmayoraugeyquemásestáavanzando,porejemplo, seestáempezandoautilizarencamposcomo lamedicinapararealizaroperacionesdedificultadalta,laindustriadelautomóvil,etc.

Page 15: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

LEYESDELAROBÓTICAHablandodeRobótica nunca debes dejar de lado las tres leyes descritas porIsaacAsimov en sus novelas. La primera vez que fueron nombradas en suslibrosfueen1942,enellibroRunaroundydicenlosiguiente:1. Unrobotnoharádañoaunserhumanoo,porinacción,permitirqueun

serhumanosufradaño.2. Unrobotdebehacerorealizarlasórdenesdadasporlossereshumanos,

exceptosiestasórdenesentrasenenconflictoconla1ªLey.3. Un robot debe proteger su propia existencia en la medida en que esta

protecciónnoentreenconflictoconla1ªola2ªLey.

Lastresleyessuponenlarendicióncompletadelosrobotsaloshumanos,esdecir,asumenelpapeldeesclavosdeloshumanos.Veamos:

En laprimera leyseantepone la integridadde lapersonaantecualquierotracosa,esdecir,es laprotecciónbásicadel serhumanorespectoa lamáquina.

Enlasegundaleyseestablecelacadenademandoentreelserhumanoyelrobot.Esteúltimodeberáobedecersiemprealserhumano,siempreycuandonoseapararealizardañoaotroserhumano.

En la tercera ley se establece la rendición absoluta de los robots a losseres humanos. A la vez que los robots siempre deben protegerse parasobrevivir, deberán ser completamente sumisos respecto al serhumano,debiendoautodestruirsesirecibenlaordendehacerlo.

En 1985, el propio Isaac Asimov, enunció una nueva ley mediante la cualquedaríantodassubordinadasaella.Estaleyseconsideralaleycero,ydice:

Unrobotnopuedecausardañoalahumanidado,porinacción,permitirquelahumanidadsufradaño.

Page 16: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

LasleyesdeAsimovseconsideranlabaseparadeterminarelcomportamientobásicoquedeberíantenertodoslosrobots.

Page 17: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

ARDUINO

Page 18: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

¿PORQUÉAPARECEARDUINO?EstaeslaprimerapreguntaquedebesdehacerteyaqueconellacomprenderáscomoArduinohaconseguidoeléxitoquetieneahoramismo.Laconstruccióndecircuitoselectrónicosnoesunprocesosencillo,requiereuna variedad de conocimientos en diferentes ramas que hace que no esté alalcance de muchas personas. El proceso se complica aún más cuando loscircuitoselectrónicosestánacompañadosdeprogramassoftwarequemanejanelcomportamientodelpropiocircuito.Por tanto, para llevar a cabo el proceso con éxito, la persona o el equipoencargadodellevaracaboelproyecto,debentenerconocimientosampliosdediversasramascientíficas,loquehacequenosencontremosconunprocesodeconstruccióndecircuitoselectrónicoscomplejo.EnestepuntoescuandoapareceArduino,rompiendotodoslosmoldessobrelosquese trabajabahastaesemomento,yaque,utilizando lapotenciade losmicrocontroladores o microprocesadores consigue simplificar el uso de laelectrónica,perosinocultarsudinámicadefuncionamiento.GraciasaArduinosepuedenconseguirresultadosdeformarápidaysencilla,poniendoalalcancedetodoelmundolarealizacióndeproyectosderobóticamediantelautilizacióndeprototipos.

Page 19: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

¿QUÉESARDUINO?Arduinoesunaplataformadecódigoabiertodeprototiposelectrónicosquesebasaenhardwareysoftwareflexiblesyfácilesdeusarqueponenalalcancedecualquierpersonalaconstruccióndecircuitoselectrónicos/robots.Enloreferenteahardware,sebasaenplacasquesepuedenensamblaramanooquesepuedencomprardirectamentepreensambladas.Cadaunadelasplacaslleva un microcontrolador en el que se carga el programa software que esnecesariodesarrollarpara“darlevida”alaplaca.EnlasiguienteimagenpuedesverlaPlacaArduinoUnoR3consuspartesmásimportantesseñaladasqueserándescritasenelapartadosiguiente:

Ilustración2.PlacaArduinoUnoR3

Page 20: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

COMPONENTESPLACADEARDUINOPINESDIGITALESLospinesdigitalessonlasconexionesdigitalesdelosdispositivosconectadosenlaplaca.LaplacadeArduinocuentacon14pinesdigitales,quevandel0al13.Unaseñaldigitalsolopuedetenerdosestados:

0(LOW,bajo,false):Indica0Vdetensiónenviadosdesdelaplaca.1(HIGH,alto,true):Indica5Vdetensiónenviadosdesdelaplaca.

Porlotanto,cuandoponemosunpindigitalavalorHIGH,laplacasuministra5V de tensión por la salida que hayamos indicado, y si ponemos el valor aLOWsuministrará0Vdetensión.(Ojo:Hayquetenerencuentaquelos5Vnosiempreson5nilos0siempreson0)Los pines digitales deArduino pueden ser usados tanto de entrada como desalida.

PINESANALÓGICOSLos pines analógicos pueden medir un rango de valores de voltaje, adiferenciadelosdigitalesquesoloentiendendosvalores:0-1,oloqueeslomismo,0Vo5V.Conlospinesanalógicosvamosapoderleervaloresintermediosentre0Vy5V,representadosconunvalorenterocomprendidoentre0y1023,yaquelainformación se representa en números de 10 bits, y también vamos a poderescribir en los pines valores comprendidos entre 0 y 255, ya que lainformaciónserepresentaennúmerosde8bits.Enelpuntoanteriorhemoshablado sobrepinesdigitales, si te fijas enellosverásqueaparecenalgunosconelsímbolo“~”enlaplaca,estesímboloindicaquepuedenserutilizadostambiéncomopinesanalógicos.PINESALIMENTACIÓNSENSORES

Page 21: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Además de los pines de entrada y salida descritos anteriormente, Arduinodispone de pines que nos permiten alimentar componentes externos,concretamenteunocon5Vyotrocon3,3V.Tambiéndisponedepinesdetierra(GND).MICROCONTROLADORDECOMUNICACIONESEl microcontrolador de comunicaciones se encarga de gestionar lascomunicacionescontodoloqueseconectaalaplaca.

MICROCONTROLADORDEPROGRAMACIÓNEste componente de la placa es el cerebro de la misma, es donde la placaalmacenaelprogramaquetienequeejecutaryelqueloejecuta.Elmicrocontrolador de la placa se programa utilizando el IDE (Entorno deDesarrolloIntegrado)deprogramacióngratuitodeArduino.Enlosapartadossiguientesexplicamoscómoinstalarloycomoponerloafuncionar.BOTÓNRESETEl botón Reset permite reiniciar el programa que se ha cargado en elmicrocontrolador interrumpiendo la ejecución actual. Ten en cuenta que noborraelprogramaquesehacargado,únicamenteloreinicia.PUERTOUSBElpuertoUSBeselpuertomedianteelcualnoscomunicaremosconlaplacadeArduino.Susfuncionesprincipalesson:

AlimentaciónCargarlosprogramasenelmicrocontrolador.Envíodeinformacióndesdelaplacaalordenador.

Page 22: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

CONECTORDEALIMENTACIÓNArduinodisponedeunpuertodealimentaciónexternoquenospermitiráhacerfuncionar laplacasinutilizarunordenador.Tienesquetenerencuentaelnoalimentarlaplacaconmasvoltajedelquesoporta,yaquepodríasdañarla.Lorecomendadoesalimentarlaentre7Vy12V.

Page 23: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

¿ARDUINOYROBÓTICA?Arduinoesconsideradounadelasbasessobrelasqueempezaratrabajarentemasrelacionadosconrobótica,yaque,porsusimplicidad,permiteadquirirconocimientos básicos para dar el paso posteriormente a tecnologías máscomplejasycompletas.

Page 24: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

VENTAJASExisten multitud de microcontroladores y plataformas en el mercado, peroningunade ellas ha conseguido tener tanto éxito comoha tenidoArduino, yeso es debido aquepresentaunanotable cantidaddeventajas respecto a suscompetidores:

Precio:ElcostedelasplacasArduinoesridículamentebaratocomparadoconelrestodeplacas.Laplacamásbaratacuestaentornoa30€eincluyetodolonecesariopararealizarcualquiertipodeproyecto.

Multiplataforma: El software de Arduino se ejecuta en sistemasoperativosWindows,MacintoshOSXyGNU/Linux.

Facilidad de uso: El entorno de programación y la placa son losuficientementesencillosparaquepersonasprincipiantespuedanusarlossinproblemas.

SoftwareExtensibleyflexible:Arduinonoestápensadoúnicamenteparaque personas principiantes aprendan, sino que también permite quepersonas con conocimientos avanzados puedan realizar proyectoscomplejos. Además, al tratarse de software libre, el código fuente seencuentra accesible y permitirá a usuarios más avanzados acceder yextenderlasfuncionalidadesdisponibles.

Hardware abierto y extensible: Arduino está basado enmicrocontroladores que tienen sus módulos publicados bajo licenciaCreativeCommons, lo que permite a diseñadores experimentados poderhacersupropiaversióndelmódulo,extendiéndoloymejorándolo.

Page 25: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

ENTORNODEDESARROLLOArduino tiene un entorno de desarrollo propio que te permite cargar en laplacalosprogramasqueescribes.Existendosformasdiferentesdeutilizarelentorno de desarrollo, el primero es utilizarlo en un navegador web y elsegundoesinstalárteloenelordenador.Para instalarlo entra en https://www.arduino.cc, y después entra en el menúSoftware:

Ilustración3.Me núprincipal We bArduino

También puedes entrar directamente enhttps://www.arduino.cc/en/Main/Software.Enestapáginawebpodrásaccederacualquieradelasdosformasdisponiblesdelentornodedesarrollo.Acontinuación,teexplicarécomopuedesaccederacadaunodeellos.Dejoatu elección el entorno a usar, ya que ambos tipos ofrecen las mismasposibilidades.

Page 26: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

ENTORNOWEBParautilizarelentornodedesarrollowebtienesqueregistrartepreviamente,porloque,éseeselprimerpaso.Paraellotienesqueentraren“Tryitnow”yposteriormenteen“SignUp”,rellenatodalainformaciónquetepidenycomoúltimo paso tienes que activar la cuentamediante el email que te enviará alfinalizarelproceso.

Ilustración4 .ArduinoWe b

Unavezhasacabadoelprocesoderegistrotienesqueentrarutilizandoelloginylacontraseñaquehasintroducidoduranteelprocesoderegistro.Alentrarlaprimeraveztienesqueaceptarlascondicionesdeuso:

Page 27: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Ilustración5.Plug inArduino

Una vez aceptas las condiciones tienes que permitir que Arduino instale elpluginnecesarioparaelsistemaoperativoquetienes:

Page 28: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Ilustración6.Proce soinstalaciónArduinoWe b

Eligeelsistemaoperativoque tienesysigue las instruccionesde instalación,tendrás que aceptar las condiciones y proceder con la instalación. Una veztengaselplugininstalado,podrásaccederaArduinoCreate:

Page 29: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Ilustración7 .ArduinoWe b

Page 30: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

APLICATIVOEn la secciónen laquepuedesdescargarelentornodedesarrollo tendrás laposibilidaddedescargarloparaelsistemaoperativoqueestésutilizando:

Ilustración8.De scargaraplicaciónparaArduino

Selecciona la versión que quieres descargar y te llevará a la página dedescarga, desde la que podrás hacer algún donativo para Arduino odirectamentedescargarlo:

Ilustración9.DonaciónaArduino

INSTALACIÓNDEARDUINOENMACOS

Page 31: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

ParainstalarlaversióndemacOSúnicamentetienesquecopiarelficherodedescargaalacarpetadelasaplicaciones:

Ilustración10.Instalacióne nmacOS

Puedescopiarloacualquiercarpeta,peroterecomendamosquelocopiesalacarpeta donde están instaladas todas las aplicaciones y así accedas desde elLaunchpad.INSTALACIÓNDEARDUINOENWINDOWSParainstalarlaversióndeWindowsejecutaelinstaladordescargadoyaceptalascondicionesquetemuestralaprimerapantalladelinstalador:

Page 32: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Ilustración11.Instalandoe nWindows(Paso1)

Una vez aceptadas las condiciones tienes que indicarle qué componentesquieresinstalar:

Ilustración12.Instalandoe nWindows(Paso2)

Tras seleccionar los componentes a instalar tienes que indicar la ruta dondequieresinstalarelentornodedesarrollo:

Page 33: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Ilustración13.Instalandoe nWindows(Paso3)

Elprocesodeinstalaciónempezaráunavezseleccioneslaruta,unavezacabecierraelinstaladoryyatendráselentornolistoparaempezar:

Ilustración14 .Instalandoe nWindows(Paso4 )

Una vez haya acabado, únicamente tienes que ejecutar la aplicación desde elaccesodirectoquesehacreado.INSTALACIÓNDEARDUINOENLINUXPara instalar la versión deLinux tienes que extraer el contenido del fichero

Page 34: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

descargadoeneldirectorio/home.

Ilustración15.Instalandoe nLinux(Paso1)

Unavezlotienesextraído,entraparacomprobarquetienestodoslosficherosycarpetasqueaparecenenlasiguienteimagen:

Ilustración16.Instalandoe nLinux(Paso2)

Page 35: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Para instalar el IDE de Arduino únicamente tienes que ejecutar el ficheroinstall.shdesdeelterminal:

Ilustración17 .Instalandoe nLinux(Paso3)

Elprocesodeinstalacióncrearáelaccesodirectoenelescritorio,porloqueparaentraralentornoúnicamentetienesqueejecutarlodesdeahí.

Page 36: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

FAMILIARIZÁNDOTECONELENTORNODEDESARROLLOEn este apartado se explicará el entorno de desarrollo con el que realizarástodoslosobjetivos,retosyproyectosqueteproponemosenestelibro.

Page 37: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

PANTALLAPRINCIPALNadamásabrirelentornopuedesapreciar losencilloe intuitivoquees.Pordefecto,seteabreunproyectovacíoconlaestructuradelprogramaArduino.Lapantallaprincipalestácompuestapor:

MenúPrincipal que contiene todas las funciones y herramientas de lasqueestácompuestoelentorno.Barradeaccesorápidoalasoperacionesmáscomunes.Panel inferior de mensajes donde se muestran los mensajes deinformación y error enviados por el entorno al usuario que lo estáutilizando.

Ilustración18.Pantallaprincipal IDE

Page 38: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

MENÚPRINCIPALMENÚARCHIVOEl menú Archivo contiene todas las funcionalidades típicas de este menú.Desde aquí se puede crear un proyecto nuevo, abrir proyectos existentes,accederalosejemplospredefinidos,guardarelproyectoactual.

Ilustración19.Me núArchivo

Ademásdelasoperacionesdegestióndeproyectos,permiteaccederalmenúdeconfiguracióndelentornodedesarrolloparapoderconfigurarelementosnorelacionadosconeldesarrollo,compiladoyejecucióndelosprogramasdeArduino.

Page 39: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Ilustración20.Me núpre fe re ncias IDE

MENÚPROGRAMAElmenú Programa contiene todas las operaciones y funcionalidades que sepuedenllevaracaboconelproyectoque tenemosactualmentecargadoenelentornodedesarrollo.

Page 40: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Ilustración21.Me núPrograma

Además de las funciones de compilado y carga del programa en la placa,desdeestemenúsepuedenañadirlibreríasalentornodeprogramación.Paraello,hayqueaccederalaopcióne“IncluirLibrería”.Unavezdentro,sepuedeseleccionaruna librería ya existente, cargaruna librería en formato “Zip”oaccederalaherramientagestoradelibrerías,desdedondepodremosagregarlibreríasseleccionandolaversiónainstalar.

Page 41: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Ilustración22.Ge storde l ibre rías

MENÚHERRAMIENTASElmenúHerramientaspermiteelaccesoyconfiguracióndeelementosajenosalentornodedesarrollo.Loselementosmáscomunesqueseutilizandeestemenúson:

MonitorSerie:Explicadoenelapartado“PantallaPrincipal”.Configuracióndelaplaca:Desdeaquísepuedeconfigurarlaplacaquetenemos conectada al ordenador. Por defecto la aplicación la detectaráautomáticamente.Configuracióndelpuerto:Desdeaquísepuedeconfigurarelpuertodeconexióndelaplacaalordenador.Pordefectolaaplicaciónladetectaráautomáticamente.

Page 42: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Ilustración23.Me núHe rramie ntas

Page 43: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

BARRADEACCESORÁPIDOAcontinuación,estánexplicadastodaslasfuncionesdeaccesorápidoincluidasenlabarradeaccesosdirectos.VERIFICAR

Laoperación“Verificar”permitecomprobarsielcódigofuenteescritoenelentornodedesarrollonotienefallos,esdecir,compruebasicompila.El resultado de la verificación del código es mostrado en la consola demensajes inferior, si no contiene errores la consola mostrará un mensajecomoeste:

Ilustración24 .Ve rificarOK

En caso de contener errores, todos ellos serán mostrados de la siguienteforma:

Ilustración25.Ve rificarKO

SUBIR

Page 44: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Laoperación“Subir”permitecargarelcódigofuentecompiladoen laplacadeArduino.Una vez subido el programa, éste comenzará a ejecutarse en laplaca.NUEVO

La operación “Nuevo” abrirá un nuevo proyecto de Arduino vacío, con laestructuraprincipalyacreada.

ABRIR

La operación “Abrir” permite buscar un proyecto Arduino en nuestroordenadoryabrirloenelentornodedesarrollo.SALVAR

Laoperación“Salvar” guardará el proyectodeArduino en la ruta donde leindiquemos.MONITORSERIE

Laoperación“MonitorSerie” abrirá la consola de intercambio demensajesentrelaplacayelordenadoratravésdelpuertodecomunicaciones.Talycomopodrásverenunafasedelobjetivonúmero4,el“MonitorSerie”seutilizaparamostrarinformaciónenlapantalladelordenador.

Page 45: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

ANTESDEEMPEZAR

Page 46: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

ESTRUCTURADEUNPROGRAMAElprogramaenArduinoesmuysencillo.Estácompuestobásicamentepordossecciones diferentes y obligatorias en las que se codifican diferentescomponentesdelprograma.

Ilustración26.EstructuraprogramaArduino

En la primera sección del programa, setup(), es donde se define laconfiguración del programa, es decir, es donde se codifican todas lassentencias de configuración, inicialización de los puertos de la placa,configuración de las comunicaciones y otros parámetros que dependerán decadaprogramaquesedesarrolle.Enlasegundaseccióndelprograma,loop(),esdondesecodificaelprogramaqueseejecutarádeformacíclicaenArduino.Estasecciónestácompuestaportodaslassentenciasquecomponenelprogramayquellevaránacabotodaslasoperacionesquelocompongan.Resumiendo,ensetupsedefineeinicializaloqueseusaenloop,siendoestaúltimasecciónelcorazóndeunprogramadeArduino.

Page 47: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

COMPONENTESCOMUNESENTODOSLOSMONTAJESPLACAARDUINOLa placaArduino ha sido explicada en el punto anterior en el que te hemosexplicadoArduino.Enlosejerciciosqueserealizaránposteriormente,seirándefiniendolasconexionesenfuncióndelmontajequeestemosllevandoacabo.

PROTOBOARDLaplacaprotoboard es una base dematerial aislante (plástico) con orificiosparalainsercióndeloscomponenteselectrónicos,deformaqueesténunidoseléctricamenteentreellos,yaqueensuinteriorlosorificiosestánconectadosentresígraciasaunaslíneasdematerialconductor.UsarlaplacaProtoboardesmuysencillo.Simplementetienesqueinsertarloscomponentes teniendoencuentaquehaylíneasqueactúancomosi todos loscomponenentesestuvieranconectadosenelmismopunto.Lasdos líneas deorificios externas, que se encuentran entre la líneapintadarojayazúl,destacadaunadeellasenamarillo,actúancomosifueraelmismopunto de conexión, es decir, cualquier componente que pinchemos encualquiera de los orificios señalados sería como si estuviera conectadodirectamenteaotrocomponentequeestuvierapinchadoenotrodelospuntosdelamismalínea.

Ilustración27 .Protoboard1

La línea azul y la línea rojanospueden ayudarpara conectar enunode susextremosuncableconcarganegativaypositivarespectivamenteytenerasíelrestodelosorificiosalimentadoscondichascargas.

Page 48: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Losorificiosdelapartecentraldelaplacaestánconectadoseléctricamentedeformadiferentealaslíneasexteriores.Enlaimagensiguientepuedesverunalíneailuminadadeamarilloquesonlospuntosconectadoseléctricamenteentresí.

Ilustración28.Protoboard2

Ojo,paraconectarunamitaddelaplacaconlaotra,tendremosquehacerunpuentedeformaqueconectea travésdeuncableunalíneaconlaotracomovemosenlaimagensiguiente:

Ilustración29.Protoboard3

CABLEUSBLo usaremos para pasar el programa desde el ordenador a la placa deArduino,paraque interactúe con los componentes electrónicos, y en sentidoinverso,desdeloscomponenteselectrónicos(sensores),alordenador.

Page 49: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Ilustración30.Cable USB

CABLESUsaremos cables macho-macho o macho-hembra en función de lo quenecesitemosconectarencadaproyecto.

Ilustración31.Cable s de circuito

RESISTENCIASLas resistencias sonunosdispositivosque se oponen al pasode la corrienteeléctrica cuando pasa través de ellas, por tanto, antes de una resistencia ydespués de ella habrá una diferencia de carga eléctrica, siempremenor a lasalidaquealaentrada.Deestamanera,protegeremosaotrosdispositivosdeser atravesados por una intensidad mayor a la pueden soportar y por tantosufrirunasobrecarga.Para saber qué resistencia será necesaria para proteger un determinadodispositivo,necesitaremosconocer la intensidadmáximaquepuede soportarel dispositivo (I) y la tensión a la que va a estar sometido (V). Conociendodichos valores podemos calcular la resistencia (R) que protegerá nuestrodispositivo.ParacalcularloutilizamoslaLEYDEOHM(V=IxR):

R=V/I

Dondelaresistencia(R)semideenohmios,Ω;latensióneléctrica(V)semideenvoltios,V;ylacorrienteointensidadeléctrica(I)semideenamperios,A.Algoquedebestenerencuentaesquenoexistenresistenciascomercialesdetodos los valores óhmicos, por lo que tendrás que calcular y elegir laresistencia que más se aproxime al valor ideal del proyecto que estás

Page 50: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

realizando.Porello,acontinuación,teexplicounejemplodecómocalcularelvalordeunaresistenciaparaprotegerundispositivo,enestecaso,unLED.Tenemos que tener en cuenta dos cuestiones: la primera es que un LEDestándarsoportauna intensidaddehasta20mA,ydejaremosunmargenparano correr el riesgodeque elLEDse funda (17mA).Y la segunda es que elvoltajeconelquevamosatrabajaresdeunos5V.Conello,vamosacalcularelvalordelaresistenciaquetendríamosquemontarenserieparaqueelLEDnosufraunasobrecarga.AplicandolaleydeOhm:V=IxR5V=17mAxRR=5/0,017R=294ΩPuestoquenovamosaencontrarunaresistenciaconestevalorexacto,tendrásqueelegirotradevaloraproximadosiempreporencima,paraasegurarnoslaprotección del dispositivo. En este caso nos tendremos que hacer con unaresistenciade330Ω.Una vez que hemos calculado el valor de la resistencia que necesitamos,debemoselegir físicamenteesa resistencia.Pero,¿cómopodemossabercuáles el valor óhmicodeuna resistencia física?Muy sencillo: fijándonos en sucódigo de colores. Cada resistencia cuenta con unas líneas de colores quesegúnsucombinaciónofrecenmásomenosresistencia.

Page 51: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Ilustración32.Re laciónbandas re s is te nciaycolor

Enestecaso,laresistenciaquenecesitábamos,de330Ω,seríalaquetieneloscolores:

Ilustración33.Colore s re s is te nciauti l iz ada

LEDL.E.D. (Light EmittingDiode o diodo emisor de luz), es un dispositivo queemiteluzcuandoseencuentranenpolarizacióndirecta,esdecirnecesitaestarconectado de una forma determinada: la pata larga (ánodo) conectada a unpolo positivo y la pata corta (cátodo) a un polo negativo. Si se conecta alrevés, la corriente no pasará y por tanto no emitirá luz. Esto es algo muyimportantequedebestenerencuentaalahoraderealizarlosmontajesdetusproyectos.

Page 52: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Ilustración34 .LED

Los LEDs se utilizan mucho para realizar montajes electrónicos, ya quepresentan dos ventajas importantes con respecto a otro tipo de dispositivolumínico:1. Consumenmuypocaenergíayaquecasitodalaenergíaqueconsumeun

LED(másdeun80%)seutilizaendarluzynocalor.

2. Tienenunavidaútilmuylarga:másde100.000horasdeluz.

UnLEDpuedeconectarsetantoaunpindigitalcomoanalógico.LEDRGBUnLEDespecialeselRGB,cuyassiglashacenreferenciaa loscoloresRed(Rojo),Green(Verde)yBlue(Azul),loscoloresprimariosdelaluz.UnRGBes en realidad la unión de tres LEDs, cada uno de un color básico, en unencapsuladocomún.Enfuncióndelatensiónquerecibacadaunodeellos,elRGBemitiráuncoloruotro.PodemosencontrardostiposdeRGB:

Decátodocomún:compartenelpinqueseconectaaGND.Losotrostrespinesseconectanapinesdigitalesoanalógicos.

Deánodocomún:compartenelpinqueseconectaalaalimentación(5Ven nuestra placa de Arduino). Los otros tres pines se conectan a pines

Page 53: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

digitalesoanalógicos.

Ilustración35.Tipos de LEDRGB

Para identificar qué pin corresponde a cada color debemos tener enconsideración:

Lapatillamás larga es la de alimentacióno la tierra (GND), según seacátodocomúnoánodocomún.

Normalmente,lapatillaqueestásolaalladodelamáslargaeselrojoRylasotrasdoscorrespondenalverdeGyalazulB.

Teniendo en cuenta que el rango de valores RGB va de 0 a 255, podemosjugaracombinarunoscoloresconotros.Laeleccióndedichosvaloressetraducecomolatensiónquepodemosponerencadapin.Mediante laeleccióndelosvaloresconseguiremoslamezcladecolorquedeseemosdeformasencilla.Conlasiguienteimagenpuedeshacerteunaideadelaluzqueobtendremossimezclamosvariasdeellas,teanimamosaquepruebesaintroducirdiferentesvalores para cada uno de los colores y así podrás comprobar diferentestonalidadesdecolores.

Page 54: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Ilustración36.Luz

Talycomopuedesobservar, lamezclade la luzdecolor rojo,verdeyazulnosdacomoresultadounaluzblanca.POTENCIÓMETROUnpotenciómetroesundispositivoqueproporcionaunaresistenciavariablesegúnvayamosmodificandosuposicióngraciasalarotacióndeunejequeseva desplazando interiormente sobre un material resistivo. Un ejemplo depotenciómetro es el que vemos en la siguiente imagen, aunque existen en elmercadomuchostiposmás.

Ilustración37 .Pote ncióme tro

ParaconectarelpotenciómetroalaplacaArduino,debemosunirlapatillaAaGND(tierra),laBalos5V(oviceversa)ylacentralaunaentradaanalógica,yaquelovaloresquevamosaintroducirvanaservariables.

ZUMBADORUn zumbador es un dispositivo fabricado con un material piezoeléctrico,normalmente cuarzo, que al ser sometido a una tensión eléctrica variablevibranproduciendounsonido.

Page 55: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Ilustración38.Zumbador

Laconexióndelzumbadoressencilla,unapataconectaráconGND(tierra)yla otra a una entrada analógicaodigital por donde entrará la tensiónque leprovocarálavibración.SENSORDELUZ(LDR)ElLDR(LightDependentResistor)esunaresistenciacuyovalordependedelacantidaddeluzqueincidasobreella.

Ilustración39.Se nsorde luz

CuandolaluzincidesobreelLDR,elmaterialsevuelvemásconductorporloquesuresistenciadisminuye.Alcontrario,cuantamenosluzincidasobreella,mayor será su resistencia.Ésto se traduce enquepodrádar paso amayor omenorcantidaddecorrienteeléctricaenfuncióndelaluzquereciba.Al ser un dispositivo que no tiene polaridad, las patillas pueden conectarseindistintamente,sintenerencuentaelpolopositivonielnegativo.

SENSORDEHUMEDADYTEMPERATURAElDHT11,DigitalTemperaturaandHumiditysensor,esundispositivoquenosvaapermitirobteneruna informaciónsimultáneade temperaturayhumedadmedianteunprocesadorinternoquerealizadichoprocesodemedición.ElsensorquevamosautilizareselDHT11,noeselmejordetodos,peropararealizar nuestro proyecto esmás que suficiente. Si queremos afinarmás ennuestrasmediciones podríamos hacernos con unDHT22,más preciso, perotambiénmáscaro.

Page 56: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Las características técnicasdelDHT11 son las siguientes, teniendoen cuentaqueelsensorvatomandovaloresambientalescadasegundo:

MedicióndeTªde0a50°C 2°C

MedicióndeHde20a80% 5%

Ilustración40.Se nsorde hume dadytempe ratura

ParaconectarelsensoralaplacaArduinolotendremosfácil.Fijándonosenlaleyendadeldispositivo,conectamoslaspatillasexterioresaGNDyVCCylacentral a una entrada digital, ya que el procesador del DHT11 proporcionamedicionesmedianteseñalesdigitales.SENSORDEPRESENCIAEl sensor infrarrojo de movimiento PIR HC-SR501, donde PIR viene de‘Pyroelectric Infrared’ o ‘Passive Infrared’, es un dispositivo que detectamovimientobasándoseenlaradiaciónelectromagnéticainfrarrojaqueemitenlosseresvivosyobjetosdebidoalatemperaturaalaqueseencuentran.Elsensordetectapresenciasielobjetoseencuentradentrodeunconode110°desdesucentroyunadistanciamáximadehasta7metros.

Page 57: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Ilustración41.Se nsorde pre se ncia

Podemos ajustar el comportamiento del sensor modificando con undestornilladorlosdospotenciómetrosyeljumperqueincorpora:

Ajustedeltemporizador:Paramarcareltiempoenelqueseactivaráelsensor cuando haya detectado presencia, de 3 segundos a 5 minutos.Girando hacia la derecha tardará más en actuar y girando hacia laizquierdaseactivaráenmenostiempo.

Ajuste de sensibilidad: Para modificar la distancia y la cantidad demovimiento necesaria para activar el sensor, de 3 a 7 metrosaproximadamente. Girando hacia la derecha decrece la sensibilidad (seactivará cuando detecte el objeto a menos distancia). Girando hacia laizquierdaaumenta la sensibilidad (seactivarácuandodetecteelobjetoamayordistancia).

Ajuste del modo: El sensor puede trabajar en modo continuo: siqueremos esté continuamente detectando movimiento y por tantoactivado, o enmodorepetición: si queremos que sólo se active cuandodetectemovimiento.

ParaconectarloconlaplacadeArduino:conectamoselpinVCCdelsensoralos5Vdelaplaca,elpincentraldelsensoraunpindelaplacaparatransmitirinformaciónyelpinGNDdelsensoralGNDdeArduino.

Page 58: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

SENSORDEAGUALo primero de todo es no confundir el sensor de agua con el sensor dehumedad,yaquemidencosasdiferentes.

Ilustración42.Se nsorde agua

Este sensor estima la presencia de agua a través de unos filamentosconductores paralelos que serán los que entren en contacto directo con ellíquido. Esto provoca una señal analógica que será traducida por Arduinoindicando que efectivamente el sensor ha detectado agua. Dichos valoresanalógicos medidos pueden variar desde 0 (sensor totalmente seco) a 1023(sensortotalmenteempapado).Aunque el sensor necesita entrar en contacto con el agua para detectar suexistenciaono,esonoquieredecirquetodassuspartespuedanmojarse.¡Noolvidemos que es un dispositivo electrónico!Por ello debemos proteger loscontactosyparteseléctricasdelcircuito.Delocontrario,podremosprovocaruncortocircuito.PANTALLALCDLa pantalla LCD, Liquid Crystal Display (Display de cristal líquido), es undispositivo que nos va a permitir visualizar información de forma gráficamediantetexto.

Ilustración43.PantallaLCD

Page 59: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Estaspantallasposeenpinesdeentrada/salidadedatoscomosemuestraenlasiguienteimagen.

Ilustración44 .De tal le pine s LCD

ElsignificadodecadaunodelospinesdelapantallaLCDeselsiguiente:

VSS:pinqueconectaatierra(GND,masa)VDD:pinqueconectaa5voltiosparaalimentarlapantalla.VO: pin que ajusta el contraste de la pantalla. Se conecta a unpotenciómetronormalmente.RS:pinselectorderegistroparaelegirelusodeldispositivo.RW: pin de lectura/escritura. En función del estado (HIGH o LOW),podremosescribiroleerdatosenelLCD.E (enable): pin que habilita/deshabilita la pantalla para recibirinformación.D0 aD7: pines de datos por donde se envía o recibe información, esdecir,pordondesetransfierenlosdatos.A:pindelLED(ánodo)queiluminalapantalla(5V)K:pindelLED(cátodo)queiluminalapantalla(GND)

De forma gráfica, podemos ver la conexión de la placa Arduino con lapantalla LCD en la siguiente imagen. A la izquierda se encuentra la placaArduino y a la derecha la pantalla LCD. Las líneas de colores indican las

Page 60: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

unionesquesedebenhacerparaconectarambosdispositivos:

Ilustración45.Cone xióne ntre placaArduinoyLCD

EnelObjetivo4utilizaremoslapantallaLCDparavisualizarlainformaciónque nos aportan determinados sensores y las conexiones vendrán descritasparacadaunodeellos.

Page 61: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

OBJETIVO1–MANEJOLEDS

Page 62: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

EXPLICACIÓNEn el objetivo número 1 explicaremos todo lo necesario para aprender amanejardiferentestiposdeLEDs,interactuandocondiferentespinesdesalidadelaplacadeArduino.

Page 63: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

FUNCIONESDEPROGRAMACIÓNEn este objetivo vamos a profundizar en las siguientes funciones deprogramación:#DEFINEEstasentenciapermiteladefinicióndevaloresconstantesentodoelprograma.Porejemplo,sienelcircuitovamosautilizarlasalidanúmero5delaplaca,lo normal es crear una constante con el valor 5 y utilizarla en el código enlugardeutilizarelvalor5.Lautilizacióndeconstantesenelcódigoesalgomuycomúnqueseutilizaenprogramación.EneldesarrollodeprogramasparaArduinonosvaapermitir,entreotrascosas,que,siporejemplocambiamoselnúmerodelpinenlaquetenemosenchufadoelcircuito,cambiandoelvalorde laconstante,de formaautomática en todas las sentencias en las que estamos usando ese valor seactualicenytodosigafuncionandodeformacorrecta.Esdecir,notendremosquecambiarporelnuevovalortodaslassentenciasdondeseutilizalasalida,únicamentecambiaremoselvalordelaconstante.En el siguiente ejemplo se define una constante que se llamaVERDE y quetieneelvalor3,esdecir,elLEDverdeestáconectadoalpinnúmero3:#defineVERDE3

PINMODELasentenciaesutilizadaparaconfigurarelmododetrabajodecadaunodelospinesquetienelaplacaArduino.Lasecciónenlaqueseutilizaeslaseccióndeconfiguración,esdecir,ensetup().Existendosmodosdiferentesdefuncionamientodelospines:

INPUT:Elpinesutilizadocomoentradade informaciónen laplacadeArduino.

OUTPUT:ElpinesutilizadocomosalidadeinformacióndelaplacadeArduino.

Page 64: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

LaconfiguraciónpordefectodetodoslospinesdelaplacadeArduinoesdesalida,por tanto, sino indicamos locontrarioestospines funcionaránenestemodo.Te aconsejamosque, independientementedeque sea el valor pordefectoeldesalida,configureselmododefuncionamientodetodoslospines.Enelsiguienteejemplosedefineelpinnúmero3comosalida:pinMode(3,OUTPUT);En lugar de utilizar el valor 3, en el siguiente ejemplo temostramos comoutilizarlaconstantequehemosdefinidopreviamente:pinMode(VERDE,OUTPUT);DIGITALWRITEMediante esta sentencia vamos a enviar valores binarios (0 o 1) al pinconfiguradocomosalida.En la sentenciahayque indicarelnúmerodelpin,quevade0a13ypuedeespecificarseporvaloroporconstante,yelvaloraenviar.Losposiblesvaloresaenviarson:

HIGH:Paraenviarelvalor1.LOW:Paraenviarelvalor0.

En el siguiente ejemplo se envía el valor HIGH al pin número 3, es decir,quieroactivareldispositivoconectadoalpin3,enestecaso,encenderel ledconectadoalpin3:digitalWrite(3,HIGH);En lugar de utilizar el valor 3, en el siguiente ejemplo temostramos comoutilizarlaconstantequehemosdefinidopreviamente:digitalWrite(VERDE,HIGH);

ANALOGWRITELasentenciaenviarávaloresentre0y255alpinconfiguradocomosalida.Enlasentenciahayqueindicarelpinsobreelquesequiererealizarlaescriturayelvaloraescribir.

Page 65: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Enelsiguienteejemploseenvíaelvalor120alpinnúmero3:analogWrite(3,120);En lugar de utilizar el valor 3, en el siguiente ejemplo temostramos comoutilizarlasentenciaconlaconstantequehemosdefinidopreviamente:analogWrite(VERDE,120);DELAYLa funciónpermitedetenerde forma temporal laejecucióndelprogramadeArduino.Eltiempodedetenciónseindicaenmilisegundos.Enelsiguienteejemplosedetieneelprogramamediosegundo(tenencuentaqueunsegundoson1000milisegundos):delay(500);

FORLasentenciaFOResutilizadapararepetirunbloquedesentenciasunnúmerodeterminadodeveces,esdecir,utilizaremosestasentenciasiqueremosrepetirunaaccióno secuenciadeacciones, comoporejemploque seencienday seapagueunledvariasvecesseguidas.Para la ejecución se utiliza una condición de terminación,mientras que estacondiciónnoseacierta,elbloquedesentenciaseejecutarepetitivamente,unavezlacondiciónesciertadejadeejecutarseelbucle.EnelsiguienteejemplopuedesverunbucleFORqueserepite10veces:for(inti=0;i<10;i++){

digitalWrite(VERDE,HIGH);delay(2000);digitalWrite(VERDE,LOW);delay(2000)

}

Page 66: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

El ejemplo enciende elLED, esperados segundos, apaga elLEDyvuelve aesperardossegundos.Lacondicióndesalidadelbucleesquelavariableiseamayoroigualque10,esdecir,mientrasqueseamenor,elbloquedecódigoseejecutará y por tanto hasta que no se repita 10 veces la sentencia, se estarárepitiendoelencendidoyapagadodelled.Porcadarepetición,lavariableivaaumentandode1en1suvalor,talycomoseindicaconi++.Podríamoshaberpuestoi=i+1oi+=1enlugardei++,yaqueelfuncionamientoeselmismo.VARIABLESLas variables son un elemento de la programación que se utilizan paraalmacenarvalorestemporalmente.Ladiferenciaprincipalconlasconstantesesque pueden almacenar diferentes valores que van cambiando durante laejecucióndelprograma.Lasvariablesdebende serdeclaradas antesde serutilizadas.En el siguienteejemplopuedesverladeclaracióndeunavariabledetiponúmeroentero(int)ylaasignacióndeunvalor:intVariableEjemplo=0;VariableEjemplo=3+5;Enlaprimerasentenciasedeclaralavariable(VariableEjemplo)yseleasignael valor inicial de 0. Posteriormente, la variable almacenará el resultado derealizarlasumadelosvalores3+5.Enelaprendizajeutilizaremoslossiguientestiposdevariable:

int:Representaunnúmeroenterode16bitscomprendidoentre-32767y32768.

bool:Tipodevariablequeúnicamentepuedetenerdosvalores:TRUEoFALSE(VerdaderooFalso).

Page 67: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

byte:Valornuméricode8bitssindecimalescomprendidoentre0y255.

Page 68: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

MATERIALESAcontinuación,puedesencontrarellistadodematerialesquevamosautilizarenésteprimerobjetivo.

Ilustración46.Mate riale s obje tivo1

Page 69: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

FASE1:INTERACTUARCONUNLEDLafase1consisteenelmontajedeuncircuitoelectrónicobásicobasadoenelencendidoyapagadoautomáticodeunLED.MONTAJEFÍSICOElmontajefísicoparalarealizacióndelafase1eselsiguiente:

Ilustración47 .CircuitoObje tivo1Fase 1

Enelmontajedeestecircuitotienesqueprestarespecialatenciónalaconexiónde las patillas del led. Recuerda que las resistencias son necesarias paraprotegeralledyquenotienenpolaridad,porloquelaconexiónessencilla.Fíjate como está montado en la imagen. Si una vez montado el circuito ymetidoelcódigoellednoseilumina,revisalaconexióndelaspatillasporsilashubierasconectadodelrevés.

PROGRAMACIÓN

Page 70: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

EnlaprimerapartedelcódigodefiniremoslaconstantequeindicaráelpinalquehemosconectadoelLED.EnelejerciciohemosconectadounLEDverdealpin5,entonceselvalordedichaconstante será5.Paraorganizartemejorconelcódigoteaconsejamosqueutilicesnombresdeconstantedescriptivas,noutilicesnombresdelestiloCONSTANTE1,CONSTANTE2…En la sección de configuración, setup(), configuraremos el pin enmodo defuncionamientodesalidayenviaremoselvalorinicial.Enestecaso,alenviarelvalorLOWleestamosestableciendoelvalordeapagadoalLED.En la sección principal, loop(), encenderemos el LED, detendremos elprogramaunsegundo,apagaremoselLEDydenuevovolveremosadetenerelprogramaunsegundo.Estasecciónseejecutarádeformaindefinida,esdecir,serepetiráconstantementeencendiendoyapagandoelLED.CÓDIGOFUENTE#defineGREEN5voidsetup(){

pinMode(GREEN,OUTPUT);digitalWrite(GREEN,LOW);

}voidloop(){

digitalWrite(GREEN,HIGH);delay(1000);digitalWrite(GREEN,LOW);delay(1000);

}

Page 71: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

FASE2:INTERACTUARCONVARIOSLEDSLa fase 2 consiste en el montaje de un circuito electrónico basado en elencendidoyapagadodevariosLEDs.MONTAJEFÍSICOAcontinuación,puedesverelmontajeelectrónicodelcircuito:

Ilustración48.CircuitoObje tivo1Fase 2

Igualqueenelmontajeanterior,prestaratenciónalaconexióndecadapatillade los LED. La toma de tierra ha sido conectada a la protoboard para sercompartida por todos los componentes que se utilicen, en este caso los tresLEDs.

PROGRAMACIÓNEn la primera parte del código definiremos las constantes que indican los

Page 72: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

pines a los quehemos conectado cadaunode los tresLEDs.En el ejerciciohemosconectadoelLEDazulalpinnúmero7,elverdealpinnúmero5yelrojoalpinnúmero3.En la sección de configuración indicaremos los tres pines como salida, yademás,estableceremoselestadoinicialdetodosellos,queseráelLEDrojoencendidoyelverdeyazulapagados.ElestadoinicialloestablecemosconlafuncióndigitalWrite,escribiendoHIGH(1)enlasalidadelLEDrojoyLOW(0)enlassalidasdelosLEDsazulyverde.EnlasecciónprincipalsevanairencendiendoyapagandolosLEDs,deunoenunoydeteniendolaejecucióndelprogramaunsegundoentrecadaunadelasoperacionesqueserealizan.CÓDIGOFUENTE#defineBLUE7#defineGREEN5#defineRED3voidsetup(){

pinMode(RED,OUTPUT);pinMode(GREEN,OUTPUT);pinMode(BLUE,OUTPUT);digitalWrite(RED,HIGH);digitalWrite(GREEN,LOW);digitalWrite(BLUE,LOW);

}voidloop(){

digitalWrite(RED,HIGH);delay(1000);digitalWrite(RED,LOW);delay(1000);digitalWrite(BLUE,HIGH);delay(1000);digitalWrite(BLUE,LOW);delay(1000);digitalWrite(GREEN,HIGH);delay(1000);digitalWrite(GREEN,LOW);delay(1000);

}

Page 73: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

FASE3:INTERACTUARCONUNLEDRGBLafase3yúltimadeesteprimerobjetivoconsisteenlautilizaciónanalógicaydigital de unLEDRGB.El circuito que vamos amontar es compartido porambos modos de utilización, lo único que cambia es el código fuente quecargaremosenlaplacadeArduino.MONTAJEFÍSICOElmontajefísicodelcircuitoeselsiguiente:

Ilustración49.CircuitoObje tivo1Fase 3

TienesqueprestarespecialatenciónalapatilladelLEDRGBalaqueconectaslatomadetierra.CadapatilladelLEDsecorrespondeconuncoloryunaconlatierra,talycomopuedesverenlasiguienteimagen:

Page 74: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Ilustración50.Pati l las LEDRGB

PROGRAMACIÓNDIGITALEn la primera parte del código definiremos las constantes que indican lospinesalosquehemosconectadocadaunadelostrespatillasdelLEDRGBquese corresponden con los colores rojo, verde y azul. En el ejercicio hemosconectadoelLEDazulalpinnúmero3,elverdealpinnúmero5yelrojoalpinnúmero6.En la sección de configuración especificaremos como salidas los tres pinesquehemosconfiguradoparacadaunode loscoloresde laspatillasdelLEDRGB. Además, estableceremos el estado inicial de cada uno de ellos,concretamente,todaslassalidasestaráninicializadasconelvalorLOW.En la sección principal vamos a ir encendiendo y apagando cada una de laspatillas del LED RGB, estableciendo un pequeño delay para que se puedaapreciarelcambiodecoloresdelLEDRGB.CÓDIGOFUENTE#defineRED6#defineGREEN5#defineBLUE3

voidsetup(){

pinMode(RED,OUTPUT);pinMode(GREEN,OUTPUT);pinMode(BLUE,OUTPUT);digitalWrite(RED,LOW);digitalWrite(GREEN,LOW);digitalWrite(BLUE,LOW);

}

Page 75: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

voidloop(){

digitalWrite(RED,HIGH);delay(500);digitalWrite(RED,LOW);delay(500);digitalWrite(GREEN,HIGH);delay(500);digitalWrite(GREEN,LOW);delay(500);digitalWrite(BLUE,HIGH);delay(500);digitalWrite(BLUE,LOW);delay(500);

}

PROGRAMACIÓNANALÓGICAEn este ejercicio utilizaremos el mismo circuito electrónico que hemosmontadoparaelanterior.Ladiferenciaentreambosejerciciosresideenqueenel anterior hemos utilizado las salidas de forma digital y en éste de formaanalógica.Paraesteejerciciohemosañadidounanuevaconstante,delayTime,queindicael tiempoque transcurreentrecadacambioqueharemosen la intensidaddelLED.Laseccióndeconfiguraciónesexactamenteigualqueenelanteriorejercicio.Elcambiorespectoalejercicioanteriorradicaenlasecciónprincipal(loop),iremos encendiendo cada una de las patillas del LED RGB de formaprogresiva para después apagarla con un digitalWrite y continuar con lasiguientepatilla.CÓDIGOFUENTE#defineRED6#defineGREEN5#defineBLUE3#definedelayTime20voidsetup(){

pinMode(RED,OUTPUT);

Page 76: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

pinMode(GREEN,OUTPUT);pinMode(BLUE,OUTPUT);digitalWrite(RED,LOW);digitalWrite(GREEN,LOW);digitalWrite(BLUE,LOW);

}voidloop(){

delay(1000);for(inti=0;i<255;i+=1){

analogWrite(GREEN,i);delay(delayTime);

}digitalWrite(GREEN,LOW);delay(1000);for(inti=0;i<255;i+=1){

analogWrite(RED,i);delay(delayTime);

}digitalWrite(RED,LOW);delay(1000);for(inti=0;i<255;i+=1){

analogWrite(BLUE,i);delay(delayTime);

}digitalWrite(BLUE,LOW);

}

Page 77: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

AHORAERESCAPAZDE…Hasacabadoelprimerobjetivoyhasadquiridolossiguientesconocimientos:

Familiarizaciónconelentornodedesarrollo.FamiliarizaciónconlaplacaArduino.Realizacióndepequeñosprogramas.Utilizacióndesentenciassencillas.ManejodeLEDs.ManejodeLEDRGB.MontajebásicodecircuitosutilizandoLEDs.

Page 78: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

OBJETIVO2–MANEJOPULSADORES

Page 79: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

EXPLICACIÓNEn el objetivo número 2 explicaremos todo lo necesario para aprender amanejar pulsadores con el fin de controlar el encendido y apagado de losLEDs.Enelobjetivoanteriorhasaprendidoamanejarlassalidasdelaplaca.Enéste,loprincipalesqueaprendasa interactuarcon lasentradasde laplacay seascapazdecombinarlainteraccióndeambas.

Page 80: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

FUNCIONESDEPROGRAMACIÓNEn este objetivo vamos a profundizar en las siguientes funciones deprogramación:DIGITALREADMediante la sentencia digitalRead podemos leer el valor que tiene un pinalmacenado.Paraprocederconlalecturahayqueindicarelpinaleer,queiráde0a13ypodráserindicadomediantevaloroconstante.Elvalorleídoseráunodelosdossiguientes:

HIGH:Elpincontieneelvalor1.LOW:Elpincontieneelvalor0.

Enelsiguienteejemploserecibeelvalordelpinnúmero3:valor=digitalRead(3);En lugar de utilizar el valor 3, en el siguiente ejemplo temostramos comoutilizarlaconstantequehemosdefinidopreviamente:valor=digitalRead(VERDE);

IFLasentencia if seutilizaparacomprobar siunacondiciónsecumpleonoyejecutarunbloquedecódigouotrodependiendodeello.Esdecir,medianteifvamosapoderejecutardiferentessentenciasdependiendodelresultadodeunacomparaciónentredoselementos.Las comparaciones que se pueden realizar entre los dos elementos de lacomparaciónson:

Page 81: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Ilustración51.Ope radore s comparación

Enel siguienteejemplosecompruebaelvalorde laentradanúmero5de laplaca, y en caso de serHIGH escribe en el pin de salida el valorHIGH, esdecir, si en el pin 5 tenemos una señal de entrada HIGH, en la salida sedevolverá otra señal HIGH. Traducido a un ejemplo sencillo, sería: siactivamos un dispositivo, provocamos la activación de otro, en este caso,encendemoselledverde.If(digitalRead(5)==HIGH){

digitalWrite(VERDE)=HIGH;}Enlasentenciaifpuedeañadirseelbloquedecódigoquesedebedeejecutaren caso de que la condición no se cumpla, éste bloque es añadido con lasentenciaelse.Enelsiguienteejemplosecompruebasielvalordelpinnúmero5esHIGHyencasodeserloescribeHIGHenlasalidaVERDE,porelcontrario,sinosecumple,escribeHIGHenlasalidaROJO.

If(digitalRead(5)==HIGH)

{digitalWrite(VERDE)=HIGH;

}else

{digitalWrite(ROJO)=HIGH;

{Traducido a un ejemplo sencillo sería: si (if) activamos un dispositivo

Page 82: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

determinadoseenciendeelledverde,ysino(else)loactivamosseenciendeelledrojo.En la condición de la sentencia if también se pueden poner diferentescondicionesmedianteoperadoresORyAND.

OR:Serepresentapor||eindicaquesetienequecumplirunauotra.AND:Serepresentapor&&eindicaquesetienenquecumplirunayotra.

En la siguiente sentencia se está comprobandomedianteOR que la variablevalorseamenorquevalorminimooqueseamayorquevalormaximo:

if(valor<valorminimo||valor>valormaximo)

INPUT_PULLUPEsuntipodeconfiguracióndepindelaplacadeArduino,juntoconINPUTyOUTPUT. La diferencia respecto a INPUT es que si utilizamosINPUT_PULLUPelcircuitoutilizarálasresistenciasinternasdelaplacadeArduino,cosaquenoocurreconelmododefuncionamientoINPUT.Llevadoalapráctica,siutilizamosINPUTdeberemosdeutilizarresistenciasennuestroscircuitosparaloselementosdeentradadelaplaca,ysiutilizamosINPUT_PULLUPnotendremosqueutilizarlasyaqueutilizarálas internasdelaplaca.

Page 83: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

MATERIALESAcontinuación,puedesencontrarellistadodematerialesquevamosautilizarenéstesegundoobjetivo:

Ilustración52.Mate riale s obje tivo2

Page 84: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

FASE 1: ENCENDER Y APAGAR VARIOS LEDS CON UN PULSADOR(VERSIÓN1)La fase 1 de este objetivo consiste en la utilización de un pulsador paraencender y apagar dos LEDs en función de su pulsación. El modo defuncionamientodelpindeentradaseráINPUT.MONTAJEFÍSICOAcontinuación,tieneselmontajedelcircuitoelectrónicoparaestafase:

Ilustración53.CircuitoObje tivo2Fase 1

Tienes que prestar atención a que el pulsador esté correctamente conectadoparapoderleerlaentradasinproblemas.

PROGRAMACIÓNEnlaprimeraseccióndelprogramasedefinenlasconstantesqueutilizaremosen la actividad.Hemos definido para el LED rojo la constante 13 y para el

Page 85: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

verde la 12, que son los pines donde están conectados a la placa. Para elpulsador hemos definido la constante 4, que es el pin donde lo hemosconectado.EnlaseccióndeconfiguraciónsedefinencomosalidaslospinesdondeestánconectadoslosLEDs(lasalidaserefierealencendido/apagadodelosleds)ycomoentrada,elpindondehemosconectadoelpulsador(laentradaserefierealapulsaciónonodelpulsador).La sección principal consiste en que si el pulsador se encuentra presionado(LOW),elLEDverdeseencenderá(elrojoestaráapagado),encasocontrario,si no se encuentra presionado, el LED encendido será el rojo (y el verdeapagado).CÓDIGOFUENTE#defineRED13#defineGREEN12#defineBUTTON4voidsetup(){

pinMode(RED,OUTPUT);pinMode(GREEN,OUTPUT);pinMode(BUTTON,INPUT);

}voidloop(){

if(digitalRead(BUTTON)==LOW){

digitalWrite(GREEN,LOW);digitalWrite(RED,HIGH);

}else{

digitalWrite(RED,LOW);digitalWrite(GREEN,HIGH);

}}

Page 86: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

FASE 2: ENCENDER Y APAGAR VARIOS LEDS CON UN PULSADOR(VERSIÓN2)Lafase2delobjetivoconsisteenlautilizacióndelmododefuncionamientodepinesINPUT_PULLUPyelmanejodedosLEDsenfuncióndelapulsacióndeunpulsador.MONTAJEFÍSICOElcircuitoelectrónicoeselsiguiente:

Ilustración54 .CircuitoObje tivo2Fase 2

Debes prestar especial atención al circuito formado con el pulsador, comopuedes ver, respecto al circuito de la fase anterior, hemos omitido laresistenciayaquevamosautilizarlafunciónINPUT_PULLUP.

PROGRAMACIÓNElcódigofuentedeesteejercicioesexactamenteigualqueelejemploanterior,a excepción del modo de configuración del pin asignado al pulsador, en el

Page 87: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

ejercicio anterior lo definíamos como INPUT y en este ejercicio comoINPUT_PULLUP.CÓDIGOFUENTE#defineRED13#defineGREEN12#defineBUTTON4voidsetup(){

pinMode(RED,OUTPUT);pinMode(GREEN,OUTPUT);pinMode(BUTTON,INPUT_PULLUP);

}voidloop(){

if(digitalRead(BUTTON)==LOW){

digitalWrite(GREEN,LOW);digitalWrite(RED,HIGH);

}else{

digitalWrite(RED,LOW);digitalWrite(GREEN,HIGH);

}}

Page 88: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

AHORAERESCAPAZDE…Tras la finalización del segundo objetivo has adquirido los siguientesconocimientos:

Has aprendido a montar un circuito con componentes de entrada a laplaca.Hasaprendidounnuevomododefuncionamientodepin.Hasaprendidoaleerinformacióndeentrada.Hasampliadolassentenciasdecódigoquesabesutilizar.

Page 89: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

PROYECTO-CREARUNSEMÁFORO

Page 90: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

EXPLICACIÓNEn este proyecto resumen vas a aprender a simular un semáforo utilizandoLEDsyunpulsadorjuntoconfuncionesdeprogramaciónyaconocidasenlosdosobjetivosanteriores.Elobjetivodelarealizacióndelsemáforoesponerenprácticalaaplicacióndelógicadefuncionamientodeelementosexistentesennuestroentornodeldíaadía al código fuente que escribes, junto con la consolidación de losconocimientosdeconstruccióndecircuitosyfuncionesdeprogramación.El proyecto que vas a construir simulará el funcionamiento de un semáforoconvencional, la relación entre los componentes electrónicos y los delsemáforoeslasiguiente:

SemáforodecochesSimulaciónconLEDs.SemáforopeatonesSimulaciónconLEDs.BotónpeatonesparaactivarsemáforoPulsadoryLEDdeindicacióndepulsación.

Page 91: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

MATERIALESAcontinuación,puedesencontrarellistadodematerialesquevamosautilizarenesteproyecto:

Ilustración55.Mate riale s proye cto

Page 92: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

MONTAJEFÍSICOElcircuitodelproyectoeselsiguiente:

Ilustración56.CircuitoProye ctoSemáforo

En el ejemplo vas a utilizar un modo de configuración de entradaINPUT_PULLUP, por lo que no es necesario el uso de resistencias en elcircuitoquevasamontarconelpulsador.

Page 93: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

PROGRAMACIÓNLapartededefinicióndeconstantes (#define)contiene todas lasdefinicionesdetodaslasentradasysalidasquevasautilizardelaplacadeArduino.Vasatenerladefinicióndelos3coloresexistentesenunsemáforodecochesylos2coloresexistentesenelsemáforodelospeatones.Tambiénlaluzdeindicacióndequehasidopresionadoelpulsadorporunpeatónparaqueelsemáforodecochessepongaenrojoyasípoderpasar.Porúltimotienesladefinicióndelpinalqueestáconectadoelpulsador.En la siguiente imagen puedes ver a qué color corresponde cada una de lasconstantesdefinidasenelcódigo:

Ilustración57 .Re laciónconstante s-semáforore al

Enlaseccióndeconfiguraciónsedefineelmododefuncionamientodetodoslospinesjuntoconelestadoinicialdelcircuito.El programaprincipal consiste enuna serie de accionesque se ejecutanunavez es presionado el pulsador y que simulan el funcionamiento de unsemáforo.CÓDIGOFUENTE#defineREDCARS13#defineYELLOWCARS12#defineGREENCARS11#defineGREENPEDESTRIANS10#defineREDPEDESTRIANS9#defineSIGNAL3#defineBUTTON6

Page 94: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

voidsetup(){

pinMode(REDCARS,OUTPUT);pinMode(YELLOWCARS,OUTPUT);pinMode(GREENCARS,OUTPUT);pinMode(REDPEDESTRIANS,OUTPUT);pinMode(GREENPEDESTRIANS,OUTPUT);pinMode(SIGNAL,OUTPUT);pinMode(BUTTON,INPUT_PULLUP);

digitalWrite(REDCARS,LOW);digitalWrite(YELLOWCARS,LOW);digitalWrite(GREENCARS,HIGH);digitalWrite(REDPEDESTRIANS,HIGH);digitalWrite(GREENPEDESTRIANS,LOW);digitalWrite(SIGNAL,LOW);

}voidloop(){

if(digitalRead(BUTTON)==LOW){

digitalWrite(SIGNAL,HIGH);delay(5000);digitalWrite(YELLOWCARS,HIGH);digitalWrite(GREENCARS,LOW);delay(2000);digitalWrite(YELLOWCARS,LOW);digitalWrite(REDCARS,HIGH);digitalWrite(SIGNAL,LOW);digitalWrite(REDPEDESTRIANS,LOW);digitalWrite(GREENPEDESTRIANS,HIGH);delay(10000);for(inti=0;i<3;i++){

digitalWrite(GREENPEDESTRIANS,LOW);delay(1000);digitalWrite(GREENPEDESTRIANS,HIGH);delay(1000);

}digitalWrite(GREENPEDESTRIANS,LOW);digitalWrite(REDPEDESTRIANS,HIGH);digitalWrite(REDCARS,LOW);digitalWrite(GREENCARS,HIGH);

}}La traducción del código es la correspondiente al funcionamiento de dossemáforos, uno de vehículos y otro de peatones, que podemos encontrar encualquiercalle:

Page 95: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

En la primera parte el LED rojo del semáforo de los coches está apagadodigitalWrite(REDCARS,LOW) y el verde encendido digitalWrite(GREENCARS,HIGH) (estáncirculandoloscoches)yalcontrarioenelcasodelsemáforodelospeatones,el verde apagado digitalWrite(GREENPEDESTRIANS,LOW) y el rojo encendidodigitalWrite(REDPEDESTRIANS,HIGH)(lospeatonesnopuedencruzar).Sisepresionaelpulsadorif(digitalRead(BUTTON)==LOW),seiluminaelLEDblancodigitalWrite(SIGNAL,HIGH), indicando que lo hemos activado. Pasados 5 segundosdelay(5000),seiluminaelamarillodeloscochesdigitalWrite(YELLOWCARS,HIGH)paraavisar que deben ir parando y a la vez se apaga el verdedigitalWrite(GREENCARS,LOW). Pasados 2 segundos delay(2000) el amarillo se apagadigitalWrite(YELLOWCARS,LOW)yseiluminaelrojodigitalWrite(REDCARS,HIGH)paraquelos vehículos paren totalmente. En ese momento se apaga el LED blancodigitalWrite(SIGNAL,LOW) y el rojo de los peatones se apagadigitalWrite(REDPEDESTRIANS,LOW) para iluminarse el verdedigitalWrite(GREENPEDESTRIANS,HIGH)yasípermitirelpasoalospeatones.Pasados10segundosdelay(10000)elLEDverdedelospeatonesseenciendeyseapaga3 veces durante 1 segundo (1 segundo encendido, 1 pagadoy así tresveces)for(inti=0;i<3;i++)avisandoalospeatonesquedebenirdejandodecruzar.Una vez repetido tres veces, el LED verde de los peatones se apagarádigitalWrite(GREENPEDESTRIANS,LOW) encendiéndose el rojodigitalWrite(REDPEDESTRIANS,HIGH)yalavez,elverdedeloscochesseencenderádigitalWrite(GREENCARS,HIGH)yelrojoseapagarádigitalWrite(REDCARS,LOW).Aquíterminaráelcódigoquehemoscreadohastaquesevuelvaapresionarelpulsadorquevolveráainiciarelbucle.

Page 96: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

OBJETIVO3–MANEJODEPOTENCIÓMETROS

Page 97: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

EXPLICACIÓNElobjetivo3sebasaenlautilizacióndecomponentesanalógicosdelaplacayenutilizarnuevoscomponentesdesalida.Se trata de una extensión del objetivo 2, en el que has aprendido a leercomponentesdigitalesdeentradas.

Page 98: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

FUNCIONESDEPROGRAMACIÓNEn este objetivo vamos a profundizar en las siguientes funciones deprogramación:ANALOGREADLafunciónnospermitelalecturaanalógicadelasentradas0ala5(ANALOGIN:A0,A1,A2,A3,A4,A5).Lalecturavienedadaenunvalorentre0y1023.Unacaracterísticadelospinesanalógicosesquenonecesitanserdeclaradoscomoentradasosalidas,sonsiemprepinesdeentradaalaplacadeArduino.Enelsiguienteejemplosemuestracomoseleeelpinnúmero3:intValor=analogRead(3);Tambiénesposibleutilizar las constantesdefinidaspara realizar las lecturasanalógicas:intValor=analogRead(VERDE);

ANALOGWRITELa función nos permite escribir valores analógicos comprendidos entre 0 y255alospines3,5,6,9,10y11delaplacadeArduino,quesonlosúnicosquepermitenvaloresanalógicos.Recuerdaqueestospinesllevanelsímbolo:~delantedelnúmerodepin:~3,~5..Talycomopuedesverenelsiguienteejemplo,lafunciónrequieredelnúmerodelpinalquesevaaenviarelvaloryelvaloraenviar:analogWrite(3,200);Tambiénsepuedeutilizanunaconstanteparaelpin:analogWrite(VERDE,200);El valor enviado puede ser especificado mediante una constante en vez demedianteunvalordirectamente:analogWrite(VERDE,VALORMAXIMO);

Page 99: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

MAPLafunciónmapnospermiterelacionarunvalorqueseencuentraenunrangodevaloresaotrorangodevalores.Enelejemploqueestamostrabajando,laplaca hace una lectura del pin analógico (potenciómetro) comprendida entrelos valores 0 y 1023 y tendrá que transformar ese valor en un rangocomprendido entre 0 y 255 para escribirlo en una salida (zumbador). Pararealizarestaconversiónusamoslafunciónmap.En el siguiente ejemplo se muestra la utilización de la función map paraconvertir el valor de una variable que se encuentra en el rango 0-1023 alrango0-255:

intValorFinal=map(ValorInicial,0,1023,0,255);Porlotanto,lafunciónseutilizadelasiguienteforma:

map(Valor a transformar, InicialMenor, InicialMayor, FinalMenor,FinalMayor);

Ilustración58.Transformaciónconmap

Page 100: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

MATERIALESAcontinuación,puedesencontrarellistadodematerialesquevamosautilizarenestetercerobjetivo:

Ilustración59.Mate riale s obje tivo3

Page 101: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

FASE 1: CONTROL DE SONIDO DE UN ZUMBADOR CON UNPOTENCIÓMETROEn la fase 1 de este tercer objetivo vas a aprender a utilizar dos nuevoscomponentes electrónicos: un potenciómetro y un zumbador. Mediante elprimerodeelloscontrolaremoselsegundodeformatotalmenteanalógica:enfunción de la corriente que deje pasar el potenciómetro, girándolo más omenos,elzumbadoremitiráunsonidomásomenoselevado.MONTAJEFÍSICOAcontinuación,puedesencontrarelmontajedelcircuitoelectrónico.

Ilustración60.CircuitoObje tivo3Fase 1

El zumbador conecta a tierra (GND) y a una salida analógica. Elpotenciómetroconectaatierra(GND),unaentradaanalógicayalos5Vdelaplaca.

PROGRAMACIÓN

Page 102: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

En la sección de definición hemos definidos dos constantes: la 11 paraespecificarelpinenelqueestáconectadoelzumbadoryla5paraelpindondeseencuentraconectadoelpotenciómetro.En la sección de configuración se define el pin del zumbador como salidapinMode(BUZZER,OUTPUT) y el del potenciómetro como entradapinMode(POTENTIOMETER,INPUT).El funcionamiento de la sección principal es simple: lee el valor delpotenciómetrointValueFromPotentiometer=analogRead(POTENTIOMETER), lo transformaenelrangode0a255conelquetrabajanlassalidasanalógicasintValueToBuzzer= map(ValueFromPotentiometer,0,1023,0,255) y lo escribe en la salida del zumbadoranalogWrite(BUZZER,ValueToBuzzer)pararegularelvolumenconelquesuena.CÓDIGOFUENTE#defineBUZZER11#definePOTENTIOMETER5voidsetup(){

pinMode(BUZZER,OUTPUT);pinMode(POTENTIOMETER,INPUT);

}voidloop(){

intValueFromPotentiometer=analogRead(POTENTIOMETER);intValueToBuzzer=map(ValueFromPotentiometer,0,1023,0,255);analogWrite(BUZZER,ValueToBuzzer);

}

Page 103: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

FASE 2: CONTROL DE ENCENDIDO DE LEDS CON UNPOTENCIÓMETROEn la fase2del objetivovamos amanejar el encendidoy apagadodeLEDsmediante un potenciómetro, es decir, mediante una entrada analógica (señalenviada por el potenciómetro) vamos a controlar un conjunto de salidasdigitales(señaldeencendidooapagadodelosLEDs).Unavezmontadoy subidoel código,veremosquegirandomásomenos elpotenciómetro iremos encendiendo progresivamente los LEDs. Cuanto másgiremoselpotenciómetro,másLEDsiremosencendiendoysilogiramosensentidocontrariolosiremosapagando.MONTAJEFÍSICOElcircuitoelectrónicoeselsiguiente:

Ilustración61.CircuitoObje tivo3Fase 2

LaconexióndelosLEDspuedesverloenelapartadodelObjetivo1yladelpotenciómetroenelapartadoanterior.

Page 104: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

PROGRAMACIÓNEnlaseccióndeconstantesestándefinidastodaslasconstantesqueespecificanlosLEDs conectados a la placa, estos pines van del 8 al 13.A su vez se hadefinido una constante para indicar el pin en el que se ha conectado elpotenciómetro,elnúmero5.LaseccióndeconfiguracióninicializalospinesdelosLEDscomosalidaydelpotenciómetrocomoentrada.Lasecciónprincipalestansimplecomoladelejercicioanterior,aunquemásextensaen loqueacantidaddecódigofuentese refiere.Básicamente tiene3subsecciones claramente diferenciadas, en la primera se obtiene el valor delpotenciómetrointValueFromPotentiometer=analogRead(POTENTIOMETER),enlasegundasetraduceelvaloralrango0y255intvalue=map(ValueFromPotentiometer,0,1023,0,6)yenlaúltimaparteencenderálosLEDsquesecorrespondanconelvalorleídodesdeelpotenciómetro:if(value==0)–NingúnLEDencendido(todosLOW)elseif(value==1)–1LEDencendido,elverdedlaizquierda(1)elseif(value==2)–2LEDsencendidos,el1yel2elseif(value==3)–3LEDsencendidos,el1,2y3elseif(value==4)–4LEDsencendidos,el1,2,3y4elseif(value==5)–5LEDsencendidos,el1,2,3,4y5elseif(value==6)–6LEDsencendidos,todosCÓDIGOFUENTE#defineGREEN113#defineGREEN212#defineYELLOW111#defineYELLOW210#defineRED19#defineRED28#definePOTENTIOMETER5voidsetup(){

pinMode(GREEN1,OUTPUT);pinMode(GREEN2,OUTPUT);

Page 105: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

pinMode(YELLOW1,OUTPUT);pinMode(YELLOW2,OUTPUT);pinMode(RED1,OUTPUT);pinMode(RED2,OUTPUT);pinMode(POTENTIOMETER,INPUT);

}voidloop(){

intValueFromPotentiometer=analogRead(POTENTIOMETER);intvalue=map(ValueFromPotentiometer,0,1023,0,6);if(value==0){

digitalWrite(GREEN1,LOW);digitalWrite(GREEN2,LOW);digitalWrite(YELLOW1,LOW);digitalWrite(YELLOW2,LOW);digitalWrite(RED1,LOW);digitalWrite(RED2,LOW);

}elseif(value==1){

digitalWrite(GREEN1,HIGH);digitalWrite(GREEN2,LOW);digitalWrite(YELLOW1,LOW);digitalWrite(YELLOW2,LOW);digitalWrite(RED1,LOW);digitalWrite(RED2,LOW);

}elseif(value==2){

digitalWrite(GREEN1,HIGH);digitalWrite(GREEN2,HIGH);digitalWrite(YELLOW1,LOW);digitalWrite(YELLOW2,LOW);digitalWrite(RED1,LOW);digitalWrite(RED2,LOW);

}elseif(value==3){

digitalWrite(GREEN1,HIGH);digitalWrite(GREEN2,HIGH);digitalWrite(YELLOW1,HIGH);digitalWrite(YELLOW2,LOW);digitalWrite(RED1,LOW);digitalWrite(RED2,LOW);

}elseif(value==4){

digitalWrite(GREEN1,HIGH);digitalWrite(GREEN2,HIGH);

Page 106: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

digitalWrite(YELLOW1,HIGH);digitalWrite(YELLOW2,HIGH);digitalWrite(RED1,LOW);digitalWrite(RED2,LOW);

}elseif(value==5){

digitalWrite(GREEN1,HIGH);digitalWrite(GREEN2,HIGH);digitalWrite(YELLOW1,HIGH);digitalWrite(YELLOW2,HIGH);digitalWrite(RED1,HIGH);digitalWrite(RED2,LOW);

}elseif(value==6){

digitalWrite(GREEN1,HIGH);digitalWrite(GREEN2,HIGH);digitalWrite(YELLOW1,HIGH);digitalWrite(YELLOW2,HIGH);digitalWrite(RED1,HIGH);digitalWrite(RED2,HIGH);

}}

Page 107: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

AHORAERESCAPAZDE…Unavezrealizadoelobjetivonúmero3hasaprendidoa:

Utilizarentradasanalógicas.Utilizarsalidasanalógicas.Mapearvaloresentrerangosdiferentes.Hasaumentadoelnúmerodecomponentesquesabesutilizar.

Page 108: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

OBJETIVO4–MANEJODESENSORES

Page 109: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

EXPLICACIÓNElobjetivo4consisteenaprenderautilizardiferentessensoresconectadosalaplacadeArduino.Ademásdelossensores,sevanautilizarnuevoscomponentesdesalidajuntoconel”MonitorSerie”deArduino.(Verapartado“PantallaPrincipal”)

Page 110: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

FUNCIONESDEPROGRAMACIÓNEn este objetivo vamos a profundizar en las siguientes funciones deprogramación:LIBRERÍASUna librería es un componente software que contiene operaciones yaimplementadasyqueofrecenuninterfazconocidoquepermitenelusodelasmismas.Funcionalmentehablando,una librería esun ficheroqueañadimosanuestroprograma y que contiene código fuente ya escrito que podemos utilizar atravésdelinterfazqueofrecen.Arduino ya incluye librerías en la instalación del IDE del desarrollo, pero,además, en internet podrás encontrar un montón de librerías que puedesincorporara tusprogramas.Teanimoaquebusquesporquevasaencontrarlibreríasquetevanapoderayudaradesarrollartuspropiosprogramas.

#INCLUDEMediante la sentencia #include puedes incluir para el uso en tu programasoftwarelibreríasyadesarrolladas.Enesteobjetivosehanutilizadoalgunaslibreríasparaincluirfuncionalidadesyadesarrolladasenelcódigofuente.Laslibreríasquesehanutilizadoson:

LiquidCrystal: Contiene todos los elementos necesarios para interactuardeformasencillaconunapantallaLCD.SimpleDHT:Contienetodosloselementosnecesariosparainteractuarconelsensordehumedadytemperaturaquesehautilizado.

Page 111: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

MATERIALESAcontinuación,puedesencontrarellistadodematerialesquevamosautilizarenestecuartoobjetivo:

Ilustración62.Mate riale s obje tivo4

Page 112: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

FASE1:LECTURADEUNSENSORLDREnestafase1delúltimoobjetivovamosautilizarunsensorLDRparaobtenerlaintensidaddelaluzambientalymostrarlaenunapantallaLCD.MONTAJEFÍSICOElcircuitoelectrónicoeselsiguiente:

Ilustración63.CircuitoObje tivo4 Fase 1

DebesprestaratenciónalasconexionesdelaplacaArduinoylapantallaLCD,yaqueeslaprimeravezqueutilizarásunnúmerotanampliodecablesparaunúnicocomponente.Revisaelapartado“PANTALLALCD”dondepodrásvermásdetallessobrelasconexionesentrelapantallaylaplacaArduino.

Page 113: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

PROGRAMACIÓNEn la sección de definiciones se definen constantes y variables, además deincluir la librería necesaria para interactuar de forma fácil y rápida con lapantalla LCD que hemos conectado a la placa #include <LiquidCrystal.h>. Lasconstantes definidas indican que el sensor LDR está conectado al pin 5mientrasque lapantallaLCDestá conectadaa lospinesquevandel7 al12,ambos inclusive. En esta sección también se definen las variables para lapantallaLCDyunpardevariablesqueseutilizaránenlasecciónprincipal.La sección de configuración inicializa los diferentes pines como entrada osalidasegúncorresponda.Además,de lasdos líneasde laLCDenlasquesemostraráinformación,enlafilasuperiorsemostraráunabrevedescripcióndeloquesemostraráenlasegundalínea,“Niveldeluz”.LasecciónprincipalleeelvalordelsensorLDRylotransformaaunvalorde0a100,yaquesemostraráelnivelde luzde formaporcentual.Unavezsetieneelvalortransformado,ésteesescritoenlasegundalíneadelLCD.CÓDIGOFUENTE#include<LiquidCrystal.h>#defineLDR5#definePIN17#definePIN28#definePIN39#definePIN410#definePIN511#definePIN612LiquidCrystallcd(PIN1,PIN2,PIN3,PIN4,PIN5,PIN6);intvalue,normalizedValue;voidsetup(){

pinMode(LDR,INPUT);pinMode(PIN1,OUTPUT);pinMode(PIN2,OUTPUT);pinMode(PIN3,OUTPUT);pinMode(PIN4,OUTPUT);pinMode(PIN5,OUTPUT);pinMode(PIN6,OUTPUT);lcd.begin(16,2);lcd.print("Niveldeluz");

}

Page 114: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

voidloop(){

value=analogRead(LDR);normalizedValue=map(value,0,1023,0,100);lcd.setCursor(0,1);lcd.print(normalizedValue);lcd.print("%");

}

Page 115: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

FASE2:SEGURIDADCONSENSORDEPRESENCIALafase2consisteenlasimulacióndeunapequeñaalarmaqueseactivaconelsensordepresenciaymovimiento.Sielsensordetectaqueexistemovimientoopresenciaactivaráelzumbador,emitiendounaseñalacústica,yunosLEDs,emitiendounaseñalluminosa.MONTAJEFÍSICOAcontinuación,puedesobservarelcircuitoelectrónico:

Ilustración64 .CircuitoObje tivo4 Fase 2

Elcircuitoesbastantefamiliaralosquehemostratadoentodoslosobjetivosanteriores, con la única salvedad de la utilización del sensor de presencia ymovimiento, sobre el que deberás prestar atención a la hora de conectarcorrectamentecadaunadelasconexiones.

PROGRAMACIÓN

Page 116: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

En la seccióndedeclaracióndeconstanteshemosdefinidoscincoconstantesdiferentes para cada uno de los pines que vamos a utilizar. El sensor depresencia está conectado al pin número 13, el zumbador en el 8 y los tresLEDsenel2,4y6.Enlaseccióndeconfiguraciónsedefineelmododefuncionamientodecadaunodelopinesquesevanautilizar,todosellossonpinesdesalidaexceptoeldelsensor,queesunpinqueseutilizarácomoentrada.En el programa principal se comprobará el estado del sensor. En caso dedetectar presencia if(digitalRead(PIRSENSOR) == HIGH), encenderá los LEDsdigitalWrite(LED1, HIGH) y activará el zumbador digitalWrite(BUZZER, HIGH). Hemosconfiguradoundelaydetressegundosdelay(3000)antesdevolveracomprobarel estadode zumbador, de estemodo serámás sencillo comprobarque todofuncionacorrectamente,yaque,sinointroducimosestedelay,laseñalacústicayvisualqueseactivaporladeteccióndepresenciapuedepasarinadvertidapornosotros.EnelmomentoenelqueelsensordejadedetectarpresenciaapagalosLEDsdigitalWrite(LED1,LOW)ydesactivaelzumbadordigitalWrite(BUZZER,LOW).CÓDIGOFUENTE#definePIRSENSOR13#defineBUZZER8#defineLED16#defineLED24#defineLED32voidsetup(){

pinMode(BUZZER,OUTPUT);pinMode(LED1,OUTPUT);pinMode(LED2,OUTPUT);pinMode(LED3,OUTPUT);pinMode(PIRSENSOR,INPUT);

}voidloop(){

if(digitalRead(PIRSENSOR)==HIGH){

digitalWrite(BUZZER,HIGH);digitalWrite(LED1,HIGH);digitalWrite(LED2,HIGH);digitalWrite(LED3,HIGH);delay(3000);

Page 117: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

}else{

digitalWrite(BUZZER,LOW);digitalWrite(LED1,LOW);digitalWrite(LED2,LOW);digitalWrite(LED3,LOW);

}}

Page 118: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

FASE3:LECTURADEUNSENSORDETEMPERATURAYHUMEDADLafase3es la fasemássencilladelobjetivoen loquea laconstruccióndelcircuito se refiere, yaque, lo importante de esta fase es el aprendizaje de lautilizacióndelaconsolaserialdeArduino.MONTAJEFÍSICOElcircuitoelectrónicoquevamosautilizareselsiguiente:

Ilustración65.CircuitoObje tivo4 Fase 3

Elmontajedelcircuitoesmuysencillo,elsensorDHT11tiene3conexionesposibles,porloquedeberásdeconectarcorrectamentecadaunadeellasalpinde la placa que corresponda. Además, en el mismo sensor (aunque no entodos) puedes ver la leyenda de cada uno de los pines a los que debe irconectado.

PROGRAMACIÓNLaseccióndeconfiguracióndelejercicio tiene tressentenciasdiferentesquerealizanoperacionesdiferentes.Mediante#includehemos incluido la libreríaque contiene todas las funciones de interacción del sensor de temperatura yhumedadquehemosutilizado#include<SimpleDHT.h>.Tambiénhemosdefinidoelpin7paraelsensor#defineSENSOR7,yporúltimo,hemosdeclaradolavariable

Page 119: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

queutilizaremosparainteractuarconelsensorSimpleDHT11sensor.La sección de configuración establece el pin del sensor como entradapinMode(SENSOR, INPUT) e inicializa la salida Serial Serial.begin(9600), además seindicaporpantallamedianteelSerialquehasidoinicializadoelsensor.Aligualqueseconfiguranlospinesdeentradaysalida,aliniciarelMonitorSerieSerial.begin(9600),debesdeconfigurar lavelocidaddecomunicaciónentrelaplacadeArduinoyelordenador,queenestecasolohemosconfiguradoa9600bpsqueeselvalortípicodecomunicacióndelpuertoserie.ElprogramaprincipalleelosdatosdelsensorylosmuestraporlasalidadelMonitorSerie.Elprocesolorepitecadaminuto.La función Serial.println(“texto”) manda la información (lectura del sensor) alPuertoserieymostrarádichainformaciónenelMonitorSerie.CÓDIGOFUENTE#include<SimpleDHT.h>#defineSENSOR7SimpleDHT11sensor;voidsetup(){

pinMode(SENSOR,INPUT);Serial.begin(9600);Serial.println("SENSORSTARTED");

}voidloop(){

Serial.println("Readingthesensor...");

bytetemperature=0;bytehumidity=0;bytedata[40]={0};if(sensor.read(SENSOR,&temperature,&humidity,data)){

Serial.print("Therewasanerrorreading!");}

Serial.println("...Sensorreaded!");Serial.print("Temperature:");Serial.print((int)temperature);

Page 120: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Serial.println("*C,");Serial.print("Humidity:");Serial.print((int)humidity);Serial.println("%");Serial.println("###########");delay(60000);

}SALIDADELALECTURA(MONITORSERIE)ParaarrancarelMonitorSeriepuedeshacerlopinchandoensuiconodesdelabarradeaccesosdirectos.

En la siguiente imagen puedes comprobar una ejecución del ejercicio queacabamosderealizar,enellapuedesapreciarelmensajedeinicializacióndelsensoryvariasmedicionesrealizadas.

Ilustración66.MonitorSe rie s Obje tivo4 Fase 3

Page 121: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time
Page 122: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

AHORAERESCAPAZDE…Unavezconcluidoelobjetivo4,erescapazde:

Utilizardiferentessensores,tantoanalógicoscomodigitalesManejarlaconsolaserialdeArduino.IncluirlibreríasexternasatusproyectosdeArduino.

Page 123: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

PROYECTOFINAL–CONTROLATUCASA

Page 124: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

EXPLICACIÓNEl proyecto final consiste en la utilización de una amplia variedad decomponentesdentrodeunmismoproyectointeractuandotodosellosalmismotiempo.Con este proyecto vamos a construir un circuito complejo que te permitirátener controlados los parámetros ambientales más importantes de tu casa,comopuedenserlatemperatura,lahumedadylaluz,alavezquemanejarássensores para detectar cualquier tipo de intrusión mediante el sensor depresencia.Además,detectaremostambiéncualquiertipodefugadeaguaquepuedasexistirmediantelautilizacióndelsensordedeteccióndeagua.Para cada uno de los sensores de medición vas a establecer una serie deumbralesquetepermitandefinirvaloresmínimosymáximosparacadaunadelasmedicionesincluidasenelproyecto.Además, enel circuito, vas a incorporarun simuladorde alarmacompuestopor un zumbador y un conjunto de LEDs rojos. La alarma se activará si sedetectan valores fuera de los umbrales establecidos para cada uno de lossensoresdemediciónytambiéncuandosedetectepresenciaofugadeagua.ElcircuitoincorporatambiénundisplayLCDquemuestralosvaloresdelasmediciones que está leyendo y en caso de producirse una alarma indica elsensorquelahaoriginado.

Page 125: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

MATERIALESAcontinuación,puedesvertodosloscomponentesquevamosautilizarenesteproyectofinal:

Ilustración67 .Mate riale s proye ctofinal

Page 126: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

MONTAJEFÍSICOElcircuitodelproyectofinaleselsiguiente:

Ilustración68.CircuitoProye ctoFinal -Controlatucasa

Debes prestar especial atención a las conexiones de la pantalla LCD y a lasconexionesa lospinesde losdiferentessensores.Tienesque tenerencuentaque las entradas analógicas tienenque estar conectadas apinesquepermitenser analógicos, no únicamente digitales. Otra cosa a tener en cuenta es quecomoqueremosutilizarelsensordeaguaennuestraestaciónmeteorológicaparadetectarsillueveono,debemoscolocarelsensorenposiciónhorizontalparaquelasgotasincidansobretodasusuperficie.Amedidaquelasgotasvancayendosobreelsensorseformaráunapelículadeaguasobresusuperficieloque provocará un aumento del valor del pin S y por tanto detectar si estálloviendoono.Al haber un gran número de cables conectores diferentes sería bueno queutilizasesuncolorparacadatipodeconexión.Parauncorrectomontajedelcircuitoteaconsejoquevayasmontándolopocoapoco,comprobandoquefuncionantodosycadaunodeloscomponentesquevas incluyendo.Deestaforma, teasegurarásqueelcircuitoelectrónicofinalquemontes es correcto y te resultemás fácil encontrar posibles errores demontaje.

Page 127: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time
Page 128: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

PROGRAMACIÓNEnlaprimerapartedelcódigofuentesehanincluidolaslibreríasexternasquese han utilizado para interactuar con el sensor de temperatura y humedad#include<SimpleDHT.h>yconeldisplayLCD#include<LiquidCrystal.h>.Tambiénestándefinidas todas las constantes en dos grupos: el primer grupo de definicióncontiene las constantes de los pines de la placa que utiliza cada componente#define WATER 1, #define DHT 2..., y el segundo grupo contiene los diferentesumbrales para cada uno de los sensores #define minTemperature 10, #definemaxTemperature30...,quepuedesestablecerleselvalorqueconsideresconvenientepara adecuar las alarmas al entorno en el que estés.Dentro de esta primeraparteestánincluidaslasdeclaracionesdelasvariablesquesonutilizadasporelprograma.Enlaseccióndeconfiguraciónseinicializancadaunodelosdiferentespinesdelaplacaquesevanautilizar juntoconelmododefuncionamientode losmismos.Además,tambiéninicializaremoseldisplayLCD.La secciónprincipal es extensa pero sencilla.Tal y comopuedes ver se vancomprobandocadaunodelosdiferentessensoresysecompruebanlosvaloresobtenidos con sus umbrales correspondientes y se marcará ese sensor enestado de alarma en caso de que esté fuera de dichos umbrales. Una vezcomprobadostodoslossensoresserealizarálacomprobacióndesialgunodeellos ha disparado una alarma.El displayLCDmostrará los valores para latemperatura,humedadyluzencasodenohaberseproducidoningunaalarma,encasocontrarioseactivaránlasseñalesluminosasysonorasyeneldisplaysemostrará elmensaje de alarma junto con el código del sensor que la haprovocado.Loscódigosdelossensoressonlossiguientes:

T:TemperaturaH:HumedadL:LuzP:PresenciaW:Agua

Dadalalongituddelprograma,paralaexplicacióndelflujodelmismohemosutilizado comentarios incrustados en el código fuente. Los comentarios seintroducencon//omediantebloques/*texto*/.Laslíneasdecomentariosson

Page 129: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

ignoradasdurantelaejecucióndelprogramaysonutilizadasparadocumentarelcódigofuentequeseescribe.CODIGOFUENTE//Incluimoslaslibreríasquevamosautilizar#include<LiquidCrystal.h>#include<SimpleDHT.h>//Definimoslasconstantesdelospinesdelaplaca,dondevanconectadoslosdiferentessensoresenlaplaca.Ejemplo,enelpin1vaconectadoelsensordeagua,enel2elsensorDHT…#defineWATER1#defineDHT2#defineLDR3#definePIRSENSOR4#defineLED15#defineLED26#defineBUZZER7#definePIN18#definePIN29#definePIN310#definePIN411#definePIN512#definePIN613//Definimos losumbralespara cadaunode los sensores.Ejemplo, el rangoque consideramos para la Tª está entre 10ºC como mínimo y 30ºC comomáximo.#defineminTemperature10#definemaxTemperature30#defineminHumidity5#definemaxHumidity80#defineminLight15#definemaxLight95#definemaxWater10//Definimoslasvariablesqueutilizaráelprogramadurantesuejecución//VariableparainteractuarconeldisplayLCDLiquidCrystallcd(PIN1,PIN2,PIN3,PIN4,PIN5,PIN6);//VariabledecontrolparasabersiexistealgunaalarmaboolExistAlarm;//Variablespararealizarcálculosintvalue,normalizedValue;

Page 130: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

//VariableparainteractuarconelsensorDHTSimpleDHT11sensor;//VariablesdecontroldealarmadelosdiferentessensoresboolAlarmFromTemperature;boolAlarmFromHumidity;boolAlarmFromLight;boolAlarmFromPresence;boolAlarmFromWater;//Inicializacióndelprogramavoidsetup(){

pinMode(PIN1,OUTPUT);pinMode(PIN2,OUTPUT);pinMode(PIN3,OUTPUT);pinMode(PIN4,OUTPUT);pinMode(PIN5,OUTPUT);pinMode(PIN6,OUTPUT);pinMode(BUZZER,OUTPUT);pinMode(LED1,OUTPUT);pinMode(LED2,OUTPUT);pinMode(PIRSENSOR,INPUT);pinMode(LDR,INPUT);pinMode(DHT,INPUT);pinMode(WATER,INPUT);

//InicializacióndelavariabledelapantallaLCDlcd.begin(16,2);

}//Ejecucióndelprogramavoidloop(){

//Lasvariablesse igualan todasaFalseparavolveracomprobar lossensores

ExistAlarm=false;AlarmFromTemperature=false;AlarmFromHumidity=false;AlarmFromLight=false;AlarmFromPresence=false;AlarmFromWater=false;

//ComprobaciónsensorLDRvalue=analogRead(LDR);normalizedValue=map(value,0,1023,0,100);if(normalizedValue<minLight||normalizedValue>maxLight){

Page 131: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

ExistAlarm=true;AlarmFromLight=true;

}

//Comprobaciónsensordeaguaif(analogRead(WATER)>maxWater){

ExistAlarm=true;AlarmFromWater=true;

}

//Comprobaciónsensordetemperaturayhumedadbytetemperature=0;bytehumidity=0;bytedata[40]={0};sensor.read(DHT,&temperature,&humidity,data);if(temperature<minTemperature||temperature>maxTemperature){

ExistAlarm=true;AlarmFromTemperature=true;

}if(humidity<minHumidity||humidity>maxHumidity){

ExistAlarm=true;AlarmFromHumidity=true;

}

//Comprobaciónsensordepresenciaif(digitalRead(PIRSENSOR)==HIGH){

ExistAlarm=true;AlarmFromPresence=true;

}/*Comprobamossihaexistidoalarma.

Si existe alarma (if), el display LCDmuestra dicha alarmajuntoconelsensorosensoresquelahanprovocado.

Sinoexistealarma(else),eldisplayLCDmostraráelvalordetodoslossensores*/if(ExistAlarm){

lcd.clear();lcd.setCursor(0,0);lcd.print("ALARMA");lcd.setCursor(0,1);if(AlarmFromTemperature){

lcd.print("T");

Page 132: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

}if(AlarmFromHumidity){

lcd.print("H");}if(AlarmFromLight){

lcd.print("L");}if(AlarmFromPresence){

lcd.print("P");}if(AlarmFromWater){

lcd.print("W");}

digitalWrite(BUZZER,HIGH);digitalWrite(LED1,HIGH);digitalWrite(LED2,HIGH);delay(1000);

}else{

digitalWrite(BUZZER,LOW);digitalWrite(LED1,LOW);digitalWrite(LED2,LOW);lcd.clear();lcd.setCursor(0,0);lcd.print("L:");lcd.print(normalizedValue);lcd.print("%");lcd.print("H:");lcd.print(humidity);lcd.print("%");lcd.setCursor(0,1);lcd.print("T:");lcd.print(temperature);lcd.print("*C");delay(1000);

}}

Page 133: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

¡CONSEGUIDO!¡Enhorabuena!¡Hasllegadoalfinaldelaprendizaje!Paraqueseasconscientede todo lo que has aprendido en un fin de semana te hemos preparado unresumenconloshitosquehasalcanzado:

ConocimientosrelacionadosconlaRobótica,ElectrónicayDesarrollodeSoftware.Conocimiento del funcionamiento electrónico de dispositivos básicos:resistencias,LEDs,sensores,etc.Montajedecircuitos.UtilizacióndelentornodedesarrollodeArduino.UtilizacióndelaplacaArduino.UtilizacióndelasentradasysalidasdelaplacadeArduino.ManejodeLEDs.ManejodeLEDRGB.ManejodePulsadores.ManejodePotenciómetros.ManejodeZumbadores.Manejodediferentessensores.ManejodepantallaLCD.UtilizacióndelMonitorSeriedeArduino.RealizacióndeprogramasparaArduino.Realización de proyectos complejos con lógica de funcionamientomediantecódigofuente.UtilizacióndelibreríasdeArduino.

Page 134: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

SOBRELOSAUTORESYAGRADECIMIENTOSEstelibroytodoloquerodeaaTimeofSoftwareeselresultadodemuchosañosdedicadosaladocenciaenelámbitotecnológico.PrimerocongruposdeEducaciónSecundariaObligatoriayBachilleratoyposteriormentemedianteladocenciaaformadores.El trabajodecreacióndelmétododeaprendizaje, sintetizaciónyordenaciónde toda la informaciónteóricarelacionadaconArduinoyelaboraciónde lasdiferentesprácticasplasmadasenellibrosonresponsabilidaddelaspersonasdirectamente responsables deTime of Software, Alfredo Moreno y SheilaCórcoles,apasionadosporelmundodeArduinoyporladocencia.Queremosagradeceranuestras familias,amigosycompañerosde trabajoelapoyo incondicional y las aportaciones que han realizado al método deaprendizaje de Arduino que hemos desarrollado, ¡gracias por ser nuestrosconejillosdeindias!Sinvosotrosestonohubierasidoposible.Y por supuesto gracias a ti por comprar “Aprende Arduino en un fin desemana”, esperamos que hayas conseguido el objetivo que te propusistecuando compraste el libro. Habrás podido comprobar que ésto es sólo elprincipio,queArduinoesunmundoapasionante.Notengasdudasenponerteencontactoconnosotrosparacontarnosquétal teha idoycómoteva,¡NOESTÁSSOLO!

Page 135: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

TableofContentsINTRODUCCIÓN¿QUÉNECESITOPARAEMPEZAR?PROCESODEAPRENDIZAJE

OrganizaciónDistribucióndelfindesemana

GLOSARIO¿QUÉESLAROBÓTICA?

LeyesdelaRobóticaARDUINO

¿PorquéapareceArduino?¿QuéesArduino?ComponentesplacadeArduino

PinesdigitalesPinesanalógicosPinesalimentaciónsensoresMicrocontroladordecomunicacionesMicrocontroladordeprogramaciónBotónresetPuertoUSBConectordeAlimentación

¿ArduinoyRobótica?Ventajas

ENTORNODEDESARROLLOEntornowebAplicativo

InstalacióndeArduinoenmacOSInstalacióndeArduinoenWindowsInstalacióndeArduinoenLinux

FAMILIARIZÁNDOTECONELENTORNODEDESARROLLOPantallaprincipalMenúprincipal

MenúArchivoMenúProgramaMenúHerramientas

Barradeaccesorápido

Page 136: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

VerificarSubirNuevoAbrirSalvarMonitorSerie

ANTESDEEMPEZAREstructuradeunprogramaComponentescomunesentodoslosmontajes

PlacaArduinoProtoboardCableUSBCablesResistenciasLEDLEDRGBPotenciómetroZumbadorSensordeluz(LDR)SensordehumedadytemperaturaSensordepresenciaSensordeaguaPantallaLCD

OBJETIVO1–MANEJOLEDSExplicaciónFuncionesdeprogramación

#definepinModedigitalWriteanalogWritedelayforVariables

MaterialesFase1:InteractuarconunLED

MontajefísicoProgramación

Fase2:InteractuarconvariosLEDSMontajefísico

Page 137: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

ProgramaciónFase3:InteractuarconunLEDRGB

MontajefísicoProgramacióndigitalProgramaciónanalógica

Ahoraerescapazde…OBJETIVO2–MANEJOPULSADORES

ExplicaciónFuncionesdeprogramación

digitalReadifINPUT_PULLUP

MaterialesFase1:EncenderyapagarvariosLEDSconunpulsador(Versión1)

MontajefísicoProgramación

Fase2:EncenderyapagarvariosLEDSconunpulsador(Versión2)MontajefísicoProgramación

Ahoraerescapazde…PROYECTO-Crearunsemáforo

ExplicaciónMaterialesMontajefísicoProgramación

CódigofuenteOBJETIVO3–MANEJODEPOTENCIÓMETROS

ExplicaciónFuncionesdeprogramación

analogReadanalogWritemap

MaterialesFase1:Controldesonidodeunzumbadorconunpotenciómetro

MontajefísicoProgramación

Fase2:ControldeencendidodeLEDSconunpotenciómetroMontajefísicoProgramación

Page 138: El contenido de la obra ha sido desarrollado exclusivamente por … · 2019-06-25 · El contenido de la obra ha sido desarrollado exclusivamente por los miembros del equipo de Time

Ahoraerescapazde…OBJETIVO4–MANEJODESENSORES

ExplicaciónFuncionesdeprogramación

Librerías#include

MaterialesFase1:LecturadeunsensorLDR

MontajefísicoProgramación

Fase2:SeguridadconsensordepresenciaMontajefísicoProgramación

Fase3:LecturadeunsensordetemperaturayhumedadMontajefísicoProgramaciónSalidadelalectura(monitorserie)

Ahoraerescapazde…PROYECTOFINAL–Controlatucasa

ExplicaciónMaterialesMontajefísicoProgramación

¡CONSEGUIDO!SOBRELOSAUTORESYAGRADECIMIENTOS