ENCICLOPEDIA DE RADIOELECTRÓNICA E INGENIERÍA ELÉCTRICA USB-anunciador del tiempo de toma de medicamentos. Enciclopedia de radioelectrónica e ingeniería eléctrica. Enciclopedia de radioelectrónica e ingeniería eléctrica. / Medicina Las personas mayores que se ven obligadas a tomar medicamentos con regularidad suelen tener dificultades para mantener su propio régimen. Pero a veces no sólo la salud, sino también la vida misma depende del cumplimiento oportuno de las instrucciones del médico. Además de los métodos organizativos habituales para resolver el problema, también se pueden utilizar medios técnicos. Estos incluyen la alarma propuesta, que envía señales todos los días según el horario ingresado, recordándole la necesidad de tomar medicamentos. Es comprensible que muchas personas mayores tengan dificultades para trabajar con productos de software modernos. En cuanto a los dispositivos de alarma, la mayoría de ellos son en realidad despertadores algo modernizados, incapaces de funcionar según un horario incluso con dos o tres tipos de medicamentos y ergonómicamente no son adecuados para su uso por personas mayores. La vista general de la alarma desarrollada por el autor, que cuenta con ocho canales independientes (según el número de celdas para medicamentos), cada uno de los cuales se puede configurar para enviar hasta cuatro señales de recordatorio por día (se pueden enviar un total de 32 señales). enviado), se muestra en la Fig. 1. Para ingresar o ajustar un horario de medicación, este dispositivo se conecta a través de una interfaz USB a una computadora en la que se ejecuta un programa especial. Cuando se carga el horario, la alarma funciona de forma autónoma.
Tanto el hardware como el software de la alarma están diseñados teniendo en cuenta su uso por parte de personas mayores, incluidas aquellas con problemas de visión. El manejo del dispositivo es extremadamente simplificado y el programa utiliza soluciones algorítmicas y de interfaz que aumentan significativamente la facilidad de uso. Además, se han tomado medidas de seguridad eléctrica en el diseño de la alarma. La alarma se alimenta desde una red de ~230 V y, en caso de un corte de energía, cambia automáticamente a la alimentación de la batería recargable incorporada. La energía consumida de la red no supera los 5 W, el tiempo de funcionamiento de una batería con una capacidad de 800 mAh alcanza los tres días. Esto garantiza la seguridad del horario incluso durante un corte de energía prolongado. El circuito de alarma se muestra en la Fig. 2. El principio de funcionamiento es simple: el programa del microcontrolador compara el valor de la hora actual cada segundo con la hora de señal especificada. Si hay coincidencia, el dispositivo emite una señal sonora, que es una de varias melodías, seleccionables a voluntad, y enciende el indicador luminoso de la celda correspondiente con el medicamento. En el mismo momento, la hora de envío de esta señal se traslada al día siguiente. Para apagar las señales sonoras y luminosas, simplemente presione el botón de confirmación SB1.
El microcontrolador ATmega8A-PU (DD1) utilizado en el dispositivo de alarma es capaz de funcionar con una tensión de alimentación reducida a 2,7 V. La frecuencia de reloj del microcontrolador de 12 MHz la establece el resonador de cuarzo ZQ1. La unidad de alarma sonora está montada en un microcircuito del sintetizador de música UMS8-08 (DD2). El microcontrolador enciende la señal de audio enviando un nivel alto a la entrada S del chip sintetizador. La señal suena continuamente hasta que se presiona el botón SB1. La fuente de sonido es el emisor piezoeléctrico HA1. El volumen está controlado por la resistencia variable R16. Las melodías se ordenan presionando el botón SB2 durante la reproducción. En [1] se proporciona información más detallada sobre los microcircuitos de la serie UMS. El dispositivo de alarma dispone de una fuente transformadora de tensión estabilizada de 5 V, no mostrada en el esquema, ensamblada según un circuito tradicional sobre un estabilizador integrado 7805. En caso de pérdida de tensión en la red de alimentación, el dispositivo cambia a alimentación. de la batería GB1. La corriente media consumida no supera los 5 mA. Si hay tensión en la red, la batería se recarga continuamente gracias al circuito VD5, VD6, R18. Sin embargo, se recomienda apagarlo una vez al mes y realizar un ciclo completo de descarga a un voltaje de 3 V y carga mediante un cargador externo. El microcircuito del sintetizador de música UMS8-08 se puede sustituir por otro de las series UMS7 y UMS8. Se diferencian sólo en el conjunto de melodías. Está permitido reemplazar el transistor KT3102B por KT3102G, KT3102E o BC547 importado, así como por KT315B o KT315G, si la resistencia de la resistencia R17 se reduce a 51 kOhm. En lugar de diodos KD522B, son adecuados KD521A, KD521B, KD522A, 1N4148 y similares. Todas las resistencias fijas son C2-33N o MLT. Condensadores de óxido C3 y C6 - K50-83, K50-16 o importados. Los condensadores restantes son cerámicos K10-73-1b, K10-17v. Cualquier LED es adecuado en carcasas con un diámetro de 5 mm y del color de luz deseado. En la versión del autor, se instala un LED verde como HL1, para no molestar innecesariamente al paciente, el resto son rojos. Conector XS1 - Toma USB-BF. La batería GB1 está compuesta por tres baterías Ni-Mh de tamaño AA con una capacidad de 80 mAh. Se pueden utilizar baterías de otras capacidades, pero es aconsejable seleccionar una resistencia R18 de tal resistencia que la corriente de carga inicial de una batería descargada a un voltaje de 3 V sea numéricamente igual a 0,1 de su capacidad nominal. La alarma se monta sobre una placa de montaje perforada estándar de 70x50 mm con un paso de perforación de 2,54 mm. Método de instalación: con bisagras y fijación con adhesivo termofusible. Debido a la simplicidad del circuito, no se utilizó cableado impreso. Todos los elementos del dispositivo, excepto los LED HL2-HL9, están colocados en una caja de distribución eléctrica de plástico de diseño IP67 con unas dimensiones de 80x80x40 mm. El conector XS1 está ubicado en una pequeña placa de circuito impreso, frente a él se corta un orificio del tamaño apropiado en la pared de la caja. Los elementos HA1, HL1, GB1, R16, SB1 se fijan a la tapa de la caja con pegamento caliente. El botón SB2, que no está relacionado con los controles operativos, está ubicado en la placa de circuito. En la Fig. La Figura 3 muestra la posición relativa de la placa de circuito y los elementos remotos dentro de la caja de distribución.
Los medicamentos se colocan en un casete estándar para componentes de radio que consta de ocho celdas con cajones. Cada celda tiene unas dimensiones de 112x55x120 mm. Las dimensiones totales del soporte para casetes son 224x110x120 mm. Dado que las celdas no están selladas, pero sí son bastante espaciosas, los medicamentos deben almacenarse en su embalaje original. El soporte del casete también proporciona protección contra la luz, necesaria para almacenar ciertos tipos de medicamentos. Los paneles frontales de las celdas tienen ranuras para placas con los nombres de los medicamentos. La caja de distribución está fijada a la pared lateral izquierda de la caja del casete con tornillos y tuercas M3. Los LED HL2-HL9 están ubicados uno a la vez en el panel frontal de cada celda y están conectados al dispositivo mediante cables flexibles colocados en tubos de PVC dentro de las celdas y agrupados en la parte posterior de la caja del casete. La reserva de longitud de cada par de cables que van a los LED debe garantizar la extensión libre de la celda hasta el 75...80% del estado completamente abierto. El archivo USB_HID_Note.hex adjunto al artículo debe cargarse en la memoria del programa del microcontrolador. La configuración del microcontrolador debe corresponder a la que se muestra en la tabla. 1. Un dispositivo correctamente ensamblado no requiere instalación. El brillo deseado de los LED se puede configurar cambiando su corriente entre 5...10 mA utilizando una selección de resistencias R7-R15. Tabla 1
Desde el punto de vista de la especificación USB, el dispositivo pertenece a la clase HID [2] con una implementación de software de la interfaz USB basada en el conocido controlador AVR V-USB [3]. Permítanme recordarles que en este caso es necesario cambiar la interfaz al modo USB 1.1 de baja velocidad, lo cual, según la especificación, se realiza mediante una resistencia conectada entre las líneas de interfaz D y V.autobús (en este caso esta es la resistencia R4). Se utilizó una de las opciones estándar para conectar el microcontrolador con su fuente de alimentación a voltaje reducido a través de los diodos VD1 y VD2. El uso de estos diodos es deseable a pesar de la presencia de una batería, ya que elimina la influencia de su voltaje en la coordinación de los niveles lógicos del bus USB y el microcontrolador. El microcontrolador funciona a una frecuencia de reloj de 12 MHz, uno de los rangos permitidos para V-USB. Su programa está escrito en C en el entorno de desarrollo AVR Studio 4. El texto del programa (archivo main.c) contiene un comentario detallado. Se utilizó la versión del controlador vusb-20100715 [4] y el compilador WinAVR-20100110 [5]. La biblioteca V-USB está bien documentada, por lo que aquí solo se considerarán los puntos directamente relacionados con la implementación del proyecto o con sus características. El proceso paso a paso de creación de un programa basado en la biblioteca V-USB se describe en detalle en [6]. Puntos clave a los que prestar atención al crear un programa en AVR Studio: - todos los archivos de la carpeta usbdrv del archivo V-USB deben copiarse a la carpeta del proyecto; - los archivos usbdrv.c, usbdrvasm.S, oddebug.c deben agregarse al proyecto AVR Studio (a través del elemento del menú contextual "Agregar archivo(s) fuente existente..." en el árbol del proyecto); - en la configuración del proyecto (Proyectos → Opciones de configuración → General → Frecuencia, Hz), la frecuencia del reloj del microcontrolador debe establecerse en 12000000 Hz. Con base en este valor, AVR Studio determinará para el compilador la constante F_CPU que utiliza V-USB. La configuración V-USB necesaria está contenida en el archivo usbconfig.h, que también debería estar ubicado en la carpeta del proyecto. El archivo de configuración estándar debe reemplazarse por el adjunto al artículo. En mesa 2 enumera las constantes más importantes definidas en este archivo. La posibilidad de desarrollar libremente dispositivos USB HID está asociada a un punto importante: se deben utilizar pares de identificadores VID/PID según el documento USB-IDs-for-free.txt de la biblioteca V-USB [3]. Tabla 2
*) Este valor debe ser igual al tamaño de la matriz de caracteres PROGMEM usbHidReportDescriptor en el programa. El programa utiliza el formato de hora UNIX, donde el valor de tiempo es el número de segundos que han pasado desde las 00:00:00 UTC del 01.01.1970/XNUMX/XNUMX. La alarma no muestra la hora visualmente, lo que evita complicaciones innecesarias del circuito y el algoritmo. de su funcionamiento. La variable pdata se utiliza para transmitir marcas de tiempo: valores de tiempo UNIX de cuatro bytes. El número máximo de señales enviadas por día se especifica en el programa mediante la constante NUM_ CALLS. Para almacenar valores de tiempo, se utiliza una matriz u_time de tamaño NUM_CALLS+1. En este caso, el elemento de la matriz u_time[NUM_CALLS] contiene la hora actual y el resto, la hora en que se enviaron las señales. A cada canal (célula del casete de medicamento) se le asignan cuatro elementos de matriz. Por ejemplo, la primera celda contiene elementos desde u_time[0] hasta u_time[3], la segunda, desde u_time[4] hasta u_time[7], etc. Si el valor de un elemento de la matriz es cero, se considera la señal correspondiente inactivo. Este enfoque nos permite simplificar el algoritmo para transmitir y procesar información. El descriptor que describe la estructura del paquete y los procedimientos de transferencia de información usbFunctionWrite y usbFunctionRead se crean basándose en soluciones estándar. Las funciones básicas se describen en detalle en el archivo de encabezado usbdrv.h de [3]. Los procedimientos se complementan con condiciones para comprobar el número de canales procesados. El número de elementos de la matriz recibidos por el dispositivo desde la computadora es uno más que el enviado, ya que la computadora siempre transmite la hora actual para su sincronización. Al comienzo del procedimiento principal main(), se configuran los registros de E/S, el factor de división de frecuencia del reloj se establece en 256 y el registro del temporizador TCNT1 se carga inicialmente con el número necesario para formar un intervalo de tiempo de 1 segundo. Las interrupciones por desbordamiento del temporizador están deshabilitadas de forma predeterminada. Después de esto, el programa ingresa al bucle principal. Si no hay conexión USB, las interrupciones se habilitarán globalmente y en el desbordamiento del temporizador 1. En el bucle for, se verificará cada elemento de la matriz u_time[i] con un valor distinto de cero para ver si es igual al actual tiempo. Si se detecta un empate, se encenderá el zumbador y el LED de la celda correspondiente, y el tiempo de respuesta de este canal se incrementará en 86400 s (por día). Luego se verifica el nivel en la entrada PB0. Si es bajo (se presiona el botón SB1 para confirmar la recepción de la señal), todas las salidas se configurarán en niveles lógicos bajos, lo que apagará las señales. Paralelamente, cada segundo cuando el temporizador 1 se desborda, se inicia el procedimiento de manejo de interrupciones TIMER1_OVF_vect. Restaura el valor preestablecido del contador TCNT1, incrementa el valor de tiempo actual en el elemento de matriz u_time[NUM_ CALLS] y cambia el estado de la salida PB1 (el LED HL1 conectado parpadea con un período de 2 s). Cuando un dispositivo está conectado a USB, la entrada PC5 recibe un nivel alto de la línea Vbus del bus USB. En este caso, la condición if (PINC & (1<<5)) desactiva las interrupciones de desbordamiento del temporizador 1 y activa el controlador V-USB. El LED HL1 se enciende y se ilumina continuamente. Después de activar el controlador V-USB, es posible intercambiar información a través de USB. El bucle llama a la función usbPoll(), que mantiene la interfaz activa en ausencia de intercambio de información. El proceso de transferencia de información se describe con más detalle en la sección del artículo relativa al programa informático. Pasemos a considerar el programa de computadora para ingresar un horario en el dispositivo de señalización USB_HID_Note. Como puede verse en su ventana principal (Fig. 4), durante el proceso de desarrollo se prestó especial atención a la optimización de la interfaz para garantizar la facilidad de uso para los usuarios mayores. El programa se ejecuta en Windows XP, Windows Vista, Windows 7, Windows 8, Windows Server 2003, Windows Server 2008. Su rendimiento en Windows 10 y Windows Server 2012 no ha sido probado, pero hay motivos para suponer que funcionará normalmente.
Después de iniciar el programa con el dispositivo de alarma conectado a la computadora, presione el botón en pantalla "Para conectar". Se mostrará un mensaje indicando el resultado del intento de conexión. Si tuvo éxito, los botones en pantalla estarán disponibles "leer todo" y "Ahorrar". Para ingresar un horario, simplemente seleccione el número de celda de la primera lista desplegable (selector) y el número de señal para esta celda de la segunda lista. Luego configure el tiempo de señal deseado, haga clic en la bandera a la izquierda del número para permitir o deshabilitar la combinación seleccionada de celda y señal (el color de la bandera cambia) y escriba el nombre del medicamento en la única línea disponible. El nombre del medicamento está vinculado al número de celda, por lo que el contenido de la línea cambia solo cuando se cambia el primer selector. El indicador de habilitación se refiere a la combinación seleccionada de números de celda y señal. Así que complete todas las celdas necesarias. El estado predeterminado de las celdas es deshabilitado; no es necesario activarlas todas. Si es necesario, se puede cambiar la configuración de la celda. Los valores ingresados se guardan dinámicamente. Presionando el botón en pantalla La programación se transfiere al dispositivo de alarma y se escribe en el archivo de configuración. Se mostrará un mensaje indicando el resultado de la transferencia. El horario almacenado en el dispositivo de alarma se puede leer presionando el botón de la pantalla . Después de esto, puede verlo en la ventana del programa, editarlo si es necesario y volver a cargarlo en el dispositivo de alarma. Pulsando un botón en pantalla borra el nombre del medicamento en la ventana correspondiente, dando la oportunidad de escribir otro. Una característica importante de la alarma es que detiene el temporizador actual cuando se conecta a un USB. En el momento en que se cierra el programa informático, el horario y la hora actual se registran automáticamente en la alarma (sincronización). Por lo tanto, después de cerrar el programa, debe desconectar el cable USB del dispositivo de alarma lo antes posible para minimizar la diferencia entre la hora real y la del "sistema". Sin embargo, incluso una diferencia de varios minutos en el caso que nos ocupa no es crítica, por lo que no se han tomado medidas para eliminar esta característica. Si, después de completar el programa USB_HID_Note, el dispositivo de alarma permanece accidentalmente conectado a la computadora durante mucho tiempo, simplemente inicie este programa nuevamente y presione el botón en pantalla luego en y ahí mismo o simplemente cerrar el programa. Se restablecerá el momento correcto de la alarma, después de lo cual se podrá desconectar el cable USB. Los nombres de los medicamentos se almacenan en el archivo de configuración del programa y se muestran en la pantalla de la computadora cuando se conecta el dispositivo de alarma. Además de ingresar el horario en el programa, debe asegurarse de que cada celda del casete esté equipada con una etiqueta con la inscripción correspondiente. El programa USB_HID_Note está escrito en C++ en el entorno de programación Qt 5.3.2. La elección de este entorno se debe a su naturaleza gratuita, multiplataforma, amplias capacidades y herramientas integradas únicas para crear y depurar aplicaciones de cualquier nivel, combinadas con la flexibilidad de las soluciones de interfaz. El tipo de implementación de la aplicación es Qt Widget. El texto fuente del widget es el archivo widget.cpp. El proyecto completo está compilado en el archivo USB_HID_Note_ pro.zip, adjunto al artículo. Una característica especial del programa es el acceso directo a las funciones de las bibliotecas SetupAPI y HID. Por tanto, el ordenador en el que se realice la compilación debe disponer de los archivos setupapi.lib e hid.lib correspondientes a la versión de su sistema operativo. Estos archivos suelen estar incluidos en el paquete WinDDK. Para evitar la necesidad de instalar completamente todo el paquete WinDDK, el autor recopiló los archivos de varias versiones de WinDDK 7600. 16385.1 en una carpeta winddk_libs, que está disponible en el servidor FTP de la oficina editorial. La compilación y la depuración se pueden realizar en Windows 7, Windows Server 2008 R2, Windows Vista SP1, Windows Server 2003 SP1, Windows XP SP3 o posterior. El archivo .pro debe indicar explícitamente las rutas completas a las bibliotecas, por ejemplo, como en la tabla. 3. Tabla 3 El archivo ejecutable compilado del programa junto con los archivos de configuración (.cfg) y estilo (.qss) se encuentran en la carpeta USB_HID_Note adjunta al artículo. Allí también se encuentran las bibliotecas dinámicas Qt necesarias (archivos .dll). Como sabes, este requisito es obligatorio para cualquier aplicación desarrollada en Qt. La lista de estas bibliotecas para el caso considerado se da en la tabla. 4. Tabla 4 Todas las bibliotecas se copian de la carpeta ..ToolsQtCreator in, con excepción de las dos últimas, que se copian de ..5.3mingw482_32pluginsplatforms y se colocan en la subcarpeta correspondiente de la carpeta de trabajo del programa. También puede copiarlos usted mismo desde la computadora en la que se compiló el programa a la carpeta de trabajo o del sistema del programa (tamaño del archivo: 126 MB, descomprimido: 400 MB). El algoritmo del programa se basa en soluciones estándar dadas en [7]. Las características de la implementación están asociadas, en primer lugar, con el uso de diferentes lenguajes de programación (a diferencia de los descritos en la fuente Delphi y C#). Para utilizar las funciones HID API y SetupAPI, debe incluir los archivos de encabezado hidsdi.h y setupapi.h, respectivamente. El controlador de clic en el botón en pantalla es el procedimiento on_Connect Button_clicked(). Primero, la función del controlador HidD_GetHidGuid determina el GUID asociado con el HID. Luego se llama a las funciones de SetupAPI para crear el enumerador de interfaz y obtener el nombre HID del dispositivo. Esto se describe en detalle en [7] en la p. 333. En este caso, no se utilizaron deliberadamente las funciones de determinar el nombre del producto o su número de serie. Sólo se marca el par VID/PID. Esto se hace para evitar la posibilidad de uso comercial del dispositivo. Los valores VID/PID se especifican mediante la constante Dev_VID_PID en el archivo global_vars.h. Una vez que se detecta el dispositivo, el control se transfiere nuevamente al controlador HID. La función CreateFile solicita su identificador, HidD_GetPreparsedData devuelve un puntero a un búfer que contiene información sobre los parámetros del dispositivo y HidP_GetCaps devuelve una estructura con los valores de estos parámetros. A diferencia del método comúnmente utilizado con el tamaño del informe asignado directamente en el programa, aquí su valor está determinado por el elemento de estructura Caps.FeatureReportByteLength obtenido del descriptor. Esto le permite crear una solución más universal que no requiere realizar cambios en el programa y volver a compilarlo cuando cambia el tamaño del informe en el descriptor del dispositivo. El intercambio real de información se produce mediante las funciones HidD_Get Feature (lectura) y HidD_SetFeature (escritura), llamadas en los procedimientos correspondientes data_read() y data_transfer() en ciclos de acuerdo con el número de celdas. Como ya se señaló, el número de elementos de la matriz recibidos por el dispositivo de señalización es uno más que los enviados, ya que para la sincronización la computadora siempre transmite la hora actual. Un comentario detallado que describe el propósito de los procedimientos más importantes está disponible en el texto del programa. El propósito de los procedimientos restantes es estándar o intuitivo, por ejemplo, on_comboBox_ currentIndexChanged() - controlador para el evento de cambio de índice de comboBox. Las líneas comentadas de qDebug y las que las acompañan estaban destinadas únicamente a depurar el programa. Si necesita depurar y ver el progreso del intercambio de información en la ventana del depurador Qt integrado, todas estas instrucciones deben descomentarse. El programa almacena la configuración general en el archivo settings.cfg. Tiene un formato de texto normal y se puede editar manualmente si es necesario. Su sección [General] contiene el número de celdas NUM_BOX=8 y el número de señales por celda NUM_BOX_CALL=4, en la sección [ver] la posición de la ventana del programa en la pantalla se especifica en números enteros. La sección [nombres] contiene los nombres de los medicamentos por celda, la sección [usado] - indicadores de actividad celular, la sección [tiempos] - valores de tiempo de respuesta en formato de marca de tiempo UNIX. Estos últimos son principalmente de carácter informativo, ya que los valores operativos se encuentran en la memoria del microcontrolador del detector. Al editar manualmente el archivo, tenga en cuenta que los parámetros de nombre están en formato de código fuente C/C++/Java (por ejemplo, u3256). Y en conclusión, algunas recomendaciones para aquellos que quieran cambiar de forma independiente la cantidad de señales enviadas por el dispositivo. Si el número de celdas es fijo, es relativamente fácil cambiar el número de señales por celda. En el programa del microcontrolador, para ello es necesario, en primer lugar, cambiar la constante NUM_CALLS. Su valor debe ser igual al producto del número de celdas por el número máximo de señales por celda. En el caso considerado en el artículo, es igual a 8x4=32. En segundo lugar, en el procedimiento switch... case..., el número de declaraciones de caso en cada línea debe ser igual al número de señales por celda. En este caso, los argumentos de las declaraciones de caso deben formar una secuencia continua de 0 a NUM_CALLS-1. El cuerpo de la función y la declaración de interrupción permanecen sin cambios. Luego se debe guardar el programa y volver a compilarlo. No se requieren ajustes en el programa de computadora. Basta con cambiar el valor de la constante NUM_BOX_CALL (el número de señales por celda) en el archivo settings.cfg. Debe corresponder estrictamente a lo incluido en el programa del microcontrolador. Los programas para el microcontrolador y la computadora se pueden descargar desde ftp://ftp.radio.ru/pub/2017/01/signal.zip. Literatura
Autor: D. Pankratiev Ver otros artículos sección Medicina. Lee y escribe útil comentarios sobre este artículo. Últimas noticias de ciencia y tecnología, nueva electrónica: Máquina para aclarar flores en jardines.
02.05.2024 Microscopio infrarrojo avanzado
02.05.2024 Trampa de aire para insectos.
01.05.2024
Otras noticias interesantes: ▪ Los escarabajos son las criaturas más tenaces ▪ El plomo es más fuerte que el acero. ▪ Nuevos diodos Schottky de VISHAY ▪ Células sexuales cultivadas a partir de células madre ▪ Las ciudades serán más limpias Feed de noticias de ciencia y tecnología, nueva electrónica
Materiales interesantes de la Biblioteca Técnica Libre: ▪ sección del sitio Directorios electrónicos. Selección de artículos ▪ Artículo de Charles de Gaulle. Aforismos famosos ▪ artículo Col de conejito. Leyendas, cultivo, métodos de aplicación.
Deja tu comentario en este artículo: Todos los idiomas de esta página Hogar | Biblioteca | Artículos | Mapa del sitio | Revisiones del sitio www.diagrama.com.ua |