Introducción Grafcet aArduino Arduino Es una compañía de hardware libre y una comunidad tecnológica que diseña y manufactura placas de desarrollo de hardware y software, compuesta respectivamente por circuitos impresos que integran un microcontrolador y un entorno de desarrollo (IDE), en donde se programa cada placa. Arduino se enfoca en acercar y facilitar el uso de la electrónica y programación de sistemas embebidos en proyectos multidisciplinarios. Toda la plataforma, tanto para sus componentes de hardware como de software, son liberados bajo licencia de código abierto que permite libertad de acceso a los mismos. Descripción del hardware Arduino UNO Entradas y salidas digitales . Entradas y salidas digitales . Entradas analógicas . Entradas Análogas . Elementos . Elementos . . . Entradas digitales . Entradas digitales . Salidas digitales . . . . IDE . IDE . . Ejercicio 1 . Entradas digitales . OUTPUT). // asigna a botón el valor 2 int valor = 0. // configura el led (pin13) como salida pinMode(boton. //lee el estado de la entrada botón digitalWrite(led.Entradas digitales int led = 13. // configura botón (pin7) como entrada } void loop() { valor = digitalRead(boton). // envía a la salida ´led´el valor leído } . // define el valor y le asigna el valor 0 void setup() { pinMode(led. valor). INPUT). // asigna a LED el valor 13 int boton = 2. Ejercicio 2 . Salidas digitales . INPUT). // espera 1 segundo digitalWrite(ledPin. // pin 2 asignado para el pulsador void setup() // Configura entradas y salidas { pinMode(ledPin. OUTPUT). // pin 13 asignado para el LED de salida int inPin = 2. // declara LED como salida pinMode(inPin. // enciende el LED delay(1000). LOW). // apaga el LED } } .int ledPin = 13. // declara pulsador como entrada } void loop() { if (digitalRead(inPin) == HIGH) // testea si la entrada esta activa HIGH { digitalWrite(ledPin. HIGH). LENGUAJE GRAFCET . GRAFCET Es una metodología de expresión gráfica como solución al desarrollo de programas de control para sistemas secuenciales complejos . ¿De donde viene el nombre? GRAfico Funcional de Control de Etapas y Transiciones . SIMBOLOGÍA DEL GRAFCET APLICADA A UN PROCESO SIMPLE . SECUENCIAS DIRECCIONADAS O ALTERNATIVAS En este caso el ciclo puede variar en función de la condición que se cumpla. . dada la etapa 0 se pueden seguir dos ciclos diferentes dependiendo de cual de las dos condiciones (X1 ó X2) se cumpla. En la estructura mostrada. sólo una de ellas debe cumplirse mientras la etapa 0 este activa. En las secuencias simultáneas varios ciclos pueden estar funcionando a la vez por activación simultánea de las etapas.SECUENCIAS SIMULTÁMEAS O CONCURRENTES. . GRAFCET Y SU SINTAXIS GRÁFICA . GRAFCET Y SU SINTAXIS GRÁFICA . GRAFCET Y SU SINTAXIS GRÁFICA . GRAFCET Y SU SINTAXIS GRÁFICA . GRAFCET Y SU SINTAXIS GRÁFICA . Ejercicio 2 . dos sensores de nivel NL0 y NL1. Para ello se ha dispuesto de una válvula de entrada VL1. una válvula de salida VL2. . un sensor de temperatura TMP y un calefactor RST.PLANTEAMIENTO DE LA SITUACIÓN Se requiere un sistema de control de nivel y temperatura en un tanque. con la activación del mando START se da la orden de arranque. .DESCRIPCIÓN FUNCIONAL EN LENGUAJE NATURAL El funcionamiento del controlador lógico aplicado al funcionamiento de un sistema de nivel y temperatura. lo cual desencadena la apertura de la válvula VL1. se inicia la calefacción simultáneamente con el llenado. tanto el nivel como la temperatura requerida. Cuando el nivel en el tanque alcanza el nivel mínimo. mostrando claramente las condiciones de interrelación de las variables involucradas en la operación. Cuando el nivel en el tanque está por debajo de NL0. se alcanzan el tanque se vacía. Esto se hace mediante la apertura de la válvula de salida VL2. la secuencia puede ser reiniciada de nuevo. la válvula VL2 está abierta. La condición inicial es el tanque vacío. determinado por NL0. como primera acción. iniciándose el llenado. Cuando ambos. Todas las acciones son permanentes no hay acciones impulso. El llenado y el calentamiento se dan en forma paralela. Cuando el nivel en el tanque llega a NL1 el llenado se detiene y cuando la temperatura llega a TMP la calefacción también cesa. variable booleana VL2=1. por ejemplo. . } .INPUT). (boton_1. estado_boton_4=0. boton_4=5. (led_2.led_3=10. (final_2. boton_3=4. pinMode(final_1.INPUT). (led_4. // pines salida**************** int estado_final_1=0. estado_boton_2=0. final_4=24. // pines de entrada************* const int led_1=12. estado_boton_5=0.led_4=9. etapa_4=false. boton_1=2. etapa_10=false. boolean etapa_0=true. etapa_1=false. (final_4. OUTPUT). (boton_5. (led_5.const int final_1=21.led_2=11. boton_2=3.INPUT).INPUT). etapa_5=false. boton_5=6.INPUT). etapa_3=false. int estado_boton_1=0. etapa_2=false. (boton_4.INPUT). OUTPUT). etapa_7=false. estado_final_4=0.INPUT). (boton_3. etapa_9=false. estado_final_3=0. estado_final_2=0.led_5=8. OUTPUT). estado_final_5=0. (final_3. etapa_6=false. etapa_8=false. OUTPUT).INPUT). estado_boton_3=0. OUTPUT). final_3=23. (boton_2. final_2=22.INPUT). (led_3. void setup() { pinMode(led_1. etapa_2=false. estado_boton_1= digitalRead(boton_1). estado_final_2= digitalRead(final_2). estado_boton_3= digitalRead(boton_1). estado_final_4= digitalRead(final_4). estado_boton_4= digitalRead(boton_4). } // etapa 4 if (etapa_3 == true && final_2==HIGH ) { etapa_4=true. etapa_3=false. etapa_0=false.void loop(){ estado_final_1= digitalRead(final_1). etapa_1=false. } . } // etapa 3 if (etapa_2 == true && estado_boton_2==HIGH ) { etapa_3=true. } // etapa 2 if (etapa_1 == true && final_1==HIGH ) { etapa_2=true. //******************* // etapa 1 if (etapa_0 == true && estado_boton_1==HIGH ) { etapa_1=true. estado_boton_5= digitalRead(boton_5). estado_boton_2= digitalRead(boton_2). estado_final_3= digitalRead(final_3). //******************* // etapa 1 if (etapa_0 == true && estado_boton_1==HIGH ) { etapa_1=true. estado_final_2= digitalRead(final_2). etapa_2=false. estado_boton_2= digitalRead(boton_2). etapa_1=false. estado_final_4= digitalRead(final_4). etapa_0=false. } // etapa 3 if (etapa_2 == true && estado_boton_2==HIGH ) { etapa_3=true. estado_boton_1= digitalRead(boton_1). } // etapa 2 if (etapa_1 == true && estado_final_1==HIGH ) { etapa_2=true. estado_final_3= digitalRead(final_3). estado_boton_3= digitalRead(boton_1). estado_boton_4= digitalRead(boton_4). } . estado_boton_5= digitalRead(boton_5).void loop(){ estado_final_1= digitalRead(final_1). } // etapa 4 if (etapa_3 == true && estado_final_2==HIGH ) { etapa_4=true. etapa_3=false. etapa_5=false.// etapa 5 if (etapa_4 == true && estado_boton_3==HIGH ) { etapa_5=true.HIGH). etapa_4=false.LOW). if (etapa_2== true) digitalWrite(led_2. else digitalWrite(led_2. . } // etapa 0 if (etapa_5 == true && estado_final_3==HIGH ) { etapa_0=true.HIGH). } //************************ if (etapa_1== true) digitalWrite(led_1. else digitalWrite(led_1.LOW). LOW).LOW).LOW). if (etapa_4== true) digitalWrite(led_4. else digitalWrite(led_5.HIGH). else digitalWrite(led_3.HIGH). else digitalWrite(led_4.HIGH). } .if (etapa_3== true) digitalWrite(led_3. if (etapa_5== true) digitalWrite(led_5.