Simulación de Semáforo Evaluación N°1 Bastián Correa / 15179-0 | L-1 Luis Inostroza / 15179-0 | L-1 Jorge Navarrete / 15179-0 | L-1 | Automatización y Robótica (Laboratorio) | Profesor: Jorge Carvajal Gezan 09/06/2021 Índice 1. RESUMEN ........................................................................................................................ 2 2. OBJETIVOS GENERALES .............................................................................................. 2 1.3. OBJETIVOS ESPECÍFICOS ............................................................................................ 2 3. CARACTERÍSTICAS GENERALES DEL SISTEMA ....................................................... 2 4. LÓGICA DE PROGRAMACIÓN....................................................................................... 3 5. CIRCUITO ........................................................................................................................ 3 5.1 COMPONENTES ELECTRÓNICOS ................................................................................ 3 5.2. CIRCUITO ELECTRÓNICO ............................................................................................. 5 6. CÓDIGO ARDUINO ......................................................................................................... 7 5.3. CONCLUSIÓN................................................................................................................ 10 5.4. BIBLIOGRAFÍA .............................................................................................................. 11 5.5. ANEXO ........................................................................................................................... 11 INDICE DE ILUSTRACIONES Ilustración 1 Arduino UNO ............................................................................................. 4 Ilustración 2 diodo LED.................................................................................................. 4 Ilustración 3 diagrama de un diodo LED ....................................................................... 4 Ilustración 4 resistencia cerámica ................................................................................. 5 Ilustración 5 protoboard ................................................................................................. 5 Ilustración 6: Circuito electrónico simulado en Tinkercad............................................. 6 Ilustración 7: Esquema del circuito electrónico simulado en Proteus .......................... 6 INDICE DE TABLAS Tabla 1 características del sistema ............................................................................... 2 Tabla 2 tiempos por elemento ....................................................................................... 3 PÁGINA 1 1. Resumen El siguiente informe contiene la primera experiencia del Laboratorio de Automatización y Robótica de la Universidad de Santiago de Chile. Esta trata sobre el diseño y programación de un circuito que simula la implementación de un semáforo vehicular y uno peatonal con un pulsador que disminuye el tiempo de espera del peatón. Para realizar la experiencia se ocupó el sitio web de Tinkercad que permite simular circuitos. El informe contiene la lógica de programación, el código de programación, la configuración que el circuito y los componentes electrónicos que se usaron. 2. Objetivos Generales • • Que el alumnado pueda relacionarse de manera más profunda con el simulador Tinkercad. Aplicar conceptos de circuitos aprendidos en clase. Objetivos específicos • • Programar el código Arduino que logre simular las acciones que toman los semáforos. Diseñar el circuito que simule el funcionamiento de los semáforos con el botón. 3. Características generales del sistema La implementación de un semáforo vehicular y uno peatonal con botón acelerador, implica tener que definir en un principio las relaciones lógicas que se deben aplicar al sistema, por ejemplo, que cuando la luz verde este encendida en el semáforo vehicular, entonces la luz roja debe estar encendida en el semáforo peatonal. Por lo cual se procede a definir las variables que entran en juego: Tabla 1 características del sistema Luces del semáforo peatonal Verde y rojo Luces del semáforo vehicular Verde, amarillo y rojo Botón Botón pulsador Tiempo total de un semáforo (s) 25 Tiempo ON de cada luz en semáforo vehicular (s) Verde: 10 . Amarilla:5 . Roja: 10 Tiempo ON de cada luz en semáforo peatonal (s) Verde:10 . Roja:15 Tiempo ON de adelanto por el botón (s) 5 PÁGINA 2 4. Lógica de programación E 1 2 3 4 1 Una vez definidas las variables, el siguiente paso es diseñar la lógica de programación que tendrá el sistema. Para esto se procederá a definir el loop de los estados de los semáforos. Tabla 2 tiempos por elemento Vehicular Peatonal Botón pulsador Tiempo(s) Acumulado(s) Luz verde Luz roja Habilitado 10 10 Luz amarilla Luz roja Deshabilitado 5 15 Luz roja Luz verde Deshabilitado 5 20 Luz roja Luz verde parpadeante Deshabilitado 5 25 Luz verde Luz roja Habilitado 10 10 Un punto importante que hay que tener en consideración es ¿Hasta qué momento el botón pulsador estará habilitado? Poniéndose en el supuesto de que en el estado 1 se presione el botón cuando ya hayan transcurrido 9 segundos, implicaría un adelanto de 5 segundos, lo que provocaría que la luz amarilla estaría solo 1 segundo prendida. Obviamente esto causaría trágicos accidentes. Por esta razón es necesario imponer una condición al botón pulsador. La condición más lógica proviene del hecho de que la luz amarilla debe conservar su tiempo de encendido. Entonces, como el botón genera un adelanto de 5 segundos, se impone la condición de que, si el botón es presionado después de haber pasado más de 5 segundos en el estado 1, entonces se procederá a pasar al estado dos inmediatamente. 5. Circuito 5.1Componentes electrónicos 5.1.1. ARDUINO UNO El Arduino Uno es una placa microcontroladora basada en el microcontrolador ATmega328P. Sus características principales son que consta de 14 pines digitales de los cuales 6 son PMW (Puls-witdhmodulation) que imitan una señal analógica mediante pulsos digitales. También está constituido por 6 entradas analógicas, y opera a un voltaje de 5V. Se recomienda que el voltaje de entrada del Arduino Uno sea entre 7-12 V, esta puede ser mediante la conexión USB que lleva instalada(5V) o con una fuente de poder externa. La corriente en los pines digitales debe ser DC 20mA (Arduino, s.f.). La placa Arduino tiene la ventaja de que trabaja en una plataforma abierta, lo cual facilita la programación de un microcontrolador. Además, su lenguaje de programación es sencillo. PÁGINA 3 Ilustración 1 Arduino UNO 5.1.2. DIODO LED Los diodos en particular son componentes electrónicos que permiten el paso de la corriente en un solo sentido, comportándose como un interruptor cerrado en el sentido de paso de la corriente y en el sentido contrario de conexión, como un interruptor abierto. Ahora bien, un diodo led es un diodo que además de permitir el paso de la corriente solo en un sentido, tiene la particularidad de que, este emite luz. Cuando se conecta un diodo en el sentido que permite el paso de la corriente se dice que está polarizado directamente, por ello la definición formal sería: Un diodo Led es un diodo que cuando está polarizado directamente emite luz. Ahora bien, su nombre se debe a la palabra LED viene del inglés Light Emitting Diode que traducido al español es Diodo Emisor de Luz Ilustración 2 diodo LED Los diodos leds tienen dos patillas de conexión una larga y otra corta. Para que pase la corriente y emita luz se debe conectar la patilla larga al polo positivo y la corta al negativo. Este es el símbolo que se usa para los diodos led en los esquemas eléctricos, donde el ánodo será la patilla larga. Ilustración 3 diagrama de un diodo LED PÁGINA 4 Los LEDs trabajan a tensiones más o menos de 2V (dos voltios). Si queremos conectarlos a otra tensión diferente deberemos conectar una resistencia en serie con él para que parte de la tensión se quede en la resistencia y al led solo le queden los 2V. 5.1.3. RESISTENCIA ELECTRICA La resistencia eléctrica puede ser definida como la oposición que un elemento presenta ante el paso de la corriente. En otros términos, la resistencia eléctrica es la fuerza que rechaza o se opone a los electrones que se desplazan en algún material. La usada para elaborar este circuito es de tipo lineal fija de cerámica, ya que su valor es predeterminado por el fabricante, nunca cambia. Ilustración 4 resistencia cerámica 5.1.4. PROTOBOARD Es un tablero con orificios que se encuentran conectados eléctricamente entre sí de manera interna, habitualmente siguiendo patrones de líneas, en el cual se pueden insertar componentes electrónicos y cables para el armado y prototipado de circuitos electrónicos y sistemas similares. Ilustración 5 protoboard Circuito electrónico A continuación, se muestra la imagen del circuito electrónico simulado en Tinkercad. PÁGINA 5 Ilustración 6: Circuito electrónico simulado en Tinkercad. Para entender de mejor manera las conexiones, también se dibujó el esquema del circuito utilizando el programa Proteus. Ilustración 7: Esquema del circuito electrónico simulado en Proteus PÁGINA 6 En la definición de los valores de las resistencias, si guio por el hecho de que los leds soportan hasta 20mA. Sabiendo que el circuito está en paralelo, y que el voltaje del Arduino es de 5V, por ley de Ohm, cada resistencia conectada a un led deberá tener un valor mínimo de 250 [𝛺]. Mientras que la resistencia conectada al botón, se le definió una resistencia de 1[𝑘𝛺] , dado que el botón tiene una baja resistencia ante la corriente. Mientras que la resistencia conectada al botón, se le definió una resistencia de 1[𝑘𝛺] , para que la corriente de entrada al pin 5 sea de alrededor de los 20 mA. 6. Código Arduino El código fue realizado por la plataforma online Tinkercad, y consta de un total de noventa y cuatros líneas. A continuación, se presenta su estructura dividida en partes debido a lo extenso que es, y explicando la función que cumple dentro de la programación del semáforo. Las primeras 10 líneas señalan las definiciones globales que se toman en cuenta en el desarrollo del código: donde rojo1, amarillo y verde1, representan las luces led del semáforo principal y se encuentran asociado a los pines 13, 12 y 11 respectivamente. Por otro lado, rojo2 y verde2 son las luces led del semáforo peatonal y están conectadas a los pines 7 y 6 del Arduino. Luego se tienen la variable botón que representa al pulsador conectado al pin digital N°5 y por último una variable entera nombrada “btn” que cumple la función de indicar la lectura digital del pulsador. PÁGINA 7 Desde la línea 11 hasta la línea 22 se desarrolla la estructura del “void setup” del código, en este lugar se definen las entradas y salidas de la placa de Arduino a través del comando “pinMode”. Para este caso se tienen que las luces led son las salidas (OUTPUT) y el pulsador la única entrada (INPUT) presente. El comando Serial.begin() permite poder habilitar el monitor serie para observar lo que está pasando en el programa. A partir de la línea 23 del código ya comienza la estructura “void loop()” que representa la ejecución de tipo bucle en el programa, el código se tiene programado de tal manera que cada bucle realizado representará un conteo de 25 segundos, tiempo que demora el semáforo en hacer un ciclo. En la línea 23 y 24 se definen dos variables locales que se toman en cuenta para el desarrollo, la primera de ellas corresponde a “contador” y representa el número del conteo, la segunda de ella representa una variable identificada como “a” que representa las veces que el usuario a presionado el pulsador, con esta variable se puede controlar que solo se puede utilizar una vez el botón en cada ciclo del semáforo, por la sencilla razón de prevenir accidentes que puede causar la reducción del tiempo de manera continua. Luego en la línea 29 ya comienza la programación netamente tal a través de un ciclo while, la condición requerida para ingresar representa el tiempo utilizado en un ciclo del semáforo, ya que cada vez que se ejecute el while la variable “contador” irá disminuyendo en una unidad o cinco si se presiona el pulsador. Una PÁGINA 8 vez ya ingresado al ciclo while se define el valor de la variable global “btn” que indicará si el pulsador esta presionado o no. Después en la línea 32 se tiene la primera condicional if que cumplirá la función de encender la luz verde del semáforo principal y la luz roja del semáforo peatonal hasta alcanzar el valor de 15 en el conteo. Dentro de este primer if se tienen dos condicionales más que actuaran en el caso de presionar el pulsador, si el conteo está en 20 segundo o más se le restaran 5 segundos a la variable conteo, en el caso de ser menor y mayor que 15, la variable conteo tomará el valor igual 15, que corresponde al cambio de la luz verde a la amarilla en el semáforo principal. En la línea 49 se encuentra el segundo if principal del programa que tiene la función de apagar la luz verde del semáforo principal y encender la luz amarilla de dicho semáforo cuando el contador tiene el valor de 15. La línea 58 contiene el tercer if principal y actúa cuando el contador llega al valor de 10, donde apaga el led amarillo y enciende el led rojo del semáforo principal, y a su mismo tiempo apaga la luz roja del semáforo peatonal y enciende la luz verde de este último semáforo. PÁGINA 9 Luego se tiene el cuarto if principal en la línea 69, que hace parpadear la luz verde del semáforo peatonal cuando el contador llega al valor de 5, durante los últimos segundos El quinto y último if principal que apaga la luz verde del semáforo peatonal y la luz roja del semáforo principal para poder inicial nuevamente el bucle. El código con la simulación se puede ver a mayor detalle en la siguiente página web: https://www.tinkercad.com/things/gaG0J8dVEXR Conclusión Como conclusión, gracias a la experiencia de recrear el circuito electrónico de un semáforo real, teniendo en cuenta cada uno de los detalles que tienen importancia, se pudo dar a conocer su complejidad. De los cuales, en este informe se destaca el uso de un botón para adelantar el ciclo pudiendo así obtener el verde para los peatones en un menor tiempo, este “detalle” necesario, por razones de seguridad sólo opera en los primeros 10 segundos del ciclo, y adelanta por una única vez 5 segundos, ya que luego de esto es cuando se enciende la luz amarilla y por ninguna razón esta debe durar menos de lo acostumbrado por los vehículos, como ocurre en la realidad. PÁGINA 10 Además de ello, otro punto importante es la posición de cada uno de los delay (espera) en su correspondiente bloque de código ya que es de importancia esperar a que transcurra un segundo para que avance la variable contadora y así poder mostrárselo al usuario y definir la acción que corresponde al segundo en el que se encuentra. Finalmente, se quiere realzar la importancia de las condiciones dentro de nuestro código, ya que con ellas se pueden manipular distintas acciones para que todo suceda bajo términos ya definidos. Bibliografía Arduino. (s.f.). Obtenido de Arduino/Genuino UNO: https://www.arduino.cc/en/Main/arduinoBoardUno&gt;# GDPR Masked. (09 de 08 de 2018). futuroelectrico.com. Obtenido de https://futuroelectrico.com/resistencia-electrica-para-quesirve/#:~:text=La%20resistencia%20el%C3%A9ctrica%20puede%20ser,el%2 0paso%20de%20la%20corriente.&text=Su%20funci%C3%B3n%20es%2C% 20por%20tanto,de%20medida%20son%20los%20Ohm. TUCOWS, INC. Tucows Domains Inc. (04 de 02 de 2006). areatecnologia.com. Obtenido de https://www.areatecnologia.com/electronica/como-es-un-led.html Anexo A continuación, se presenta el código completo que fue programado en el Arduino. #define rojo1 13 #define amarillo 12 #define verde1 11 #define rojo2 7 #define verde2 6 #define boton 5 int btn; void setup() { pinMode(rojo1, OUTPUT); pinMode(amarillo, OUTPUT); pinMode(verde1, OUTPUT); pinMode(rojo2, OUTPUT); pinMode(verde2, OUTPUT); pinMode(boton, INPUT); Serial.begin(9600); } void loop() { PÁGINA 11 int contador=25; int a=0; while(contador > 0){ btn=digitalRead(boton); if(contador > 15){ digitalWrite(rojo1,LOW); digitalWrite(rojo2,HIGH); digitalWrite(verde1,HIGH); Serial.print("["); Serial.print(contador); Serial.print("]"); contador--; if(btn==HIGH && contador>=20 && a==0){ contador=contador-5; a=1; } else if(btn==HIGH && contador<20 && a==0){ contador=15; } delay(1000); } if((contador <= 15) && (contador>10)){ digitalWrite(verde1,LOW); digitalWrite(amarillo,HIGH); Serial.print("["); Serial.print(contador); Serial.print("]"); contador--; delay(1000); } if((contador<=10) && (contador>5)){ digitalWrite(amarillo,LOW); digitalWrite(rojo1,HIGH); digitalWrite(rojo2,LOW); digitalWrite(verde2,HIGH); Serial.print("["); Serial.print(contador); Serial.print("]"); contador--; delay(1000); } if((contador<=5) && (contador>1)){ Serial.print("["); Serial.print(contador); Serial.print("]"); digitalWrite(verde2,LOW); delay(250); digitalWrite(verde2,HIGH); PÁGINA 12 delay(250); digitalWrite(verde2,LOW); delay(250); digitalWrite(verde2,HIGH); delay(250); contador--; } if(contador==1){ digitalWrite(verde2,LOW); digitalWrite(rojo2,LOW); Serial.print("["); Serial.print(contador); Serial.print("]"); contador--; delay(1000); } } Serial.println(""); } PÁGINA 13