Оглавление:

Dispensador De Alimento Para Múltiples Mascotas Usando Inteligencia Artificial Con Watson: 11 шагов
Dispensador De Alimento Para Múltiples Mascotas Usando Inteligencia Artificial Con Watson: 11 шагов

Видео: Dispensador De Alimento Para Múltiples Mascotas Usando Inteligencia Artificial Con Watson: 11 шагов

Видео: Dispensador De Alimento Para Múltiples Mascotas Usando Inteligencia Artificial Con Watson: 11 шагов
Видео: Accidente con AK47. Uso Indebido de Armas de Fuego. 2024, Ноябрь
Anonim
Dispensador De Alimento Para Múltiples Mascotas Usando Inteligencia Artificial Con Watson
Dispensador De Alimento Para Múltiples Mascotas Usando Inteligencia Artificial Con Watson
Dispensador De Alimento Para Múltiples Mascotas Usando Inteligencia Artificial Con Watson
Dispensador De Alimento Para Múltiples Mascotas Usando Inteligencia Artificial Con Watson

En este Instructable aprenderemos como hacer un dispensador de alimento para sus mascotas, por lo general, o al menos en mi caso siempre he querido hacer un dispensador automático, sin embargo, tengo un perro y un gato. Por ende no tengo una forma de saber cuál animal es para dispensar el alimento adecuado.

Он encontrado la solución, se trata de un sistema cognitivo que hace uso de la Inteligencia Artificial para que, por medio una cámara haga un processingamiento de imagen para reconocer, de cuál animal se trata y dispensar el alimento adecuado.

Логика системы:

  1. La mascota se acerca y es detectada por un sensor de distancia
  2. El sistema toma una foto del animal
  3. La Procea y Decision Qué Animal es
  4. Saluda a la mascota (Con voz humana)
  5. Dispensa el alimento respectivo
  6. Envía un correo al dueño indicando que ya le ha dispensado alimento

Шаг 1: Materiales Que Necesitamos

Materiales Que Necesitamos
Materiales Que Necesitamos
Materiales Que Necesitamos
Materiales Que Necesitamos
Materiales Que Necesitamos
Materiales Que Necesitamos

Este proyecto lo vamos a realizar en конъюнкто, así que es momento de vayas a comprar, pedir, buscar o la manera que tengas en mente, los siguientes materiales:)

  1. 1 Raspberry Pi, рекоммендация модели 3, прежде чем работать!
  2. 1 Cámara para raspberry pi
  3. 1 ультразвуковой датчик HC-SR04
  4. 2 Драйвер двигателя (Pueden utilizar cualquier otro, yo usé este porque era el que tenía a mano!)
  5. 2 шаговых двигателя
  6. 1 спикер (Парлантес)
  7. 2 трубки T de PVC de pulgada y media (Las encuentran en cualquier ferretería por menos de 2000 colones cada una.)
  8. Una lámina de acrílico de 3mm para cortar, yo utilicé acrílico, ustedes pueden usar cualquier otro material, como MDF.
  9. Una impresora 3D y cortadora láser que en Costa Rica, pueden encontrar en Inventoría LEAD.

Шаг 2: Iniciando Con Raspberry Pi

Инициандо Кон Raspberry Pi
Инициандо Кон Raspberry Pi
Инициандо Кон Raspberry Pi
Инициандо Кон Raspberry Pi
Инициандо Кон Raspberry Pi
Инициандо Кон Raspberry Pi

Raspberri Pi es un microprocesador muy poderoso que nos permite desarrollar proyectos que Requieran un alto poder computacional. Это похоже на Arduino с особенностями Raspberry Pi, которые позволяют исправлять Sistema Operativo dentro de la tarjeta de desarrollo.

В этом случае вы можете использовать обычный дистрибутив Linux, с открытым исходным кодом, особенно для исправления ошибок Raspberry Pi.

  • Primeros pasos con Raspbery Pi

    1. El primer paso es descargar el raspbian como zip.
    2. Ahora debemos quemarlo en una micro SD, para ello: Usuarios MAC / Linux:

      1. Abrimos la terminal o consola del sistema, como se muestra en la foto.
      2. Usaremos ciertos comando que Explicaré для ознакомления и окончательного daré un ejemplo de uso. diskutil list => Este comando me devuelve la lista de todos los discos que encuentre la pc (una SD puede tomarse como un disco externo.) Debemos buscar cuál es el nombre asignado a las SD, por lo general puede ser "disk1", para efectos de este turorial le llamaremos "TuDisco". diskutil eraseDisk JHFS + UntitledUFS <TuDisco> => Permite borrar y formatear el disco escogido (TuDisco).

        diskutil unmountDisk / dev / <TuDisco> => Воспользуйтесь диском без использования.

        sudo dd if = of = / dev / <TuDisco> bs = 1m => Quema el sistema operativo dentro de la SD, podría durar hasta 1 hora en este paso.

        diskutil eject / dev / <TuDisco> => Expulsa el Disco

        Un ejemplo de uso de este, se encuentra adjunto en las fotos, la sintáxis del ejemplo sería así

список diskutil

diskutil eraseDisk JHFS + UntitledUFS disk1 diskutil unmountDisk / dev / disk1 sudo dd if = / Users / bernalrojas / Downloads / 2017-11-29-raspbian-stretch.img of = / dev / disk1 bs = 1m diskutil eject / dev / disk1

Usuarios Windows: Pueden usar Win32Disk, que es una herramienta sencilla o cualquier otra de su elección

  • Ver sistema operativo

    1. Используйте кабель HDMI, мышь и кабель HDMI.
    2. Conectalos y enciende la raspberry pi, verás que aligual que una computadora normal este va iniciar de la misma sencilla manera que cualquier otra (Recorddemos que es una computadora).
    3. Ahora puedes continuous trabajando como una computadora normal o pueden accesar remotamente, así que lo haremos de esta ultima forma, para no depender de una pantalla para poder trabajar.
    4. Вы можете использовать SSH для удаленного доступа, использовать новый терминал и указать "ifconfig", чтобы изменить IP-адрес для управления малиной пи (guardelan porque el futcesurositaremos). Ahora pueden desconectar la pantalla.
    5. Vamos a ir a nuestra computadora y abrimos la terminal de la misma manera, y escribimos ssh pi @ donde es la dirección que acabamos de recuperar en el paso anterior, deben sustituir por los números que les retornó. Pueden ver un ejemplo en las fotos para no perse en este paso.
    6. Nos va pedir la contraseña del equipo y una más de la raspberry que por default es «малина». Esto nos abrirá la terminal inmediatamente.

Шаг 3: Conectando Sensores Y Actuadores Al Raspberry Pi

Conectando Sensores Y Actuadores Al Raspberry Pi
Conectando Sensores Y Actuadores Al Raspberry Pi
Conectando Sensores Y Actuadores Al Raspberry Pi
Conectando Sensores Y Actuadores Al Raspberry Pi
Conectando Sensores Y Actuadores Al Raspberry Pi
Conectando Sensores Y Actuadores Al Raspberry Pi

Cómo sabemos Raspberry Pi - это объект, на котором изображены сосны GPIO, которые настроены на вход и салидас для сенсоров и датчиков.

  1. Для сенсора дистанционного использования и ультразвукового сенсора. Этот сенсор выполняет функцию ультразвукового датчика, como un murcielago… Funciona emitiendo una honda (Триггерный штифт), который переустанавливается на объект, датчик la recibirá de vuelta (Echo pin) и оценивает все время, которое требуется на регулярной основе. Pueden ver la image adjunta que tomé de Zona Maker donde tienen un excelente tutorial para entender a fondo como funciona este sensor
  2. Para la visión искусственный эль sistema usará una cámara.
  3. Como motor usaremos un Stepper Motor.¿Qué es un Stepper Motor?
  4. Para mover el motor usaremos Driver motor. En mi caso no tenía disponibles de estos pequeños, así que usaré los que tenía a mano, estos (La diferencia es que estos allowen manejar una corriente mayor). * Примечание: * El diagrama adjunto se muestra otro driver (El rojo, es un easy driver) отличается тем, что он использует, esto fue para generalizar, ya que la mayoría de drivers tienen esa nomenclatura (dir y step). Con el que yo estoy utlizando (el TB6560) los pines "dir" y "step" los reemplazamos por "CW +" y "CLK +" соответственно. Y Los 2 GND Los Reemplazamos Por CLK- y CW-.

Шаг 4: Подготовка Node-RED к El Raspberry Pi

Preparando Node-RED En El Raspberry Pi
Preparando Node-RED En El Raspberry Pi
Preparando Node-RED En El Raspberry Pi
Preparando Node-RED En El Raspberry Pi
Preparando Node-RED En El Raspberry Pi
Preparando Node-RED En El Raspberry Pi
Preparando Node-RED En El Raspberry Pi
Preparando Node-RED En El Raspberry Pi

Ahora vamos a comenzar a preparar todos los paquetes necesarios para hacer que nuestro system funcione con Node-RED, que es un IDE de programación gráfico muy sencillo de utilizar.

Antes de comenzar a preparar todo es necesario tener nuestro equipo actualizado, para ello ejecutaremos los siguientes comandos en nuestra terminal:

sudo apt-get update

sudo apt-get dist-upgrade update-nodejs-and-nodered

Estos comandos nos actualizaran nuestro equipo. Ультимативная команда, но не разрешите это действие, чтобы обновить Node-RED, чтобы установить все зависимости, которые необходимо выполнить в отдельном шаге, важном значении этого шага.

  • Node-RED viene precargado en raspbian por default, así que solo debemos iniciarlo, para esto vamos a ir a la terminal y escribimos "node-red-start" esto nos va ejecutar un servidor bajo la misma red, ahora debes asegurarte que tu computadora Esté Conectada a la misma red o wifi que las raspberry pi.
  • Этот алгоритм похож на алгоритм «После запуска Node-RED, укажите в браузере https://192.168.1.102:1880» esto quiere decir que ha abierto un servidor a esa en esa dirección, por supuesto, la dirección de ustedes será diferente a la mía.
  • Entraremos a nuestro navegador web y copiamos la dirección, esto nos va abrir el IDE de Node-RED
  • Ahora vamos a instalar los paquete que necesitamos, para ello vamos a ir a: botón de menú arriba a la derecha => управлять палитрой => Установить. librerías en código.
  • Ahora vamos a instalar varios paquetes, esto lo haremos copiando el nombre del paquete que les dejaré abajo y dandole al botón instalar. Esto debe hacerse para cada uno de los paquetes que les dejo abajo

    1. node-red-contrib-camerapi => Для камеры
    2. node-red-node-pisrf => Ультразвуковой датчик Para
    3. node-red-contrib-speakerpi => Пара колонок
    4. узел-красный-узел-ватсон => Пара Ватсон
    5. узел-красный-contrib-ibm-watson-iot => Пара Ватсон
    6. node-red-bluemix-nodes => Облачные службы IBM
    7. node-red-contrib-python-function => Интерпретация Pytho

Шаг 5: Programando El Sistema Cognitivo

Programando El Sistema Cognitivo
Programando El Sistema Cognitivo
Programando El Sistema Cognitivo
Programando El Sistema Cognitivo

Node-RED позволяет импортировать программу для медиафайлов копий и кодов с дополнительными функциями.

Deben ir a botón de menú arriba a la derecha => import => clipboard => pegar el código => import. Esto les debería generar los bloques del programa, algunos bloques deben configurarse.

Конфигурация блоков:

  1. Для начинающих блоков, которые играют в кости "Distancia", вы можете щелкнуть по двум сторонам, чтобы получить доступ к параметрам, которые вы видите на фотографии.
  2. Для «сфотографировать узел питона» нажмите два раза, чтобы подтвердить параметры всех дополнительных устройств. * Importante asegurarse de que "File name" le hemos puesto "image.jpg" *
  3. Для отправки по электронной почте, дважды щелкните и нажмите на кнопку, чтобы просмотреть данные, en To: sería a qué dirección de correo quiero enviar el mailUserid: Sería la dirección de correo de la persona que envía Пароль: La clave de esta última dirección de correo.
  4. El último paso es configurar los servicios de Watson que haremos a continación en el siguiente paso.

Шаг 6: Conectando Watson

Conectando a Watson
Conectando a Watson
Conectando a Watson
Conectando a Watson
Conectando a Watson
Conectando a Watson

Watson - это служба IBM, которая использует функции медиафайлов API.

  1. Простое начальное задание для IBM Cloud. (IBM les dará un mes de prueba, para tener en cuenta)
  2. Una vez dentro verán algo como en la foto, aquí buscaremos abajo a la izquierda Watson => Visual Recognition => Pondremos un nombre único y le damos a crear. Como se muestra en las fotografías adjuntas.
  3. Una vez que estén dentro, pueden observar que han generado un API, ahora le dan al botón que dice "mostrar" (Ver cuarta foto) и deben copiar las credenciales, donde dice "api_key".
  4. Ван де Вуэльта в IDE де Node-RED и двойной щелчок по блоку «Визуальное распознавание Ватсона», это означает, что вы проверяете правильность своих учетных записей в правильном формате и настраиваете параметры, действующие на фотографии.
  5. Esto mismo debe hacerse для текста в речь, Watson => Texto a voz => Pondremos un nombre único y le damos a crear. Como se muestra en las fotografías adjuntas.
  6. Hemos generado un API nuevamente, ahora le dan al botón que dice "mostrar" (Ver cuarta foto) y deben copiar las credenciales "username" y "password". Vamos de vuelta al IDE de Node-RED и двойной щелчок по блоку "Hablar", чтобы получить доступ к учетным данным в правильном формате и настроить параметры, действующие на фотографии. * Esto debe hacerse para los bloques que dicen hablar *

Y list, así de sencillo ya tienen su sistema funcionando!:) Возможная ошибка:

Si cuando se debe tomar la foto nos retorna un error y la luz (roja) de la cámara no enciende, debemos revisar la carpeta / home / pi / Pictures. Ahora debemos ver si la foto está en negro o tiene 0KB, si es así

Nuestro sistema is configurado for guardar las fotos en la carpeta / home / pi / Pictures,. En caso de que no exista foto o la foto no se pueda abrir (0KB), es posible que la cámara este mal conectada o que no esté habilitada. Для настройки вашей камеры на вашем компьютере с инициалами Raspbian «/ Preferencias / Raspberry Pi / Configuración» и «Интерфейсы». Ahí debemos aseguranos que «Cámara» está en «Habilitada».

Шаг 7: искусственный интеллект

Интелигенсия искусственная
Интелигенсия искусственная
Интелигенсия искусственная
Интелигенсия искусственная

Procesar una imagen no es algo sencillo de hacer, Requiere inteligencia искусственный параметр для обнаружения патронов en esa imageen de los cuales pueda generar una o varias predicciones de objetos que podría ser el que se está mostrando en la imagen. Este tipo de algoritmos pueden hacerse de varias maneras, una de ellas es usando redes neronales profundas que en la actualidad Requiere un poco de tiempo para poder sentarse a construir la arquitectura y programar esta red, el nombre específico para el tipo de rediza que se util Es Redes Neuronales Convolucionales, que es el algoritmo que más se asemeja a las neuronas en la corteza visual humana. En estos algoritmos siempre se debe entrenar el sistema, con un concunto de datos certeros y uno falso, es decir muchas fotos con el objeto que queremos reconocer y otro montón de fotos agrupadas, sin el objeto que queremos reconocer.

Una de las ventajas de usar de Watson, es que hace este trabajo pesado por nosotroscluyendo que el algoritmo esté entrenado para reconocer objetos universalales, por supuesto Dis una herramienta o "campo de entrenamiento" para Entrenar pónocojetro meisistema, en este caso, los gatos y perro los reconoce por default.

Непрерывный процесс, связанный с объяснением, как функционирование красных нейронов, искусственных, ограничивает научные меры, Нет необходимости в реализации инструктажа. (Si tu interés es replicar el proyecto rápidamente, puedes saltarte hasta el fin del paréntesis).

Cómo funciona una Red Neuronal Básica (Inicio Opcional Informativo)

Una red está compuesta de varios elementos indivuales (la unidad básica) que se llama perceptron o lo que equivaldría a una nerona en nuestro cerebro. Está compuesta de 3 основных участников:

  1. Entradas
  2. Función de suma (Σ)
  3. Función de activación

Энтрады:

Estas son las presentadas en la image como x1, x2, x3, x… Serán multiplicadas por un peso w (con un valor random al inicio)

Función de suma (Σ):

En este punto ocurre una suma de todas las entradas multiplicadas por su peso w respectivo, al finalizar la operación, envía el resultado a la función de activación.

Función de activación:

Funciona como threshold o umbral, es decir, si el valor del resultado supera cierto número (por lo general 0) se activará la salida de la нейрона. Podemos decir que es como una llave que deja pasar el agua o cierra el paso del agua. Solo que en este caso, hablamos de la salida de una nerona.

Ahora que conocemos la unidad básica de una red нейронная (perceptrón) estamos listos para ver cómo operan en una red. Como observan en la segunda imageen, está compuesta de 3 capas Principales:

  1. Capa de Entrada
  2. Capa oculta
  3. Capa de salida

Капа де энтрада:

Aquí es donde recibe todas la entradas, pueden existir un número indefinido de neronas.

Capa oculta:

Recibe la salida de cada nerona que existe en la primer capa, realiza el mismo procedure en cada percetrón y su salida se la entrega a la capa de salida.

Капа де салида:

Esta es la capa de clasificación, aquí existe el número de нейронас igual al número de clasificadores que necesites, es decir si quieres saber si es un gato o perro necesitarías 2 нейроны, una para gatos y otra perros.

Todo esto es muy lindo, pero ¿Dónde ocurre realmente el aprendizaje? Esto ocurre en cada perceptron por Individual, el algoritmo resulta que en calcular rightamente y ajustar los pesos w (Que inicialmente tenían un valor random). Esto puede hacerse mediante aprendizaje no supervisado o aprendizaje supervisado, la manera más sencilla, es Calculando el error, es decir, la differencia entre el valor de la salida que yo esperaba y el que realmente me dio.

(Fin del Opcional Informativo)

Watson está creado usando muchos algoritmos como el que acabamos de ver, pero con una mayor profundidad y complejidad por supuesto, ante esto usar el Visual Recognition API, o API de reconocimiento visual, (Que ahora sabemos que se trata de redes neronales algunosion otros algoritmos más), resulta muy sencillo de usar, esto porque cuando configuremos el bloque con nuestra credenciales y hagamos el processamiento de una imageen, Watson nos va devolver un archivo типо JSON с un motón de posibilidades esta pretograedes en fojetosqueredos. Es decir, cuando correamos la foto, Watson hace su análisis y nos devuelve una lista con вероятные объекты, которые обнаруживают на этой фотографии, así de sencillo es usar Watson!

Luego Solo usamos un script para recorrer todas esas posibles opciones y si en esa lista encuentra conciencia con un perro o un gato le avisará al resto del sistema para que dispense la comida correa:)

Es necesario que se den cuenta que la inteligencia искусственный no es algo tan Complejo, especialmente cuando existen servicios como Watson que hacen el trabajo pesado por nosotros!:)

Шаг 8: Конструирование аппаратного обеспечения

Construyendo Un Hardware
Construyendo Un Hardware
Construyendo Un Hardware
Construyendo Un Hardware
Construyendo Un Hardware
Construyendo Un Hardware

Este paso lo hemos realizado en la Inventoría LEAD (Ver labratorio) el cual es un maker space en Costa Rica desarrollado por Fundación Costa Rica para la Innovación.

En el Laboratorio contamos con impresoras 3D y cortadora láser entre otro montón de herramientas y tecnologías a disicón de nosotros, la comunidad, para prototipar y desarrollar nuestras ideas y proyectos de la mano con Expertos en el área.

Шаг 9: Imprimiendo El Mecanismo De Dispensado

Imprimiendo El Mecanismo De Dispensado
Imprimiendo El Mecanismo De Dispensado
Imprimiendo El Mecanismo De Dispensado
Imprimiendo El Mecanismo De Dispensado
Imprimiendo El Mecanismo De Dispensado
Imprimiendo El Mecanismo De Dispensado

Como comentábamos en en Inventoría LEAD tenemos a Disicion de nosotros impresoras 3D, de las cuales hicimos uso en este proyecto para hacerlo realidad. Adjunto encontrarán los archivos listos para imprimir, les Recomiendo seguir Este Instructable el cuál explica paso a paso como hacer uso de las impresoras 3D de Inventoría, ya que en estos espacios buscan que todos nosotros aprendamas querosismos nosotros aprendamas querosismos nosotros aprendamas querosismos nosotros aprendamas querosismos nosotros aprendamas querosismos nosotros aprendamas querosismos nosotros aprendamas querosismos no yacer libert más nos las haga, por ello con este tectable aprenderán a utilizar estas maquinas y poner a imprimir las piezas por ustedes mismos.

Шаг 10: Cortando En Láser El Case

Кортандо Эн Ласер Эль Кейс
Кортандо Эн Ласер Эль Кейс
Cortando En Láser El Case
Cortando En Láser El Case
Cortando En Láser El Case
Cortando En Láser El Case
Cortando En Láser El Case
Cortando En Láser El Case

De la misma forma, hicimos uso de la cortadora láser, donde el disño fue realizado usando inkscape el cual es una version de programas de gáfico que nos permite generar vectores. La maquina láser, al ser un robot cartesiano, func, sin embargo, este gcode debe ser generado por un software, en este caso generamos un archivo.svg que son lineas de dibujo, con el cual, el software propio de la cortadora láser puede convertir en una trayectoria para los motores de la maquina.

El material: Para este disño es importante saber que debemos usar material de 3mm, uno mayor puede hacer que las piezas no calcen adecuadamente. Yo он использует acrílico negro mate (que compré en panaplast), esto es por una razón, me gusta realizar trabajos con mucho oficio y elegancia, y este material create un efecto visual muy interesante, de lejos puede confudirse con aluminio negro, lo cual le da mucha elegancia al proyecto.

Ustedes pueden utilizar el material que deseen, si buscan realizar algo de bajo costo, pueden hacer uso de MDF de 3mm el cual es un material muy económico y da acabados muy bonitos también.

Шаг 11: Оборудование Ensamblando El

Ensamblando El Hardware
Ensamblando El Hardware
Ensamblando El Hardware
Ensamblando El Hardware
Ensamblando El Hardware
Ensamblando El Hardware

Una vez que tenemos todas piezas completetas, la electrónica y software listo, podemos comenzar a ensamblar.

En las fotos adjuntas verán el processso!:)

  • Pasos para armado:

    1. Armar las dos cajas y pegarlas con cinta (esto porque pueden desarmarse), como comentabamos usamos acrílico, para pegar este material es necesario usar pegamento de acrílico o, para parecer más interesantes e intelectuales ante otra meirno… Lorumue agradecen el tip;) jaja
    2. Aplicar el cloruro de metileno: -Este pegamento es un ácido que es muy peligroso, se Recomienda aplicarlo con una jeringa y guantes.

      -El procso debe realizarse con calma y cuidado, ya que una gota en un lugar Equivocado puede dañar la estética de nuestro acrílico. Como recomendación personal, siempre que hagan un proyecto realicenlo con mucho oficio y detalle. Cuidar los кабели - это важный, простой и доступный проект, а также видимость воздействия на мэра, которая состоит из кабелей desordenados, que se vea desordenado, Complejo o Sucio.

* Ensable de la caja 1, la dispensadora (Con los motores) -En este punto debemos tomar el acople de los motores que imprimimos en 3D y atornillarlos al motor, tal y como se muestra en la foto. Pueden utilizar tornillos con medida M3, el largo no importa… -Ahora debemos tomar la espiral y, a presión, debemos hacer calzar el hueco que tiene por debajo con el rotor (palito que gira) del motor y deberá quedarnos como se muestra en las fotos.-Ahora insertamos la pieza complete dentro del Tubo de PVC. (Este sistema es muy utilizado en la industry como maquina de inyección, un ejemplo de aplicación es en las maquinas de inyección de platisco, adjunto econtrarán un diagrama de como funcionan estas maquinas) -Hacemos de la dosción de modo que nos quede un acople righto entre los huecos de salida de la caja y la salida del tubo de PVC-Colocamos la tapa superior o cobertor cobertor. * Ensamble de la caja 2, la de la electrónica.-Colocamos el sensor ultrasónico en los orificios. Con contadoble cara fijamos la cámara a la pared de acrílico.-Acomodamos la electrónica, esto lo hice como se muestra en la foto, pero ustedes pueden acomodarlo a su gusto. por Completeto, le sugiero algunos retos:

  1. Аджустар а сус талисманы (пор типо де животных)
  2. Construir un case con más sistemas de dispensado, para más animales, así como configurar el sistema para reconocer más animales
  3. Conectar con IBM IoT para controlar el sistema desde cualquier parte del mundo
  4. Agregar un dispensador de agua
  5. Hacerle cualquier cambio que sea oportuno para ti:)

* Этот инструктивный материал реализован Берналом Рохасом с Сезаром Родригесом Браво в соавторстве *

Рекомендуемые: