Está en la página 1de 24

UNIVERSIDAD DE LOS ANDES

FACULTAD DE INGENIERIA
ESCUELA DE INGENIERIA ELECTRICA
DEPARTAMENTO DE ELECTRONICA Y COMUNICACIONES
LABORATORIO DE ELECTRONICA III

Informe
Proyecto Planta Llenadora de Botellas

Integrantes:
Walter Arguello C.I.: 19279708
William Castillo C.I.:20435208

Mrida, 25 de junio del 2014.

Objetivos
Objetivo general: Construccin de una planta llenadora de botellas con el uso de un microprocesador.
Objetivos especficos:
Controlar el proceso de una planta mediante un microcontrolador (PIC) y as lograr una
automatizacin.
Aprender la herramienta de programacin para desarrollar proyectos que requieran su uso.
Alcances: Lograr el correcto funcionamiento de la planta, yendo desde el inicio cuando se detecta una
botella a la entrada, hasta el final una vez que se ha llenado y ha salido de la planta. Creando un
proceso verstil que permita realizar varias funciones a la vez sin la necesidad de hacerlo por vueltas
(una vez que la botella ha salido de la planta), es decir, que mientras una botella vaya saliendo de la
planta otra se vaya llenando o yendo al punto de llenado.

Diagrama de Bloques

Sensor 1
Detecta Botella

Sensor 2
Legada de botella al
punto de llenado

Microcontrolador
(PIC)
Toma de
decisiones

Sensor 3
Botella Llena

Descripcin del proyecto

Ejecucin de Acciones:
ActivarDesactivar Motor1
ActivarDesactivar Motor2
ActivarDesactivar Bomba

El proyecto se puede describir en las siguientes etapas:


Deteccin de botella.
Llegada de botella al punto de llenado.
Llenado de botella.
ActivacinDesactivacin Motor1.
ActivacinDesactivacin Motor2.
Activacin/Desactivacin de la Bomba de llenado.
Toma de decisiones mediante el microcontrolador (PIC). Adems de la programacin de la
pantalla LCD

Deteccin de botella: En el punto inicial de la maqueta, se encuentra un sensor (Sensor 1) el


cual detecta si hay o no en ese punto una botella para iniciar el proceso y llevar la botella al
punto de llenado.
Para llevar a cabo esta etapa se procedi a realizar una configuracin en la cual se utiliz como
sensor, un sensor QRD1114 como el que se muestra en la siguiente figura:

Figura N1. Sensor infrarrojo QRD1114.


Este sensor (QRD1114) es un sensor infrarrojo, que internamente tiene un diodo emisor
infrarrojo y un fototransistor receptor. Con este sensor realizamos la siguiente conexin:

Figura N2. Configuracin del sensor QRD1114.


De la figura anterior se utiliz la conexin B) que nos permite ver la salida en el colector, la
cual ser un nivel lgico alto(1 o 5V) cuando el sensor refleje luz y un nivel lgico bajo(0 o 0,4V)
cuando no se refleje luz. En esta configuracin la alimentacin Vcc=5V donde los valores que se
utilizaron para la resistencia del fototransistor RT y la del diodo RD, fueron obtenidos a travs de los
valores de la datasheet (Hoja de datos del QRD1114). Esos valores son los siguientes:
Vcc=5V (Vcc es la alimentacin)
If=20mA ( If es la corriente que va del nodo al ctodo en el diodo emisor).
Vf=0.5V (Vf es la tensin que tiene que estar presente en el diodo para que funcione).
Realizando un recorrido se obtiene:
-5V + If*RD +Vf = 0
Despejando RD, obtenemos que:
RD = (5 Vf)/If
RD = (5 - 0.5)V/20mA
RD = 225
Cuando el sensor infrarrojo refleje luz, el voltaje que aparece en la salida es Vsal = 5V.
Cuando el sensor no refleje luz, la tensin ser Vsal = 0,4V. Por lo tanto para calcular RT se procedi
de la siguiente manera:
Ic < 1mA (Ic es la corriente que circula por el colector)
Vce = Vsal = 0.4V
Realizando los siguientes clculos obtenemos que:
(Vcc - 0,4V)/RT < 1mA
RT > (5 0,4)V/1mA
RT > 4600

Despus de haber estudiado el sensor QRD1114, se proceder a especificar que la salida del
sensor QRD1114 ir conectada a la entrada positiva (+) de un comparador LM393. En este comparador
la entrada negativa ira a una conexin de resistencias para obtener una diferencia de potencial, tal como
se muestra en la siguiente figura:

R1
RV1

10k

U1:A

80%

3
1
1k

LMV393M

53%

RV2

1k

Figura N3. Esquema de conexin del sensor.


En la figura anterior el sensor QRD1114 esta representado por el primer potencimetro RV1 (Ya
que no se encontr este elemento en Proteus) y con el mismo podemos representar un cambio de
potencial cuando se detecta o no una botella, el mismo va conectado hacia la entrada positiva del
comparador LM393, por otra parte para la entrada negativa del comparador va conectado un
potencimetro (RV2) que representa dos resistencias (R1 y R2) en las cuales habr una cada de
tensin.
Cuando el sensor refleja luz, en la entrada del comparador ocurrir lo siguiente V +> V- para que la
salida del comparador sea un alto (5V). Cuando no se refleja luz, la entrada positiva del comparador
ser V+ = 0.4V y ocurrir lo siguiente V- > V+ y la salida del comparador ser un bajo. Para que ocurra
esto se procede a calcular las resistencias R1 y R2 de la siguiente forma:
V- > V+
V- >0,4V
V = (Vcc*R2)/(R1+R2) > 0,4V
Si R1=R2, obtenemos:
5/2 >0,4V
2,5V > 0,4V

Donde se confirma que V- > V+, es decir podemos establecer el potencimetro en su nivel medio y
obtendremos el valor deseado.
La salida del comparador (Sensor1) ir conectada al Pin a0 del PIC (PIC 18F4450), el cual
dependiendo de su configuracin, que se explicar mas adelante, proceder a la toma de decisiones
para ejecutar las acciones respectivas que se ameriten (Activar el motor1 para trasladar la botella al
punto de llenado).
Por otra parte podemos justificar que para esta etapa del proyecto se emple un sensor infrarrojo
(QRD1114), ya que es un sensor que nos permite obtener en un mismo integrado tanto el emisor como
el receptor, siendo este un sensor til para distancias cercanas. Adems se utiliz un comparador
LM393 por consejo del profesor ya que este mismo ayudara a disminuir los errores de salida y as
enviar un valor exacto al microcontrolador.

Llegada de botella al punto de llenado: Para realizar esta etapa se realizo la misma
configuracin de la etapa anterior, se utiliza un sensor infrarrojo QRD1114, un comparador
LM393 y unos potencimetros. En esta parte el sensor (Sensor2) se utiliza para enviarle
informacin al PIC, conectando la salida al Pin a1, si efectivamente llego la botella al punto de
llenado o no. Si la botella llego al punto de llenado el microcontrolador realiza su accin
respectiva (Activar la bomba de llenado), por otra parte si no ha llegado al punto el mismo
revisa que fue lo que paso o que esta ocasionando el error o el retraso.

Llenado de Botella: Una vez que la botella ha llegado al punto de llenado un sensor (Sensor2)
enva la informacin al PIC, el cual activar la bomba de llenado (mediante el pin e0) y
comenzar a llenarse la botella. Cuando la botella se llene al limite, lo cual se conocer debido a
la ubicacin de otro sensor (Sensor3), el cual presenta la misma configuracin de los sensores
anteriores, el mismo enviara la informacin al PIC, especficamente a la entrada del Pin e1,
ocurrido esto el microcontrolador realiza la accin respectiva, desactivar la bomba de llenado y
activar el motor2 para sacar la botella.

Activacin/Desactivacin Motor1: Como se explico anteriormente el sensor1, es el que enva


la informacin al microcontrolador si se detecta botella o no al inicio. Si se detecta una botella
el PIC proceder a activar el motor1, el cual es un motor paso a paso unipolar, este motor
comenzar a trasladar la botella al punto de llenado mediante una cremallera. Al iniciar este
proceso el motor1 engranado con la cremallera me da paso a un switch de doble paso (Switch1)
el cual indica que se ha iniciado el proceso de llevar la botella al punto de llenado, enviando la
informacin al PIC por el Pin a2, una vez que la botella a llegado al punto de llenado la
cremallera activa el otro paso del switch1, enviando la informacin al Pic por el pin a3, y el
microcontrolador activa en reversa el motor1 para ir al punto de inicio a buscar otra botella.
No obstante se puede decir que dependiendo de la informacin que enve el sensor1 y el switch1
al microcontrolador este activar o no el motor1. En la siguiente figura se muestra la conexin
del Switch1 al PIC.
Para entender el funcionamiento del switch1 se presenta como anexo una imagen que representa
el modelo de la maqueta (El anexo se encuentra al final del informe).

U1

Switch1
Findecarrera ida
Findecarrera vuelta

2
3
4
5
6
7
14
13

SW1
SW-SPST

33
34
35
36
37
38
39
40

SW2
SW-SPST

18

RA0/AN0
RC0/T1OSO/T1CKI
RA1/AN1
RC1/T1OSI/CCP2/UOE
RA2/AN2/VREF-/CVREF
RC2/CCP1/P1A
RA3/AN3/VREF+
RC4/D-/VM
RA4/T0CKI/C1OUT/RCV
RC5/D+/VP
RA5/AN4/SS/LVDIN/C2OUT
RC6/TX/CK
RA6/OSC2/CLKO
RC7/RX/DT/SDO
OSC1/CLKI
RB0/AN12/INT0/FLT0/SDI/SDA
RB1/AN10/INT1/SCK/SCL
RB2/AN8/INT2/VMO
RB3/AN9/CCP2/VPO
RB4/AN11/KBI0/CSSPP
RB5/KBI1/PGM
RB6/KBI2/PGC
RB7/KBI3/PGD

RD0/SPP0
RD1/SPP1
RD2/SPP2
RD3/SPP3
RD4/SPP4
RD5/SPP5/P1B
RD6/SPP6/P1C
RD7/SPP7/P1D
RE0/AN5/CK1SPP
RE1/AN6/CK2SPP
RE2/AN7/OESPP
RE3/MCLR/VPP

VUSB

15
16
17
23
24
25
26
19
20
21
22
27
28
29
30
8
9
10
1

PIC18F4550

Figura N 4. Esquema de conexin del Switch1.


Por otra parte ya conocido el funcionamiento lgico que activa o desactiva el motor1, se puede
proceder a explicar como funciona el motor paso a paso, este motor es un motor unipolar, el
cual se activar mediante el PIC18F4550, la salida del microcontrolador que activa el motor
pasa a un integrado ULN2803, el mismo acta como un controlador de motores, bsicamente
funciona para elevar la corriente de salida del PIC y as poder activar el motor1, tal como se
muestra en la siguiente conexin:

U2
2
3
4
5
6
7
14
13
33
34
35
36
37
38
39
40

18

RA0/AN0
RC0/T1OSO/T1CKI
RA1/AN1
RC1/T1OSI/CCP2/UOE
RA2/AN2/VREF-/CVREF
RC2/CCP1/P1A
RA3/AN3/VREF+
RC4/D-/VM
RA4/T0CKI/C1OUT/RCV
RC5/D+/VP
RA5/AN4/SS/LVDIN/C2OUT
RC6/TX/CK
RA6/OSC2/CLKO
RC7/RX/DT/SDO
OSC1/CLKI
RB0/AN12/INT0/FLT0/SDI/SDA
RB1/AN10/INT1/SCK/SCL
RB2/AN8/INT2/VMO
RB3/AN9/CCP2/VPO
RB4/AN11/KBI0/CSSPP
RB5/KBI1/PGM
RB6/KBI2/PGC
RB7/KBI3/PGD

VUSB

RD0/SPP0
RD1/SPP1
RD2/SPP2
RD3/SPP3
RD4/SPP4
RD5/SPP5/P1B
RD6/SPP6/P1C
RD7/SPP7/P1D
RE0/AN5/CK1SPP
RE1/AN6/CK2SPP
RE2/AN7/OESPP
RE3/MCLR/VPP

15
16
17
23
24
25
26
19
20
21
22
27
28
29
30
8
9
10
1

Motores

U3
1
2
3
4
5
6
7
8

1B
2B
3B
4B
5B
6B
7B
8B

COM
1C
2C
3C
4C
5C
6C
7C
8C

10
18
17
16
15
14
13
12
11

+88.8

Motor1

ULN2803

PIC18F4550

Figura N 5. Esquema de Conexin de los motores.

+88.8

Motor2

Cabe destacar que el motor se activar (Dar un paso) cuando entren en contactos dos de sus
bobinas, como se puede ver en la siguiente tabla:
ABCD
0
0000
1
0001
2
0010
3
0011
4
0100
5
0101
6
0110
7
0111
8
1000
9
1001
A
1010
B
1011
C
1100
D
1101
E
1110
F
1111
Tabla N1. Tabla de combinacin de bobinas del motor.
Como se muestra en la tabla anterior, siendo las bobinas del motor ABCD, los lugares donde
entran en contacto dos de ellas son los valores de 3,6,9 y C, estas combinaciones se utilizarn
para la programacin respectiva de los mismos en el PIC, la cual se explicar ms adelante.

Activacin/Desactivacin Motor2: Bsicamente el motor2 funciona de la misma forma lgica


que el motor1. Para la activacin de este motor, depende de la condicin en que se encuentre el
Sensor3, el cual es el que indica si la botella est llena o no, si la botella est llena el PIC
proceder a activar el motor2 trasladando la botella hacia el final. Al igual que ocurre con el
motor1, en esta etapa tambin hay un switch de doble paso (Switch2), cuando la botella est
llena, el motor2 engranado con una cremallera activara un paso del Switch2, el cual indica que
se ha iniciado el proceso enviando la informacin al PIC por la entrada a4. Despus que la
botella ha llegado al punto final, la cremallera har contacto con el switch y activar su otro
paso, enviando la informacin al pin a5 del microcontrolador, el cual activar en reversa el
motor2, para que vuelva al punto de llenado a traer otra botella. El esquema es el que se muestra
en la siguiente figura:

U1
2
3
4
5
6
7
14
13

Switch2
Findecarrera ida
Findecarrera vuelta

SW4

33
34
35
36
37
38
39
40

RA0/AN0
RC0/T1OSO/T1CKI
RA1/AN1
RC1/T1OSI/CCP2/UOE
RA2/AN2/VREF-/CVREF
RC2/CCP1/P1A
RA3/AN3/VREF+
RC4/D-/VM
RA4/T0CKI/C1OUT/RCV
RC5/D+/VP
RA5/AN4/SS/LVDIN/C2OUT
RC6/TX/CK
RA6/OSC2/CLKO
RC7/RX/DT/SDO
OSC1/CLKI
RB0/AN12/INT0/FLT0/SDI/SDA
RB1/AN10/INT1/SCK/SCL
RB2/AN8/INT2/VMO
RB3/AN9/CCP2/VPO
RB4/AN11/KBI0/CSSPP
RB5/KBI1/PGM
RB6/KBI2/PGC
RB7/KBI3/PGD

SW-SPST

SW5

SW-SPST

18

VUSB

RD0/SPP0
RD1/SPP1
RD2/SPP2
RD3/SPP3
RD4/SPP4
RD5/SPP5/P1B
RD6/SPP6/P1C
RD7/SPP7/P1D
RE0/AN5/CK1SPP
RE1/AN6/CK2SPP
RE2/AN7/OESPP
RE3/MCLR/VPP

15
16
17
23
24
25
26
19
20
21
22
27
28
29
30
8
9
10
1

PIC18F4550

Figura N6. Esquema de conexin del Switch2.

Activacin/Desactivacin de la bomba de llenado: Para activar la bomba de llenado, el


sensor2 enva la informacin al PIC reconociendo que efectivamente la botella est en el punto
de llenado, si ocurre esto el microcontrolador proceder a activar la bomba de llenado. Luego si
el sensor3 es un bajo, es decir detecta que la botella est vaca, la bomba seguir activa, una vez
que el sensor3 detecte que la botella se ha llenado completamente enva la informacin al PIC
mediante el pin e1, luego el microcontrolador desactivar la bomba (mediante el pin e0) y se
activar el motor2 trasladando la botella hacia la salida.

U1
2
3
4
5
6
7
14
13
33
34
35
36
37
38
39
40

18

RA0/AN0
RC0/T1OSO/T1CKI
RA1/AN1
RC1/T1OSI/CCP2/UOE
RA2/AN2/VREF-/CVREF
RC2/CCP1/P1A
RA3/AN3/VREF+
RC4/D-/VM
RA4/T0CKI/C1OUT/RCV
RC5/D+/VP
RA5/AN4/SS/LVDIN/C2OUT
RC6/TX/CK
RA6/OSC2/CLKO
RC7/RX/DT/SDO
OSC1/CLKI
RB0/AN12/INT0/FLT0/SDI/SDA
RB1/AN10/INT1/SCK/SCL
RB2/AN8/INT2/VMO
RB3/AN9/CCP2/VPO
RB4/AN11/KBI0/CSSPP
RB5/KBI1/PGM
RB6/KBI2/PGC
RB7/KBI3/PGD

RD0/SPP0
RD1/SPP1
RD2/SPP2
RD3/SPP3
RD4/SPP4
RD5/SPP5/P1B
RD6/SPP6/P1C
RD7/SPP7/P1D
RE0/AN5/CK1SPP
RE1/AN6/CK2SPP
RE2/AN7/OESPP
RE3/MCLR/VPP

VUSB

15
16
17
23
24
25
26
19
20
21
22
27
28
29
30
8
9
10
1

PIC18F4550

R1
200

RV1

10k

U2:A

R2

50%

RV2

D1
LED-GREEN

50%

1k

1
2

LMV393M
1k

Figura N7. Esquema de conexin del sensor3 y la bomba.

Toma de decisiones mediante el microcontrolador (PIC18F4550): Para esta etapa


bsicamente se trabaja con un PIC18F4550, el cual es un microcontrolador que se puede
programar para que cumpla con ciertas acciones especficas. Para realizar la programacin del
PIC se utiliz el compilador PIC C Compiler, el cual es un programa que trabaja en lenguaje
c. Al principio del programa se definen las condiciones en que se quiere que trabaje el PIC, se
incluye la librera del PIC a utilizar (#include <18f4550>), luego se establece la frecuencia a la
que se quiere que trabaje tomando en cuenta sus valores de datasheet, en nuestro caso se
estableci una frecuencia de trabajo de 20MHz. Para trabajar con la lcd primero se incluye la
librera con la que se va a trabajar (#include <lcd420.c>).
Luego con el consejo del profesor, se procedi a definir como variables (Banderas), los pines
del PIC que se iban a utilizar para la entrada de informacin, que fueran otorgando cada uno de
los sensores, como se explico anteriormente, quedando esa parte del algoritmo expresado de la
siguiente manera:
#define sensor_detecta_botella_1 input(PIN_a0)//detector de botella mueve motor m1
#define sensor_fincarrera_m1_ida input(PIN_a2) //fin carrera ida motor m1
#define sensor_fincarrera_m1_vuelta input(PIN_a3) //fin carrera vuelta motor m1
#define sensor2_botella2 input(PIN_a1)//detector de botella en el pto 2

#define sensor3_botella_llena input(PIN_e1)//detector de botella llena en el pto 2


#define sensor_fincarrera_m2_ida input(PIN_a4) //fin carrera ida motor m2
#define sensor_fincarrera_m2_vuelta input(PIN_a5) //fin carrera vuelta motor m2
Por otra parte, despus de haber definido estas variables se procedi a hacer la estructura
general del algoritmo, definiendo todo dentro de la funcin void main (), que representa el ncleo del
programa, es decir es la funcin principal del sistema. Despus de haber hecho esto se definieron
variables tipo int, tanto de 1,8 y 16 bits (int1, int8 y int16) dependiendo la cantidad de informacin
que requiera la variable. Adems se defini una variable tipo char, la cual se utiliza para establecer
variables de tipo carcter y servir para la programacin de la pantalla lcd, quedando establecido de la
siguiente manera:
int16 m1=0x03;
int16 m2=0x03;
int8 pausa=100;
int16 out=0x00;
int8 cont=0;
int1 motor1_habilitado=false;
int1 motor2_habilitado=false;
int1 motor1_adelante=false;
int1 motor2_adelante=false;
int1 bomba_on=false;
char linea1lcd[16];
int1 aux=false;
Como se puede ver, la primera variable int16 m1=0x03, quiere decir que se define como
variable m1 (motor 1) y se inicia en la posicin 0x03, se coloca la nomenclatura 0x, debido a que es un
valor hexadecimal, que representa el lugar o el primer paso que se quiere que inicie el motor 1. Del
mismo modo se estableci la variable para el motor 2 (m2).
Por otra parte tambin se define una variable como pausa y se inicializa en 100, dicha variable
se utilizara ms adelante, y servir para establecer el tiempo de retardo que necesitan los motores de
paso. Adems se define una variable out y se inicializa en 0x00 la cual se utilizara ms adelante para la
configuracin de los motores. Tambin se establece una variable cont (contador) y se inicializa en cero.
Las variables tipo int1 solamente pueden tomar dos valores 0 o 1, en este caso false o true, en
este punto se inician todas en false.
La variable tipo char se define con el nombre de linea1lcd y puede ocupar un valor mximo de
16bits.
La variable aux, se define como false, esta fue una variable que se creo, para ayudar a evitar
el error que se genero cuando fue montado el circuito en la maqueta.
Es importante destacar que una vez establecidas estas variables dentro de la funcin void
main se conocen como variables locales.
Despus se define el bloque de sentencias, todas dentro de un while (true), que es un bucle de
repeticin infinita, el cual me permite asegurar que el PIC siempre va a estar chequeando cada una de
las condiciones que se encuentran dentro de este bucle. Pero antes de establecer el while (true) se
inicializa la lcd (lcd_init())
Las sentencias que se encontraran dentro de esta estructura son todas en su mayora del tipo
If, la cual evala si cumple o no con su condicin lgica establecida, para realizar su respectivo

bloque de sentencias o saltar a la siguiente funcin.


La primera sentencia de tipo If que encontramos es la siguiente:
if((sensor_detecta_botella_1==0)&&(sensor_fincarrera_m1_vuelta==1))
{
motor1_habilitado=true;
motor1_adelante=true;
}
Como se puede ver en la sentencia anterior, se chequea si en ese momento en el sistema (La
Planta) se cumple que el sensor1 (sensor_detecta_botella_1) detecta botella, es decir a la entrada del
PIC se tendr un nivel lgico bajo y adems se debe cumplir que el switch1
(sensor_fincarrera_m1_vuelta) debe estar en un alto es decir se le ha dado el primer paso, de los dos
que posee el mismo. Si se cumplen ambas condiciones el PIC realizara las siguientes funciones:
habilitara al motor1, establecindolo como verdadero y tambin establecer como verdadera la variable
del motor1_adelante, lo cual har que el motor1 vaya hacia a delante.

La segunda sentencia que se tiene, es la siguiente:

if((sensor_detecta_botella_1==1)&&(sensor_fincarrera_m2_vuelta==1)&&(cont>50)&&(senso
r2_botella2==1)&&aux==false)
{
motor1_habilitado=true;
motor1_adelante=true;
}
En esta sentencia se deben cumplir cuatro condiciones, que el sensor1 sea un alto (No haya
botella), que el switch2 (sensor_fincarrera_m2_vuelta) sea un alto, este switch es el que se encuentra en
la segunda parte de la planta, adems la variable cont (contador) debe ser mayor a 50 y que el sensor2
(sensor2_botella2) sea igual a un alto, es decir que no haya botella en el punto de llenado. Si se
cumplen estas condiciones se ejecutan las siguientes funciones se habilitara el motor1 y la variable
motor1_adelante se establecer como verdadera y el motor1 ira hacia adelante. Por otra parte en esta
sentencia se establece la variable aux como false.

La tercera sentencia que se planteo es la siguiente:


if(sensor_fincarrera_m1_ida==1)
{
motor1_habilitado=true;
motor1_adelante=false;
aux=true;
}

En esta sentencia If se debe cumplir que el switch1 sea un alto, activado debido a su segundo
paso, es decir que la botella ha llegado al punto de llenado. Cumplindose esta condicin se ejecutan
las siguientes acciones: motor1 va a estar habilitado y se colocara en falso el motor1 hacia adelante,
provocando que el motor1 se regrese al punto de inicio. Adems se establece la variable aux como
verdadero, para que cuando se cumpla esta condicin, el programa no vuelva a entrar en la sentencia

anterior, es decir se inhabilite. Esto se realizo debido a los problemas que se presentaron al momento de
montar el circuito.

La cuarta sentencia que se planteo es la siguiente:


if((sensor3_botella_llena==0)&&(sensor2_botella2==0)&&(sensor_fincarrera_m2_vuelta==1))
{
motor2_habilitado=true;
motor2_adelante=true;
}

Para esta sentencia se deben cumplir tres condiciones, que la botella se haya llenado
(sensor3_botella_llena==0), que efectivamente la botella se encuentre en el punto de llenado
(sensor2_botella2==0) y que el switch2 este activado en uno de sus pasos
(sensor_fincarrera_m2_vuelta==1). Si se cumplen las tres condiciones lgicas el microcontrolador
ejecutara las siguientes acciones: habilitara al motor2 y la variable motor2_adelante ser igual a
verdadera, por lo que el motor2 comenzara a moverse hacia adelante.

La quinta sentencia, cumple la misma funcin que la tercera sentencia, pero haciendo referencia
al motor2
if(sensor_fincarrera_m2_ida==1)
{
motor2_habilitado=true;
motor2_adelante=false;
}

La sexta sentencia que presenta el algoritmo, es la siguiente:


if((cont==50)&&((sensor2_botella2==0)||(sensor_fincarrera_m2_vuelta==0)))
motor1_habilitado=false;

Como se puede observar esta sentencia de repeticin presenta tres condiciones lgicas, que el
contador sea igual a 50 y que se cumpla que la botella este en el punto de llenado o que el switch2 no
haya sido activado. Si se cumplen estas condiciones el PIC deshabilitar el motor1
(motor1_habilitado=false).

Para la sptima sentencia, se plante lo siguiente:


if((sensor_detecta_botella_1==1)&&(sensor_fincarrera_m1_vuelta==1))
motor1_habilitado=false;

Se deben cumplir con dos condiciones lgicas que el sensor1 no haya detectado botella y que el
switch1 este activado (sensor_fincarrera_m1_vuelta==1), si ocurre esto el PIC deshabilitara el motor1.

La octava sentencia, presenta la siguiente estructura:

if((sensor_fincarrera_m2_vuelta==1)&&(sensor3_botella_llena==1))
motor2_habilitado=false;
En esta sentencia se tienen que cumplir dos condiciones lgicas, el switch2 este activado en uno
de sus pasos (sensor_fincarrera_m2_vuelta==1) y que la botella todava no se haya llenado
completamente. Si se cumplen ambas condiciones se deshabilitara el motor2.

La novena sentencia, es la siguiente:

if(sensor_fincarrera_m1_vuelta==1)
{
cont=0;
aux=false;
}
En esta estructura, la condicin lgica que se debe cumplir es que el switch1 este activado en
uno de sus pasos (sensor_fincarrera_m1_vuelta==1), si se cumple esto el PIC establecer el contador
en cero (cont=0). Adems se vuelve a establecer la variable aux como false, ya que se podra cumplir
de nuevo la condicin lgica de la segunda sentencia.

La dcima sentencia presenta la siguiente estructura:


if((motor1_habilitado==true)&&(motor1_adelante==true))
cont++;

Aqu si se cumplen con las siguientes condiciones lgicas: el motor1 se encuentra habilitado y
el motor1 va hacia adelante, el contador sumara uno al valor que tena en ese momento (cont++), esto
se hace para que en cada vuelta que se produzca se le sume un uno al valor del contador y asi poder ir
llevando su conteo para cuando toque volver a activar el motor1, como se plante en las sentencias
anteriores.

La dcimo primera sentencia presenta la siguiente estructura:


if (sensor2_botella2==0 && sensor3_botella_llena==1)
{
output_high(PIN_e0);
bomba_on=true;
}
else
{
output_low(PIN_e0);
bomba_on=false;
}

Si se cumple que la botella est en el punto de llenado y se confirma que la botella no est llena,
se comenzar a llenar la misma (output_high(PIN_e0)), se activa la bomba de llenado, de lo contrario si
no se cumple con las condiciones lgicas no se activa la bomba (output_low(PIN_e0)).

Para programar la lcd se estableci el siguiente bloque de sentencias:

if (motor1_habilitado==true)
strcpy( linea1lcd, "M1 ON");
if (motor2_habilitado==true)
strcpy( linea1lcd, "M2 ON");
if (motor1_habilitado==true && motor2_habilitado==true)
strcpy( linea1lcd, "M1 & M2 ON");
if (bomba_on==true)
strcpy( linea1lcd, "BOMBA ON");
if (motor1_habilitado==true && bomba_on==true)
strcpy( linea1lcd, "M1 & BOMBA ON");
if (motor1_habilitado==false && bomba_on==false && motor2_habilitado==false)
strcpy( linea1lcd, "ESPERA BOTELLA");
printf(lcd_putc,"\f%s", linea1lcd);
En este bloque de sentencias, se puede observar que dependiendo de cada condicin lgica que
se cumpla, la funcin strcpy asignara un determinado valor a la variable linea1lcd (la cual es una
variable tipo carcter). Luego segn la condicin que se cumpla con la funcin printf, se manda a
imprimir dicho valor en la lcd, lo que indica la sentencia que se encuentra entre comillas ("\f%s")
es: la \f, indica que se borra lo que haba en pantalla y %s indica que la variable a imprimir es una
variable tipo carcter, en este caso lleva el nombre de linea1lcd.

La dcimo segunda sentencia, se plante de la siguiente manera:


if (motor1_habilitado==true)
{
if (motor1_adelante==true)
{
switch (m1)
{
case 0x03: m1=0x06;break;
case 0x06: m1=0x0c;break;
case 0x0c: m1=0x09;break;
case 0x09: m1=0x03;break;
}
out=m2*16;
out=out+m1;

output_d(out);
}
Aqu se plantearon dos estructuras If anidadas, la primera presenta la condicin que el
motor1 se encuentre activado y la segunda que el motor1 vaya hacia adelante, si se cumplen con ambas
condiciones el programa cae en una funcin switch, la cual bsicamente estudia la posicin en que se
encuentra el motor despus de cada paso y lo lleva al siguiente paso, provocando as el movimiento del
motor hacia adelante en este caso.

La dcimo tercer sentencia, presenta la siguiente estructura.


if (motor1_adelante==false)
{
switch (m1)
{
case 0x09: m1=0x0c;break;
case 0x0c: m1=0x06;break;
case 0x06: m1=0x03;break;
case 0x03: m1=0x09;break;
}
out=m2*16;
out=out+m1;
output_d(out);
}
Aqu se debe cumplir que el motor1 este habilitado para ir en reversa, si ocurre esto, el
programa cae en una funcin switch, llevando el motor posicin por posicin en reversa hasta el
punto de inicio.

La dcimo cuarta sentencia, tiene la misma estructura que la dcimo segunda, pero haciendo
referencia al motor2.
if (motor2_habilitado==true)
{
if (motor2_adelante==true)
{
switch (m2)
{
case 0x03: m2=0x06;break;
case 0x06: m2=0x0c;break;
case 0x0c: m2=0x09;break;
case 0x09: m2=0x03;break;
}
out=m2*16;
out=out+m1;
output_d(out);
}

La dcimo quinta sentencia, tiene la misma estructura que la dcimo tercer sentencia, pero esta
vez haciendo referencia al motor2.
if (motor2_adelante==false)
{
switch (m2)
{
case 0x09: m2=0x0c;break;
case 0x0c: m2=0x06;break;
case 0x06: m2=0x03;break;
case 0x03: m2=0x09;break;
}
out=m2*16;
out=out+m1;
output_d(out);
}
}
delay_ms(pausa);
}

Cabe destacar que al final del bloque de sentencias de esta estructura, se le proporciona un
tiempo de retardo al motor (delay_ms(pausa)) el cual sera de unos 100ms segn lo que se estableci
como variable al principio del algoritmo.

Listado de componentes:
Para la elaboracin de este proyecto se emplearon los siguientes elementos:
Un PIC18F4550.
3 sensores infrarrojos QRD1114.
2 comparadores LM393 ( Ya que cada integrado trae dos comparadores).
1 ULN2803.
2 Motores Paso a Paso Unipolares.
4 Potencimetros de 1k .
11 Resistencias de 10k .
1 Oscilador de cristal de 20MHz. 2 Capacitores de 22pF
2 Rsistencias de 220 .
1 Pantalla LCD 1602

Diagrama de Flujo

Inicio

Sensor1 detecta botella


y el switch1 est
activado
Si

No

Se activa el motor1 e
ira hacia adelante

Si la botella llego al
punto de llenado

Si

No

El motor1 estar
habilitado pero ira en
reversa

Cuando la botella est en


el punto de llenado y ya
se ha llenado
Si

No

El motor2 se habilitara e
Una
vez adelante
que la
ira
hacia
botella ha llegado al
final
Si
El motor2 estar habilitado
pero ira en reversa

No

Fin
Es importante mencionar que el diagrama de flujo anterior solamente muestra las funciones
principales del programa, no presenta las condiciones cuando en el proceso ocurren dos acciones al
mismo tiempo, por ejemplo que se est llenando una botella y en el inicio del sistema se detecte otra,
ya que eso distorsionara la esttica del diagrama de flujo y no permitiera entender rpidamente la
lgica de programacin.

Esquemtico

Figura N8. Esquemtico.

Conclusin
Se puede decir que el proyecto Planta llenadora de Botellas abarca todo lo referente al rea
de electrnica, ya que va desde la utilizacin simple de un comparador, hasta la programacin de un
microcontrolador. Este proyecto se realiz por etapas, desarrollando primeramente los sensores con su
respectiva configuracin, utilizando los sensores infrarrojos (QRD1114) y los comparadores (LM393),
obteniendo buenos resultados de dichas configuraciones. Por otra parte para la programacin del PIC se
utiliz el lenguaje c en un nivel bsico, esta herramienta es muy til ya que el PIC permite realizar
numerosas funciones para diferentes configuraciones circuitales, lo cual permite ahorrar tiempo,
espacio y dinero.
Con este proyecto se quera lograr la automatizacin de un sistema, que pudiera servir a una
planta (industria, fbrica, etc) para agilizar el proceso y disminuir los posibles errores. El objetivo
principal se logr, es decir se construy a escala una planta llenadora de botellas, funcionando en torno
a la toma de decisiones de un microcontrolador. No obstante se presentaron ciertos inconvenientes que
impidieron alcanzar en su totalidad los objetivos que se haban propuesto en el anteproyecto, uno de
estos fue que no se pudo realizar la bomba de llenado, que efectivamente permitiera llenar las botellas,
en su lugar se dej el led con el que se fue trabajando durante todo el semestre.

Por otra parte se puede presentar la idea, para continuacin del proyecto de montar el
circuito en baquelita, para hacer ms verstil y prctico el funcionamiento del mismo. Adems de
lograr implementar la bomba de llenado.

Bibliografa

http://electronicayrobotica.files.wordpress.com/2012/09/qrd1114.jpg
http://www.aquihayapuntes.com/indice-programacion-pic-en-c.html

Anexos
A continuacin se muestra un modelo escrito, del proyecto:

Figura N9. Modelo escrito de la maqueta.