Mostrando entradas con la etiqueta Electrónica. Mostrar todas las entradas
Mostrando entradas con la etiqueta Electrónica. Mostrar todas las entradas

22 dic 2024

SEMÁFORO PARA CIRCUITO DE CARRERAS

  

Hoy os presentamos un pequeño proyecto, para realizar un semáforo para dar la salida en circuitos de carreras de coches de juguete, todo ello mediante un sencillo circuito con PIC. 


MATERIALES Y HERRAMEINTAS:

  • Programador PIC
  • Computador para programar (Con software de programación PIC)
  • Microcontrolador PIC16F629, Leds(x10), resistencias de 220 ohm(x5) y 10K(x1), transistores BC547(x5) y batería (o alimentador externo 5V)
  • Circuito Impreso, estaño y soldador.
  • Cables, interruptor, pulsador y caja.
  • Para la estructura; PVC, malla metálica, caja de plástico y tornillería.
  • Herramientas y material diverso: Sierra, lima, destornilladores, pegamento epoxi, etc.
  • Software para pruebas (Opcional) 
DIFICULTADAlta(8/10).


PRECAUCIÓN: 
Se requiere tener conocimientos y habilidad en electrónica y programación assembler.




ATENCIÓN: 
No nos hacemos responsables de los daños personales y/o materiales, causados por una mala manipulación, mal montaje, desconocimiento técnico o del uso indebido de esta guía.



INTRODUCCIÓN:

Como hemos dicho, hoy os mostramos un pequeño proyecto, en el que simulamos nuestra propia versión de los semáforos de inicio de salida, para un circuito de carreras de coches de juguete. Para ello usaremos un pequeño PIC, con un sencillo y reducido montaje, el cual encenderá progresivamente las luces LED, para dar la salida.




PROCESO

En este caso, el programa es extremadamente sencillo, ya que una vez pulsado el botón de inicio de carrera, espera un pequeño tiempo, y luego inicia la secuencia progresiva de encendido de los primeros cuatro LED rojos, para finalmente apagarlos y encender el LED verde. 
Y este ciclo de repite cada vez que se pulse el botón. Este es el diagrama de flujo correspondiente:



Con esta idea clara, redactamos el programa en ensamblador, para posteriormente probar y compilar mediante el software de Microchip®, MPLAB.
En el caso de errores o mejoras y ajustes, podemos depurarlo, y una vez terminado, compilarlo, para generar el archivo ASM, que usaremos para grabar el software en el PIC.

Como en anteriores proyectos, también tenemos la posibilidad de usar un software de simulación, (Por ejemplo; PROTEUS), en el que podemos hacer funcionar el hardware y el software, sin montarlo físicamente.


ESQUEMA Y PCB

A continuación, os mostramos el esquema del circuito. Y como se puede comprobar es extremadamente simple, ya que se ha intentado usar el menor numero de componentes posibles y porque es el software el núcleo del proyecto.


El reloj del Microcontrolador, que por norma general se usa uno externo, se ha optado por la opción que da el fabricante de usar el reloj interno, para economizar componentes, y por lo tanto, reducir el diseño final del circuito.

Por lo demás, para el resto del circuito, de las 8 patillas del PIC, la patilla 4 (GP3), la empleamos como entrada del pulsador que inicia la secuencia, y el resto de patillas 2, 3, 5,6 y 7 (GP5 a GP0), son las salidas, las cuales mediante una resistencia en las bases de cada transistor BC547 (NPN), hacen que estos conduzcan (como un interruptor), permitiendo el paso de corriente colector-emisor, haciendo que los LED's se iluminen. En el caso de conectar solo un LED, se pueden conectar directamente a la salida del PIC, al igual que se hizo en algunas pruebas iniciales.
El PIC, según especificaciones del fabricante, se alimenta entre 2V y 5,5V, entre las patillas 1 (+ Positivo) y 8 (- Negativo).
Para ampliar la información, consultar la hoja del carácteristicas del Microcontrolador del fabricante.



La PCB sobre la que va montado el circuito, se ha realizado en dos placas: Una para la sección de los LED (montada en el puente) y otra para el resto de circuito.
La primera sección, al tener conectados solo los LED, se ha optado por una placa de baquelita prefabricada, ya que siendo un circuito tan sencillo, implicaba menor trabajo a la hora de montarla.
Para el resto y al ser un prototipo, se ha hecho mediante el sistema de rotulador indeleble sobre una pequeña placa virgen. Si queréis más información de como construirla, en nuestra entrada PCB Domésticos, podéis consultar como hacerlo.
En cualquier caso, los diseños son como los que se muestran a continuación:






SOFTWARE:

Ahora es el momento de desarrollar el programa, para hacer encender los LED's según el diagrama de flujo. Seguidamente os mostramos el listado completo del software en Assembler, que está grabado en el PIC 16F629, comprobado y funcionando:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
; ******************************************************************;
; PROGRAMA SEMAFORO.asm                        FECHA: XX XXXXX 2024 ;
; Programa para secuencia semáforo inicio carrera coches            ;
; Usa los puertos GP0 a GP5(Pin 2,3,4,5,6 y 7)                      ;
; Revisión: 2.0                             Programa para PIC16F629 ;
; Velocidad de Reloj: 4Mhz (Interno)                                ;
; WatchDog = OFF                           Tipo Reloj:  INTERNO PIC ;
; Autor: XANUR (XMG)                      Por: XANUR2001/ ACME 2024 ;
; Compilado en : MPLAB X IDE v2.05 (MICROCHIP)                      ;
; Probado con PROTEUS Labcenter 7.7 (ISIS Professional) ************;
; ******************************************************************;
; ---------------------------------------------------------------------------------------------------
; Licencia Creative Commons BY-NC-SA (attribution - Non Commercial - Share Alike)
; El proyecto puede ser hecho y modificado por los lectores para uso privado y sin fines comerciales
; Es necesario indicar en posibles publicaciones el autor (XANUR2001 o XANUR.ES)
; ---------------------------------------------------------------------------------------------------
ERRORLEVEL -302
INCLUDE <p12f629> ; Librería del PIC que utilizaremos
LIST P =12F629, r=DEC, n=66
__CONFIG _CP_OFF & _CPD_OFF & _BOREN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT
			; Configuración de Registros para:
			; Protección Código=OFF
			; Protección Datos=OFF
			; Brown-Out Reset=OFF
			; Watch Dog=ON  
			; Power Up Timer=ON
			; OSC Reloj Interno=ON
; ---------------------------------------------------------------------------------------------------
; 			Declaración de Variables
; ---------------------------------------------------------------------------------------------------
    STATUS   EQU    03h		; REGISTRO DEL ESTADO DE LA RAM 
    GPIO     EQU    05h		; REGISTRO DEL ESTADO DE LOS PUERTOS I/O
    CMCON    EQU    19h		; REGISTRO DE TIPO DE PUETOS A/D
   
    LOOP1    EQU    20h		; REGISTRO CONTADOR PARA EL RETARDO (EN DIRECC. MEM 20H)
    LOOP2    EQU    21h     ; REGISTRO CONTADOR PARA EL RETARDO (EN DIRECC. MEM 21H)
    LOOP3    EQU    22h		; REGISTRO CONTADOR PARA EL RETARDO (EN DIRECC. MEM 22H)
; SECCIÓN CODIGO DE RESET.
			 ORG    0X00	; AQUÍ APUNTA SI ENCIENDE EL PIC O EN CASO DE RESET
; SALTO AL PROGRAMA PRINCIPAL
    GOTO    PRINCIPAL       ; IR A NUESTRO PROGRAMA PRINCIPAL
    ORG     05H             ; SALTANDO LA DIRECCIÓN DE INTERRUPCIÓN
; PROGRAMA PRINCIPAL
PRINCIPAL

; CONFIGURAMOS PUERTOS
	BCF     STATUS,5	    ; SELECCIONAR BANCO 0
    CLRF    GPIO            ; LIMPIAR ESTADO EL GPIO
    MOVLW   7FH		        ; 0FH=1111  3fH=11 1111  7FH=111 1111
    MOVWF   CMCON        	; CONFIGURA TODOS LOS PINES I/O DIGITAL
    BSF		STATUS,5	  	; SELECCIONA EL BANCO 1 DE LA RAMMACRO
	MOVLW   08H			    ; GP0,GP1,GP2,GP4 Y GP5 COMO SALIDAS (0)... 0EH
	MOVWF   TRISIO         	; ... GP3 COMO ENTRADA (1) 08H=0000 1000

	CALL	CALIBRAROSC		; LLAMADA A LA RUTINA PARA CALIBRAR... 
	MOVWF   OSCCAL			; ...EL OSCILADOR INTERNO

    BCF    	STATUS,RP0		; VOLVER AL BANCO 0 DE LA RAM 
    CALL	APAGADO			; APAGAMOS TODOS LOS LED`S

; 	1-CICLO PRONCIPAL BUCLE COMPROBACIÓN PULSADOR
INICIO
    BTFSC   GPIO, 3			; COMPRUEBA SI SE HA ACCIONADO EL PULSADOR;
    GOTO    ENCENDER       	; NO PULSADO COMPRUEBA DE NUEVO
    CALL	S1	        	; SI PULSADO, LLAMA A RUTINA S1
	CALL    APAGADO         ; REGRESA DE LA RUTINA Y APAGA TODODS LOS LED
	RETURN                  ; Y VUELVE AL INICIO
; RUTINA S1. SECUENCIA INICIO DE CARRERA
S1
	BCF    GPIO,0           ;ENVIAMOS UN "0" AL GP0 (PIN7), LED1 ROJO OFF
	CALL   PAUSA 
			
    BSF    GPIO,0           ; ENVIAMOS UN "1" AL GP0 (PIN7), LED1 ROJO ON
    CALL   PAUSA

	BSF    GPIO,1           ; ENVIAMOS UN "1" AL GP1 (PIN6), LED2 ROJO ON
	CALL   PAUSA

    BSF    GPIO,2           ; ENVIAMOS UN "1" AL GP2 (PIN5), LED3 ROJO ON
    CALL   PAUSA            ; NOTA: SE SALTA EL GP3 (PIN4), QUE ES LA ENTRADA PULSADOR

    BSF    GPIO,4           ; ENVIAMOS UN "1" AL GP4 (PIN3), LED4 ROJO ON
    CALL   PAUSA
    CALL   PAUSA
			
	CALL   APAGADO          ; APAGAMOS TODOS LOS LED
    BSF    GPIO,5           ; ENVIAMOS UN "1" al GP5 (PIN 2), LED VERDE ON
	CALL   PAUSA 
	CALL   PAUSA
	CALL   PAUSA
    RETURN                  ; ... Y VUELVE AL INICIO

; SUBRUTINA APAGAR LED
APAGADO                		; RUTINA APAGADO LED PUERTO GP0
	CLRF   GPIO        		; ENVIAMOS UN "0" AL PUERO GPIO
	RETURN

; SUBRUTINA RETARDO
PAUSA
    MOVLW    0X07
    MOVWF    LOOP1
    MOVLW    0X17
    MOVWF    LOOP2
    MOVLW    0X03
    MOVWF    LOOP3
CICLO1
	DECFSZ   LOOP1,F
    GOTO     $+2
    DECFSZ   LOOP2,F
    GOTO     $+2
    DECFSZ   LOOP3,F
    GOTO     CICLO1

    GOTO     $+1
    GOTO     $+1
    GOTO     $+1
    RETURN
; SURUTINA CALIBRAR OSCILADOR INTERNO
CALIBRAOSC
    RETLW    0X20h			; CALIBRACIÓN DEL OSCILADOR A 4MHz (+/-2%)
	RETURN 

; FIN DEL PROGRAMA 
    ORG     0X3FF
	END                        		; FIN 
	


El software tiene un funcionamiento muy sencillo. En primer lugar declaramos las variable a usar en el programa. Luego, en el programa principal, configuramos los puertos, según el esquema electrónico. Y seguidamente, hace un bucle (INICIO), en el cual esta comprobando permanentemente si se pulsa el botón (BTFSC GP3, pin 4).
En cuanto es pulsado, salta a la secuencia ENCENDER, en la cual hace una pequeña comprobación "Anti-rebote", y si sigue pulsado, continua la secuencia de encendido en S1.
Esta secuencia empieza haciendo una pequeña pausa y acto seguido, enciende el primer LED rojo (GP0, pin 7) a través del transistor. Pasa un tiempo, y activa el siguiente LED (GP1, pin 6). Otra pequeña pausa y activa el próximo LED (GP2, pin 5), una pausa corta más y se activa el último LED rojo (GP4, pin 3).
Y finalmente hace una pausa algo más larga y apaga todos los LED rojos y activa el LED verde (GP5, pin 2), manteniéndolo encendido durante un periodo de tiempo, tras el cual se apaga, volviendo el programa a INICIO.
Y se mantiene apagado, hasta que nuevamente se vuelve a pulsar el botón, e inicia de nuevo la secuencia de encendido.
S
i los tiempos de encendido/apagado, no encajan con los gustos del lector, estos pueden ser modificados a voluntad, modificando los valores de la rutina de retardo.

Como se ha visto, la forma del programa, es muy simple, y desde luego puede ser optimizada para los más avezados, pero el objetivo es mostrar de una forma sencilla y comprensible, como realizar un proyecto como este para iniciarse.

Una vez desarrollado el software, ya se puede grabar en el Microcontrolador, tal y como vimos en la entrada PICKIT 2 MICROCHIP® (Clon) de nuestro Blog, y por fin, podemos ponerlo a prueba.

En el siguiente vídeo, podéis ver el circuito, las pruebas realizadas, y su puesta en marcha tras la construcción definitiva:



Por si alguien tiene curiosidad, para la estructura del puente, hemos empleado una malla metálica, recortándola y dando la forma deseada.
Esta se ha montado en dos tiras pequeñas a modo de base, de PVC que encajan en los laterales de la pista de juguete.
Para los LED, una vez montados en la placa y cableados, se han fabricado dos piezas plásticas para cada lado y se ha atornillado en la parte inferior del puente.
Por último, se ha pasado un cable plano por el interior de dicho puente, el cuan va conectado a la placa principal, situada en una caja en el lateral del puente. Esta va alimentada con una pequeña batería que se ajusta dentro de la propia caja, pero si se desea, el circuito puede alimentarse externamente.



Ya solo queda disfrutar de las carreras:

3..., 2..., 1..., GOOOOOO!!!!!!





AVISO: 
Al no poder de disponer de todo el tiempo suficiente, lamentamos comunicar que no podremos atender cuestiones o resolver dudas referentes al funcionamiento del software publicado. ¡Disculpad las molestias!.





Esperamos que os haya gustado esta publicación. Si es así, no dudes en compartirla.

© Se permite reproducción total o parcial de este contenido, siempre y cuando se reconozca la fuente de información utilizada y se incluya el enlace a este artículo.

Equipo Xanur©2024.