ENGINYERIA DEL SOFTWARE I



Documentos relacionados
irobot Scooba Floor Washing Robot 385 irobot Roomba 581

Tipos de navegación en el mercado

A 2204 No. de Parte

Este programa mueve cada motor de forma independiente, y cuando termina una línea pasa a la siguiente.

Documento técnico Sistemas según el principio de modularidad Automatización modular con terminales de válvulas

INDICADORES DE ALARMA Y SÍMBOLOS DE LA PANTALLA

Inteligente. Rápido. Eficaz.

MANUAL DE LIMPIEZA DE LA CISTERNA Y TRATAMIENTO DEL AGUA DE LLUVIA

INSTRUCCIONES DE INSTALACIÓN Y RECARGA CISS HP CARTUCHO SERIE 1

DESCRIPCIÓN DEL RETO SECUNDARIA (HIGH SCHOOL) WRO BOLIVIA

ASPIRADORA MANUAL DE USUARIO ESPECIFICACIONES

Para unas alfombras y moquetas perfectamente limpias

NORMAS BÁSICAS DEL FUNCIONAMIENTO DE LA PISCINA

Presentación 3 Validez 3 Símbolos y su significado 4 Principios de Funcionamiento del EDM

Compresores de tornillo rotativo Serie UP kw

Soluciones en Control de Acceso. Quién es AccessPRO?

Aspiradores comerciales versátiles y funcionales de 13, 25, 43, 80 y 110 litros. Aspiradores comerciales

Medida de magnitudes mecánicas

Tecnología para el Agua

DESHUMIDIFICADOR MH 120 MANUAL DE INSTRUCCIONES. Gracias por haber elegido este producto. Por favor, lea este manual de instrucciones antes de usarlo.

B i o m a t I b é r i c a M a t e r i a l e s y S i s t e m a s d e C o n s t r u c c i ó n E c o l ó g i c o s

Viega Advantix Vario. Montaje con una precisión milimétrica y versátil sin limitaciones.

PLAN DE FORMACIÓN DEL PERSONAL

Compruebe cualquier signo de daño mecánico en la junta y sustitúyala si es necesario:

SISTEMA DE LIMPIEZA POR VACÍO

ROBOT ASPIRADOR INTELIGENTE DE LIMPIEZA MULTIFUNCIONAL

MANUAL DE USUARIO UPS LINEA INTERACTIVA EAST EA200 LED-LCD VA

Bomba de condensados MANUAL DE USUARIO

Referencia rápida. Explicación del panel del operador. Explicación de las luces del panel del operador. Referencia rápida

PROPUESTAS COMERCIALES

GUÍA 5: CASOS DE PROBLEMAS AUTOMATIZACIÓN CON PLC

Camino limpio a la escuela

Manual de usuario para Android de la aplicación PORTAFIRMAS MÓVIL

Calentadores Solares

IES RIBERA DE CASTILLA ENERGÍA MECÁNICA Y TRABAJO

IMPLEMENTACION DEL PROGRAMA 5 S. CAPITULO V Paradigmás s que imposibilitan la implementación n del programa 5 S S

DESCRIPCIÓN DE LA POTABILIZADORA H2OPTIMA-L

NUESTRA SOLUCIÓN LA ASPIRACION

Diagramas del UML. A continuación se describirán los diagramas más comunes del UML y los conceptos que representan: Diagrama de Clases

SOLUCIONES DE METROLOGÍA ESCÁNERES 3D CMM ÓPTICOS MONTADOS EN ROBOT PARA LA INSPECCIÓN AUTOMATIZADA

PLANES DE EMPRESA ICEX CONSOLIDA. Manual de Usuario

podemos enfocar al funcionamiento del robot, es decir la parte de electrónica. Para que el


Manual de Operación. Nivel Láser Digital Magnético Modelo No

Compensan las de bolsas desechable


Manual de Instrucciones

1 La Resolución de Problemas utilizando la Computadora

Plataforma elevadora CELARE

MAXI AHORRADOR SEMI INDUSTRIAL 60 Kw

E ADVERTENCIAS DESCRIPCIÓN. 1) Lea detenidamente el manual de instrucciones. del aparato para desenchufarlo de la corriente.

Modificación de los valores de la impresora 1

LIMPIEZA VIARIA Y DEPÓSITO DE RESIDUOS

Manual de Instrucciones Pizarra garabatos

LA ESTRATEGIA NACIONAL DE BOSQUES Y CAMBIO CLIMÁTICO

Sistemas de control Outdoor solutions

Autoconsumo energético y gestión de la energía, una realidad

TERMINAL DE TELEASISTENCIA DOMICILIARIA CON LECTOR DE TARJETA RFID

INVENTARIO INTRODUCCIÓN RESUMEN DE PASOS

momit Home Registro Crea una cuenta de usuario de momit Home y sigue el asistente para registrar tu primera vivienda en 4 sencillos pasos.

Guía de Usuario. Seguridad Internet. Triara.com SA de CV. Todos los derechos reservados

POR QUÉ EL TRIPLE ENJUAGUE?

People. Passion. Performance. Compresores portátiles diesel Diseñados para ofrecer un rendimiento fiable

El control con sensores

Manual de Usuario: Página Web.

Cátedra de Cardiología

UNIDAD 6.- NEUMÁTICA.

SmartPower Muy fuerte y fiable. La tecnología del futuro hoy!!

Atmospheric Fan System COLECTORES DE POLVO

Manual de Instrucciones

Serie NK700. Centrales de detección y alarmas de incendios convencionales controladas por un microprocesador. Manual de usuario

conference D-Cerno The world is digital It s time to evolve Catálogo de Productos

Revolucionario sistema de cepillos, rendimiento extraordinario

Carros Eléctricos ZUNUBA MODELOS. Tel: (57 1) Cel: (57) % ecológicos ÉXITO TOTAL EN VENTAS

Software para Seguimiento de Clientes. Descripción del Producto

La velocidad del móvil se midió en varias formas, en línea recta, curvas cerradas y abiertas

Centro de Capacitación en Informática

Sistema electrónico de presentación del informe conforme al artículo 15 del Convenio

Manual de instrucciones Agitador Vortex unitexer 1

MANUAL DE USUARIO. El departamento de I+D+I de Esclatec ha desarrollado el primer carro de la compra motorizado.

Ingeniería Sostenible

Nokia Digital Pen Suite para dispositivos S60 y de la Serie 80 Guía del usuario

3 tanques - eléctrico

Componentes: RESISTENCIAS FIJAS

1 Instrucciones para usar la versión VERTIC 01/2008

MODELOS START GAS HIDROPOWER. Todos los modelos están disponibles para operar con Gas Licuado o Gas Natural CARACTERÍSTICAS GENERALES

GAMA AQUA. Calentadores a gas Modern (10 litros) X-Activ (11 litros) X-Evo (11 litros) Neo (14 litros) Elite (12 litros)...

ES U ESPAÑA 11. Número de publicación: Número de solicitud: A47G 29/00 ( )

PROCEDIMIENTO ESPECÍFICO. Código A-VII-01-A-1 Edición 0

08028 BARCELONA Joaquím Molins 5-7, 6º 4ª IFC CIMENTACIONES

Neumática e Hidráulica II

RECOMENDACIONES PRE ENFRIADO DE LA CARGA

Hace diez años el piso de cemento alisado era una opción sencilla informal y barata. Para darle un color diferente al gris cemento, se utilizaba

COSECHANDO EL AGUA DE LLUVIA.

Transcripción:

ENGINYERIA DEL SOFTWARE I UNIVERSITAT ROVIRA I VIRGILI PRÀCTICA 1: REAL TIME STRUCTURED ANALYSIS AND DESIGN 1/20

1 Índex 1 ÍNDEX...3 2 ENUNCIAT...4 3 DIAGRAMA DE CONTEXT...8 4 DIAGRAMES DE FLUX DE DADES I CONTROL...9 5 DIAGRAMES DE TRANSICIÓ ENTRE ESTATS...10 6 MINI ESPECIFICACIONS...11 7 DICCIONARI DE DADES...12 8 DISSENY DE L ARQUITECTURA (O MODULAR)...13 9 DISSENY DETALLAT: PSEUDOCODI...15 2/20

2 Enunciat ROBOT ASPIRADORA ROOMBA 2 SE Descripción: Roomba es una aspiradora automática que barre y aspira los suelos sin ningún tipo de supervisión. Basta con encenderla y marcharse, Roomba se encarga de limpiar el suelo, incluso las zonas de difícil acceso, tales como debajo de las camas, sofás y armarios. Con ROOMBA 2 SE la limpieza doméstica será más sencilla, rápida y eficaz. Roomba, una limpieza inteligente que funciona! La aspiradora Roomba realiza una limpieza en tres fases para eliminar el menor rastro de suciedad, dejando a su paso un suelo completamente limpio. Roomba empieza la limpieza de la habitación desplazándose en espiral, utilizando la tecnología de navegación inteligente diseñada por irobot. Toda la basura y el polvo se almacenan en un depósito sin bolsa, muy fácil de retirar, vaciar y volver a colocar. Se sirve de algoritmos de inteligencia artificial para abarcar todo el suelo durante el proceso de limpieza automática. Gracias a su sensor de seguimiento de paredes, Roomba se desplaza a lo largo de las paredes y alrededor de los muebles para limpiar toda la superficie del suelo. No necesita accesorios adicionales, es extremadamente ligera (sólo 2,9 Kg) y muy fácil de transportar y guardar. Roomba limpia de manera eficaz prácticamente todos los tipos de suelos incluyendo madera, linóleo, baldosas y laminados, así como moquetas de pelo corto y medio. La transición entre las diferentes superficies también es automática. Roomba incluye una unidad de pared virtual que crea una pared invisible de hasta 4 m con infrarrojos, lo que permite bloquear puertas abiertas y dividir espacios grandes para que Roomba limpie solamente el área que se desee. Gracias a la navegación inteligente y a un sensor de desnivel incorporado, Roomba detecta automáticamente escaleras y suelos en pendiente [o huecos de escalera], limpia hasta el borde y retrocede para evitar caer. Porque tienes mejores cosas que hacer. Roomba ha sido diseñada pensando en el ajetreado estilo de vida actual, para que cualquier suelo esté impecable todos los días y se disponga de más tiempo libre para otras actividades. Mientras Roomba aspira de manera autónoma, los que trabajan pueden disfrutar de su tiempo de ocio. Roomba también es ideal para personas mayores y personas con limitaciones físicas, puesto que limpia a conciencia el suelo, incluso zonas de difícil acceso. Se acabó el ir empujando la aspiradora. Ahora basta con pulsar un botón y Roomba se encarga del resto. Los niños y mascotas están totalmente seguros con Roomba. De hecho, es perfecta para los dueños de animales de compañía, porque es muy eficaz recogiendo el pelo de las mascotas y deja el ambiente totalmente limpio. Roomba nueva generación, nuevas características y accesorios. La nueva línea Roomba incorpora principalmente características inteligentes que permiten una limpieza más autónoma que nunca. Entre ellas: 3/20

Detector de suciedad que activa un sistema de respuesta: sus sensores especiales alertan a Roomba de la presencia de suciedad, para que dedique más tiempo a limpiar las zonas más sucias. Estación base: Roomba vuelve automáticamente a su estación de carga cuando termina de limpiar (incluida en el paquete Roomba 2 SE) Carga más rápida: Su innovador sistema de carga permite que Roomba 2 se cargue en menos de tres horas, comparado con las 7 de la versión anterior. Batería de larga duración: Roomba 2 tiene ahora una autonomía de limpieza de 120 minutos. Un único botón para el modo Limpieza : Roomba 2 calcula el tamaño de la habitación y cuánto tiempo necesita para limpiarla. Contenedor de partículas más grande, que puede almacenar el triple de basura. Aspiradora más potente para una mejor limpieza de moquetas tupidas. Sensores inteligentes que detectan si Roomba se atasca [en su desplazamiento] y le ayudan a liberarse. Modificaciones de diseño que permiten una transición más fluida entre suelo y alfombra. Funcionamiento más silencioso. El Roomba 2 SE se suministra con lo siguiente: Cargador de 3 horas 2 unidades de pared virtual Mando a distancia para el Roomba Home Base 2 filtros Unidad de fijación en pared Instrucciones en castellano. Especificaciones técnicas: Diámetro: 33,65 cm Altura: 7,03 cm Peso: 2,9 Kg (con batería) Bolsas aspiradora: Sin bolsa (Recipiente partículas = 400cc, Recip. aspiradora = 100cc) Autonomía de limpieza: 90 120 minutos por carga, según el tipo de suelo Flujo de aire: 1.2 m / seg. 4/20

Alimentación: 30 W (aspiradora) Nivel de ruido: <70dB Algoritmo de limpieza: Sistema de limpieza en 3 fases = 3 cepillos y una aspiradora Ancho trayect. Limpieza: 22 cm Sistema de navegación: Sensor de suciedad, Sensor de desnivel, Sensor de seguimiento de paredes, Sensor de contacto, Sensor de bloqueo y Sistema de pared virtual. Velocidad: 28 cm / seg. Área cubierta/ habitación: 99,97% COMPRE YA! Aquesta és la descripció real de ROOMBA 2SE, el robot netejador de l empresa irobot. Malgrat les bones crítiques rebudes pel producte irobot hi ha una sèrie d aspectes que són millorables però que comporten un anàlisi i disseny nous del sistema de control de robot, encara que hi ha certs elements del disseny actual que poden ser reutilitzats: aspectes que es mantenen activació: Roomba s activa/desactiva amb el botó Limpieza. navegació: en el moment en que l activem, Roomba comença un recorregut en espiral (de dins cap a fora) fent servir la tecnologia de navegació NAVEGA proporcionada per irobot. Quan qualsevol dels sensors OBSTACLE, DESNIVELL o INFRARROJOS s activa cal informar NAVEGA que actua pertinentment sobre el motor de desplaçament que pot rebre cinc tipus de senyals: endavant, enrera, gir dreta, gir esquerra, o parada. manteniment bateria: un cop es detecta bateria baixa el robot es guarda les coordenades actuals i s encamina a les coordenades del dispositiu extern RECARREGADOR BATERIA per recarregar se automàticament, moment que es detecta amb el senyal recarregat. A continuació el Roomba s encamina a les coordenades inicialment guardades i procedeix amb les seves tasques. aspectes que cal millorar (ampliacions del sistema de control) 5/20

neteja: amplia el sistema d escombrat en tres fases existent amb un posterior procés doble de fregat i assecat. El sensor/detector de brutícia del terra informa del nivell de netedat sota la superfície del robot (amb valors brut, semi brut i net ). Quan està brut cal escombrar fins que es detecta un nivell semi brut, moment en que es passa a fregar fins assolir nivell net, en que comença l assecament que dura, com a molt, 5 segons i que pot ser interromput per nous senyals de brut, semi brut o net. manteniment: Roomba incorpora un procés autònom de manteniment. Així, un cop el DIPÒSSIT DE POLS està ple, el robot s encamina al dispositiu extern ESCOMBRARIA, el qual el buida i l informa, un cop buidat, amb el senyal dipossit_buidat. El dipòsit d aigua de fregar disposa d un detector de brutícia de l aigua (diferent del de brutícia del terra) que quan informa de aigua bruta provoca que el robot s encamini al dispositiu extern CANVIADOR AIGUA que la renova. Un cop canviada l aigua bruta per aigua neta el Roomba rep el senyal aigua_canviada. El mateix passa amb el dipòsit de detergent del Roomba DETERGENT que, quan es buida fa que vagi al DISPENSADOR DETERGENT. Penseu que manteniment bateria ja està desenvolupat i que aquests nous comportaments són estructuralment equivalents. 6/20

3 Diagrama de Context 7/20

4 Diagrames de Flux de Dades i Control 8/20

5 Diagrames de Transició entre Estats 9/20

6 Mini Especificacions Monitorizar sensores E/S Monitorizar suciedad Monitorizar dep basura Monitorizar detergente Monitorizar agua Monitorizar batería Secar Fregar Barrer Navegar Ir a dep detergente Ir a basura Ir a dep agua Ir a recargar Recuperar posición Guardar coordenadas Recibe el señal de tres sensores: desnivel, obstáculo e infrarrojos. También avisa a control lo que detecta a través de estos sensores. Gestiona los dispositivos de entrada de romba como: sensores, depósitos, batería, mando, etc... Controla el nivel de suciedad y emite tres tipos de señal a control. Controla si el deposito de basura esta lleno, emite dos señales hacia el control. Controla el nivel de detergente. Emite dos señales en función del nivel de este. Controla el nivel de agua, emite dos señales hacia el control. Controla el estado de la batería y emite dos señales a control. Si el nivel es del 5% emite el señal batería baja y si el nivel es del 100% emite el señal batería llena. Se activa/desactiva desde control, tiene la función de secar. Se activa/desactiva desde control, tiene la función de fregar. Se activa/desactiva desde control, tiene la función de barrer. Tiene dos modos (navegar en espiral e ir a unas coordenadas concretas. Se activa/desactiva desde control. También puede leer unas de posición objetivo cuando esta en el modo de ir a unas coordenadas concretas. Tiene la función de escribir en posición objetivo cuando control recibe el señal que le indica que el deposito de detergente esta vació. Tiene la función de escribir en posición objetivo cuando control recibe el señal que le indica que el deposito de basura esta lleno. Tiene la función de escribir en posición objetivo cuando control recibe el señal que le indica que el deposito de agua esta vacío. Tiene la función de escribir en posición objetivo cuando control recibe el señal batería baja. Tiene la función de leer el registro coordenadas actuales y escribir el valor de este en el registro posición objetivo. Escribe la posición actual de romba en el registro coordenadas actuales. 10/20

7 Diccionari de Dades Pos Objetivo Pos. Agua Pos. Basura Pos. Estación Pos. Detergente Pos. Coordenadas Actuales Posición donde se tiene que dirigir Romba cuando recibe algún señal de control que le indica que tiene que ir a esa posición. Coordenadas del depósito de agua Coordenadas de la basura Coordenadas de la estación base Coordenadas del depósito del detergente Últimas coordenadas antes de recibir un señal de bataria baja, deposito lleno,... 11/20

8 Disseny de l Arquitectura (o Modular) 12/20

13/20

9 Disseny Detallat: Pseudocodi module sistema is uses control, e/s, inicializar; inicializar.inicializar_coordenadas(); repeat control.actua(esdevenimineto); forever end sistema; nodule control is uses ir_a_recargar,ir_a_basura, ir_a_dep_agua, ir_a_dep_detergente, guarda_coordenadas, recupera_posicion; type entradas = monitor_suciedad, monitor_sensores, monitor_deposito,monitor_agua, monitor_detergente, monitor_bateria; procedure actua (esdevenimento: in entradas) do Case esdevenimento do dip_ple: ir_a_basura.irbasura(); navega.irposicion(); dip_vacio: navega.espiral(); aigua_sucia: Ir_a_dep_agua.irdepaua(); navega.irposicion(); aigua_cambiada: navega.espiral(); bateria_baja: ir_a_recargar.recargar(); navega.irposicion(); bateria_completa: navega.espiral(); obstáculo_detectado: navega.esquiva(); obstaculo_no_detectado: navega.espiral(); detergente_vacio: Ir_a_dep_detergente.irdepdetergente(); navega.irposicion(); detergente_ cambiado: navega.espiral(); end case; end actua; Actua(); end control; module MonitorBateria is uses NIVEL_BATERIA, [m,m]; type nivel_bateria = {bateriabaja, bateriaalta}; procedure determina_situación_bateria (esdeveniment: out nivel_bateria) do leer(bateria); NIVEL_BATERIA.escribir(bateria); [m,m].leer([m,m]); if bateria < 5 then esdeveniment := batbaja; else if bateria == 100 then esdeveniment := batalta; end determina_situación_bateria; 14/20

end MonitorBateria; module MonitorSuciedad is uses NIVEL_SUCIEDAD, [n, m, M]; type nivel_suciedad = {brut, semibrut, net}; procedure determina_situación_suciedad (esdeveniment: out nivel_suciedad) do leer(suciedad); NIVEL_SUCIEDAD.escriure(suciedad); [m,m].leer([n, m, M]); If suciedad < n then esdeveniment := brut; else if suciedad > n and suciedad <m then esdeveniment := semibrut; else if suciedad > m and suciedad <M then esdeveniment := net; end determina_situación_suciedad; end MonitorSuciedad; module MonitorSensors is uses DESNIVEL, OBSTACULO, INFRAROJOS; type obstaculo = {obs.detectado, obs.no_detectado}; procedure determina_obstaculos (esdeveniment: out obstaculo) do leer(desnivel); DESNIVEL.escribir(desnivel); leer(obstaculo); DESNIVEL.escribir(obstaculo); leer(infrarojos); DESNIVEL.escribir(infrarojos); if desnivel or obstaculo or infrarojos then esdeveniment := obs.detectado; else esdeveniment := obs.no_detectado; end determina_obstaculos; end MonitorSensors; module MonitorDepositoPolvo is uses NIVEL_DEPOSITO, [s, S]; type nivel_deposito = {dep_lleno, dep_vacio}; procedure determina_situación_deposito (esdeveniment: out nivel_deposito) do leer(deposito); NIVEL_DEPOSITO.escribir(deposito); [s,s].leer([s,s]); if deposito < s then 15/20

esdeveniment := dep_vacio; else if deposito == S then esdeveniment := dep_lleno; end determina_situación_deposito; end MonitorDepositoPolvo; module MonitorSuciedadAgua is uses SENSORSUCIEDAD, [t, T]; type nivel_agua = {agua_sucia, agua_cambiada}; procedure determina_situación_agua (esdeveniment: out nivel_agua) do leer(agua); SENSORSUCIEDAD.escribir(agua); [t, T].leer([t, T]); if agua < t then esdeveniment := agua_cambiada; else if deposito == T then esdeveniment := agua_sucia; end determina_situación_agua; end MonitorSuciedadAgua; module MonitorDetergente is uses NIVEL_DETERGENTE, [r, R]; type nivel_detergente = {dep_vacio, dep_cambiado}; procedure determina_detergente(esdeveniment: out nivel_detergente) do leer(detergente); NIVEL_DETERGENTE.escribir(detergente); [r,r].leer([r,r]); if detergente < r then esdeveniment := dep_vacio; else if detergente == R then esdeveniment := dep_cambiado; end determina_detergente; end MonitorDetergente; module Ir_a_Recargar is uses pos_estacion; uses pos_objetivo; procedure recargar() do pos_objetivo.escribir(pos_estacion.leer()); end recargar; 16/20

end Ir_a_Recargar; module Ir_a_basura is uses pos_basura; uses pos_objetivo; procedure irbasura do pos_objetivo.escribir(pos_basura.leer()); end irbasura; end Ir_a_basura; module Ir_a_dep_agua is uses pos_dep_agua; uses pos_objetivo; procedure Irdepagua do pos_objetivo.escribir(pos_dep_agua.leer()); end irdepagua; end Ir_a_dep_agua; module Ir_a_dep_detergente is uses pos_dep_detergente; uses pos_objetivo; procedure irdepdetergente do pos_objetivo.escribir(pos_dep_detergente.leer()); end irdepdetergente; end Ir_a_dep_detergente; module guarda_coordenadas is uses pos_coordenadas_actuales; uses navega; procedure gcoordenadas do pos_coordenadas_actuales.escribir(navega.coordenadas_actuales()); end gcoordenadas; end guarda_coordenadas; module recupera_posicion is uses pos_coordenadas_actuales; uses pos_objetivo; procedure recuperap do pos_objetivo.escribir(pos_coordenadas_actuales.leer()); 17/20

end recuperap end recupera_posicion; module pos_estacion var PO: coordenada; procedure escribir (t: in coordenada) do PO := t; end escribir; procedure leer (t: out coordenada) do t := PO; end leer; end pos_estacion; module pos_objetivo var PO: coordenada; procedure escribir (t: in coordenada) do PO := t; end escribir; procedure leer (t: out coordenada) do t := PO; end leer; end pos_objetivo; module pos_detergente var PO: coordenada; procedure escribir (t: in coordenada) do PO := t; end escribir; procedure leer (t: out coordenada) do t := PO; end leer; end pos_detergente; module pos_coordenadas_actuales var PO: coordenada; procedure escribir (t: in coordenada) do PO := t; end escribir; procedure leer (t: out coordenada) do 18/20

t := PO; end leer; end pos_coordenadas_actuales; module pos_basura var PO: coordenada; procedure escribir (t: in coordenada) do PO := t; end escribir; procedure leer (t: out coordenada) do t := PO; end leer; end pos_basura; 19/20

module pos_agua var PO: coordenada; procedure escribir (t: in coordenada) do PO := t; end escribir; procedure leer (t: out coordenada) do t := PO; end leer; end pos_agua; module E/S is uses monitor_suciedad, monitor_sensores, monitor_dispositivos, monitor_agua, monitor_detergente, monitor_bateria; procedure monitorsuciedad (esdeveniment: out monitor_suciedad.suciedad()) do monitor_suciedad.determina_situacion_suciedad(esdevenimiento); end monitorsuciedad; procedure monitorsensores (esdeveniment: out monitor_sensores.obstaculo()) do monitor_sensores.determina_situacion_obstaculos(esdevenimiento); end monitorsensores; procedure monitoragua (esdeveniment: out monitor_agua.vacio ()) do monitor_agua.determina_situacion_dep_agua(esdevenimiento); end monitoragua; procedure monitordetergente (esdeveniment: out monitor_detergente.vacio ()) do monitor_detergente.determina_situacion_dep_detergente(esdevenimiento); end monitordetergente; procedure monitorbateria (esdeveniment: out monitor_bateria.baja ()) do monitor_bateria.determina_situacion_bateria(esdevenimiento); end monitorbateria; end E/s; 20/20