Sunteți pe pagina 1din 11

PRACTICA:

“SEMAFORO CON REGISTROS”

ARDUINO.

Arduino es una plataforma electrónica de código abierto basada en hardware y software fácil de
usar. Las placas Arduino pueden leer entradas (luz en un sensor, un dedo en un botón o un
mensaje de Twitter) y convertirlo en una salida: activar un motor, encender un LED, publicar algo
en línea. Puede decirle a su placa qué hacer enviando un conjunto de instrucciones al
microcontrolador de la placa. Para hacerlo, utiliza el lenguaje de programación Arduino (basado en
el cableado ) y el software Arduino (IDE) , basado en el procesamiento .Se puede instalar y ejecutar
en sistemas operativos Windows, Mac OS y Linux. Su lenguaje de programación basado en C++.

REGISTRO.

Hay un registro dedicado para cada puerto que define si cada pin es una entrada o una salida, que
es el registro de DDRX, donde x es la letra del puerto que queremos configurar, en el caso de la
Arduino hay DDRB, DDRC y DDRD. Como toda variable lógica, cada bit en los registros DDRX puede
ser 1 ó 0, poner un bit específico de DDRX a 1 configura el pin como salida y ponerla a 0 configura
el pin como una entrada.

Arduino Uno
*B (pines digitales del 8 al 13)
*C (entradas analógicas)
*D (pines digitales del 0 al 7)

Cada puerto es controlado por tres registros, los cuales también están definidos como variables en
el lenguaje del Arduino.
*El registro DDR, determina si el pin es una entrada o una salida (1 salida, 0 entrada).
*El registro PORT controla si el pin está en nivel alto (1) o en nivel bajo (0).
*El registro PIN permite leer el estado de un pin. (solo lectura)

FUNCIONES Y VARIABLES UTILIZADAS.

En delay() Pausa el programa por la cantidad de tiempo (en milisegundos) especificado como
parámetro.
En void setup() Dentro de esta función principal escribiremos las sentencias de configuración que
necesitaremos para que Arduino trabaje correctamente. Éstas se ejecutarán al iniciar Arduino y
una única vez. Con ellas, por ejemplo, asignaremos la característica de entrada/salida a los pines.
En void loop () Ésta debe ir siempre después de void setup(). En ella escribiremos todas las
sentencias, bucles y llamadas a funciones que necesitemos que nuestro Arduino repita
constantemente. Se escribirán en orden de ejecución.
En int Los enteros son su tipo de datos principal para el almacenamiento de números.

SEMAFORO.

El siguiente trabajo realizado es de gran utilidad en las calles para regular el tránsito de vehículos,
también es de gran utilidad para evitar accidentes entre los vehículos que vienen de diferentes
direcciones, así como para evitar que los peatones sean atropellados por los vehículos.

DIAGRAMA DE CONEXIÓN.
CODIGO.
int tiempo=5000;//10000ms=10s
int tiempo_P=100;//100ms=.1s
void setup() {
DDRB=B111111;
DDRD=B11111110;
}
//S1=Semáforo de transito 1
//S2=Semáforo de transito 2
//SP3=Semáforo de transito 3
//SP4=Semáforo de transito 4
void loop() {
PORTB=B100001;//green S1 y red S2
PORTD=B00100100;//red S3 y red S3
delay(tiempo);
PORTB=B010001;//yellow S1
delay(tiempo);
PORTB=B000001;//yellow S1
delay(tiempo_P);
PORTB=B010001;//yellow S1
delay(tiempo_P);
PORTB=B000001;//yellow S1
delay(tiempo_P);
PORTB=B010001;//yellow S1
delay(tiempo_P);
PORTB=B001100;//red S1 y green S2
delay(tiempo);
PORTB=B001010;//red S1 y yellow S2
delay(tiempo);
PORTB=B001000;//yellow S2
delay(tiempo_P);
PORTB=B001010;//yellow S2
delay(tiempo_P);
PORTB=B001000;//yellow S2
delay(tiempo_P);
PORTB=B001010;//yellow S2
delay(tiempo_P);
PORTB=B001001;//red S1 y red S2
PORTD=B10000100;//green S3 y red S4
delay(tiempo);
PORTD=B01000100;//yellow S1
delay(tiempo);
PORTD=B00000100;//yellow S1
delay(tiempo_P);
PORTD=B01000100;//yellow S1
delay(tiempo_P);
PORTD=B00000100;//yellow S1
delay(tiempo_P);
PORTD=B01000100;//yellow S1
delay(tiempo_P);
PORTD=B00110000;//red S3 y green S4
delay(tiempo);
PORTD=B00101000;//yellow S1
delay(tiempo);
PORTD=B00100000;//yellow S1
delay(tiempo_P);
PORTD=B00101000;//yellow S1
delay(tiempo_P);
PORTD=B00100000;//yellow S1
delay(tiempo_P);
PORTD=B00101000;//yellow S1
delay(tiempo_P);
}

Explicacion.

Lo que se hizo en el código fue primero que nada declarar nuestras salidas en el arduino dentro de
void setup, posteriormente declaramos lo que queríamos que fuera realizando de manera cíclica el
arduino en el void loop donde indicamos que en la salidas(“pines”) representara estados de
encendido, apagado para hacer que los leds actuaran como semáforo, para esto se les declaro un
cierto periodo de tiempo para que estuvieran encendidos y al culminar ese tiempo estos leds
empezaran a parpadear, declaramos múltiples estados de 0 y 1 y dándoles periodos de tiempo
dentro del delay, para posteriormente quedar apagados y pasar al siguiente led, estos los
ordenamos en primera sección el verde, segunda amarillo con un menor tiempo de encendido,
tercera sección rojo con el mismo periodo de tiempo que el verde, y por ultimo del rojo para
regresar al verde nuevamente.
En esta imagen se muestra como el paso de vehículos en la calle Norte está libre mientras
que en las calles S,E,O está cerrado el paso, para que los carros puedan circular libres por
el circuito de su agrado.

En esta imagen ya hubo cambio en los estados de los leds en el verde de la calle Norte y
encendió el amarillo para indicar que ya habrá un cambio y reduzcan velocidad.
Aquí ya se muestra nuevamente el cambio en los estados de los leds para que ahora el
tránsito de vehículos quede libre por la calle Sur y cerrado el paso en N,E,O y con esto los
carros puedan transitar

Aquí se muestra el cambio del led verde a amarillo en la calle Sur para posteriormente
volver al led rojo y comenzar en verde en otra calle y poder regular el transito
En este ya quedo libre el transito en el OESTE para transitar en la dirección de su
preferencia mientras que en N,S,E el transito quedo parado por unos instantes

Se puede observar el cambio de estados en el led amarillo para pasar al rojo y cerrar el
paso ahora en ese sentido y dar el paso en el ultimo circuito que es el ESTE.
Aquí se observa el ultimo cambio en los semáforos en el cual se habilita el transito en el
ESTE mientras que en N,S,O se encuentra cerrado siendo el ESTE el ultimo cambio para
poder comenzar de nuevo el ciclo comenzando por el N,S,O,E haciendo lo que está dentro
del programa un ciclo.

CONCLUSIONES.
En conclusión, con el proyecto realizado existen plataformas de hardware libre, como lo
es el Arduino, una placa con un controlador y un entorno de desarrollo, su sencillez y bajo
costo nos permiten hacer múltiples diseños y múltiples tipos de uso de éste. Recurrimos al
uso del Arduino puesto que permite realizar muchas tareas, ahorrando elementos
electrónicos y en sustitución, el uso de un lenguaje de programación, lo que hace que sea
de muy fácil uso.
Comenzamos haciendo el programa con funciones, pero nos percatamos que eran muchas
líneas de código y configuraciones en los delay de tiempo de cambio, así que nos
enfocamos a realizar un nuevo código con registros reduciendo el código en un 50% al
igual que reducimos el consumo de memoria del código. decidimos realizar este proyecto
ya que le encontramos muchas aplicaciones en la vida diaria y en nuevos proyectos.
Con la ayuda del Arduino nos pudimos percatar que realiza las mismas funciones el código
con registros vs funciones, pero la ventaja de realizarlo con registros es que ocupa menos
líneas de código y por lo tanto menos memoria por lo cual se obtiene veneficio si se
tratara de un código más extenso ya que se ahorraría mucha memoria.
Pero de igual manera me percate que la manipulación del Arduino es mas sencilla con
funciones ya que es más práctico encontrar los errores a comparación de los registros, de
igual manera esto nos sirve para entender la manipulación de secuencias dentro del
Arduino y ver cómo se comporta aplicando los estados alto/bajo mediante números
binario. Con este proyecto, nos pudimos dar cuánta claramente, que no importa la placa
electrónica a utilizar, que si sigue una secuencia al pie de la letra el resulta será el mismo,
nos ayudó a conocer más el sistema Arduino y de igual forma a poder programar con
registros y hacernos más fácil y viable para el sistema de este tipo de programación

BIBLIOGRAFIA.
https://www.arduino.cc/
https://www.arduino.cc/reference/en/language/functions/digital-io/digitalwrite/
https://aprendiendoarduino.wordpress.com/2016/11/08/entradas-y-salidas-arduino/

S-ar putea să vă placă și