You are on page 1of 30

CONTROL DE

ESTACIONAMIENTO
VA WI-FI
INDICE

INTRODUCCIN .... 2

FUNCIONAMIENTO .... 3

LISTADO COMPONENTES .... 4

DESCRIPCIN DE COMPONENTES .... 5


MICROCONTROLADOR PIC16F877

DRIVER ULN2803 .... 6

MICROCONTROLADOR ARDUINO .... 7-9


UNO

MODULO WIFI ESP8266 .... 10-13

MOTOR PASO A PASO UNIPOLAR .... 14-16

PROGRAMA C (PIC 16F877A) .... 17-27

PROGRAMA ARDUINO UNO .... 28

CONCLUSION .... 29
Introduccin
A partir del Proyecto Anterior mantuvimos la idea del estacionamiento inteligente,
en donde la tarea principal era el control de los motores paso a paso unipolares
por medio de pulsadores que actuaban como sensor, junto con el programa o el
cerebro principal que es el pic 16f877a que daba las instrucciones de ejecucin de
una tarea dependiendo de la decisin del usuario, como por ejemplo abrir y cerrar
la barrera de acceso al estacionamiento. Actualmente recurrimos a la ayuda de un
Arduino uno y el mdulo wifi esp8266, cuya misin es reemplazar los controles
fsicos o interruptores en la entrada del pic 16f877a por un control inalmbrico Wi-
Fi en donde la accin de la tarea (abrir y cerrar la barrera de acceso al
estacionamiento) ser transmitida por medio de un equipo mvil conectado
inalmbricamente con el mdulo wifi cuya cualidad es que actuar como receptor,
el cual el equipo mvil tendr los pulsadores y emitir una seal de control que
ser recibida por el receptor y activando dichas entradas del pic 16f877a.
Funcionamiento del Estacionamiento inteligente
El funcionamiento es a travs de un pulsador N/A el cual simulara un sensor en
donde se dar inicio al ciclo abriendo la barrera y automticamente al bajar la
barrera el display descontara un cupo luego al avanzar el vehculo se posicionara
en su lugar de estacionamiento.

Si el vehculo se retira del estacionamiento se realizar el proceso inverso el cual


al llegar a la barrera esta se abrir por medio de un sensor y en el momento de
retirarse el vehculo bajara la barrera y el display incrementara indicando la
cantidad de estacionamiento disponible.
Lista de componentes
-Arduino uno

-Mdulo Wifi esp8266

-Pic 16f877a

-Driver ULN2803

- 2 Motores paso a paso unipolar

-Display 7 segmentos

-Resistencia 220 ohm

-Leds
DESCRIPCIN DE COMPONENTES
MICROCONTROLADOR PIC16F877:

El microcontrolador PIC16F877 de Microchip pertenece a una gran familia de


microcontroladores de 8 bits (bus de datos) que tienen las siguientes
caractersticas generales que los distinguen de otras familias:

- Arquitectura Harvard

- Tecnologa RISC

- Tecnologa CMOS

Estas caractersticas se conjugan para lograr un dispositivo altamente eficiente en


el uso de la memoria de datos y programa y por lo tanto en la velocidad de
ejecucin.

Los microcontroladores que produce Microchip cubren una amplio rango de


dispositivos cuyas caractersticas pueden variar como sigue:

- Empaquetado (desde 8 patitas hasta 68 patitas)

- Tecnologa de la memoria includa (EPROM, ROM, Flash)

- Voltajes de operacin (desde 2.5 v. Hasta 6v)

- Frecuencia de operacin (Hasta 20 Mhz)

-Lenguaje ocupado en este proyecto C.


DRIVER ULN2803
El ULN2803 (ULN2801A-ULN2805A) contiene ocho Transistores Darlington con
emisor comn e incluye diodos de supresin de las cargas inductivas. Es un
circuito muy usado para controlar servos y motores paso a paso. Cada Darlington
cuenta con una capacidad de carga de corriente de pico 600mA (500mA de
manera continua).

Cinco versiones estn disponibles para simplificar la interfaz con familias estndar
de esta lgica: la ULN2801A est diseado para aplicaciones de propsito general
con un lmite de corriente resistencia, la resistencia de entrada ULN2802A tiene
10.5k y zener de 14-25V PMOS, el ULN2803A tiene un 2.7k resistencia de
entrada de 5V TTL y CMOS, el ULN2804A tiene una resistencia de entrada
10.5k de 6-15V CMOS y el ULN2805A est diseado para familias Schottky TTL.
Aqu tenemos el diagrama de este til integrado.

ULN2803 encapsulado ULN2803 esquema

ULN2803 Darlington
ARDUINO UNO
Caractersticas tcnicas del ARDUINO UNO Arduino es una placa con un
microcontrolador de la marca Atmel y con toda la circuitera de soporte, que incluye,
reguladores de tensin, un puerto USB (En los ltimos modelos, aunque el original
utilizaba un puerto serie) conectado a un mdulo adaptador USB-Serie que permite
programar el microcontrolador desde cualquier PC de manera cmoda y tambin hacer
pruebas de comunicacin con el propio chip. Un arduino dispone de 14 pines que pueden
configurarse como entrada o salida y a los que puede conectarse cualquier dispositivo
que sea capaz de transmitir o recibir seales digitales de 0 y 5 V. Tambin dispone de
entradas y salidas analgicas. Mediante las entradas analgicas podemos obtener datos
de sensores en forma de variaciones continuas de un voltaje. Las salidas analgicas
suelen utilizarse para enviar seales de control en forma de seales PWM. Arduino UNO
es la ltima versin de la placa, existen dos variantes, la Arduino UNO convencional y la
Arduino UNO SMD. La nica diferencia entre ambas es el tipo de microcontrolador que
montan.

La primera es un microcontrolador Atmega en formato DIP.

Y la segunda dispone de un microcontrolador en formato SMD.


Entradas y salidas:

Cada uno de los 14 pines digitales se puede usar como entrada o como salida.
Funcionan a 5V, cada pin puede suministrar hasta 40 mA.

La intensidad mxima de entrada tambin es de 40 mA. Cada uno de los pines


digitales dispone de una resistencia de pull-up interna de entre 20K y 50 K que
est desconectada, salvo que nosotros indiquemos lo contrario.

Arduino tambin dispone de 6 pines de entrada analgicos que trasladan las


seales a un conversor analgico/digital de 10 bits.

Pines especiales de entrada y salida:

RX y TX: Se usan para transmisiones serie de seales TTL.

Interrupciones externas: Los pines 2 y 3 estn configurados para generar una


interrupcin en el atmega. Las interrupciones pueden dispararse cuando se
encuentra un valor bajo en estas entradas y con flancos de subida o bajada de la
entrada.

PWM: Arduino dispone de 6 salidas destinadas a la generacin de seales PWM


de hasta 8 bits.

SPI: Los pines 10, 11, 12 y 13 pueden utilizarse para llevar a cabo
comunicaciones SPI, que permiten trasladar informacin full dplex en un entorno
Maestro/Esclavo.

I 2C: Permite establecer comunicaciones a travs de un bus I 2C. El bus I 2C es


un producto de Phillips para interconexin de sistemas embebidos. Actualmente
se puede encontrar una gran diversidad de dispositivos que utilizan esta interfaz,
desde pantallas LCD, memorias EEPROM, sensores...
Alimentacin de un Arduino

Puede alimentarse directamente a travs del propio cable USB o mediante una
fuente de alimentacin externa, como puede ser un pequeo transformador o, por
ejemplo una pila de 9V. Los lmites estn entre los 6 y los 12 V. Como nica
restriccin hay que saber que si la placa se alimenta con menos de 7V, la salida
del regulador de tensin a 5V puede dar menos que este voltaje y si
sobrepasamos los 12V, probablemente daaremos la placa. La alimentacin
puede conectarse mediante un conector de 2,1mm con el positivo en el centro o
directamente a los pines Vin y GND marcados sobre la placa. Hay que tener en
cuenta que podemos medir el voltaje presente en el jack directamente desde Vin.
En el caso de que el Arduino est siendo alimentado mediante el cable USB, ese
voltaje no podr monitorizarse desde aqu.
MODULO WIFI ESP8266

ESP8266 es un mdulo Wi-Fi de bajo costo adecuado para la adicin de la


funcionalidad Wi-Fi a un microcontrolador proyecto existente a travs de una
conexin serial UART. El mdulo puede incluso ser reprogramado para actuar
como Wi-Fi independiente conectado dispositivo slo tiene que aadir la
alimentacin.

Caractersticas:

protocolo 802.11 b / g / n

Wi - Fi Direct ( P2P ) , soft- AP

Ciertos protocolos integrados TCP / IP

Las conexiones de hardware necesarios para conectar al mdulo ESP8266 son


bastante sencilla pero hay un par de puntos importantes a tener en cuenta
relacionados con la energa:

El ESP8266 requiere 3.3 V

No Se alimenta con 5 voltios

El ESP8266 debe comunicarse a travs de serie a 3,3 V y no tiene entradas


tolerantes 5V, por lo que necesita conversin de nivel para comunicarse
con un microcontrolador de 5V como la mayora de Arduinos usan.
Conexionado del mdulo con el Arduino uno.
Como se mencionaba antes el mdulo wi-fi no soporta voltajes superiores a 3.3
Volts, por ende se debe alimentar con el voltaje correspondiente.

A continuacin un diagrama simple de su conexionado:


CONFIGURACION MODULO WI-FI

Con las conexiones de hardware en lugar usted puede comunicarse con el mdulo
Wi-Fi a travs de una serie
Terminales.

Usando Arduino IDE Serial Monitor


Para comenzar la configuracin se debe tener instalado Arduino IDE y una vez
listo los pasos son:

1. Conecte el mdulo WiFi.


2. Seleccione el puerto serie correcto desde el men Herramientas> Serial Port.
3. Abra el Serial Monitor a travs del men Herramientas o el icono " lupa " en la
ventana del editor.
4. Para la versin de firmware por defecto ( 00160901 ), garantizar el retorno de
carro se selecciona en la lnea terminando men emergente en la parte inferior de
la pantalla de serie. (Para versiones posteriores que se debe establecer en
Tanto NL y CR . )
5. Para la versin de firmware por defecto, asegurar la velocidad de comunicacin
se establece en 115 200 baudios. (Para versiones posteriores o si se ha
modificado que tendrn que ser 9600 o similar.)

Comandos importantes

La mayor parte de los comandos AT, provocan una o ms lneas de respuesta,


que acaban con un sencillo OK, y por eso es una de las condiciones de salida.

Comando AT(AT +<x>=?) :Este comando se utiliza para consultar el comando


set o los procedimientos internos establecido los parmetros y sus rangos.

Comando de Query (AT + < x>)? : Este comando devuelve el valor actual del
parmetro.

Conjunto de comandos AT + < x> = < ...> : Este comando se utiliza para
establecer el valor de los parmetros definidos por el usuario.
Ejecutar AT + < x> Parmetros variables utilizadas para llevar a cabo en virtud
de procedimientos de control interno del mdulo de comando Nmero de
funciones inmutables.
AT + RST Reinicio Del mdulo.
Respuesta OK
AT + CWMODE Selecciona el modo de aplicacin WIFI.
AT + CWJAP Accede al AP.
AT + CWLAP Listas Disponibles Actualmente AP.
AT + CWQAP Salida de la conexin con el AP.
AT + CWSAP AP Modo configuracin parmetros.
AT + CIFSR Toma la direccin IP local.
AT + CIPSTATUS Obtiene el estado de la conexin.
AT + CIPSTART Establece un tipo de conexin tcp o udp segn el nmero de
puertos registrados.
AT + CIPSEND Envo de dato.
AT + CIPCLOSE Cierra o finaliza TCP o UDP.
AT + CIPMUX Inicia mltiples conexiones.
AT + CIPSERVER configurado como servidor.
MOTOR PASO A PASO UNIPOLAR:
El motor unipolar normalmente dispone de 5 o 6 cables dependiendo si el comn
est unido internamente o no, para controlar este tipo de motores existen tres
mtodos con sus correspondientes secuencias de encendido de bobinas, el
comn ir conectado a +Vcc o masa segn el circuito de control usado y luego tan
solo tendremos que alimentar la bobina correcta para que avance o retroceda el
motor segn avancemos o retrocedamos en la secuencia.

Giro Paso completo

Giro Medio paso


Para controlar un motor paso a paso unipolar deberemos alimentar el comn del
motor con Vcc y conmutaremos con masa en los cables del devanado
correspondiente con lo que haremos pasar la corriente por la bobina del motor
adecuada y esta generar un campo electromagntico que atraer el polo
magnetizado del rotor y el eje del mismo girar.

Para hacer esto podemos usar transistores montados en configuracin Darlington


o usar un circuito integrado como el ULN2003 que ya los lleva integrados en su
interior aunque la corriente que aguanta este integrado es baja y si queremos
controlar motores mas potentes deberemos montar nosotros mismos el circuito de
control a base de transistores de potencia.

El esquema de uso del ULN2003 para un motor unipolar es el siguiente:


ESPECIFICACIONES MOTOR UNIPOLAR

- Valoracin Actual 0.19 A

-Profundidad 21.7mm

- Holding Torque 20mNm

- Nmero de pares de polos 2

-Nmero de alambres 6

-La resistencia por fase 66

-Dimetro del eje 2mm

-Longitud del eje 7.8mm

- ngulo Paso 7,5

-Stepper Motor Tipo Imn Permanente

-Tensin nominal 12,7 V CC

-Arreglo Winding Unipolar


Programacin en lenguaje C (PIC16F877A)
#INCLUDE <16F877A.H>

#FUSES XT,NOWDT

#USE DELAY (CLOCK=4000000)

#BYTE TRISB=0X86

#BYTE PORTA=0X05

#BYTE TRISD=0X88

INT X=0;

INT Y=0;

VOID MAIN(){

INICIO:

CHAR I=6; // CANTIDAD DE NUMEROS QUE TOMARA EL DISPLAY

INT DISPLAY[7]={0XC0,0XF9,0XA4,0XB0,0x99,0x92,0x83}; // NUMEROS QUE TOMARA EL


DISPLAY

SET_TRIS_D(0X00);

OUTPUT_LOW(PIN_B0); //INICIALIZACION DEL MOTOR 1

OUTPUT_LOW(PIN_B1);

OUTPUT_LOW(PIN_B2);

OUTPUT_LOW(PIN_B3);

OUTPUT_LOW(PIN_B4); //INICIALIZACION DEL MOTOR 2

OUTPUT_LOW(PIN_B5);

OUTPUT_LOW(PIN_B6);

OUTPUT_LOW(PIN_B7);

Y=0;

X=0;
OUTPUT_HIGH (PIN_C6);

OUTPUT_LOW (PIN_C5);

OUTPUT_HIGH(PIN_C4);

OUTPUT_LOW(PIN_C3);

WHILE(TRUE){ //CICLO

OUTPUT_D(DISPLAY[I]);

IF(INPUT(PIN_A0)==1 && i>0 && X!=1)

{DELAY_MS(30);

OUTPUT_HIGH (PIN_C5);

OUTPUT_LOW (PIN_C6);

OUTPUT_LOW(PIN_B0); //ABRE BARRERA ENTRADA

OUTPUT_HIGH(PIN_B1);

OUTPUT_LOW(PIN_B2);

OUTPUT_HIGH(PIN_B3);

DELAY_MS(50);

OUTPUT_LOW(PIN_B0);

OUTPUT_HIGH(PIN_B1);

OUTPUT_HIGH(PIN_B2);

OUTPUT_LOW(PIN_B3);

DELAY_MS(50);
OUTPUT_HIGH(PIN_B0);

OUTPUT_LOW(PIN_B1);

OUTPUT_HIGH(PIN_B2);

OUTPUT_LOW(PIN_B3);

DELAY_MS(50);

OUTPUT_HIGH(PIN_B0);

OUTPUT_LOW(PIN_B1);

OUTPUT_LOW(PIN_B2);

OUTPUT_HIGH(PIN_B3);

DELAY_MS(50);

OUTPUT_LOW(PIN_B0);

OUTPUT_HIGH(PIN_B1);

OUTPUT_LOW(PIN_B2);

OUTPUT_HIGH(PIN_B3);

DELAY_MS(50);

OUTPUT_LOW(PIN_B0);

OUTPUT_HIGH(PIN_B1);

OUTPUT_HIGH(PIN_B2);

OUTPUT_LOW(PIN_B3);

DELAY_MS(50);

OUTPUT_HIGH(PIN_B0);

OUTPUT_LOW(PIN_B1);
OUTPUT_HIGH(PIN_B2);

OUTPUT_LOW(PIN_B3);

DELAY_MS(50);

OUTPUT_HIGH(PIN_B0);

OUTPUT_LOW(PIN_B1);

OUTPUT_LOW(PIN_B2);

OUTPUT_HIGH(PIN_B3);

DELAY_MS(50);

X=X+1;

WHILE(INPUT(PIN_A0)==1);

IF(INPUT(PIN_A1)==1 && i>0 && X!=0) // CIERRA BARRERA ENTRADA RESTA CUPOS

{DELAY_MS(30);

OUTPUT_LOW (PIN_C5);

OUTPUT_HIGH (PIN_C6);

OUTPUT_HIGH(PIN_B0);

OUTPUT_LOW(PIN_B1);

OUTPUT_LOW(PIN_B2);

OUTPUT_HIGH(PIN_B3);
DELAY_MS(50);

OUTPUT_HIGH(PIN_B0);

OUTPUT_LOW(PIN_B1);

OUTPUT_HIGH(PIN_B2);

OUTPUT_LOW(PIN_B3);

DELAY_MS(50);

OUTPUT_LOW(PIN_B0);

OUTPUT_HIGH(PIN_B1);

OUTPUT_HIGH(PIN_B2);

OUTPUT_LOW(PIN_B3);

DELAY_MS(50);

OUTPUT_LOW(PIN_B0);

OUTPUT_HIGH(PIN_B1);

OUTPUT_LOW(PIN_B2);

OUTPUT_HIGH(PIN_B3);

DELAY_MS(50);

OUTPUT_HIGH(PIN_B0);

OUTPUT_LOW(PIN_B1);

OUTPUT_LOW(PIN_B2);

OUTPUT_HIGH(PIN_B3);

DELAY_MS(50);

OUTPUT_HIGH(PIN_B0);

OUTPUT_LOW(PIN_B1);
OUTPUT_HIGH(PIN_B2);

OUTPUT_LOW(PIN_B3);

DELAY_MS(50);

OUTPUT_LOW(PIN_B0);

OUTPUT_HIGH(PIN_B1);

OUTPUT_HIGH(PIN_B2);

OUTPUT_LOW(PIN_B3);

DELAY_MS(50);

OUTPUT_LOW(PIN_B0);

OUTPUT_HIGH(PIN_B1);

OUTPUT_LOW(PIN_B2);

OUTPUT_HIGH(PIN_B3);

DELAY_MS(50);

X=X-1;

OUTPUT_TOGGLE(I--);

WHILE(INPUT(PIN_A2)==1);

}
OUTPUT_D(DISPLAY[I]);

IF(INPUT(PIN_A2)==1 && i!=6 && Y!=1)

{DELAY_MS(30);

OUTPUT_LOW(PIN_C4);

OUTPUT_HIGH(PIN_C3);

OUTPUT_LOW(PIN_B4); //ABRE BARRERA SALIDA

OUTPUT_HIGH(PIN_B5);

OUTPUT_LOW(PIN_B6);

OUTPUT_HIGH(PIN_B7);

DELAY_MS(50);

OUTPUT_LOW(PIN_B4);

OUTPUT_HIGH(PIN_B5);

OUTPUT_HIGH(PIN_B6);

OUTPUT_LOW(PIN_B7);

DELAY_MS(50);

OUTPUT_HIGH(PIN_B4);

OUTPUT_LOW(PIN_B5);

OUTPUT_HIGH(PIN_B6);

OUTPUT_LOW(PIN_B7);

DELAY_MS(50);
OUTPUT_HIGH(PIN_B4);

OUTPUT_LOW(PIN_B5);

OUTPUT_LOW(PIN_B6);

OUTPUT_HIGH(PIN_B7);

DELAY_MS(50);

OUTPUT_LOW(PIN_B4);

OUTPUT_HIGH(PIN_B5);

OUTPUT_LOW(PIN_B6);

OUTPUT_HIGH(PIN_B7);

DELAY_MS(50);

OUTPUT_LOW(PIN_B4);

OUTPUT_HIGH(PIN_B5);

OUTPUT_HIGH(PIN_B6);

OUTPUT_LOW(PIN_B7);

DELAY_MS(50);

OUTPUT_HIGH(PIN_B4);

OUTPUT_LOW(PIN_B5);

OUTPUT_HIGH(PIN_B6);

OUTPUT_LOW(PIN_B7);

DELAY_MS(50);
OUTPUT_HIGH(PIN_B4);

OUTPUT_LOW(PIN_B5);

OUTPUT_LOW(PIN_B6);

OUTPUT_HIGH(PIN_B7);

DELAY_MS(50);

Y=Y+1;

WHILE(INPUT(PIN_A2)==1);

IF(INPUT(PIN_A3)==1 && i!=6 && Y!=0) // CIERRA BARRERA SUMA CUPOS

{DELAY_MS(30);

OUTPUT_HIGH(PIN_C4);

OUTPUT_LOW(PIN_C3);

OUTPUT_HIGH(PIN_B4);

OUTPUT_LOW(PIN_B5);

OUTPUT_LOW(PIN_B6);

OUTPUT_HIGH(PIN_B7);

DELAY_MS(50);
OUTPUT_HIGH(PIN_B4);

OUTPUT_LOW(PIN_B5);

OUTPUT_HIGH(PIN_B6);

OUTPUT_LOW(PIN_B7);

DELAY_MS(50);

OUTPUT_LOW(PIN_B4);

OUTPUT_HIGH(PIN_B5);

OUTPUT_HIGH(PIN_B6);

OUTPUT_LOW(PIN_B7);

DELAY_MS(50);

OUTPUT_LOW(PIN_B4);

OUTPUT_HIGH(PIN_B5);

OUTPUT_LOW(PIN_B6);

OUTPUT_HIGH(PIN_B7);

DELAY_MS(50);

OUTPUT_HIGH(PIN_B4);

OUTPUT_LOW(PIN_B5);

OUTPUT_LOW(PIN_B6);

OUTPUT_HIGH(PIN_B7);

DELAY_MS(50);
OUTPUT_HIGH(PIN_B4);

OUTPUT_LOW(PIN_B5);

OUTPUT_HIGH(PIN_B6);

OUTPUT_LOW(PIN_B7);

DELAY_MS(50);

OUTPUT_LOW(PIN_B4);

OUTPUT_HIGH(PIN_B5);

OUTPUT_HIGH(PIN_B6);

OUTPUT_LOW(PIN_B7);

DELAY_MS(50);

OUTPUT_LOW(PIN_B4);

OUTPUT_HIGH(PIN_B5);

OUTPUT_LOW(PIN_B6);

OUTPUT_HIGH(PIN_B7);

DELAY_MS(50);

Y=Y-1;

OUTPUT_TOGGLE(I++);

WHILE(INPUT(PIN_A3)==1);

}
PROGRAMA ARDUINO UNO
CONCLUSIN
A medida que logramos comunicacin con los mdulos inalmbricos, se nos
facilit la realizacin de las tareas programadas con el Arduino uno, que era el que
se encarga de transmitir las acciones de abrir y cerrar la barrera del
estacionamiento segn la instruccin del usuario, ocupando pulsadores que
simulan ser sensores , y de esta forma se enva una seal a travs de un control
inalmbrico (wifi) ya sea a un equipo mvil y para luego ser captado por el modulo
receptor, cuya misin era darle aviso al pic16f877a de cumplir dichas instrucciones
ya programadas(entrada y salida de vehiculos). Gracias a esto se permita el
ingreso de un automvil al estacionamiento y a su vez en la parte posterior la
salida de este, con el mismo funcionamiento que en el de entrada. La etapa de
barreras se mantuvo la idea de ocupar motores paso a paso unipolares, junto con
su respectivo driver unl2803 y el pic 16f877a donde controla las acciones de
subir y bajar la barrera.