Recreos Arduino. Prácticas

of 29/29
CUADERNO DE PRÁCTICAS RECREOS ARDUINO Curso 2014‐15 IES CIUDAD JARDÍN BADAJOZ
  • date post

    11-Jul-2016
  • Category

    Documents

  • view

    28
  • download

    4

Embed Size (px)

description

Resumen del proyecto en el curso 2014/2015

Transcript of Recreos Arduino. Prácticas

  • CUADERNO DE PRCTICAS RECREOSARDUINO

    Curso 201415

    IES CIUDAD JARDN BADAJOZ

  • ndicedeprcticas

    1.Encenderunledconunpulsador2.LecturadeEntradaanalgica3.VariacindelaluminosidaddeunLEDporentradaanalgica4.PantallaLCD

    ErrorenejemplosdelalibreradeLCDLiquidcrystalHolamundo!Comandosdelalibrera

    5.Semforo6.Arranqueestrellatringulo

    Mduloderels7.Funcionamientodeunmotorconpulsadordemarchayparo8.Sensordeaparcamientoporultrasonidosconzumbador(AngelReyesNieto)9.SENSORDEAPARCAMIENTOCONLEDS(JorgeDelgadoGarca)

    1

  • RECREOS ARDUINO

    1. Encender un led con un pulsador

    EncenderLEDconunpulsador

    123456789

    10111213141516171819202122232425262728293031323334353637

    /*EncenderLEDconunpulsadorOprimirunpulsadorymientrasestesemantengaaccionadounLEDseenciendeCosasdeMecatrnicayTiendadeRobtica*/////Declarapuertosdeentradasysalidas//intpulsador=2//Pindondeseencuentraelpulsador,entradaintled=13 //PindondeseencuentraelLED,salida////Funcionprincipal//voidsetup()//SeejecutacadavezqueelArduinoseinicia{pinMode(pulsador,INPUT)//ConfigurarelpulsadorcomounaentradapinMode(led,OUTPUT) //ConfigurarelLEDcomounasalida}////Funcionciclicla//voidloop()//Estafuncionsemantieneejecutando{ //cuandoesteenergizadoelArduino//Condicionalparasaberestadodelpulsadorif(digitalRead(pulsador)==HIGH){ //Pulsadoroprimido digitalWrite(led,HIGH)//EnciendeelLED}else{ //PulsadorNOoprimido

    2

  • 38394041

    digitalWrite(led,LOW)//ApagaelLED}}

    Notas:

    Lnea25,lafuncindigitalRead(pin)vaadevolverun0o1segnelnivelpresenteenelpin.Losdossignos==significanoperadordeigualdad,unsolo=asignaunvaloraunavariable.Operadoresdecomparacin==Comparacindeigualdad

    !=Comparacindediferencia>Comparacindemayorque

    >=Comparacindemayoroigualque

  • 2. Lectura de Entrada analgica http://rduinostar.com/tutoriales/tutorial3entradasanalogicas/

    Leerentradaanalgicayvervalorporelmonitorserie

    123456789

    101112131415161718192021222324252627

    /*****rDuinoStar.comComunidadArduinoenEspaol****Tutorial3.EstradasanalgicasLecturadeunvalordetensinenunpinanalgicoyescrituraenpuertoseriedelvalorrecogido.Usopblicocitandoelautoroprocedencia,bajolicencia:AttributionNonCommercialShareAlike3.0Unported(CCBYNCSA3.0)*///PinanalgicoqueutilizaremoscomoentradadedatosintentradaDatos=A0//VariablequerecogerlaslecturasdeA0intvalorDatos=0voidsetup(){//Establecemoslavelocidadparatransmitirdatosenseriea//9600baudiosSerial.begin(9600)}voidloop(){//LeemoselvalorenlaentradaanalgicaA0yseloasignamosa//valorDatosvalorDatos=analogRead(entradaDatos)//ImprimimoselvalorporelpuertoserieSerial.println(valorDatos)}

    Notas: Lnea25,lafuncinanalogRead(entradaDatos)vaadevolverunnmeroentero

    comprendidoenelrangodevalores01023,ambosinclusive.Comovers,alabrirelmonitorserielasmedidaspasanmuyrpido.Ejercicio:Aadeunretrasoconlafuncindelayparaquesemuestreunamedidacada3segundos.Cmoydndelodeberasaadir?Enelsiguientesketchreducimoslassealesderuidodandounumbralalamedidaparaquenomuestrepequeasvariaciones

    Leerentradaanalgicayvervalorporelmonitorserieconreduccinderuido

    4

  • 123456789

    10111213141516171819202122232425262728293031323334353637383940414243

    /****************************************************************rDuinoStar.comComunidadArduinoenEspaol***************************************************************Tutorial3.EntradasanalgicasLecturadeunvalordetensinenunpinanalgicoyescrituraenpuertoseriedelvalorrecogido.Usopblicocitandoelautoroprocedencia,bajolicencia:AttributionNonCommercialShareAlike3.0Unported(CCBYNCSA3.0)*///PinanalgicoqueutilizaremoscomoentradadedatosintentradaDatos=A0//VariablequerecogerlaslecturasdeA0intvalorDatos=0//VariablequealmacenarelvaloranteriorenA0intvalorAnterior=1voidsetup(){//Establecemoslavelocidadparatransmitirdatosenseriea//9600baudiosSerial.begin(9600)}voidloop(){//LeemoselvalorenlaentradaanalgicaA0yseloasignamosa//valorDatosvalorDatos=analogRead(entradaDatos)//Comprobamossielvaloresdistintoalanterior+2paranoimprimir//variasveceselmismovalorif(abs(valorDatosvalorAnterior)>2){

    //ImprimirmoselvalorporelpuertoserieSerial.println(valorDatos)//ActualizamoselvaloranterioralactualvalorAnterior=valorDatos

    }}

    Notas: Lnea19,losenterospuedenvalerentre32.768y32.767(65.535valores).Es

    necesarioinicializarestavariableaunvalordistintode0. Lnea35,if(condicin){instruccionessisecumple}else{instruccionessinosecumple}.

    abs,devuelveelvalorabsolutodelnmeroquepuedeserenteroodecimal

    5

  • Lnea40,actualizavalorAnteriorconlalecturaanalgicaparacompararlaconlasiguiente

    Ejercicio:SiconectamosunpotencimetroalaentradaA0yqueremosquenosenciendaelled13cuandoelpotencimetrocambieenmsdeuncuartodegirocmotendramosquemodificarlalnea34?,Cmoydndetendramosqueaadirlaslneasparaencenderelled13?

    3. Variacin de la luminosidad de un LED por entrada analgica http://rduinostar.com/tutoriales/tutorial4salidasdigitalespwmled//****************************************************************rDuinoStar.comComunidadArduinoenEspaol***************************************************************Tutorial4.SalidasDigitalesPWMLecturadeentradaanalgicayvariacinenlaintensidaddeiluminacindeunLEDutilizandosalidasdigitalesconmodulacinenanchodelpulso.Usopblicocitandoelautoroprocedencia,bajolicencia:AttributionNonCommercialShareAlike3.0Unported(CCBYNCSA3.0)*///PindigitalPWMqueutilizaremosparaalimentarelLEDintpinLed=10;//PinanalgicoqueutilizaremoscomoentradadedatosintentradaDatos=A0;//VariablequerecogerlaslecturasdeA0intvalorDatos=0;voidsetup(){//ConfiguramoselpindelLEDcomosalida,aunquenoesnecesariopinMode(pinLed,OUTPUT);}voidloop(){//LeemoselvalorenlaentradaanalgicaA0yseloasignamosa//valorDatos

    6

  • valorDatos=analogRead(entradaDatos);//DeterminamoselniveldesalidaanalogWrite(pinLed,valorDatos/4);}

    http://www.tr3sdland.com/2011/11/tutorialarduino0003entradaanalogicaysalidapwm/

    4.Pantalla LCD LalibreraparausarlosLCD16x2esladefmalpartida(https://bitbucket.org/fmalpartida/newliquidcrystal/downloads).ParausarlahayquedescomprimirlaenlacarpetalibrariesdelIDE,borrandopreviamentelacarpetaLiquidcrystalexistente.ParadeterminarladireccindelatarjetaIC2usamoselsketchdelaweb:http://playground.arduino.cc/Main/I2cScanner

    Error en ejemplos de la librera de LCD Liquidcrystal Enalgunosejemplosquevienenconlalibreradanerror:HelloWorld_4bit:8:error:'BACKLIGH_PIN'wasnotdeclaredinthisscope.PararesolverlobastaconborrarlavariableBACKLIGHT_PINdeladeclaracin:LiquidCrystallcd(12,11,5,4,3,2,BACKLIGH_PIN,POSITIVE)EncuantoalaconexindelatarjetaI2CalArduinotenemosquedistinguirentreelArduinoMegayelresto:

    I2C Arduino ArduinoMega

    VCC 5V 5V

    GND GND GND

    SCL A5 D21

    SDA A4 D20QuedandoenunArduinoUnoas:

    7

  • Estapequeatarjetavieneprovistadeunconectorde4pines(verfoto),dearribaaabajo:

    GND=GNDomasa.

    VCC=+Vccde5Voltios.

    SDA=Pinanalgico4deArduinooTX,lneadedatos.

    SCL=Pinanalgico5deArduinooRX,lneadereloj.

    Nota.Pararecordarconfacilidad,asocieSDAconel4,esdecirSDA=pin4,elotropin(pin5)secorrespondeconSCL.Paraconfigurarnuestratarjetayquefuncionehayquecambiarlaasignacindelospinesenlossketches.Tenemosdosformas:

    1. SustituirocomentarlaslneadeconfiguracindelLCDqueempiezanporLiquidCrystal_I2Clcd(xxx)por:

    LiquidCrystal_I2Clcd(0x27,2,1,0,4,5,6,7,3,POSITIVE)//SettheLCDI2Caddress

    2. SustituirocomentarlaslneadeconfiguracindelLCDqueempiezanpor

    LiquidCrystal_I2Clcd(xxx)porelsiguientecdigo:

    /*(Declaracindeconstantes)*///DireccinI2CdelLCD#defineI2C_ADDR0x27

    8

  • //AsignacindepinesparaelYwRobotLCM1602IICV1(PCF8574T)#defineBACKLIGHT_PIN3#defineEn_pin2#defineRw_pin1#defineRs_pin0#defineD4_pin4#defineD5_pin5#defineD6_pin6#defineD7_pin7//IluminacinON/OFF#defineLIGHT_OFFLOW#defineLIGHT_ONHIGH/*ConfigurarLCD*/LiquidCrystal_I2Clcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

    Hola mundo! SiempreesbuenocomenzarconunHolamundo!oHelloworld!.Primero debemos instalar la librera correspondiente LiquidCrystal_I2C.h y posteriormente buscarenlosejemplosquetraeconellaelHelloworld!ycompilarlo.

    9

  • Comandos de la librera Esta librera precisa de la librera , por tanto deber incluirse en el cdigo las dos juntas.Lasfuncionessonlassiguientes:LiquidCrystal_I2Clcd(direccion,columnas,filas)//paraespecificarcualesnuestraLCDlcd.init()//inicializalaLCDlcd.backlight()//enciendelaluzdeldisplaylcd.noBacklight()//apagalaluzdeldisplayparaahorrarenergalcd.clear()//borralapantallalcd.write(caracter)//escribeuncaracterenpantallalcd.print(textoparamostrar)//escribetextoenpantallalcd.print(textoparamostrar,BASE)lcd.createChar(numero,nombre)//paracrearemoticonoslcd.home()//sitaelcursorenlaesquinasuperiorderechadeldisplaylcd.setCursor(columna,fila)//sitaelcursorenlacolumnayfilaespecificadaslcd.printByte(nmero)//escribeelemoticonoguardadoenesenmerolcd.blink()//muestraelcursorconformadebloqueparpadeantelcd.noBlink()//dejademostrarelcursorparpadeantelcd.cursor()//muestraelcursorcomobarrabaja_

    lcd.noCursor()//dejademostrarelcursorbarrabaja lcd.display()//muestraloscaracteres

    lcd.noDisplay()//dejademostrarloscaracteressinperderlainformacinlcd.leftToRight()//cuandoseescribe,lasletrasaparecenalaizquierdadelcursorlcd.rightToLeft()//letrasaparecenaladerechadelcursorlcd.autoscroll()//muevetodoeltextounespacioalaizquierdacadavezqueseaadeuna //letra.lcd.noAutoscroll()//apagaeldesplazamientolcd.scrollDisplayLeft()//desplazaeltextohacialaizquierda.lcd.scrollDisplayRight()//desplazaeltextohacialaderecha.

    ElsensordetemperaturaLM35

    10

  • ElLM35esunsensordetemperaturaconunaprecisincalibradade1C.Surangode

    medicinabarcadesde55Chasta150C.Lasalidaeslinealycadagradocentgradoequivale

    a10mV,porlotanto:

    150C=1500mV

    55C=550mV1

    Caractersticas[editar]

    Suscaractersticasmsrelevantesson:

    EstcalibradodirectamenteengradosCelsius. Latensindesalidaesproporcionalalatemperatura. Tieneunaprecisingarantizadade0.5Ca25C.

    11

  • Bajaimpedanciadesalida. Bajacorrientedealimentacin(60uA). Bajocoste.

    ________________________________________________________________

    5. Semforo Materiales1ArduinoUnoR3(puedesercualquierotraplacadearduino)3leds,unoverde,unoamarilloyunorojo.1Resistenciade220ohmsosuperior.1Cableusbdetransferenciadedatos.

    CODIGODEFUNCIONAMIENTOvoidsetup(){pinMode(8,OUTPUT);//DeclaramoslospinesausarylaaccinquerealizarnpinMode(9,OUTPUT);pinMode(10,OUTPUT);}

    12

  • voidloop(){digitalWrite(10,HIGH);//Escribimosenelpin10"HIGH"ununolgicoparaencenderLEDVERDEdelay(5000);//ESPERAMOS5SEGUNDOSdigitalWrite(10,LOW);//ESCRIBIMOSENELPIN10"BAJO"paraaapagarelLEDVERDEdelay(500);//EsperamosmediosegundodigitalWrite(10,HIGH);//ESTEESLAPARTEDONDESEEJECUTAELPARPADEODELLED,ESCRIBIMOS"HIGH"delay(500);//ESPERAMOSMEDIOSEGUNDOdigitalWrite(10,LOW);//APAGAMOSELLEDdelay(500);//ESPERAMOSMEDIOSEGUNDOdigitalWrite(10,HIGH);//ESTEPARTEESLAMISMAQUELAANTERIOR,ESTEESELSEGUNDOPARPADEODENUESTROLEDdelay(500);digitalWrite(10,LOW);delay(500);digitalWrite(10,HIGH);//ESTEPARTEESLAMISMAQUELAANTERIOR,ESTEESELSEGUNDOPARPADEODENUESTROLEDdelay(500);digitalWrite(10,LOW);delay(500);digitalWrite(9,HIGH);//AHORAESCRIBIMOSUN"1"LOGICOENLEPIN9,QUECORRESPONDEANUESTROLEDAMARILLOdelay(3000);//ESPERAMOS3SEGUNDOSdigitalWrite(9,LOW);//APAGAMOSELLEDAMARILLOdigitalWrite(9,HIGH);//ESTEESLAPARTEDONDESEEJECUTAELPARPADEODELLED,ESCRIBIMOS"HIGH"delay(500);//ESPERAMOSMEDIOSEGUNDOdigitalWrite(9,LOW);//APAGAMOSELLEDdelay(500);//ESPERAMOSMEDIOSEGUNDOdigitalWrite(9,HIGH);//ESTEPARTEESLAMISMAQUELAANTERIOR,ESTEESELSEGUNDOPARPADEODENUESTROLEDdelay(500);digitalWrite(9,LOW);delay(500);digitalWrite(9,HIGH);//ESTEPARTEESLAMISMAQUELAANTERIOR,ESTEESELSEGUNDOPARPADEODENUESTROLEDdelay(500);digitalWrite(9,LOW);delay(500);digitalWrite(8,HIGH);//ESCRIBIMOSUN"1"LOGICOENELPIN8,QUECORRESPONDEALLEDROJOdelay(5000);//ESPERAMOS5SEGUNDOSdigitalWrite(8,LOW);//ESCRIBIMOSUN"0"LOGICOENELPIN8,APAGANDOELLEDROJO}

    OSDEJOELFUNCIONAMIENTODEUNALMPARACOMOUNTELERRUPTOR

    13

  • //I.E.SEXTREMADURAintledPin1=13;intButtonPin1=7;booleanprimerPulso=false;voidsetup(){pinMode(ledPin1,OUTPUT);pinMode(ButtonPin1,INPUT);}voidloop(){if(digitalRead(ButtonPin1)==HIGH)primerPulso=!primerPulso;delay(10);{digitalWrite(ledPin1,primerPulso);}}

    OTROESQUEMAPARAHACERELTELERRUPTORAlaccionarelpulsadorelLedseenciendeyalvolverapulsarelLedseapaga//Telerruptor.unpulsadorcontrolaunled.pulsasled=onvuelvesapulsarled=off.//Lgicapositiva.//sehamontadouncircuitorcparaevitarelrebotedelpulsadorintpulsador=6;intled=12;intcnt_etapa=0;//contadordeetapasyestado//voidsetup(){pinMode(pulsador,INPUT);pinMode(led,OUTPUT);Serial.begin(9600);}voidloop(){if(digitalRead(pulsador)==HIGH&&cnt_etapa==0){digitalWrite(led,HIGH);

    14

  • cnt_etapa=1;}if(digitalRead(pulsador)==LOW&&cnt_etapa==1){cnt_etapa=2;}if(digitalRead(pulsador)==HIGH&&cnt_etapa==2){digitalWrite(led,LOW);cnt_etapa=3;}if(digitalRead(pulsador)==LOW&&cnt_etapa==3){cnt_etapa=0;}Serial.println(cnt_etapa);//puedesdndeestelprogramaviendoenquetapaest}

    6. Arranque estrellatringulo Esteprogramaloherealizadoparapoderirvisualizndoloporelpuertoserie.Hayotrasformasderealizarlomssimples,

    15

  • //JosCerrato//ARRANQUEESTRELLATRINGULOintpulsador=6;//PULSADORDEMARCHAYPARADAintled=12;//RELPARACONTACTORDELINEAintled1=11;//RELPARACONTACTORDEESTRELLAintled2=10;//RELPARACONTACTORDETRINGULOintcnt_etapa=0;//contadordeetapasyestado//voidsetup(){pinMode(pulsador,INPUT);pinMode(led,OUTPUT);pinMode(led1,OUTPUT);pinMode(led2,OUTPUT);Serial.begin(9600);}voidloop(){

    16

  • if(digitalRead(pulsador)==HIGH&&cnt_etapa==0){digitalWrite(led,HIGH);//ENTRARELDELNEA{digitalWrite(led1,HIGH);//ENTRARELDEESTRELLAdelay(1000);//TIEMPODECAMBIOdigitalWrite(led1,LOW);//DESCONEXINDEESTRELLAdelay(100);//TIEMPODESEGURIDAD digitalWrite(led2,HIGH);//ENTRAELRELDETRINGULO}cnt_etapa=1;} if(digitalRead(pulsador)==LOW&&cnt_etapa==1){cnt_etapa=2;//PARADATOTAL}if(digitalRead(pulsador)==HIGH&&cnt_etapa==2){digitalWrite(led,LOW);digitalWrite(led1,LOW);digitalWrite(led2,LOW);cnt_etapa=3;}if(digitalRead(pulsador)==LOW&&cnt_etapa==3){cnt_etapa=0;}Serial.println(cnt_etapa);//puedesverenquetapaestelprograma}

    //ARRANQUEESTRELLATRINGULOSIMULADOCONLEDS.

    //Esteejemplocontienedospulsadoresconectadosaentradasdigitalesytresleds

    //ElpasodeEstrellaaTringuloserealizademodotemporizado,esdecir,traspulsar

    marchaentraK1yK3modoestrellaytras5segundoscomienzalasecuencia

    //TringuloapagandoK3ydejandoencendidosK1yK2.

    /*

    17

  • P1marcha.............PinDigital3

    P2paro...............PinDigital2

    K1contactor..........PinDigital10

    K2contactor..........PinDigital11

    K3contactor..........PinDigital12

    */

    //

    //Definimoslosnumerosdepin:

    constintbuttonP1=3;//NumerodePindelpulsadorMarcha

    constintbuttonP2=2;//NumerodePindelpulsadorParo

    constintledPinK1=10;//NumerodelpindeledparaK1

    constintledPinK2=11;//NumerodelpindeledparaK2

    constintledPinK3=12;//NumerodelpindeledparaK3

    //variables:

    intestrella=0;//Varibledeapoyoparasecuenciaestrella

    inttriangulo=0;//Varibledeapoyoparalasecuenciatriangulo

    intbuttonStateP1=0;//variableparaleerelestadodelpulsadormarcha

    intbuttonStateP2=0;//variableparaleerelestadodelpulsadorParo

    void(*resetFunc)(void)=0;//Funcionreseteo

    18

  • voidparo()//funcionparada

    {

    //apagatodaslassecuencias:

    digitalWrite(ledPinK1,LOW);

    digitalWrite(ledPinK2,LOW);

    digitalWrite(ledPinK3,LOW);

    //inicialiatdoslosindicadores

    estrella=0;//Inicializamosestadoestrella

    triangulo=0;//Inicializamosestadotiangulo

    resetFunc();//llamadaareseteo

    }

    voidsetup(){

    //initializamoselpindelLEDK1comosalida:

    pinMode(ledPinK1,OUTPUT);

    //initializamoselpindelLEDK2comosalida:

    pinMode(ledPinK2,OUTPUT);

    //initializamoselpindelLEDK3comosalida:

    pinMode(ledPinK3,OUTPUT);

    //inicializamoselpindelpulsadordemarchacomoentrada:

    pinMode(buttonP1,INPUT);

    //inicializamoselpindelpulsadordeparocomoentrada:

    19

  • pinMode(buttonP2,INPUT);

    digitalWrite(ledPinK1,LOW);

    digitalWrite(ledPinK2,LOW);

    digitalWrite(ledPinK3,LOW);

    }

    voidloop(){

    attachInterrupt(0,paro,CHANGE);//Interrupcindeparo.

    //leemoselestadodelpulsadordemarcha:

    buttonStateP1=digitalRead(buttonP1);

    //leemoselestadodelpulsadordeparo:

    buttonStateP2=digitalRead(buttonP2);

    if(buttonStateP1==HIGH)//comprobamossielpulsadordemarchahasidopulsado.

    {

    estrella=1;//Indicadorestadoestrella

    delay(200);//retardoparamicrosealesderetornopulsador

    if((estrella==1)&&(triangulo==0))//sinoestatrianguloenmarchacomienza

    secuenciaestrellatriangulo

    {

    //enciendelasecuenciaEstrellaK1yK3encendido:

    digitalWrite(ledPinK1,HIGH);

    digitalWrite(ledPinK3,HIGH);

    20

  • delay(5000);//retardoentreestrellaytriangulo

    //enciendelasecuenciaTriangunloApagaK3yenciendeK2dejandoaK1encendido:

    estrella=0;//Inicializamosindicadorestrellaparaimpedirfuncionamientoconjunto

    triangulo=1;//Indicadorestadotiangulo

    digitalWrite(ledPinK3,LOW);

    digitalWrite(ledPinK1,HIGH);

    digitalWrite(ledPinK2,HIGH);

    }

    }

    }

    Otroejemplodearranqueestrellatringulo

    ////Arranqueestrellatriangulo////Madebypedrovjm//License:CCBYSA3.0//Downloadedfrom:http://123d.circuits.io/circuits/69877arranqueestrellatriangulo//DeclaraciondevariablesintalimentacionPin=6;intestrellaPin=4;inttrianguloPin=2;intpmarchaPin=12;intpparoPin=8;intlastSTATE=LOW;intpmarchaSTATE=LOW;intpparoSTATE=LOW;intsecuenciaArranque=LOW;//debounceweareusingbuttonstotoggleandthisturnsoverfast//longtime=0;//thelasttimetheoutputpinwastoggled//longdebounce=200;//thedebouncetime,increaseiftheoutputflickers

    21

  • //elsetupcorresolounavezcadavezquesereinicializaelprogramavoidsetup(){ //declaramoslasvariablescomoentradasosalidaspinMode(alimentacionPin,OUTPUT);pinMode(estrellaPin,OUTPUT);pinMode(trianguloPin,OUTPUT);pinMode(pmarchaPin,INPUT);pinMode(pparoPin,INPUT);}//Elloopserepiteciclicamentevoidloop(){//comprobamoselestadodelospulsadorespmarchaSTATE=digitalRead(pmarchaPin);pparoSTATE=digitalRead(pparoPin);//compruebosisehapulsadopparoif(pparoSTATE==HIGH){digitalWrite(alimentacionPin,LOW);digitalWrite(estrellaPin,LOW);digitalWrite(trianguloPin,LOW);}if(pmarchaSTATE==HIGH){digitalWrite(alimentacionPin,HIGH);digitalWrite(estrellaPin,HIGH);digitalWrite(trianguloPin,HIGH);} //digitalWrite(lastSTATE,LOW);//digitalWrite(secuenciaArranque,LOW);//}//compruebosisehapulsadopmarcha//if(pmarchaSTATE==HIGH&&pparoPin==LOW&&lastSTATE==LOW){//digitalWrite(lastSTATE,HIGH);//}//Secuenciadearranque//if(lastSTATE==HIGH&&secuenciaArranque==LOW){//digitalWrite(secuenciaArranque,HIGH);//digitalWrite(alimentacionPin,HIGH);//digitalWrite(estrellaPin,HIGH); //hacemosesperaralprograma10s//delay(10000); //digitalWrite(estrellaPin,LOW);//delay(20);

    22

  • //digitalWrite(trianguloPin,HIGH);//}}

    Mdulo de rels Elmanejodeunmduloreloesmuysencilloynospermitecontrolarelencendidoyapagadodecualquieraparatoqueseconecteaunafuentedealimentacinelctricaexterna.Elrelhacedeinterruptoryseactivaydesactivamedianteunaentradadedatos.Graciasaestopodemoscontrolarelencendidodecualquieraparato.

    attachInterrupt(interrupcin,funcin,modo)

    23

  • DescripcinEspecificalafuncinalaqueinvocarcuandoseproduceunainterrupcinexterna.Reemplazacualquierfuncinpreviaqueestuvieraenlazadaalainterrupcin.LamayoradelasplacasArduinotienendosinterrupcionesexternas:Lasnmero0(enelpindigital2)yla1(enelpindigital3).LaArduinoMegatieneotrascuatro:Lasnmero2(pin21),3(pin20),4(pin19)y5(pin18).Parmetrosinterrupcin:elnmerodelainterrupcin(int)funcin:lafuncinalaqueinvocarcuandolainterrupcintienelugarestafuncinnodebetenerparmetrosnidevolvernada.Estafuncinesavecesreferenciadacomorutinadeinterrupcindeserviciomododefinecuandolainterrupcindebeserdisparada.Haycuatroconstantespredefinidascomovaloresvlidos:

    LOWparadispararlainterrupcinencualquiermomentoqueelpinseencuentreavalorbajo(LOW).CHANGEparadispararlainterrupcinencualquiermomentoqueelpincambiedevalor.RISINGparadispararlainterrupcincuandoelpinpasedevaloralto(HIGH)abajo(LOW).FALLINGparacuandoelpincambiedevaloralto(HIGH)abajo(LOW)

    RetornoNingunoNotaDentrodelafuncinenlazada,lafuncindelay()nofuncionayelvalordevueltoporlafuncinmillis()noseincrementar.Losdatosserierecibidoseneltranscursodeestainterrupcinpuedenperderse.Nodeberasdeclararcomovoltilcualquiervariablequemodifiquesdentrodelafuncin.UsandolasinterrupcionesLasinterrupcionessontilesparahacerquelascosassucedanautomticamenteenprogramasparamicrocontroladores,ypuedanayudararesolverproblemasdetemporizacin.Unabuenatareaenlaqueutilizarinterrupcionespodraserleerunencoderrotacional,monitorizandolaentradadelusuario.Siquisierasasegurartedequeunprogramasiemprecapturalospulsosdeunencoderrotacional,sinperdernuncaunpulso,seramuycomplicadoescribirunprogramaquehagaotracosa,puestoqueelprogramadeberaestarconstantementeconsultandolaslneasdelsensordelencoder,deformaquecapturelospulsoscuandotienenlugar.Otrossensorestienenuninterfazdinmicosimilar,comointentarleerunsensordesonidoqueintentacapturarunclick,ounsensorderanurasporinfrarrojos(fotointerruptor)tratandodecapturarelpasodeunamoneda.Entodasestassituaciones,usarunainterrupcin,liberaalmicrocontroladorderealizarotrastareassinecharenfaltael"timbre".

    24

  • 7. Funcionamiento de un motor con pulsador de marcha y paro //FUNCIONAMIENTODEUNMOTORMEDIANTEPULSADORDEMARCHAYPULSADORDEPAROjosCerratointled=12;//motorintPulsador_Set=4;//puestaenmarchadelmotorintPulsador_Reset=5;//paradadelmotorintEstado_Pulsador_S;intEstado_Pulsador_R;//Rutinadeinstalacinvoidsetup(){//iniciarelpincomosalidadigitalpinMode(led,OUTPUT);pinMode(Pulsador_Set,INPUT);pinMode(Pulsador_Reset,INPUT);}//Rutinaciclicavoidloop(){Estado_Pulsador_S=digitalRead(Pulsador_Set);Estado_Pulsador_R=digitalRead(Pulsador_Reset);if(Estado_Pulsador_S==1){digitalWrite(led,1);//EncenderLED}if(Estado_Pulsador_R==1){digitalWrite(led,0);//PagadoLED}}

    8.Sensordeaparcamientoporultrasonidosconzumbador(AngelReyesNieto)

    25

  • /*Esteprogramausaunsensorultrasnicoparahacerparpadearunledyunzumbadordependiendodeladistanciaquedetecteelsensor*/#include//ImportarlibreriaPingconstintsensor=4;//Pindesealconectadoalpin4constintzumbador=6;//Zumbadorconectadoalpin6constintled=8;//LEDconectadoalpin8intdistancia;//Guardamosladistanciaquedetecteelsensorintpausa;//GuardaeltiempodeesperaentreparpadeoPingping=Ping(sensor);//Creamoselobjetopingvoidsetup(){pinMode(zumbador,OUTPUT);//DeclaramoselzumbadorcomosalidapinMode(led,OUTPUT);//DeclaramoselLEDcomosalida}

    26

  • voidloop(){ping.fire();//Iniciaelsensordistancia=ping.centimeters();//Devuelveladistanciaencmif(distancia
  • delpulsoultrasnicoycuandoelsensorrecibeelrebote,esdecir:desdequeelpin12empiezaarecibirelrebote,HIGH,hastaquedejadehacerlo,LOW,lalongituddelpulsoentrante*/distancia=(((tiempo/1000000)/2)*343)*100;//Serial.println(distancia);intvalorLED=map(distancia,2.5,60,1,NUM_LEDS);for(intled=0;led