Vous êtes sur la page 1sur 71

UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS

FACULTAD TECNOLÓGICA

Diseño de un sistema de control para


ascensores con análisis de sus
variables energéticas en la nube
utilizando Machine Learning.
TESIS DE GRADO EN INGENIERÍA EN CONTROL

Presentado por:
Andrés Camilo Torrez Martínez
Jonathan Fernando Amaya Benavides
1. Contenido

HOJA DE ACEPTACIÓN .................................................................................................................. 2


AGRADECIMIENTOS ...................................................................................................................... 3
RESUMEN ...................................................................................................................................... 4
OBJETIVOS..................................................................................................................................... 5
Generales .................................................................................................................................. 5
Específicos ................................................................................................................................. 5
MARCO TEÓRICO .......................................................................................................................... 6
Variador de frecuencia .............................................................................................................. 6
Sistema de ascensores .............................................................................................................. 9
Codesys.................................................................................................................................... 11
Lenguajes de programación .................................................................................................... 12
Protocolo de comunicación Modbus ...................................................................................... 15
Protocolo i2c ........................................................................................................................... 16
Protocolo MQTT ...................................................................................................................... 17
Raspberry Pi............................................................................................................................. 19
PSoC (Programmable System on Chip).................................................................................... 21
Machine Learning (Aprendizaje de máquina) ......................................................................... 21
DESARROLLO ............................................................................................................................... 23
Comunicación Control - Variador ............................................................................................ 23
Lógica de Control ..................................................................................................................... 28
Llamadas de Carro ............................................................................................................... 29
Llamadas de Piso ................................................................................................................. 34
Sistema de sensores para pisos .......................................................................................... 38
Lógica del ascensor ............................................................................................................. 39
Toma de datos ......................................................................................................................... 46
Comunicación MQTT ........................................................................................................... 48
Node-red y base de datos Cloudant de IBM ....................................................................... 50
Azure y Machine Learning ................................................................................................... 54
CONCLUSIONES ........................................................................................................................... 58
REFERENCIAS .............................................................................................................................. 60

Anexos……………………………………………………………………………………………………………………………….62

1
Hoja De Aceptación

Observaciones

_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________

____________________________
Ing. Eduardo Alberto Delgadillo

____________________________
Firma Jurado 1

____________________________
Firma Jurado 2

Bogota D.C.

2
Agradecimientos

Los autores expresan sus agradecimientos a todos nuestros familiares y amigos que
sirvieron como apoyo durante nuestro desarrollo profesional hasta este punto.
Al profesor Eduardo Alberto Delgadillo por sus conocimientos durante el desarrollo de
la carrera y del proyecto en cuestión.
A Variadores S.A. por permitirnos usar los recursos con los que se realizaron pruebas de
laboratorio.
A todos los docentes que a lo largo de la carrera brindaron su conocimiento y apoyo con
los que se logró dar desarrollo a este proyecto, y con los que se creció cada día de
manera profesional y personal.
A los compañeros y amigos que estuvieron durante estos años brindando su compañía
y su apoyo en cada una de las etapas que se llevaron a cabo en la Universidad.

3
2. Resumen

El presente documento pretende explicar el procedimiento realizado para llevar al cabo


el proyecto denominado “Diseño de un sistema de control para ascensores con análisis
de sus variables energéticas en la nube utilizando Machine Learning”, para esto se
cuenta con un marco teórico que pretende explicar brevemente el funcionamiento de
los elementos utilizados y una etapa de desarrollo en donde se explica cuál fue el
procedimiento realizado y como se construyó cada una de las etapas.

El prototipo resultante del proyecto permite llevar a cabo un control en un ascensor


haciendo uso de una Raspberry como plataforma para alojar la lógica y un variador
marca Yaskawa para manejar el motor que genera el movimiento en el sistema, para la
comunicación entre estos dos se usó el protocolo de comunicación Modbus RTU. Se
diseñó una pantalla que permite simular los llamados y salidas correspondientes a cada
etapa, los llamados reales se realizan con un microcontrolador PSoc el cual recibe las
señales como entradas digitales y las comunica a la Raspberry por medio del protocolo
I2C.
También se lleva registro en una base de datos en la nube la cual almacena los valores
de funcionamiento del variador para posteriormente poder realizar un análisis con esos
datos y determinar si se presenta algún problema de funcionamiento o en la Red en la
que se encuentra el equipo.

4
3. Objetivos

3.1 Generales.
Desarrollar un sistema lógico de control para ascensores, el cual almacene y permita un
monitoreo de variables del consumo energético principalmente voltaje y corriente en la
nube y haciendo uso de Machine Learning analizar el comportamiento de las mismas.

3.2 Específicos.

 Elaborar la lógica en un sistema de control para ascensores donde se cuente con


los parámetros básicos de control de movimiento, una puerta, iluminación,
además de las alarmas y seguridades necesarias para su correcto funcionamiento
para un ascensor de 5 pisos.
 Construir las tarjetas de control para los pisos y la cabina, las cuales se
comunicarán con la tarjeta principal por medio de algún protocolo de
comunicación.
 Generar una adquisición de datos entre el control y un variador para poder
manipular y monitorear el sistema del ascensor.
 Establecer una comunicación con el control a una nube de código abierto y de
allí mismo se pueda observar el comportamiento del sistema obteniendo datos
de consumo, alarmas y tiempos de trabajo.
 Utilizar algún método Machine Learning para el análisis de los datos obtenidos
en el cual se observe el comportamiento energético del sistema.

5
4. Marcó Teórico

4.1. Variador de frecuencia

El variador de velocidad es un dispositivo de conversión de energía eléctrica a mecánica


el cual envía una señal en frecuencia al motor la cual varía dependiendo de las
necesidades de la aplicación. En la industria la instalación de este tipo de equipos
permite tener un mayor control sobre el trabajo del motor y así mismo una mayor
seguridad en su funcionamiento.
Para este caso específico se trabaja con un variador de frecuencia, el cual está
compuesto por 3 etapas principales las cuales se describen a continuación:

- Rectificación: La primera etapa con la que cuenta el variador es la rectificación


de la señal AC de alimentación, esta consta de un puente rectificador trifásico de
onda completa el cual transforma la energía alterna en directa para las siguientes
etapas. Como se puede observar en la imagen la señal obtenida no se ha
suavizado, lo que ocurre en la siguiente etapa.

Fig. 1 Etapa de rectificación del variador [1]

- Bus DC: Consta de un conjunto de condensadores los cuales cumplen con dos
funciones dentro del variador, por un lado, suaviza el voltaje resultante de la
etapa de rectificación eliminando el rizado restante y por otro se encarga de dar
la energía necesaria para la salida del equipo. Con la implementación de esta
etapa se obtiene una señal DC más limpia que mejora el trabajo del variador en
sí.

6
Fig. 2 Etapa de bus DC en el variador de frecuencia [1]

- Etapa Inversora: Esta etapa está compuesta por una serie de módulos IGBT los
cuales toman el voltaje DC almacenado en los condensadores y aplicando una
modulación PWM construyen una señal que se asemeja a una AC en sus valores
de voltaje en el tiempo. La principal ventaja de manejar el voltaje en el motor
por este medio es la posibilidad de tener un mejor control sobre el torque y el
comportamiento del voltaje en los diferentes valores de frecuencia.
En la imagen siguiente se puede observar como es la salida real del variador teniendo
en cuenta que es una serie de pulsos de voltajes DC que en promedio forman una señal
con similitud a una AC.

Fig. 3 Ejemplo de señal de salida en variador de frecuencia. [2]

Los variadores con el tiempo han ganado confiabilidad gracias a los beneficios que
tienen frente a otros tipos de arranque como el directo, o los arrancadores suaves.
Principalmente al momento de romper inercia en donde las corrientes pueden elevarse
a valores mucho más altos de los nominales de trabajo, es donde se ven los beneficios
de sistemas de arranques con variador ya que permiten tener un control sobre el
funcionamiento que suaviza el trabajo. Las protecciones con las que cuenta cada equipo

7
permiten que la vida útil tanto del mismo como del motor sean mayores en comparación
con un funcionamiento no controlado.

Para este proyecto en específico se implementó un Variador marca Yaskawa, esta es una
compañía que se ha enfocado en la comercialización de equipos para el control de
movimiento desde el año 1915, tiene presencia alrededor de todo el mundo.
En el rango de productos con los que cuenta la empresa se encuentran variadores
especializados en ciertas aplicaciones comunes como lo son el modelo A1000 para uso
general, IQPump 1000 para sistemas de bombeo, Z1000 para sistemas de aire y el usado
en este proyecto L1000E para el control de máquinas en ascensores. También existe el
modelo L1000A el cual tiene varias similitudes con el mencionado anteriormente, pero
este se usa en la región de Norte América.

Fig. 4 Variador Yaskawa Modelo L1000E. [3]

El modelo L1000E presenta ciertas configuraciones que para el caso específico de los
ascensores se hacen necesarias y facilitan su implementación, como lo son el manejo
del freno, parámetros de nivelación y confort que permiten configurar el sistema para
que trabaje dentro de los mejores estándares.
El variador L1000E cuenta con las siguientes características que permiten un control y
monitoreo sobre el mismo implementando varios protocolos de comunicación, o
contactos secos de marcha y parada:
- 8 entradas digitales multi-función
- 2 entradas análogas multi-función
- 3 salidas digitales relevadas multi función
- 2 salidas digitales optoacopladas multi función

8
- 1 rele de fallas
- 2 entradas de seguridad
- Comunicación integrada Modbus RTU RS-422, RS-485

En el caso específico de este proyecto la principal característica usada es la


comunicación Modbus RTU ya que con esta se monitorea y controla el variador de
acuerdo a las órdenes que el control le envía, el cual en este caso es la Raspberry Pi
usada como PLC. [3]
4.2. Sistema de ascensores

Un sistema de ascensor está compuesto por una serie de componentes tanto mecánicos
como eléctricos, la parte mecánica la cual consta principalmente de una polea acoplada
al eje del motor, la cabina y el contrapeso como se observa en la siguiente imagen.

Fig. 5 Esquema básico de un ascensor. [4]

La cabina es en la cual se transporta la carga a manejar usualmente siendo personas,


dentro de la cabina se encuentra la botonera que permite realizar los llamados a piso
que se necesiten, tienen un sistema de iluminación y sensores de seguridad que serán
tratados más adelante. El contrapeso es una parte importante del sistema ya que este

9
es el que facilita el trabajo del motor cuando debe levantar la carga del ascensor, este
debe ser calculado de acuerdo a la carga máxima que soporta el sistema para que el
motor trabaje con los mismos valores tanto en subida como en bajada.
Otro componente importante que cuenta tanto en la parte mecánica como eléctrica es
el motor, este es el que específicamente se encarga de convertir la energía eléctrica en
mecánica para generar el movimiento del ascensor. Para el manejo de ascensores
actualmente se suelen utilizar dos tipos de motores los cuales serán explicados
brevemente:
- Motor De Inducción
EL motor de inducción es uno de los más usados actualmente en diferentes aplicaciones,
este se encuentra compuesto por 3 partes principales que son el rotor, el estator y la
carcasa. Tanto el rotor como el estator están conectados a unos bobinados que son los
encargados de transformar la energía eléctrica en mecánica. Cuando se aplica una
corriente sobre el bobinado del estator se genera un campo electromagnético que
induce una corriente sobre el bobinado del rotor, de esta manera es que estos campos
son los que llevan al motor a que tenga un movimiento.

Fig. 6 Componentes Básicos de un Motor De Inducción. [5]

- Maquina Gearless

Estas máquinas son motores que cuentan con unos imanes coloques en posiciones
predefinidas para su funcionamiento, las ventajas que presenta principalmente son que
la relación entre el consumo de corriente y la potencia generada es mejor que en un
motor de inducción por lo que el tamaño de los mismos también se ve disminuido al
hablar de potencias de valores similares.

10
Fig. 7 Maquina Gearless. [6]

El principal componente electrónico con el que cuenta el sistema es el sistema de control


el cual se encarga de manejar la lógica para el movimiento del ascensor, el variador que
controla el motor de acuerdo a las ordenes enviadas por parte del control principal, los
sensores de piso que usualmente son imanes que envían las señales al control para que
este sepa en qué posición se encuentra, actuadores para iluminación, puertas, y otros
sensores que permiten tener cierto control sobre seguridades.

Debido a que la carga que mueve un sistema de ascensores es tan crítica como lo es la
vida de las personas, es necesario contar con una serie de seguridades que eviten se
llegue a presentar algún accidente. Por ejemplo, casos de incendio, terremoto, excesos
de velocidad y otros que llevan al ascensor a presentar algún inconveniente en su
funcionamiento.
También se suele hacer uso de algún equipo de frenado junto con el variador, esto
debido a que se presenta el fenómeno de regeneración constantemente en los sistemas.
La regeneración consiste en el momento en que el motor debe cambiar de estado en
tiempos muy cortos por lo que su construcción lo lleva a trabajar como un generador y
entregar energía al variador, usualmente se instala una resistencia de frenado la cual se
encarga de disipar esta energía sobrante en forma de calor.
4.3. Codesys

El término Codesys es un acrónimo que tiene como significado “Sistema de desarrollo


de controladores”. [10] Este software es un programa que permite crear programas de
control de las estaciones didácticas de la plataforma, además de comunicarse con el
autómata, vía ethernet, y transferirle la información. [11]
Codesys es uno de los sistemas de programación del estándar IEC 61131-3 más comunes
para PLCs y reguladores industriales. Permite programar autómatas de diferentes
fabricantes, así como generar código para algunos microprocesadores y DSPs. [11]

11
Soporta los cinco lenguajes de programación del estándar los cuales son; lenguaje en
escalera (Ladder Diagram LD), Diagrama de bloques funcionales (Function Block Diagram
FBD), Texto estructurado (Structured Text ST), Bloque de función secuenciales
(Sequential Function Chart SFC) y Bloque de funciones continuas (Continuous function
Chart CFC), además dispone de visualización integrada, como también de un simulador
online. [11]
4.3.1. Lenguajes de programación.

A continuación, explicaremos con brevedad la definición y/o el uso de cada lenguaje de


programación que puede usar el software Codesys:
Ladder Diagram: diagrama de contactos, diagrama en escalera, o lógica de contactos, es
un lenguaje gráfico que tiene muchas similitudes al principio utilizado por los técnicos
en la elaboración de cuadros eléctricos y de automatismo. [12]

Un programa escrito en Ladder está compuesto de una serie de circuitos que son
ejecutados secuencialmente por un autómata. La representación gráfica se asemeja a la
de un esquema eléctrico de control clásico, ya que se emplean símbolos similares a los
utilizados en estos esquemas, siendo mucho más intuitivos para los profesionales
familiarizados con este tipo de instalaciones que el uso de lenguajes de formato texto.
[12]
Dada su sencillez, es el lenguaje más utilizado en los relés programables y autómatas.
Entre los símbolos básicos podemos hacer mención de los mostrados en la siguiente
tabla 1.

Tabla 1. Algunos símbolos básicos del lenguaje Ladder. [12]

Function Block Diagram: en el lenguaje FBD se programa la aplicación gráficamente


conectando en cascada bloques lógicos; del mismo modo que se hace en los esquemas
de electrónica digital. En relación con las entradas y salidas, estas se representan por
variables asignadas a cada bloque. Además, el lenguaje FBD permite al programador
diseñar sus propios bloques. [12]

12
En la siguiente figura 7, podremos observar la manera de programación del lenguaje
FBD.

Fig. 8 Ejemplo básico del lenguaje FBD.

Structured Text: Texto estructurado es únicamente empleado en autómatas de alta


gama y ciertos entornos industriales. Se trata de un lenguaje de programación de alto
nivel que permite programación estructurada, es decir, es posible dividir varias tareas
complejas en tareas más sencillas para resolver un problema de automatización, usando
lo que se conoce como subrutinas. Al ser un lenguaje de alto nivel tiene muchas
similitudes con otros lenguajes similares utilizados en la industria informática, Basic,
Pascal, o C++. [12]

Este lenguaje emplea la definición de variables para identificar variables internas,


entradas y salidas, y dispone de estructuras de control que permite repetir procesos y
tomar decisiones de cómo actuar en función de unas condiciones complejas. En la figura
8, podemos observar la forma de programación del lenguaje ST.

Fig. 9 Ejemplo básico del lenguaje ST.

13
Sequential Function Chart: Podríamos considerarlo un lenguaje orientado a gráficos que
nos permiten representar el desarrollo en el tiempo de las distintas acciones de un
programa. El SFC es similar a un diagrama de flujo, en el que podemos organizar
subprogramas o subrutinas programadas en ST, LD, FBD, IL y que forman parte del
programa de control. El lenguaje SFC se emplea frecuentemente en el diseño de
soluciones asociadas a sistemas secuenciales donde el programa se ejecuta paso a paso
conforme se cumplen determinadas condiciones. [12]
La programación SFC dispone de tres elementos principales encargados de organizar el
programa de control: pasos o etapas, transiciones o condiciones y acciones. Nuestro
programa se irá ejecutando de una etapa a otra conforme se vayan cumpliendo las
condiciones y en cada etapa se ejecutará las acciones que se hayan definido. [12]
En la figura 9 observaremos un ejemplo básico de la programación del lenguaje SFC.

Fig. 10 Ejemplo básico del lenguaje SFC.

Continuous function Chart: en el lenguaje de programación CFC se pueden realizar


programas a partir de bloques prefabricados. Al utilizar este lenguaje se usan bloques
que realizan una función y se les asigna unos parámetros, y además se pueden
interconectar. La interconexión significa, por ejemplo, que los valores se transfieren de
una salida a una o más entradas durante la comunicación entre bloques. [13]

Los gráficos de funciones continuas se utilizan básicamente para controlar procesos


continuos, donde se ejecuta toda lógica y se calculan las salidas. El lenguaje CFC se usar
mayormente en procesos Bach continuos. A continuación, en la figura 10 observaremos
la forma de programación del lenguaje CFC. [13]

14
Fig. 11 Ejemplo básico del lenguaje CFC.

4.4. Protocolo de comunicación Modbus

Modbus es un protocolo de comunicaciones, basado en la arquitectura maestro/esclavo


o cliente/servidor, diseñado en 1979 por Modicon para su gama de controladores
lógicos programables (PLCs). Debido a que este protocolo fue público, de fácil uso y que
requiere poco desarrollo (maneja bloques de datos sin suponer restricciones) se
convirtió en un protocolo de comunicaciones estándar en la industria. Es el protocolo
de mayor disponibilidad para la conexión de dispositivos electrónicos industriales. El
protocolo Modbus permite el control de una red de dispositivos, por ejemplo, un equipo
de medición temperatura y humedad puede comunicar los resultados a una PC. Modbus
también se usa para la conexión de un PC de supervisión con una unidad remota (RTU)
en sistemas de supervisión de adquisición de datos (SCADA). Existen versiones del
protocolo Modbus para puerto serial y Ethernet (Modbus/TCP).
Para hacer uso del protocolo Modbus es necesario tener claro que el mismo trabaja a
partir de funciones que son las que definen cual será la acción a llevar a cabo durante la
transmisión, como se observa en la siguiente tabla, existen una variedad de funciones
que permiten la lectura y escritura tanto de variables digitales como análogas, esto
teniendo solo una dirección como referencia o varias de estas en una sola función.

Fig. 12 Funciones en la comunicación del protocolo Modbus [7]

15
Para poder direccionar correctamente el dato que se quiere transmitir, a cada valor se
le asigna una dirección, de acuerdo a lo establecido por el protocolo dependiendo de si
es una entrada, una salida y si es un valor digital o análogo se le asigna una dirección
dentro de un rango. En la siguiente tabla se observa la asignación de las direcciones de
acuerdo al tipo de dato que se desea trabajar.

Fig. 13 Direcciones establecidas para cada tipo de dato en el protocolo Modbus [7]

4.5. Protocolo i2c


El protocolo I2C es muy sencillo desde el punto de vista de hardware (Figura 13) ya que
se compone únicamente de dos líneas de colector abierto (Open collector) o drenaje
abierto (Open drain), una para la comunicación SDA y otra para actuar como reloj de
sincronismo SCL. [14]

Figura 14. Esquemático de la comunicación I2C Maestro-esclavos.

Cuando el bus no está siendo usado las dos líneas están a nivel alto y cualquier maestro
puede acceder al bus poniendo a nivel bajo la línea SDA, luego podrá la dirección del
receptor y, finalmente, se establecerá un dialogo que terminará con la vuelta de la línea

16
SDA a nivel alto. [14] En términos generales, una transacción obedecerá a alguna de las
siguientes estructuras de la figura 14: [15]

Fig. 15 Formatos de una transacción: a) sin cambio de sentido, b) con re-direccionamiento y posible
cambio de sentido. [15]

El protocolo I2C es muy flexible, pero presenta limitaciones en cuanto a su velocidad de


transmisión de datos, que es reducida (en mejor de los casos 3 a 4 Mbit/s aunque el
valor estándar es de 100kbit/s), lo que no es un problema para la mayoría de los sistemas
de instrumentación pero sí para otras aplicaciones dentro del mundo de la informática.
[14]
4.6. PROTOCOLO MQTT
Para dispositivos de Internet de las cosas (IoT) es necesaria la conexión a internet. La
conexión a internet permite que los dispositivos trabajen entre ellos y con servicios
backend. El protocolo de red subyacente de internet es TCP/IP. MQTT (Message Queue
Telemetry Transport), que está construido sobre la pila de TCP/IP, y se ha convertido en
el estándar para las comunicaciones de IoT. [16]

MQTT es un protocolo de red liviano y flexible que logra el equilibrio adecuado para los
desarrolladores de IoT: [16]

El protocolo liviano le permite implementarse en hardware de dispositivos altamente


limitados y en redes con ancho de banda de alta latencia/limitado.
Su flexibilidad hace que pueda soportar varios escenarios de aplicaciones para
dispositivos y servicios IoT.
El protocolo MQTT define los tipos de entidades en la red: un intermediario de mensajes
y un número de clientes. El intermediario es un servidor que recibe todos los mensajes
de los clientes y luego los redirige a clientes de destinos relevantes. Un cliente es
cualquier cosa que pueda interactuar con el intermediario para enviar y recibir
mensajes. Un cliente puede ser un sensor de IoT en el campo o una aplicación del centro
de datos que procesa datos IoT. [16]

17
El cliente se conecta con el intermediario. Se puede suscribir a cualquier “tema” de
mensajes de intermediario. Esta conexión puede ser una conexión TCP/IP simple o una
conexión TLS cifrada para mensajes confidenciales.
El cliente publica el mensaje, sobre un tema, enviando el mensaje y el tema al
intermediario.
Después, el intermediario redirige el mensaje a todos los clientes que están suscritos a
ese tema.

Ya que los mensajes MQTT están organizados por temas, el desarrollador de


aplicaciones tiene la flexibilidad de especificar que ciertos clientes sólo puedan
interactuar con determinados mensajes. Por ejemplo, los sensores publicarán sus
lecturas sobre el tema “sensor_data” y se suscribirán al tema “config_change”. Las
aplicaciones de procesamiento de datos que guardan los datos del sensor en una base
de datos backend se suscribirán al tema “sensor_data”. Una aplicación de consola de
administración puede recibir los comandos del administrador del sistema para ajustar
las configuraciones de los sensores, como la sensibilidad y la frecuencia de la muestra, y
publicar esos cambios en el tema “config_change”, siendo un modelo de este protocolo
mostrado en la figura 15. [16]

Figura 16. Ejemplo de un Modelo del protocolo MQTT. [16]

4.7. RASPBERRY PI.


La Raspberry Pi es un pequeño ordenador del tamaño de una tarjeta de crédito de muy
bajo costo, menos de 35 euros y fue desarrollado en el Reino Unido por la Fundación
Raspberry Pi, el cual se puede usar prácticamente como un verdadero PC y además
puede estimular el aprendizaje en las ciencias informáticas. [17]

El software que es usado en esta tarjeta es Open Source, el cual su sistema operativo es
adaptado de Debian, denominada Raspbian, aunque también la placa puede trabajar
bajo otros sistemas operativos, incluyendo la versión 10 de Windows. A continuación,
en la figura 16, observaremos las partes que componen la mayoría de las versiones de
Raspberry.

18
Fig. 17. Placa Raspberry Pi Modelo 3. [17]

A) Procesador.

Es el corazón de la Raspberry Pi, es del tipo de procesadores que encuentras en tu


teléfono celular. Si usas una Raspberry Pi 3, este procesador es de 64 bit, un sistema 4
núcleos (quad core) de 1.2 GHz, el cual está construido en arquitectura ARM. Los chips
ARM vienen en una variedad de arquitecturas con diferentes núcleos configurados que
brindad otras capacidades a diferentes precios. La Raspberry Pi 1 tiene 512 megabytes
de RAM y la Raspberry 2 y 3 tienen 1Gb de RAM. [17]
B) Jack de video y audio.
Una salida de video y audio está disponible en un estándar 3.5mm el conector plug. Un
lado de la conexión es un mini Jack, el otro lado es de tres conectores RCA para audio
estéreo y video compuesto por NTSC o PAL. [17]
C) Leds de estado.
Dos leds indicadores en la tarjeta demuestran el estado de la tarjeta. Además, también
hay unos Leds indicando la actividad del puerto Ethernet por sí mismo. [17]
D) Puertos USB externos.

En las versiones principales de Raspberry Pi, encontramos 4 puertos USB 2.0 para
conectar periféricos tales como el teclado, el ratón, controladores e impresoras.
Mientras más dispositivos se alimenten de los puertos, es recomendable considerar el
uso de una fuente externa alimentando a los dispositivos que necesiten más energía,
como un disco duro. [17]
E) Puerto Ethernet.

El puerto Ethernet es de un estándar RJ45 de una capacidad de velocidad de 10 a 100


megabits por segundo. Conectándolo a un router dispondrá de internet, o por otro lado
puede usar WiFi en la versión 3 de Raspberry Pi. [17]

19
F) Conector HDMI.

El puerto HDMI brinda salida de audio y video digital. Soporta 14 diferentes resoluciones
de video, y la señal HDMI puede ser convertida a DVI (usado por muchos monitores),
compuesta (Señal análoga de video con un conector RCA amarillo), o SCART (un
equipamiento de estándar europeo para conexión audiovisual) con adaptadores
externos. [17]
G) Alimentación de entrada.

Este conector MicroUSB es usado para alimentar la tarjeta (este no es un puerto


adicional USB, solo se usa para alimentar). El conector MicroUSB fue seleccionado
debido a que este conector es barato y además las fuentes de alimentación son fáciles
de encontrar. [17]
H) Slot de la memoria MicroSD.

Notaras que la Raspberry Pi no tiene disco duro, todo es almacenado en una memoria
MicroSD. En los modelos recientes, deberás insertar la memoria oprimiéndola en el Slot,
y de la misma manera la podrás remover. En esta memoria deberás ingresar primero el
sistema operativo para luego hacer uso de la Raspberry Pi. [17]
I) Conector para la interfaz del display serial DSI

El conector acepta 15 pines, cable de cinta plana puede ser usado para la comunicación
con un Display Touch oficial de la Raspberry Pi. [17]
J) Entradas y salidas GPIO y otros pines.
Actualmente la Raspberry Pi tiene un conector que tiene 2x20 pines GPIO. Estos pines
pueden leer interruptores y botones, como también controlar actuadores, Leds, relés y
motores. [17]
K) Conector para la interfaz de la cámara serial CSI
Este puerto permite un módulo cámara que se conectará directamente con la tarjeta
por medio del cable cinta. [17]
4.8. PSoC (Programmable System On Chip)
Es la denominación que tienen los microcontroladores programables desarrollados por
Cypress Semiconductor. Esta tecnología constituye un arreglo configurable de señal
mezclada (Parte análoga y digital) con controlador para una tarjeta. Estos dispositivos
conjugan las ventajas de los SoC, con la flexibilidad de los sistemas programables. [18]

La unión de circuitos análogos y digitales programables son la base de la plataforma


PSoC. Se puede configurar sus bloques usando las librerías pre-construidas o crear tus
propias librerías. Al combinar varios bloques digitales, se pueden crear recursos lógicos
de 16, 24 hasta 32 bits. [18]

20
Los bloques análogos están compuestos de capacitadores conmutados, Op-amp,
comparadores, ADC, DAC, y bloque de filtros digitales, permitiendo flujos complejos de
señales análogas. [18]
PSoC además ofrece un subsistema CPU sostificado con SRAM, EEPROM, una memoria
flash, varios núcleos y una variedad de sistemas incluyendo: [18]
- Un oscilador interno principal de baja velocidad.
- Conectividad con un oscilador cristal externo para precisión.
- Interrupciones internas y Watchdog.
- Múltiples relojes que incluyen un PLL.

Los dispositivos PSoC también están dedicados a comunicaciones tales como I2C, USB
2.0, CAN 2.0 y capacidades de depuración en el Chip usando JTAG y Serial Wire Debug.
Los nuevos PSoC estas construidos bajo un estándar de procesadores como los 8051,
ISSP y ARM Cortex M3. [18]

4.9. Machine Learning (Aprendizaje de máquina)

El aprendizaje de máquina es un área que estudia cómo construir programas de


computadoras que mejoren su desempeño en alguna tarea gracias a la experiencia. Ésta
se basa en las ideas de diversas disciplinas, como inteligencia artificial, estadística y
probabilidad, teoría de la información, psicología y neurobiología, teoría de control y
complejidad computacional. El mismo autor afirma que, para utilizar el abordaje de
aprendizaje, se deben considerar una serie de decisiones que incluyen la selección del
tipo de entrenamiento, la función objetiva a ser aprendida, su representación y el
algoritmo para aprender esa función a partir de ejemplos de entrenamiento. [19]
Las técnicas de aprendizaje se clasifican en supervisadas, no supervisadas y semi-
supervisadas. En las supervisadas, la meta es aprender el mapeo de las respuestas
correctas para los datos de entrada que le son proporcionados; para esto, se utiliza un
conjunto de datos de entrenamiento constituidos por pares que consisten en patrones
de entrada y salida correcta. De esta forma, el sistema aprende el mapeo de la salida
correcta para cada patrón de entrada que se le presenta. [19]
Yu Wanjun y Song Xiaoguang afirman que las etapas del aprendizaje supervisado
aplicadas en la categorización de texto son inicialmente un conjunto de ejemplos ya
clasificados que son presentados al algoritmo con lo que se construye un clasificador.
Posteriormente, se presentan ejemplos no clasificados al clasificador para que los
ordene. Finalmente, se debe tomar medidas para evaluar el desempeño del clasificador.

Algunos ejemplos de técnicas de aprendizaje de máquina supervisado son árboles de


decisión, máxima entropía, naive bayes, support vector machines, etcétera. [19]

En las técnicas de aprendizaje no supervisado, no se requiere la intervención de


humanos para elaborar un conjunto de datos previamente categorizados para ser
presentado al algoritmo de aprendizaje. La meta del aprendizaje no supervisado es
encontrar patrones interesantes considerando la distribución y composición de los
21
datos que le son presentados. Ejemplos de las técnicas de aprendizaje no supervisado
son las técnicas de clustering. [19]

Las técnicas de aprendizaje semi-supervisado son un término medio entre el aprendizaje


supervisado y el no supervisado. En este tipo de aprendizaje, los datos se dividen en dos
partes: un grupo de datos clasificados y otro de no clasificados. A esto se denomina
aprendizaje semi-supervisado estándar. [19]
Ejemplos de técnicas de aprendizaje semi-supervisado son las técnicas de transductive
support vector machines, expectation maximization (EM), etc. Algunas aplicaciones del
aprendizaje semi-supervisado, mencionadas por los autores son el reconocimiento del
habla, clasificación de páginas web y en la secuencia de proteínas. [19]

22
5. Desarrollo

El desarrollo llevado a cabo se puede dividir en una serie de etapas la cual en donde
cada una se compone de sus propios elementos tanto de Hardware como de Software.
Para explicar el procedimiento realizado se explicará la composición de cada uno de los
bloques y así mismo como fue el proceso de construcción.

Fig. 18 Diagrama de bloques del proyecto Fuente autor

Antes de iniciar con la explicación de cada uno de los bloques, se hace necesario aclarar
algunos conceptos:
- Llamadas de carro: Las llamadas de carro son aquellas que se realizan desde el
interior de la cabina del ascensor, estas le indican al sistema cual es el destino
del pasajero para que se decida cuál es la mejor ruta a seguir.
- Llamadas de piso: Estas llamadas son las que se realizan desde el panel presente
en cada uno de los pisos donde trabaje el ascensor, en el caso de este sistema se
cuenta con la posibilidad de solicitar el equipo para bajada y subida de manera
separada.

5.1. Comunicación Control – Variador

Ya que es necesario que el control de ascensor (Raspberry) y el control del motor


(Variador) se comuniquen para de esta manera enviar órdenes y recibir datos de
monitoreo se implementó el protocolo de comunicación MODBUS RTU, esto se decidió
debido a la facilidad con la que cuenta el variador modelo L1000 de tener los puertos
para este protocolo instalados de fábrica.
Para poder llevar a cabo esta comunicación se hace necesario realizar ciertas
configuraciones tanto en la raspberry como en el variador. Primero el variador cuenta
con una serie de parámetros que permiten configurar los valores de trabajo, el motor
que usara, las comunicaciones entre otras.

23
Fig. 19 Diagrama de conexiones comunicación Modbus, Variador Yaskawa. [8]

La conexión observada en la imagen anterior proviene directamente del manual del


variador, los bloques denominados Drive son cada uno de los posibles variadores a
conectar. Como se observa para realizar la conexión se hace uso de las borneras
denominadas S-, S+, R-, R+ estas se conectan en este caso al conversor USB-485 usado
en la raspberry, con lo anterior ya están listas todas las conexiones necesarias entre
Raspberry y Variador para trabajar.

Fig. 20 Módulo de conversión USB-485. [9]

24
La configuración del variador se realiza por medio del operador digital del mismo el cual
es la interfaz que permite interactuar con los parámetros de configuración del mismo.
En el caso del variador Yaskawa los parámetros de configuración se encuentran
agrupados como lo muestra la siguiente tabla, en esta se puede ver que los parámetros
se encuentran agrupados de acuerdo a la función que cumplen, lo que permite que sea
más sencillo realizar su configuración. Se pueden encontrar parámetros para el control
de velocidad de aceleración y desaceleración, valores del motor, protecciones entre
otros. Los que en este caso se necesitan principalmente son los relacionados con el
grupo H5, los cuales son los encargados de configurar la comunicación por medio del
protocolo MODBUS.
Fig.
20

Tabla de grupos de parametros variador yaskawa. [8]

De los parametros H5 es necesario rectificar como minimo los siguientes:

H5-01: Establece la dirección de esclavo que va a tener cada uno de los variadores, en
este caso debe coincidir con la que es buscada por parte del control o Raspberry.

H5-02: Aquí se modifica la velocidad de comunicación, el valor predeterminado


corresponde a 9600 Bps, este puede ser modificado en el caso de que se necesite
trabajar con una velocidad mayor.

H5-03: Este parametro permite seleccionar el tipo de paridad con el que va a trabajar el
sistema por predeterminado viene sin paridad.

Los valores de bits de datos y de parada vienen configurados en 8 y 1 respectivamente,


estos no es posible modificarlos. Los demas parametros del grupo H5 permiten
seleccionar como responde el variador en caso de perdida de comunicación entre otros.
Vale la pena aclarar que algunos de los parametros necesitan que el variador sea
reiniciado para que se vea el cambio reflejado.

25
Por el lado de codesys y la raspberry se añade un dispositivo de tipo Modbus como se
observa en la imagen, las configuraciones del mismo deben corresponder a las
realizadas en el variador, en codesys es posible determinar si la comunicación se esta
realizando de manera correcta si al momento de iniciar el programa se observa un icono
de color verde al lado de los dispositivos añadidos.

Fig. 21 Configuracion Modbus en Codesys. Fuente Autor

La manera en la que se envian los comandos de funcionamiento al variador es usando


la funcion con codigo 6, la que permite escribir un solo registro, de acuerdo al manual
es posible obtener las direcciones correspondientes a los diferentes comandos de
funcionamiento. Es de aclarar que a todos los parametros que tiene el variador se le
asigna una direccion Modbus por parte del fabricante, por lo que es posible realizar la
modificacion de cada uno de estos si llega a ser necesario.

Fig. 22 Parametros de configuracion función de lectura de registro Modbus. Fuente Autor

26
Los que nos interesan principalmente son los correspondientes a la referencia de
velocidad y a los comandos de marcha, como se observa en lo descrito por el manual en
la dirección 1 se escribe el valor que permite dar marcha al equipo tanto en el sentido
superior como en el inferior, y en la dirección 2 se puede ingresar la referencia de
velocidad con la cual trabajara el equipo, la modificación de este parámetro es la que
permite realizar el cambio a velocidad intermedia antes de parar en el piso
correspondiente.

Fig. 23 Direcciones y comandos usados en la comunicación. [8]

Para realizar la lectura de los monitores del equipo se utiliza la función con código 3 que
permite realizar la lectura de un registro del mapa Modbus, como en la escritura de
parámetros, en el manual se encuentran todas las direcciones correspondientes a los
valores de lectura.

Fig. 24 Configuración función de lectura de registros. Fuente Autor

En la tabla que se ve a continuación se observan los principales monitores a leer, en la


primera columna bajo el nombre se encuentra la dirección Modbus correspondiente,

27
con esto es posible llamar cualquiera de los datos que mide el variador, tanto de
corriente como potencia, etc.

En el caso de este proyecto se está consultando constantemente los valores de corriente


de consumo, voltaje de bus DC, referencia de velocidad, salida de velocidad y potencia
de salida.

Fig. 25 Ejemplo de monitores para lectura. [8]

5.2. Lógica De Control

Como se mencionó en el marco teórico la lógica de control es el cerebro del


funcionamiento del sistema, este se encarga de recibir las señales de los sensores y
enviar a los actuadores las activaciones de acuerdo a lo que se necesite. Para realizar la
implementación de esta se utilizó una Raspberry pi como componente de Hardware y
Codesys como componente de software.
El control implementado permite trabajar con un total de 5 pisos, esto indica que cuenta
con las señales de entrada tanto para los llamados de carro como los de piso
correspondientes a cada uno.

28
Fig. 26 Entorno de desarrollo Codesys. Fuente Autor

Codesys permite implementar una interfaz visual tipo HDMI que permite controlar el
sistema, para poder llevar a cabo pruebas y como un sistema de manejo opcional se
realiza el desarrollo de una pantalla que permita realizar las solicitudes de llamados y
observar el estado del funcionamiento la cual se puede observar en la siguiente imagen,
con esta se puede simular todo un ciclo de trabajo con lo que es posible rectificar fallos
en la lógica o así mismo realizar un proceso de rescate o similar.

Fig. 27 Interfaz de pruebas para la lógica de control. Fuente Autor

5.2.1. Llamadas de carro


El primer punto a analizar es el panel de llamadas de carro, cuenta con un botón para
cada uno de los pisos enumerado correspondientemente y uno para activar la apertura
de las puertas en caso de ser necesario. Se ha de tener en cuenta que en caso de activar
la llamada al piso actualmente en uso se ejecutara la apertura de las puertas.

29
Fig. 28 Panel para llamadas de carro. Fuente Autor

Como se observa a continuación cada una de las variables asignadas a los botones se
encargan de cambiar a verdadero la posición de un vector que almacena los
correspondientes llamados a piso, de esta manera a pesar de ser una señal no enclavada
permite que se maneje el llamado como un espacio de memoria que será consultado al
momento de realizar los viajes. Esta lógica se encuentra escrita en lenguaje Ladder
dentro del software Codesys.

Fig. 29 Código en ladder para detectar los llamados de carro. Fuente Autor

A continuación, se explicará en detalle el programa realizado para indicar el destino del


ascensor desde la cabina. Para ello dividimos el programa en las funciones que cumplen.
En la figura 6 podemos observar el bloque de comunicación implementado en un PSoC
4 con el fin de comunicarse con la Raspberry Pi quien es la encargada de la lógica del
sistema de control del ascensor.

30
Fig. 30. Bloque de comunicación I2C

El bloque de comunicación I2C observado en la figura anterior se implementó para la


transmisión y recepción de datos con la Raspberry Pi. Este bloque es configurado en
modo esclavo con la dirección 0x09 = 0001001, el cual siempre está a la espera de la
solicitud recibida por el dispositivo Maestro siendo para el proyecto una Raspberry Pi 3.
Luego se utiliza un bloque para hacer uso de un display 7 segmentos y el cuál podemos
observar en la figura 31.

Fig. 31. Bloque para manejo de Display 7 segmentos.

La configuración implementada para el bloque Segment LCD fue asignar como 1 el


número de líneas comunes y 7 como el número de segmentos, por lo cual cabe indicar
que se hace uso de un display 7 segmentos con un digito. Además, se debe agregar un
reloj para que realice la visualización del display de forma correcta.
Por otro lado, se crean pines de entrada para conectar a estos los botones encargados
de indicar el piso de destino, cerrar y abrir la puerta, un botón de emergencia, y un LED
para observar si hay comunicación entre el PSoC esclavo y la Raspberry Maestro.
Podemos observar esto en la figura 32.

31
Fig. 32 Pines de entrada.

Luego de terminar la programación gráfica procedemos a realizar la lógica de


programación en lenguaje C la cual mostraremos a continuación, y de la misma manera
analizaremos por partes, comenzado por la figura 33.

Fig. 33 Primera visualización del código de la cabina.

Del código que podemos ver en la figura 33 observamos unas variables creadas para la
comunicación I2C, estas variables se encargan de guardar la información que será
envidad o recibida por el protocolo I2C, además también encontramos una variable
‘status’ la cual indica la solicitud que es recibida por el dispositivo Maestro. También en
el inicio del código se tiene una variable llamada ‘piso’, la cual guardara el piso en el que
se encuentra el ascensor. Posteriormente encontramos unas instrucciones para
inicializar los bloques implementados anteriormente y además unos parámetros
iniciales necesarios para el protocolo I2C. En la figura 34 encontraremos la continuación
del código.

32
Fig. 34 Segunda visualización del código de la cabina.

La figura 34 nos muestra el comienzo del bucle infinito del código donde se ejecutará la
parte principal del programa. Para realizar el envío de datos por I2C se crea un
condicional que es usado para preguntar por una solicitud de lectura enviado por el
dispositivo maestro, al cumplir dicha condición se procede a limpiar el buffer de lectura
y posteriormente asignar a las variables que serán enviadas el estado de los pines de
entradas creados con el fin de indicar el piso de destino del ascensor, como también
algunos botones necesarios dentro de la cabina. Por último, en la figura 35 podemos ver
la parte final del código implementado.

Fig. 35 Tercera visualización del código de la cabina.

De la misma manera que se envían los datos por I2C, para recibir los datos enviados por
el dispositivo maestro se crea un condicional que pregunta por la solicitud escritura o
como se puede apreciar es una rutina para recibir datos. Como se realizó anteriormente,
se limpia el buffer de escritura y luego se procede a recorrer el vector donde queda
guardado los datos recibidos, y así poder asignar a la variable ‘piso’ la posición del piso

33
donde se encuentra el ascensor, con el fin de usar esta información y con la última
instrucción poder visualizarlo con el Display 7 segmentos. En el anexo podremos
apreciar el código completo el cual se ejecutará en la PSoC encargada de las llamadas
desde la cabina o carro, como también el plano del circuito PCB desarrollado. A
continuación, en la figura 36 se puede observar el circuito PCB ya con los componentes
montados.

Fig. 36 Circuito PCB con sus componentes encargado de llamadas desde la cabina.

5.2.2. Llamadas De piso

Desde la interfaz, las llamadas de piso pueden ser simuladas por medio de los paneles
que se observan en la siguiente imagen, cada uno de estos consta de un botón
correspondiente al llamado de subida y de baja dependiendo del piso, además de un
panel indicando cual es el piso actual en el que se encuentra el ascensor.

Fig. 37 Panel para realizar las llamadas de piso. Fuente Autor

De igual manera que con los llamados de carro, cada uno de los botones cambia a
verdadero el valor de una variable booleana que se encuentra en un vector, debido a
que el sistema diferencia los llamados de subida y de bajada, cada uno de estos cuenta
con un vector diferente para almacenar sus respectivos llamados.

34
Fig. 38 Programa en ladder para detectar las llamadas de piso. Fuente Autor

Cabe mencionar que el código de programación para hacer el llamado del ascensor e
indicar hacia donde se dirige, es muy similar al código anteriormente visto, así que se
mostrará los pocos cambios realizados. A continuación, podemos observar en la figura
38 algunos cambios en asignación y nombre de los pines de entradas.

Fig. 39 Esquema de la programación para el llamado del ascensor desde los pisos.

Para comenzar el PSoC 4 esclavo se configura con la dirección 0x08 = 0001000. Luego
podemos observar que los pines de entrada están asignados de tal manera que indican
la acción que debe realizar ascensor para dirigirse al piso de destino. Y encontramos
además un led que funciona igual que el programa anterior, solo se usa con el fin de
observar si la comunicación está funcionando.
Al terminar el esquema de la programación, procedemos a realizar la lógica de
programación en C de este programa, el cuál no varía mucho. Por lo tanto,
observaremos el cambio realizado para el llamado del ascensor en la figura 39.

35
Fig. 40 Rutina para envío de datos por I2C.

Como ya habíamos analizado anteriormente, el envío de datos por I2C se realiza usando
un condicional, pero el cambio realizado se encuentra en que las variables asignadas
indican en esta ocasión la acción y el destino que debe realizar el ascensor. En el anexo
podremos observar el código completo para el PSoC encargado del llamado del ascensor
desde cada piso, como su esquema y a su vez el circuito PCB desarrollado. A
continuación, podemos apreciar en la figura 40 (a) el circuito con sus componentes
donde se encuentra el PSoC y en la figura 40 (b) el circuito PCB el cual irá en cada uno
de los 5 pisos para el llamado del ascensor.

Fig. 41 (a) (arriba) Circuito PCB donde se el PSoC, (b) (abajo) Circuito PCB el cual se reparte en cada uno
de los 5 pisos.

36
- Programación de la comunicación I2C para la Raspberry Pi en Codesys.

Posteriormente de haber realizado los programas de las tarjetas que hacen los llamados
del ascensor e indican el destino del piso que se desea, se procede a mostrar el
desarrollo hecho por la Raspberry Pi (Maestro) para la comunicación I2C usando el
entorno del software CODESYS. Para comenzar, se agrega un dispositivo maestro I2C al
proyecto, cabe resaltar que para que realmente funcione la comunicación I2C se debe
habilitar esta opción por el terminal de Raspbian o por el escritorio. A continuación,
podemos observar en la figura 40 las variables creadas para enviar o recibir la
información de los PSoC esclavos.

Fig. 42 Asignación de variables para el protocolo I2C.

Luego de crear las variables para la comunicación I2C procedemos a realizar la lógica
para recibir los datos envidas por los esclavos y asignarlos a variables que usaremos para
el sistema de control del ascensor. La lógica de programación de este proceso se realiza
en el lenguaje de texto estructurado, como podemos ver en la figura 41.

Fig. 43 Lectura y asignación de datos recibidos por el buffer.

37
5.2.3. Sistema de sensores para pisos
Para poder detectar la llegada a cada uno de los pisos se utilizan las señales de unos
sensores que se encuentran en uno de los costados de la cabina, a continuación, se
procederá a explicar el funcionamiento de la detección de los pisos. Como se puede
observar la cabina cuenta con dos sensores, que en la mayoría de los casos son activados
por medio de imanes, uno ubicado encima del otro que están conectados directamente
como señal a la tarjeta de control, en la imagen se puede observar la ubicación
aproximada de los mismos, lo importante en este caso es que se encuentren a distancias
iguales de cada uno de los extremos para que la ubicación de parada no varíe entre
subida y bajada.

Sensor Superior

Cabina

Sensor Inferior

Fig. 44 Posición de los sensores en cabina. Fuente Autor

Cada uno de estos sensores detectara una señal correspondiente a los activadores del
piso, en el caso de ser imanes estos se encontrarán ubicados dentro del trayecto del
ascensor en una de las paredes de manera que cuando la cabina pase por su ubicación
estos sean detectados. De la misma manera que es importante la ubicación de los
sensores de cabina, los que se encuentran en las paredes del trayecto también deben
ser colocados de manera correcta para que el sistema no presente problemas de
nivelación.

Cabina

Sensores de piso

Fig. 45 Posición Sensores de cabina y pared. Fuente Autor

38
Si el ascensor va de bajada está a la espera de que el sensor inferior de la cabina detecte
un imán, esto le indica que se acerca al piso siguiente y en caso de ser necesario parar,
hace el cambio a una velocidad intermedia para que la parada no sea tan brusca, al
momento de detectar el imán superior una señal le indica que esta en el punto de
nivelación por lo que envía la señal de parada y espera a una próxima indicación. En caso
de que se encuentre el ascensor en subida el funcionamiento es el mismo pero el orden
de detección de los sensores se invierte.
En la interfaz de prueba los sensores superior e inferior son los que se observan en la
siguiente imagen, donde cada botón simula los sensores superior e inferior
respectivamente. Con esto es posible enviar ordenes de parada y de nivelación al
variador.

Fig. 46 Panel para simular la detección de los imanes. Fuente Autor

Los sensores también son configurados como entradas externas al control que permiten
que sean conectados cualquier tipo de sensor que se quiera utilizar.
5.2.4. Lógica del ascensor

El código principal del programa está escrito en Ladder como se observa en la figura, se
encarga de realizar la activación y desactivación de acciones que se encuentran como
subprogramas, donde cada una de estas se encarga de los posibles estados del ascensor,
siendo estos subida, bajada y quieto. Además de activar el estado de emergencia en
caso de que alguna de las seguridades sea activada o se evidencie algún problema de
funcionamiento.

39
Fig. 47 Programa de control principal. Fuente Autor

- Principal
El código que se encuentra en el programa principal se encarga de establecer cuál es la
siguiente acción a realizar por el ascensor, el mismo se activa cada vez que se cierra la
puerta después de un llamado y no tenía ninguna llamada previa en el mismo sentido
en el que se estaba realizando el viaje anterior. Este código se ejecuta constantemente
mientras no se tenga ningún llamado para que en el caso de presentarse alguno se
reaccione inmediatamente.
La línea 1 se encarga de colocar la referencia de velocidad nominal con la que debe
trabajar el variador al momento de iniciar algún viaje, después de esto el programa
ejecuta un ciclo alrededor de los posibles llamados que tenga el sistema en alguno de
los pisos con los que cuenta lo que se observa en la línea 2, en caso de encontrar un
llamado analiza cual es el sentido del viaje desde la línea 6 para que entre a trabajar otro
de los programas encargados de las funciones de subida o bajada.

1. G.Referencia_W := 6000;
2. FOR G.counter:=1 TO 5 BY 1 DO
3. //Si el llamado esta hecho
4. IF G.SP[G.Counter] OR G.LPD[G.Counter] OR
G.lpU[G.Counter] THEN
5. //Pregunta para subir o bajar
6. IF G.Piso < G.Counter THEN
7. G.LSubida := TRUE;
8. G.LPrin := FALSE;
9. ELSIF G.Piso > G.Counter THEN
10. G.LBajada :=TRUE;
11. G.LPrin := FALSE;
12. ELSE
13. G.Lpuertas := TRUE;
14. G.LPrin := FALSE;
15. G.SP[G.Piso] := FALSE;
16. G.LPU[G.Piso] := FALSE;
17. G.LPD[G.Piso] := FALSE;
18. END_IF
19. END_IF
20. END_FOR

40
El código encargado de la subida y de la bajada trabajan de manera similar, la línea 1
activa un booleano que sirve para la lógica interna del sistema, en la línea 2 se cambia
la variable de comandos del variador, la cual al tomar el valor de 2 para activar el bit 1
de la trama Modbus y así el Variador ande en uno de los sentidos de marcha. La línea 3
también funciona como una lógica interna para que el sistema sepa cuál es el último
estado de movimiento del ascensor.

1. G.On2 := TRUE;
2. G.Comandos := 2;
3. G.Subiendo := TRUE;

En el caso de que el ascensor se encuentre en subida lo primero que espera es la


detección del sensor inferior que se encuentra en la pared, al momento de encontrarlo
aumenta el contador de piso y en la línea 6 se pregunta si existe algún llamado que
atender en el mismo, de ser asi la variable denominada Bandera que permite cambiar el
estado de la lógica toma el valor de 2 y la referencia de velocidad es disminuida a la
intermedia o de nivelación, si no existen llamados en el piso la Bandera toma el valor de
1.

1. //Esta esperando Inferior


2. IF G.IInferior AND Bandera = 0 THEN
3. //Numero menos de piso y si esta solicitado parar
4. G.Piso := G.Piso + 1;
5. //Si esta solicitado bajar a media y esperar segundo iman
6. IF G.SP[G.Piso] OR G.LPU[G.Piso] or G.LPD[G.Piso] THEN
7. Bandera := 2;
8. G.Referencia_W := 3000;
9. ELSE
10. Bandera := 1;
11. END_IF
12. END_IF

En caso de que no hubiera llamado de piso se espera a que se detecte el sensor superior
con lo que se dará por dicho que este piso ya fue pasado y la bandera volver a tomar el
valor de 0.

1. IF Bandera = 1 THEN
2. IF G.ISuperior THEN
3. Bandera := 0;
4. END_IF
5. END_IF

Si se detectó un llamado en el piso al cual se llegó se espera a la detección del siguiente


sensor con lo que se envía la orden de parada al variador en la línea 5 y se activa el
programa que se encarga de la apertura de la puerta, antes de que se pase a la activación
de las puertas se consulta si existe algún llamado más arriba del piso actual para que al
cerrarse las puertas se continúe el viaje en el mismo sentido. De no existir más el
programa principal se encargara de rectificar la existencia de llamadas en bajada o de
esperar una nueva de ser necesario.

41
1. IF Bandera = 2 THEN
2. IF G.ISuperior THEN
3. //Mantiene media hasta que llegue el inferior
4. G.On2 := FALSE;
5. G.Comandos := 0;
6. G.Lpuertas := TRUE;
7. ////Si no hay mas llamados de subida de ahi para arriba
apagar subida
8. IF G.Piso = 5 THEN
9. G.Subiendo := FALSE;
10. ELSE
11. FOR G.counter_b:= G.Piso + 1 TO 5 BY 1 DO
12. IF G.SP[G.Counter_b] OR G.LPU[G.Counter_b] THEN
13. G.Subiendo := TRUE;
14. Bandera := 0;
15.
16. G.SP[G.Piso] := FALSE;
17. G.LPU[G.Piso] := FALSE;
18.
19. G.LSubida := FALSE;
20.
21. RETURN;
22. ELSE
23. G.Subiendo := FALSE;
24. END_IF
25. END_FOR
26. END_IF
27.
28. //Resetear Piso Al LLegar
29. G.SP[G.Piso] := FALSE;
30. G.LPU[G.Piso] := FALSE;
31.
32. G.LSubida := FALSE;
33.
34. Bandera := 0;
35. END_IF
36. END_IF
37.

El código de bajada cumple con el mismo funcionamiento que subida solo teniendo en
cuenta los llamados en otro sentido y el orden de los imanes en sentido inverso.

1. //Detecto superior si hay llamado


2. IF Bandera = 2 THEN
3. IF G.IInferior THEN
4. //Mantiene media hasta que llegue el inferior
5. G.On1 := FALSE;
6. G.Comandos := 0;
7. G.Lpuertas := TRUE;
8. ////Si no hay mas llamados de bajada de ahi para abajo
apagar bajada
9. IF G.Piso = 1 THEN
10. G.Bajando := FALSE;
11. ELSE
12. FOR G.counter_b:=1 TO G.Piso - 1 BY 1 DO
13. IF G.SP[G.Counter_b] OR G.LPD[G.Counter_b] THEN
14. G.Bajando := TRUE;
15. Bandera := 0;
16.
17. G.SP[G.Piso] := FALSE;

42
18. G.LPD[G.Piso] := FALSE;
19.
20. G.LBajada := FALSE;
21.
22. RETURN;
23. ELSE
24. G.Bajando := FALSE;
25. END_IF
26. END_FOR
27. END_IF
28.
29. //Resetear Piso Al LLegar
30. G.SP[G.Piso] := FALSE;
31. G.LPD[G.Piso] := FALSE;
32.
33. G.LBajada := FALSE;
34.
35. Bandera := 0;
36. END_IF
37. END_IF
38.
39. //Esta esperando Superior
40. IF G.ISuperior AND Bandera = 0 THEN
41. //Numero menos de piso y si esta solicitado parar
42. G.Piso := G.Piso - 1;
43. //Si esta solicitado bajar a media y esperar segundo iman
44. IF G.SP[G.Piso] OR G.LPD[G.Piso] OR G.LPU[G.Piso] THEN
45. Bandera := 2;
46. G.Referencia_W := 3000;
47. ELSE
48. Bandera := 1;
49. END_IF
50. END_IF

El programa que se encarga de la apertura de las puertas se observa a continuación, lo


primero es enviar la orden de apertura de puertas para lo cual se activa la variable
Apuertas, posterior a esto se tiene un retraso que permite que las personas entren o
salgan para luego enviar la orden de cierre de las puertas. Este procedimiento cuenta
con dos sensores que le permiten al sistema saber si la puerta se encuentra
efectivamente cerrada, o hay alguna obstrucción que impida su cierre, cuyo caso se
mantendrá la señal de apertura hasta que sea posible cerrar la puerta sin correr ningún
riesgo.

1. IF bandera_p THEN
2. G.Apuertas := TRUE;
3.
4. G.Delay(IN:=TRUE, PT:=T#3S);
5. IF NOT(G.Delay.Q) THEN
6. RETURN;
7. END_IF
8.
9. G.Delay(IN:=FALSE);
10. END_IF
11.
12. //Escribir Logica De puertas
13. //Esperar tiempo y no cerrar si esta activo sensor
14. //Cuando puertas termina activa principal
15.

43
16. bandera_p := FALSE;
17. IF G.puerta_obs THEN
18. G.Apuertas := TRUE;
19. ELSE
20. G.Apuertas := FALSE;
21. IF G.Puerta_Cerrada THEN
22. G.Lpuertas := FALSE;
23. Bandera_p := True;
24. IF G.Bajando THEN
25. G.LBajada := TRUE;
26. ELSIF G.Subiendo THEN
27. G.LSubida := TRUE;
28. ELSE
29. G.LPrin := TRUE;
30. END_IF
31. END_IF
32. END_IF

El código correspondiente al módulo de inspección se encarga de enviar órdenes


directas al variador a una velocidad especifica tanto en sentido como superior e inferior
por motivos de mantenimiento o solución de problemas, este código solo se encarga de
enviar las ordenes, lo importante es que en este modo todos los llamados son
almacenados mas no atendidos, de manera que es posible realizar cualquier trabajo sin
problema.

1. //Habilitar movimiento por inspeccion


2. G.Referencia_W := 3000;
3. IF G.UInsp THEN
4. G.Comandos := 2;
5. RETURN;
6. ELSIF G.DInsp THEN
7. G.Comandos := 1;
8. RETURN;
9. END_IF
10. G.Comandos := 0;

En el caso de activarse una emergencia se enviará una orden de bloqueo al variador, con
esta el mismo no recibe comandos de marcha de ningún tipo hasta que la señal sea
levantada por lo que se mantendrá en el punto en el que se presentó el inconveniente.
Luego de detectarse la alarma iniciará un conteo por un tiempo determinado después
del cual se dará inicio a un viaje el cual llevará la cabina al primer piso para en este abrir
las puertas y evitar cualquier problema de seguridad.

1. //Apagar todo
2. G.On1 := FALSE;
3. G.On2 := FALSE;
4. G.Comandos := 64;
5.
6. G.Delay(IN:=TRUE, PT:=T#20S);
7. IF NOT(G.Delay.Q) THEN
8. RETURN;
9. END_IF
10.
11. G.Delay(IN:=FALSE);
12.
13. IF NOT g.IEInferior THEN

44
14. G.On1 := TRUE;
15. ELSE
16. G.On1 := FALSE;
17. END_IF
18.

Fig. 48 Diagrama de flujo alarma

Aparte de las funciones y de los programas mencionados anteriormente, el sistema


cuenta con las siguientes funciones que complementan el funcionamiento:
- Control de iluminación: se designó una salida para la energización del sistema de
iluminación interno de la cabina, este funciona de manera que después de cierto
tiempo sin recibir un comando de marcha la iluminación se apague para así evitar
un consumo de energía excesivo.
- Detección de tiempo de viaje: También el sistema se alarma en caso de que algún
viaje realizado dure más de un tiempo establecido, esto depende del piso en el
que se encuentra y del destino del viaje. Esto se hace para evitar que se presente

45
algún tipo de inconveniente con que no se detectaron bien los sensores de los
pisos.
- Piso inicial: en el caso de que el sistema sea encendido por primera vez se utilizan
dos sensores extremos para enviar el ascensor a un punto conocido y posterior
a eso iniciar su funcionamiento normal.
- Sensores De Extremos de trayecto: son un par de sensores que se encuentran en
los puntos más extremos del trayecto, su función es impedir que el ascensor por
razones de mal funcionamiento suba demasiado o baje demasiado, esto lo
consigue activando el estado de emergencia del equipo.

5.3. Toma de Datos


Los datos tomados para analizar son la corriente, la velocidad tanto de referencia como
de salida, el voltaje del bus DC y el torque de salida, estos datos fueron seleccionados
para poder comprobar diversos problemas que pueda llegar a presenta el variador
durante su funcionamiento y tener un registro del consumo que presenta este, estos
datos pueden ser consultados desde la misma interfaz la cual permite visualizarlos por
medio de graficas mientras son enviados a la base de datos.
En el caso de la corriente, podemos monitorear cual es el consumo del motor en el
sistema, las horas de uso y el promedio durante el día, en estos sistemas la posibilidad
de tener acceso a esta información permite saber que tan bien dimensionado e instalado
está el sistema. Se puede observar el pico de corriente que presenta en el arranque, la
gráfica presente en la figura presenta la corriente multiplicada por 10.

Fig. 49 Datos de corriente tomados en la raspberry

La velocidad tanto de referencia como de salida permiten saber si el sistema está


haciendo un buen seguimiento y por lo tanto si está trabajando en las velocidades
46
correctas, un desfase en estas ocasiona problemas de nivelación, parada y puede llegar
a disparar el variador por desviaciones de velocidad.

Fig. 50 Arriba grafica de referencias de frecuencia al momento del arranque, abajo grafica de
referencias de frecuencia al momento de nivelar.

En las gráficas se puede observar tanto el momento de arranque cuando el variador


recibe la referencia de frecuencia y esta es posteriormente enviada como frecuencia de
salida y también el cambio de velocidad nominal a intermedia al momento de llegar a
piso y realizar la nivelación.

El voltaje del bus DC permite saber dos cosas, por un lado, si este tiene un valor muy
bajo quiere decir que la alimentación de este no se encuentra en los valores en los que
debería estar lo que fuerza al variador para que entregue la corriente de salida
solicitada. Además, en el caso de que este voltaje suba en algún punto, se puede deber

47
a la regeneración del sistema lo que indica una carga demasiado grande para el variador
o un equipo de frenado mal dimensionado.

Fig. 51 Graficas de Voltaje en el bus DC y corriente en el equipo al momento del arranque.

A continuación, podemos observar en la figura 52 de forma general el proceso que se


realizará para subir los datos obtenidos por el variador hasta la nube.

Fig. 52 Proceso para subir y almacenar a una base de datos IBM.

5.3.1. Comunicación Mqtt con CloudMqtt

Como parte de los objetivos del proyecto a realizar está establecer una comunicación
con la nube de código abierto. Por consiguiente, la manera que se utilizó para subir datos
al internet fue usar el protocolo de comunicación MQTT en Codesys e implementarlo a
la Raspberry Pi.
Como primer paso para realizar este proceso es necesario que la Raspberry Pi posea
conexión con internet, la cual puede recibir tanto por conexión Ethernet o usando una
conexión Wifi.
El segundo paso por realizar es usar la página https://www.cloudmqtt.com/ con la cual
se puede crear una instancia con un plan gratuito, y al cual subiremos la información

48
que deseamos con la Raspberry Pi. Al crear la instancia esta nos brinda los parámetros
tales como el servidor, un usuario, una contraseña, un puerto, etc. Necesarios para
poder establecer la comunicación con esta instancia, como podemos observar a
continuación en la figura 46.

Fig. 53 Información para establecer comunicación con el servidor creado.

Como tercer paso implementaremos la comunicación Mqtt con el servidor creado


usando Codesys, al cuál es necesario instalarle la librería ‘Janz Tec MQTT library’ para
poder desarrollar la comunicación. En la figura 47 podemos observar las variables
creadas y a su vez asignadas a los parámetros que obtuvimos del servidor creado.

Fig. 54 Variables creadas y asignadas según los parámetros del servidor.

El lenguaje que se utilizó para realizar la comunicación Mqtt fue CFC, el cual podemos
observar en la figura 48, allí encontraremos el bloque que exige todas las variables
anteriormente creadas con el fin de poder conectarse al servidor de CloudMqtt, y el cuál
sabremos si hubo conexión al ver el estado de la variable ‘conectado’.

49
Fig. 55 Esquema para establecer comunicación por protocolo Mqtt.

Al realizar estos pasos se obtuvo una conexión correcta con la nube siempre y cuando la
Raspberry Pi tenga internet. A continuación, se desarrolla la lógica para poder publicar
la información al servidor, para ello la figura 49 se muestra la lógica de programación
para subir información, que para este proyecto los son datos de la corriente del motor
que mueve el ascensor y el voltaje DC de entrada.

Fig. 56 Bloques para publicar al servidor Mqtt.

Como podemos observar en la figura 49 se toman las variables ‘Corriente’ y


‘Voltaje_BUS_DC’ y se realiza una conversión a tipo String, ya que este es el único
formato que recibe el servidor Mqtt. Para poder hacer la publicación de la variable que
deseamos, se usa la variable Booleana ‘ciclotrigger’ con el fin que al tener el estado
‘TRUE’ publique la información en ese instante, por lo tanto, el fin de esta variable es su
cambio de estado para poder publicar información constantemente.
5.3.2. Node-red y Base de datos Cloudant de IBM.
El desarrollo hecho hasta el momento permite publicar a un servidor en la nube los datos
que se obtienen del variador que controla el motor del ascensor. Ahora el método
implementado para guardar esa información fue usar Node-red como intermediario
entre el servidor CloudMqtt y un servicio de plan gratuito de IBM llamado Cloudant el
cual funciona como una base de datos. Para lograr esto se llevó a cabo los siguientes
pasos.

50
Primero se registró una cuenta a IBM Cloud obteniendo el plan Lite, este plan permite
usar algunos servicios que distribuye IBM de forma gratuita, aunque posee algunas
limitaciones. Allí al tener la cuenta ya creada procedemos a agregar el recurso de una
base de datos llamada Cloudant, el cual podemos observar en la figura 50.

Fig. 57 Recurso Cloudant lite.

Al tener el servicio agregado en nuestra cuenta, ingresamos a este recurso para obtener
las credenciales, ya que estas son necesarias para realizar una conexión a esta base de
datos desde node-red. Al estar dentro el entorno de Cloudant procedemos a crear una
base de datos en la cual se almacenará los datos que publicamos con la Raspberry Pi,
por lo tanto, la figura 51 muestra la base de datos creada con el nombre ‘database1’.

Fig. 58 Base de datos en Cloudant.

Al tener nuestra base de datos ya creada procedemos a usar node-red para realizar la
conexión entre Cloudmqtt y la base de datos Cloudant. Para ello primero se instaló los
flujos necesarios para node-red. A continuación, la figura 52 muestra los flujos usados
para este proyecto y el esquema de las variables que serán almacenadas en la base de
datos.

51
Fig. 59 Flujos para envío datos de Mqtt a la base de datos.

Para que los flujos funcionen correctamente se ingresan unos parámetros necesarios
que permitirán conectar primero el Servidor CloudMqtt al flujo Mqtt de node-red y
luego del flujo Cloudant a la base de datos de Cloudant. Por consiguiente, primero los
datos que exige el flujo mqtt son los mostrados en la figura 53.

Fig. 60 Parámetros para configurar el Flujo Mqtt de salida.

Al configurar el flujo Mqtt como fue mostrado en la figura anterior, permitirá una
conexión con el servidor de CloudMqtt anteriormente creado. El siguiente paso que se
realizo fue configurar el flujo de Cloudant de node-red para realizar la conexión con el
recurso de IBM que creamos anteriormente llamado Cloudant, como podemos observar
en la figura 54.

Fig. 61 Parámetros para configurar el flujo de Cloudant de entrada.

52
Los parámetros ingresados en el flujo de node-red son las credenciales que fueron
brindados al crear el recurso de IBM Cloudant. Lo único faltante para poder almacenar
la información es indicar la base de datos que fue creada en el recurso de IBM, de tal
manera que la figura 55 muestra la configuración faltante.

Figura 62. Configuración para almacenar información a la base de datos creada.

También podemos observar en node red otros flujos tales como “Split” encargado de
dividir los datos obtenidos del flujo Mqtt usando un carácter divisor, “Fecha_hora”
encargada de agregar al flujo de datos la fecha y hora en que fue publicado el mensaje
proveniente del servidor cloudmqtt, además de clasificar las variables publicadas
asignándoles un número del 1 a 5 respectivamente con “Corriente”, “Voltaje_BUS”,
“Referencia_R”, “Frecuencia_Salida” y “Alarmas”, en la figura 56 podremos observar el
código que realiza esa función, y por último el flujo “delete” encargado de borrar
información no tan relevante.

Fig. 63 Función “Fecha_hora” y el código incluido.

Al ejecutar en conjunto toda la programación que se ha realizado hasta este punto, se


pudo observar como la información iba siendo almacenada en la base de datos
‘database1’ obteniendo como resultado la figura 56.

53
Fig. 64 Base de datos ‘database1’ con datos almacenados.

5.3.3. Azure Studio y Machine Learning.

Para llevar a cabo la etapa de manejo de los datos con Machine Learning se hace uso de
la plataforma de Microsoft Azure con la cual es posible realizar proyectos de machine
learning en primera instacia lo que se necesita es llevar la base de datos obtenida desde
la raspberry a la plataforma de Microsoft, esto se puede realizar importándola
directamente como el archivo csv generado, ya que la plataforma de Microsoft es
totalmente en línea estos datos quedan almacenados en la nube para que sea posible
acceder a los mismos desde cualquier parte.

Fig. 65 Pantalla de la interfaz de azure para subir un nuevo dataset.

54
Fig. 66 Datasets subidos a la plataforma de azure

Ya teniendo los datos cargados en el sistema se crea un experimento el cual permite


hacer uso de bloques de funciones que permiten hacer el manejo de los datos y crear
los modelos y experimentos para entrenar y evaluar los diseños.

Para el caso de este proyecto se decidio hacer uso de las maqunas de soporte vectorial
o SVM, esta es entrenada con una serie de datos como se observa en la siguiente figura.

Fig. 67 Flujo de funciones para el entrenamiento y la evaluación

55
Lo primero que se realiza con el conjunto de datos obtenido es seleccionar las columnas
que serán necesarias para realizar el proceso, posterior a esto se realiza la normalización
de los datos y la división de los mismos, con una de las partes se entrena el modelo de
soporte vectorial y con la otra se realiza una evaluación de los datos buscando que el
porcentaje de exactitud sea lo suficientemente alto.

Luego de realizar este análisis es posible determinar la probabilidad con la que aparecerá
cada uno de los valores en el tiempo como se observa en la siguiente imagen, el dato
payload es el valor que es enviado en este caso de potencia en el sistema. Observando
que a pesar de que la mayor presencia esta en los valores positivos, aunque es posible
encontrar varios valores negativos los cuales están presentes en la regeneración del
sistema.

Fig. 68 Probabilidad obtenida de cada uno de los datos normalizados


A continuación, se presenta una gráfica con los resultados en precisión del
entrenamiento del modelo, la idea es que el modelo tampoco tenga un valor demasiado
alto ya que esto llevaría a un exceso de computo a la hora de evaluar realmente los
datos.

Fig. 69 Precisión obtenida durante las pruebas.

56
Con la evaluación de datos se obtiene unos valores estadísticos que permiten determinar qué
tan preciso es todo el proceso realizado.

Fig. 70 Datos estadísticos obtenidos luego de realizar la evaluación

A continuación, se puede observar los valores asignados a una base de datos de entrada
preestablecida en la cual se ingresan una serie de valores de tiempo con los que el
modelo entrenado devuelve los posibles valores de corriente. Para esta prueba se
tomaron lapsos de tiempo cortos debido a las limitaciones en la raspberry y en las
pruebas, se observa que 3 valores son los que principalmente se encontraran durante la
ejecución según la predicción realizada los cuales son 14.4 que equivale a 1.4 amperios
que es el consumo en la velocidad nominal del sistema 0.9 amperios para la velocidad
de nivelación y 0 durante los lapsos en los cuales el ascensor no se encuentra realizando
ningún viaje.

Fig. 71 Evaluación de una base de datos de en lapsos de minutos.

57
6. Conclusiones

 El variador de velocidad es un dispositivo que permite manejar los motores de manera


eficiente y permitiendo tener un control sobre el voltaje, la corriente y el torque de
salida. Además de esto cuenta con las suficientes posibilidades de configuración para
que se pueda manipular la carga de manera óptima de acuerdo a la aplicación específica.
 Una de las ventajas de la implementación del modelo de variador usado en este
proyecto es la sencilla implementación de comunicación Modbus con la que cuenta, ya
que el venir previamente integrada no es necesario instalar ningún tipo de tarjeta de
comunicación o similar.
 Los sensores de detección de piso cuentan con un papel muy importante en el
funcionamiento de un ascensor, una ubicación errónea de los mismo lleva a que el
sistema pierda el punto de referencia lo que puede llegar a ocasionar que funcione fuera
de los valores normales de trabajo.
 La importancia que cobra tener ciertos parámetros de seguridad en el sistema se debe
a la carga manejada, por esto es necesario que se tenga en cuenta ciertas seguridad
como tiempos de viaje, apertura de puertas y excesos de velocidad.
 La lógica manejada por el control como tal tiene que tener en cuenta cual es el viaje con
mayor sentido a realizar y así mismo atender cada llamada en el mejor momento, esto
se evidencia al momento de realizar pruebas de subida y de bajada en donde el ascensor
puede tener pérdidas de algunas de estas o dirigirse en un sentido que alargue alguno
de los viajes.
 Al realizar las pruebas de comunicación I2C entre la Raspberry Pi Maestro y los PSoCs
esclavos, uno de los errores comunes por la que puede fallar esta comunicación es
porque se agregan dentro la rutina de lectura o escritura, retrasos (Delays) que hacen
desincronizar la comunicación causando fallas en la trasmisión de datos. Otra de las
fallas o más que todo deficiencias de este tipo de comunicación es que la distancia
permitida para lograr una comunicación aceptable es de 50m, si contamos que tenemos
un edificio de 5 pisos podríamos estar alcanzando esta brecha, por lo cual no sería muy
viable esta comunicación para un edificio que supere esta altura, además de que la
comunicación puede fallar un poco más si se encuentra en un entorno industrial.
 En las primeras pruebas realizadas para subir los datos que nos brindaba el variador de
velocidad, encontramos que la velocidad con la que publica la comunicación MQTT los
datos influye en una falla del programa y al mismo tiempo bloquea la Raspberry Pi. Por
lo tanto, haciendo pruebas de ensayo y error se encontró qué para que no ocurriera esta
falla la velocidad con la que se publican los datos es de cada 200 mseg
aproximadamente.
 Al querer usar un servidor de código abierto o de forma gratuita encontramos que el
servidor de CloudMqtt nos sería útil para subir la información. El inconveniente que
surge es que el plan gratuito que brinda CloudMqtt permite solo suscribir 5 Tópicos no
más, ya que para adquirir más tópicos se debe cambiar a un plan pago. Sin embargo, las
variables que publicamos son tan solo 5 estando en la brecha del límite del plan.
 De la misma manera que usamos la versión gratuita en CloudMqtt, así mismo utilizamos
los servicios lite gratuitos que dispone IBM Cloud, pero por obvias razones nos
enfrentamos a limitantes como recursos que no podemos usar, limitaciones en cantidad
de conexiones, algunas opciones propias de los recursos no se pueden usar, o alguna

58
limitante en cantidad de datos que se manejan. Por lo tanto, al realizar las pruebas en
ciertos casos nos veíamos cohibidos para probar otras opciones que pudiesen haber sido
más útiles pero que a su vez no son gratuitos.

59
7. Referencias

[1] ABB, «New ABB,» 2018. [En línea]. Available: https://new.abb.com/drives/es/que-es-un-


variador.

[2] ATO, «AC DRIVE,» 2018. [En línea]. Available: http://www.acdrive.org/ac-drive-working-


principle.html. [Último acceso: 07 2018].

[3] Yaskawa, «Yaskawa Corporation,» 2018. [En línea]. Available:


https://www.yaskawa.com/products/drives/elevator-drives/commercial-
solutions/l1000e-drive. [Último acceso: 07 2018].

[4] L. LOPEZ, «eoi,» 19 10 2016. [En línea]. Available:


http://www.eoi.es/blogs/redinnovacionEOI/2016/10/13/el-ahorro-energetico-en-
ascensores/. [Último acceso: 07 2018].

[5] Enggcyclopedia, «Enggcyclopedia,» 2018. [En línea]. Available:


http://www.enggcyclopedia.com/2012/09/squirrel-cage-induction-motors/. [Último
acceso: 07 2018].

[6] «Emfmotor,» 2018. [En línea]. Available: https://www.emfmotor.com/sqml-gearless-lift-


motor.html. [Último acceso: 07 2018].

[7] Schneider, «Schneider Electric,» 2018. [En línea]. Available: https://www.schneider-


electric.com/en/faqs/FA168406/. [Último acceso: 07 2018].

[8] Yaskawa, Variador De CA Yaskawa L1000E, 2016.

[9] Electronilab, «Electronilab,» 2018. [En línea]. Available:


https://electronilab.co/tienda/convertidor-usb-rs485/. [Último acceso: 07 2018].

[10] Anton Girod Fortuño, “Programación de PLC con CODESYS - Automatización


Industrial,” 2018. [Online]. Available: https://cursoplcs.com/. [Accessed: 25-Jul-2018].

[11] “Índice a . El Software De Programación Codesys ___ 3,” pp. 1–37

[12] S. Gallardo Vázquez, Técnicas y procesos en instalaciones domóticas y automáticas :


Electricidad-electrónica : [Sistemas electrotécnicos y automatizados]. Paraninfo, 2013.

[13] SIEMENS, “SIMATIC CFC - Software for SIMATIC Controllers - Siemens.

[14] M. A. (ingeniero industrial) Pérez García, Instrumentación electrónica. Paraninfo, 2014.

[15] _ © Antonio and M. Fernández, “Tema 5: El bus I2C TEMA 5 EL BUS I2C,” 2004.

[16] D. Oasis, “¿ Por qué MQTT es uno de los mejores protocolos de red para,” pp. 1–9, 2017.

[17] F. Mocq, Raspberry Pi 2 : utilice todo el potencial de su nano-ordenador. Ediciones ENI,
2016.

[18] CYPRESS, “Programmable System - on - Chip - Cypress,” Estados Unidos ( California), p. 1,


2014.

60
[19] A. F. G. Viera, «Técnicas de aprendizaje de máquina utilizadas para la minería de texto,»
SciELO Analytics, 2017.

61
8. ANEXOS
Anexo 1.
Código completo desarrollado para las llamadas desde el carro y esquema, además del
circuito PCB desarrollado.
#include <project.h>
#include <stdio.h>
#include <stdlib.h>

int piso = 0;

int main(void)
{
int i=0, LED;

////VARIABLES I2C

uint8 wrBuf[8];
uint8 rdBuf[8];
uint8 userArray[8];
uint8 byteCnt;
uint8 indexCntr;
uint32 status;

CyGlobalIntEnable; /* Enable global interrupts. */


LCD_Seg_Start(); //Inicializamos el bloque LCD_SEG
Clock_Start(); //Inicializamos el Reloj
I2C_Start(); //Inicializamos el bloque de comunicación I2C
I2C_I2CSlaveInitWriteBuf((uint8 *) wrBuf, 8);
I2C_I2CSlaveInitReadBuf((uint8 *) rdBuf, 8);

//Comienzo bucle infito ----------------------------------------


for(;;)
{
/* Place your application code here. */

// Rutina para enviar datos por I2C ------------------------


if(0u != (I2C_I2CSlaveStatus() & I2C_I2C_SSTAT_RD_CMPLT))
{
byteCnt = I2C_I2CSlaveGetReadBufSize();
I2C_I2CSlaveClearReadStatus();
I2C_I2CSlaveClearReadBuf();

rdBuf[0]=Piso1_Read();
rdBuf[1]=Piso2_Read();
rdBuf[2]=Piso3_Read();
rdBuf[3]=Piso4_Read();
rdBuf[4]=Piso5_Read();
rdBuf[5]=Abrir_Read();
rdBuf[6]=Cerrar_Read();
rdBuf[7]=Emergencia_Read();

}
// Fin de la rutina para enviar datos ------------------------

// Rutina para recibir datos por I2C ------------------------


if(0u != (I2C_I2CSlaveStatus() & I2C_I2C_SSTAT_WR_CMPLT))
{
byteCnt = I2C_I2CSlaveGetWriteBufSize();

62
I2C_I2CSlaveClearWriteStatus();

for(i=0; i < byteCnt; i++)


{
userArray[i] = wrBuf[i]; /* Transfer data */

LED = userArray[1];
piso = userArray[2]; //En esta posición del arreglo
guardamos el piso del ascensor
}

I2C_I2CSlaveClearWriteBuf();
}
// Fin de la rutina para enviar datos ------------------------

if(LED == 1){led_Write(1);}
if(LED == 0){led_Write(0);}

LCD_Seg_Write7SegDigit_0(piso,0); //Instrucción para


escribir un número en el Display 7 seg
//el cual indicará el piso
donde esta el ascensor

}
//Fin del bucle infito ----------------------------------------
}

/* [] END OF FILE */
Código llamadas de cabina.

Esquema del código llamadas de cabina.

63
Circuito PCB desarrollado para llamadas de la cabina.
Anexo 2.

Código completo desarrollado para las llamadas desde los pisos y esquema, además de
los dos circuitos PCB desarrollados.
#include <project.h>
#include <stdio.h>
#include <stdlib.h>

int piso = 0;

int main(void)
{
int i=0, LED;

////VARIABLES I2C

uint8 wrBuf[8];
uint8 rdBuf[8];
uint8 userArray[8];
uint8 byteCnt;
uint8 indexCntr;
uint32 status;

//SPIS_Start();
CyGlobalIntEnable; /* Enable global interrupts. */
LCD_Seg_Start();
Clock_Start();

64
I2C_Start();
I2C_I2CSlaveInitWriteBuf((uint8 *) wrBuf, 8);
I2C_I2CSlaveInitReadBuf((uint8 *) rdBuf, 8);

for(;;)
{
/* Place your application code here. */

// Rutina para enviar datos por I2C ------------------------


if(0u != (I2C_I2CSlaveStatus() & I2C_I2C_SSTAT_RD_CMPLT))
{
byteCnt = I2C_I2CSlaveGetReadBufSize();
I2C_I2CSlaveClearReadStatus();
I2C_I2CSlaveClearReadBuf();

rdBuf[0]=UpP1_Read();
rdBuf[1]=DownP2_Read();
rdBuf[2]=UpP2_Read();
rdBuf[3]=DownP3_Read();
rdBuf[4]=UpP3_Read();
rdBuf[5]=DownP4_Read();
rdBuf[6]=UpP4_Read();
rdBuf[7]=DownP5_Read();

}
// Fin de la rutina para enviar datos ------------------------

// Rutina para recibir datos por I2C ------------------------


if(0u != (I2C_I2CSlaveStatus() & I2C_I2C_SSTAT_WR_CMPLT))
{
byteCnt = I2C_I2CSlaveGetWriteBufSize();
I2C_I2CSlaveClearWriteStatus();

for(i=0; i < byteCnt; i++)


{
userArray[i] = wrBuf[i]; /* Transfer data */

LED = userArray[1];
piso = userArray[2];
}

I2C_I2CSlaveClearWriteBuf();
}
// Fin de la rutina para enviar datos ------------------------

if(LED == 1){led_Write(1);}
if(LED == 0){led_Write(0);}

LCD_Seg_Write7SegDigit_0(piso,0); //Instrucción para


escribir un número en el Display 7 seg
//el cual indicará el piso
donde esta el ascensor

}
}

/* [] END OF FILE */
Código llamado desde los pisos.

65
Esquema del código llamadas desde los pisos.

Circuito PCB donde se encuentra el PSoC

Circuito PCB ubicada en cada piso.

66
Anexo 2
Equipos Para pruebas
Durante el desarrollo del proyecto las principales pruebas fueron realizada utilizando un
demo de variador A1000, ya que en sus parámetros principales y funcionamiento no
difiere del modelo L1000. El demo consiste en un variador modelo A1000 el cual tiene
acoplada en su alimentación un arreglo de condensadores que permiten alimentarlo de
una línea de 120.

Variador instalado en el Demo. Fuente Autor

Junto con el demo usado se utilizó un motor trifásico para comprobar que todos los
comandos funcionaran de manera correcta.

67
Motor usado junto con el Demo Fuente Autor

Los datos de prueba enviados a la base en la nube son tomados de estas pruebas de
funcionamiento. Debido a la facilidad de manipulación de este demo es posible realizar
pruebas sin necesidad de la instalación de

También fue posible utilizar un modelo L1000 en la realización de pruebas usando un


tablero de pruebas el cual consta del variador y sus conexiones tanto de potencia como
de control, en este caso se utilizó una maquina gearless para realizar las pruebas.

Maquina Gearless Usada para pruebas. Fuente Autor

Las simulaciones realizadas con este tablero permiten una más alta fiabilidad debido a
que en este caso se utiliza una alimentación de 220 V y un motor de más capacidad.
Además, una de las salidas del tablero es utilizada para alimentar el electrofreno de la
misma máquina que por seguridad si no es activado impide el movimiento del motor.
también en este caso es posible trabajar un control de velocidad en lazo cerrado, esto
gracias a que la maquina cuenta con un encoder instalado que permite la realimentación
al variador de la velocidad de salida.

68
Planos del tablero de pruebas con variador L1000A

69
70

Vous aimerez peut-être aussi